[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
texinfo/texi2html ChangeLog NEWS TODO texi2html...
From: |
Patrice Dumas |
Subject: |
texinfo/texi2html ChangeLog NEWS TODO texi2html... |
Date: |
Wed, 14 Jul 2010 15:42:43 +0000 |
CVSROOT: /sources/texinfo
Module name: texinfo
Changes by: Patrice Dumas <pertusus> 10/07/14 15:42:41
Modified files:
texi2html : ChangeLog NEWS TODO texi2html.pl
texi2html/doc : stamp-vti texi2html.texi version.texi
texi2html/test : run_test.sh run_test_all.sh
texi2html/test/encodings: tests.txt
texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes:
at_commands_in_refs_latin1.2
texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode:
at_commands_in_refs_latin1.2
texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode:
at_commands_in_refs_latin1.2
texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes:
at_commands_in_refs_utf8.2
texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode:
at_commands_in_refs_utf8.2
texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode:
at_commands_in_refs_utf8.2
texi2html/test/encodings/res_info/nodetest_latin1_use_nodes:
nodetest_latin1.2
texi2html/test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode:
nodetest_latin1.2
texi2html/test/encodings/res_info/nodetest_use_nodes: nodetest.2
texi2html/test/encodings/res_info/nodetest_use_nodes_no_unicode:
nodetest.2
texi2html/test/encodings/res_info/nodetest_use_nodes_no_unidecode:
nodetest.2
texi2html/test/encodings/res_info/nodetest_utf8_use_nodes:
nodetest_utf8.2
texi2html/test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode:
nodetest_utf8.2
texi2html/test/formatting: tests.txt
texi2html/test/formatting/res_info/block_EOL_tex: block_EOL.2
texi2html/test/formatting/res_info/formatting_html_nodes:
formatting.2
texi2html/test/formatting/res_info/simplest_test_prefix:
simplest.2
texi2html/test/formatting/res_info/simplest_test_prefix_info:
simplest.2
texi2html/test/formatting/res_info/tex: tex.2
texi2html/test/formatting/res_info/tex_l2h_mediawiki: tex tex.2
texi2html/test/formatting/res_info/texi_tex: tex.2
texi2html/test/htmlxref: tests.txt
texi2html/test/htmlxref/res_info/htmlxref_nodes: test_refs.2
texi2html/test/htmlxref-only_mono: tests.txt
texi2html/test/htmlxref-only_mono/res_info/htmlxref_nodes:
test_refs.2
texi2html/test/htmlxref-only_split: tests.txt
texi2html/test/htmlxref-only_split/res_info/htmlxref_nodes:
test_refs.2
texi2html/test/indices: tests.txt
texi2html/test/indices/res_info/makeinfo_nodes_before_top:
nodes_before_top.2
texi2html/test/indices/res_info/nodes_before_top:
nodes_before_top.2
texi2html/test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes:
nodes_before_top_and_sections.2
texi2html/test/indices/res_info/printindex_between_node_section:
printindex_between_node_section.2
texi2html/test/indices/res_info/same_doc_nr_split_index_and_element:
same_doc_nr_split_index_and_element.2
texi2html/test/invalid: tests.txt
texi2html/test/invalid/res_info/math_not_closed:
math_not_closed.2
texi2html/test/invalid/res_info/tex_in_copying: tex_in_copying.2
texi2html/test/invalid/res_info/tex_not_closed: tex_not_closed.2
texi2html/test/invalid/res_info/texi_math_not_closed:
math_not_closed.2
texi2html/test/invalid/res_info/texi_tex_in_copying:
tex_in_copying.2
texi2html/test/invalid/res_info/texi_tex_not_closed:
tex_not_closed.2
texi2html/test/manuals: tests.txt
texi2html/test/manuals/res_info/hello_nodes: hello.2
texi2html/test/manuals/res_info/info-stnd: info-stnd.2
texi2html/test/manuals/res_info/mini_ker: mini_ker.2
texi2html/test/manuals/res_info/texinfo: texinfo.2
texi2html/test/manuals/res_info/texinfo_nodes: texinfo.2
texi2html/test/misc: tests.txt
texi2html/test/misc/res_info/mini_ker_l2h: mini_ker.2
texi2html/test/sectionning: tests.txt
texi2html/test/sectionning/res_info/equivalent_nodes:
equivalent_nodes.2
texi2html/test/sectionning/res_info/makeinfo_novalidate_split:
novalidate.2
texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit:
novalidate.2
texi2html/test/sectionning/res_info/makeinfo_rec_nodes:
rec_nodes.2
texi2html/test/sectionning/res_info/no_section: no_section.2
texi2html/test/sectionning/res_info/no_section_directions:
no_section.2
texi2html/test/sectionning/res_info/no_section_no_top:
no_section_no_top.2
texi2html/test/sectionning/res_info/node_footnote_use_node:
node_footnote.2
texi2html/test/sectionning/res_info/nodes_after_top:
nodes_after_top.2
texi2html/test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter:
nodes_after_top_before_chapter.2
texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes:
nodes_after_top_before_section.2
texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter:
nodes_after_top_before_section.2
texi2html/test/sectionning/res_info/one_node: one_node.2
texi2html/test/sectionning/res_info/rec_nodes: rec_nodes.2
texi2html/test/sectionning/res_info/test_refs_nodes: test_refs.2
texi2html/test/singular_manual: tests.txt
texi2html/test/singular_manual/res_all/singular: singular.2
texi2html/test/singular_manual/res_info/singular_httex:
sing_cp.idx
singular.2
texi2html/test/xemacs_manual: tests.txt
texi2html/test/xemacs_manual/res_info/xemacs_frame: xemacs.2
Added files:
texi2html/test/formatting/res_info/simplest_test_prefix:
truc.info
texi2html/test/formatting/res_info/simplest_test_prefix_info:
truc.info
texi2html/test/formatting/res_info/tex_l2h_mediawiki:
tex-l2h_cache.pm
tex_l2h.html
tex_l2h.tex
tex_l2h_images.pl
tex_l2h_images.tex
tex_l2h_labels.pl
texi2html/test/manuals/res_info/texinfo: texinfo_cp.idx
texinfo_fn.idx
texinfo_ky.idx
texinfo_op.idx
texinfo_pg.idx
texinfo_tp.idx
texinfo_vr.idx
texi2html/test/singular_manual/res_all/singular: sing.txt
sing_abt.txt
texi2html/test/singular_manual/res_info/singular_httex: sing.htm
sing.htm-2
sing.htm-3
sing.htm-4
sing.htm-5
Removed files:
texi2html/test/formatting/res_info/simplest_test_prefix:
simplest.info
texi2html/test/formatting/res_info/simplest_test_prefix_info:
simplest.info
texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit:
first.html
index.html
node-in-menu-before-top.html
node-not-existing.html
other-node-in-menu-before-top.html
other-node-not-existing.html
second-node.html
texi2html/test/singular_manual/res_all/singular: index.htm
sing_abt.htm
texi2html/test/singular_manual/res_info/singular_httex:
sing.info
sing.info-2
sing.info-3
sing.info-4
sing.info-5
Log message:
* texi2html.pl: obsolete texi2html specific options.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/ChangeLog?cvsroot=texinfo&r1=1.513&r2=1.514
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/NEWS?cvsroot=texinfo&r1=1.124&r2=1.125
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/TODO?cvsroot=texinfo&r1=1.183&r2=1.184
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/texi2html.pl?cvsroot=texinfo&r1=1.395&r2=1.396
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/doc/stamp-vti?cvsroot=texinfo&r1=1.77&r2=1.78
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/doc/texi2html.texi?cvsroot=texinfo&r1=1.107&r2=1.108
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/doc/version.texi?cvsroot=texinfo&r1=1.77&r2=1.78
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/run_test.sh?cvsroot=texinfo&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/run_test_all.sh?cvsroot=texinfo&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/tests.txt?cvsroot=texinfo&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_latin1_use_nodes/nodetest_latin1.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes/nodetest.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes_no_unicode/nodetest.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes_no_unidecode/nodetest.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_utf8_use_nodes/nodetest_utf8.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/tests.txt?cvsroot=texinfo&r1=1.46&r2=1.47
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/block_EOL_tex/block_EOL.2?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/formatting_html_nodes/formatting.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix/simplest.2?cvsroot=texinfo&rev=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix/truc.info?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix/simplest.info?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix_info/simplest.2?cvsroot=texinfo&rev=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix_info/truc.info?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix_info/simplest.info?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex/tex.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex-l2h_cache.pm?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.html?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.tex?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.tex?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_labels.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/formatting/res_info/texi_tex/tex.2?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref/tests.txt?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref/res_info/htmlxref_nodes/test_refs.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref-only_mono/tests.txt?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref-only_mono/res_info/htmlxref_nodes/test_refs.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref-only_split/tests.txt?cvsroot=texinfo&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/htmlxref-only_split/res_info/htmlxref_nodes/test_refs.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/tests.txt?cvsroot=texinfo&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/res_info/makeinfo_nodes_before_top/nodes_before_top.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/res_info/nodes_before_top/nodes_before_top.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes/nodes_before_top_and_sections.2?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/res_info/printindex_between_node_section/printindex_between_node_section.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/indices/res_info/same_doc_nr_split_index_and_element/same_doc_nr_split_index_and_element.2?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/tests.txt?cvsroot=texinfo&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/math_not_closed/math_not_closed.2?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/tex_in_copying/tex_in_copying.2?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/tex_not_closed/tex_not_closed.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/texi_math_not_closed/math_not_closed.2?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/texi_tex_in_copying/tex_in_copying.2?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/invalid/res_info/texi_tex_not_closed/tex_not_closed.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/tests.txt?cvsroot=texinfo&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/hello_nodes/hello.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/info-stnd/info-stnd.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/mini_ker/mini_ker.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_cp.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_fn.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_ky.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_op.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_pg.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_tp.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo_vr.idx?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/manuals/res_info/texinfo_nodes/texinfo.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/misc/tests.txt?cvsroot=texinfo&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/misc/res_info/mini_ker_l2h/mini_ker.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/tests.txt?cvsroot=texinfo&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/equivalent_nodes/equivalent_nodes.2?cvsroot=texinfo&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_split/novalidate.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/novalidate.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/first.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/index.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/node-in-menu-before-top.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/node-not-existing.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-in-menu-before-top.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-not-existing.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/second-node.html?cvsroot=texinfo&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/makeinfo_rec_nodes/rec_nodes.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/no_section/no_section.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/no_section_directions/no_section.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/no_section_no_top/no_section_no_top.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/node_footnote_use_node/node_footnote.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/nodes_after_top/nodes_after_top.2?cvsroot=texinfo&rev=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter/nodes_after_top_before_chapter.2?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes/nodes_after_top_before_section.2?cvsroot=texinfo&rev=1.2
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter/nodes_after_top_before_section.2?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/one_node/one_node.2?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/rec_nodes/rec_nodes.2?cvsroot=texinfo&rev=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/sectionning/res_info/test_refs_nodes/test_refs.2?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/tests.txt?cvsroot=texinfo&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_all/singular/singular.2?cvsroot=texinfo&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_all/singular/sing.txt?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_all/singular/sing_abt.txt?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_all/singular/index.htm?cvsroot=texinfo&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_all/singular/sing_abt.htm?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing_cp.idx?cvsroot=texinfo&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/singular.2?cvsroot=texinfo&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.htm?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.htm-2?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.htm-3?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.htm-4?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.htm-5?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.info?cvsroot=texinfo&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.info-2?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.info-3?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.info-4?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing.info-5?cvsroot=texinfo&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/xemacs_manual/tests.txt?cvsroot=texinfo&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/texinfo/texi2html/test/xemacs_manual/res_info/xemacs_frame/xemacs.2?cvsroot=texinfo&r1=1.5&r2=1.6
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/ChangeLog,v
retrieving revision 1.513
retrieving revision 1.514
diff -u -b -r1.513 -r1.514
--- ChangeLog 14 Jul 2010 08:45:56 -0000 1.513
+++ ChangeLog 14 Jul 2010 15:42:34 -0000 1.514
@@ -1,9 +1,13 @@
-2010-07-05 Patrice Dumas <address@hidden>
+2010-07-14 Patrice Dumas <address@hidden>
+
+ * texi2html.pl: obsolete texi2html specific options.
+
+2010-07-13 Patrice Dumas <address@hidden>
* texi2html.pl, texi2html.init, maintained_extra/mediawiki.init:
set NODE_FILES when split.
-2010-07-05 Patrice Dumas <address@hidden>
+2010-07-12 Patrice Dumas <address@hidden>
* texi2html.pl, texi2html.init, formats/*: use functions to set
configuration variables, and not perl variables. This allows
Index: NEWS
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/NEWS,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -b -r1.124 -r1.125
--- NEWS 13 Jul 2010 12:02:34 -0000 1.124
+++ NEWS 14 Jul 2010 15:42:34 -0000 1.125
@@ -5,6 +5,36 @@
* COMPATIBILITY
-------------
+* obsolete the --iso command line option.
+
+* obsolete texi2html specific variables. Here is the list with the associated
+ configuration variables that may be set instead, with --set-init-variable:
+ --toc-links TOC_LINKS
+ --short-ext SHORTEXTN
+ --prefix PREFIX
+ --short-ref SHORT_REF
+ --idx-sum IDX_SUMMARY
+ --def-table DEF_TABLE
+ --ignore-preamble-text IGNORE_PREAMBLE_TEXT
+ --html-xref-prefix EXTERNAL_DIR
+ --l2h L2H
+ --l2h-l2h L2H_L2H
+ --l2h-skip L2H_SKIP
+ --l2h-tmp L2H_TMP
+ --l2h-file L2H_FILE
+ --l2h-clean L2H_CLEAN
+ --use-nodes USE_NODES
+ --monolithic MONOLITHIC
+ --top-file TOP_FILE
+ --toc-file TOC_FILE
+ --frames FRAMES
+ --menu SHOW_MENU
+ --debug DEBUG
+ --doctype DOCTYPE
+ --frameset-doctype FRAMESET_DOCTYPE
+ --test TEST
+ --dump-texi DUMP_TEXI
+
* remove completly $INVISIBLE_MARK, $USE_GLOSSARY, $CHECK, $EXPAND,
$ENCODING, $CENTER_IMAGE, $HREF_DIR_INSTEAD_FILE, $USE_MENU_DIRECTIONS,
they have been obsolete, sometimes for many years.
Index: TODO
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/TODO,v
retrieving revision 1.183
retrieving revision 1.184
diff -u -b -r1.183 -r1.184
--- TODO 14 Jul 2010 08:45:56 -0000 1.183
+++ TODO 14 Jul 2010 15:42:34 -0000 1.184
@@ -5,8 +5,6 @@
remove l2h_tmp_dir.init from .cvsignore and Makefile.am
ship texi2any, makeinfo
---node-file as default
-set texi2html specific options as obsolete
fix comment in html with authors and address
change licenses to be FSF + GPLv3+
Index: texi2html.pl
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/texi2html.pl,v
retrieving revision 1.395
retrieving revision 1.396
diff -u -b -r1.395 -r1.396
--- texi2html.pl 14 Jul 2010 08:45:56 -0000 1.395
+++ texi2html.pl 14 Jul 2010 15:42:34 -0000 1.396
@@ -91,7 +91,7 @@
}
# CVS version:
-# $Id: texi2html.pl,v 1.395 2010/07/14 08:45:56 pertusus Exp $
+# $Id: texi2html.pl,v 1.396 2010/07/14 15:42:34 pertusus Exp $
# FIXME. Change for texinfo, and also simplify.
@@ -2867,46 +2867,6 @@
# noHelp ==> if 1 -> for "not so important options": only print description
on -h 1
# 2 -> for obsolete options: only print description on -h 2
my $T2H_OPTIONS;
-$T2H_OPTIONS -> {'debug'} =
-{
- type => '=i',
- linkage => sub {set_from_cmdline('DEBUG', $_[1])},
- verbose => 'output HTML with debuging information',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'doctype'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('DOCTYPE', $_[1]);},
- verbose => 'document type which is output in header of HTML files',
- noHelp => 1
-};
-
-$T2H_OPTIONS -> {'frameset-doctype'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('FRAMESET_DOCTYPE', $_[1]);},
- verbose => 'document type for HTML frameset documents',
- noHelp => 1
-};
-
-$T2H_OPTIONS -> {'test'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('TEST', $_[1]);},
- verbose => 'use predefined information to avoid differences with reference
files',
- noHelp => 1
-};
-
-$T2H_OPTIONS -> {'dump-texi'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('DUMP_TEXI', $_[1]);},
- verbose => 'dump the output of first pass into a file with extension
passfirst and exit',
- noHelp => 1
-};
-
$T2H_OPTIONS -> {'macro-expand|E'} =
{
type => '=s',
@@ -2956,14 +2916,6 @@
verbose => "expand ifplaintext sections",
};
-$T2H_OPTIONS -> {'iso'} =
-{
- type => 'iso',
- linkage => sub {Texi2HTML::Config::t2h_default_set_iso_symbols ($_[1], 1);},
- verbose => 'if set, entities are used for special symbols (like copyright,
etc...) and quotes',
- noHelp => 1,
-};
-
$T2H_OPTIONS -> {'I'} =
{
type => '=s',
@@ -2985,35 +2937,6 @@
verbose => 'prepend $s to the @include search path',
};
-$T2H_OPTIONS -> {'top-file'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('TOP_FILE', $_[1]);},
- verbose => 'use $s as top file, instead of <docname>.html',
-};
-
-$T2H_OPTIONS -> {'toc-file'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('TOC_FILE', $_[1]);},
- verbose => 'use $s as ToC file, instead of <docname>_toc.html',
-};
-
-$T2H_OPTIONS -> {'frames'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('FRAMES', $_[1])},
- verbose => 'output files which use HTML 4.0 frames (experimental)',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'menu'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('SHOW_MENU', $_[1]);},
- verbose => 'output Texinfo menus',
-};
-
$T2H_OPTIONS -> {'number-sections'} =
{
type => '!',
@@ -3028,13 +2951,6 @@
verbose => 'output footnote numbers.',
};
-$T2H_OPTIONS -> {'use-nodes'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('USE_NODES', $_[1]);},
- verbose => 'use nodes for sectioning',
-};
-
$T2H_OPTIONS -> {'node-files'} =
{
type => '!',
@@ -3049,13 +2965,6 @@
verbose => 'output footnotes separate|end',
};
-$T2H_OPTIONS -> {'toc-links'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('TOC_LINKS', $_[1]);},
- verbose => 'create links from headings to toc entries'
-};
-
$T2H_OPTIONS -> {'split'} =
{
type => '=s',
@@ -3090,20 +2999,6 @@
noHelp => 1,
};
-$T2H_OPTIONS -> {'short-ext'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('SHORTEXTN', $_[1]);},
- verbose => 'use "htm" extension for output HTML files',
-};
-
-$T2H_OPTIONS -> {'prefix'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('PREFIX', $_[1]);},
- verbose => 'use as prefix for output files, instead of <docname>',
-};
-
$T2H_OPTIONS -> {'output|out|o'} =
{
type => '=s',
@@ -3125,29 +3020,6 @@
verbose => 'suppress warnings (but not errors).'
};
-$T2H_OPTIONS -> {'short-ref'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('SHORT_REF', $_[1]);},
- verbose => 'if set, references are without section numbers',
-};
-
-$T2H_OPTIONS -> {'idx-sum'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('IDX_SUMMARY', $_[1]);},
- verbose => 'if set, also output index summary',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'def-table'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('DEF_TABLE', $_[1]);},
- verbose => 'if set, address@hidden are converted using tables.',
- noHelp => 1,
-};
-
$T2H_OPTIONS -> {'verbose'} = 0;
$T2H_OPTIONS -> {'verbose|v'} =
{
@@ -3166,70 +3038,6 @@
verbose => 'use $s as document language',
};
-$T2H_OPTIONS -> {'ignore-preamble-text'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('IGNORE_PREAMBLE_TEXT', $_[1]);},
- verbose => 'if set, ignore the text before @node and sectioning commands',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'html-xref-prefix'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('EXTERNAL_DIR', $_[1]);},
- verbose => '$s is the base dir for external manual references',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'l2h'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('L2H', $_[1]);},
- verbose => 'if set, uses latex2html for @math and @tex',
-};
-
-$T2H_OPTIONS -> {'l2h-l2h'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('L2H_L2H', $_[1]);},
- verbose => 'program to use for latex2html translation',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'l2h-skip'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('L2H_SKIP', $_[1]);},
- verbose => 'if set, tries to reuse previously latex2html output',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'l2h-tmp'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('L2H_TMP', $_[1]);},
- verbose => 'if set, uses $s as temporary latex2html directory',
- noHelp => 1,
-};
-
-$T2H_OPTIONS -> {'l2h-file'} =
-{
- type => '=s',
- linkage => sub {set_from_cmdline('L2H_FILE', $_[1]);},
- verbose => 'if set, uses $s as latex2html init file',
- noHelp => 1,
-};
-
-
-$T2H_OPTIONS -> {'l2h-clean'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('L2H_CLEAN', $_[1]);},
- verbose => 'if set, do not keep intermediate latex2html files for later
reuse',
- noHelp => 1,
-};
-
$T2H_OPTIONS -> {'D'} =
{
type => '=s',
@@ -3350,14 +3158,6 @@
verbose => 'preserve output even if errors.'
};
-$T2H_OPTIONS -> {'monolithic'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('MONOLITHIC', $_[1]);},
- verbose => 'output only one file including ToC, About...',
- noHelp => 1
-};
-
$T2H_OPTIONS -> {'commands-in-node-names'} =
{
type => '!',
@@ -3368,7 +3168,8 @@
$T2H_OPTIONS -> {'output-indent'} =
{
type => '=i',
- verbose => 'This option used to indent XML, it is ignored'
+ verbose => 'This option used to indent XML, it is ignored',
+ noHelp => 1
};
$T2H_OPTIONS -> {'program'} =
@@ -3418,6 +3219,214 @@
noHelp => 2,
};
+$T2H_OBSOLETE_OPTIONS -> {'toc-links'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('TOC_LINKS', $_[1]);},
+ verbose => 'create links from headings to toc entries',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'short-ext'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('SHORTEXTN', $_[1]);},
+ verbose => 'use "htm" extension for output HTML files',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'prefix'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('PREFIX', $_[1]);},
+ verbose => 'use as prefix for output files, instead of <docname>',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'short-ref'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('SHORT_REF', $_[1]);},
+ verbose => 'if set, references are without section numbers',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'idx-sum'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('IDX_SUMMARY', $_[1]);},
+ verbose => 'if set, also output index summary',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'def-table'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('DEF_TABLE', $_[1]);},
+ verbose => 'if set, address@hidden are converted using tables.',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'ignore-preamble-text'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('IGNORE_PREAMBLE_TEXT', $_[1]);},
+ verbose => 'if set, ignore the text before @node and sectioning commands',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'html-xref-prefix'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('EXTERNAL_DIR', $_[1]);},
+ verbose => '$s is the base dir for external manual references',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('L2H', $_[1]);},
+ verbose => 'if set, uses latex2html for @math and @tex',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h-l2h'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('L2H_L2H', $_[1]);},
+ verbose => 'program to use for latex2html translation',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h-skip'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('L2H_SKIP', $_[1]);},
+ verbose => 'if set, tries to reuse previously latex2html output',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h-tmp'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('L2H_TMP', $_[1]);},
+ verbose => 'if set, uses $s as temporary latex2html directory',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h-file'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('L2H_FILE', $_[1]);},
+ verbose => 'if set, uses $s as latex2html init file',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'l2h-clean'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('L2H_CLEAN', $_[1]);},
+ verbose => 'if set, do not keep intermediate latex2html files for later
reuse',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'use-nodes'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('USE_NODES', $_[1]);},
+ verbose => 'use nodes for sectioning',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'monolithic'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('MONOLITHIC', $_[1]);},
+ verbose => 'output only one file including ToC, About...',
+ noHelp => 1
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'top-file'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('TOP_FILE', $_[1]);},
+ verbose => 'use $s as top file, instead of <docname>.html',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'toc-file'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('TOC_FILE', $_[1]);},
+ verbose => 'use $s as ToC file, instead of <docname>_toc.html',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'frames'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('FRAMES', $_[1])},
+ verbose => 'output files which use HTML 4.0 frames (experimental)',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'menu'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('SHOW_MENU', $_[1]);},
+ verbose => 'output Texinfo menus',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'iso'} =
+{
+ type => 'iso',
+ linkage => sub {Texi2HTML::Config::t2h_default_set_iso_symbols ($_[1], 1);},
+ verbose => 'if set, entities are used for special symbols (like copyright,
etc...) and quotes',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'debug'} =
+{
+ type => '=i',
+ linkage => sub {set_from_cmdline('DEBUG', $_[1])},
+ verbose => 'output HTML with debuging information',
+ noHelp => 1,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'doctype'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('DOCTYPE', $_[1]);},
+ verbose => 'document type which is output in header of HTML files',
+ noHelp => 1
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'frameset-doctype'} =
+{
+ type => '=s',
+ linkage => sub {set_from_cmdline('FRAMESET_DOCTYPE', $_[1]);},
+ verbose => 'document type for HTML frameset documents',
+ noHelp => 1
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'test'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('TEST', $_[1]);},
+ verbose => 'use predefined information to avoid differences with reference
files',
+ noHelp => 1
+};
+
+$T2H_OBSOLETE_OPTIONS -> {'dump-texi'} =
+{
+ type => '!',
+ linkage => sub {set_from_cmdline('DUMP_TEXI', $_[1]);},
+ verbose => 'dump the output of first pass into a file with extension
passfirst and exit',
+ noHelp => 1
+};
+
$T2H_OBSOLETE_OPTIONS -> {'expand'} =
{
type => '=s',
@@ -3617,18 +3626,9 @@
noHelp => 2
};
-$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} =
-{
- type => '!',
- linkage => sub {set_from_cmdline('HEADERS', 0);},
- verbose => 'obsolete, use -nosec_nav',
- noHelp => 2,
-};
-my $use_acc; # not used
$T2H_OBSOLETE_OPTIONS -> {use_acc} =
{
type => '!',
- linkage => \$use_acc,
verbose => 'obsolete, set to true unconditionnaly',
noHelp => 2
};
@@ -3713,21 +3713,20 @@
#---############################################################################
# options known by makeinfo (+version, help and if*)
-my @makeinfo_options = ('error-limit', 'document-language',
-'force', 'help', 'no-validate', 'no-warn', 'verbose', 'docbook', 'html',
-'xml', 'plaintext', 'macro-expand', 'headers', 'no-split',
-'number-sections', 'output', 'disable-encoding', 'enable-encoding',
-'fill-column', 'footnote-style', 'paragraph-indent', 'split-size',
-'css-include', 'css-ref', 'internal-links', 'transliterate-file-names',
-'output-indent', 'number-footnotes', 'D', 'I', 'P', 'U');
+#my @makeinfo_options = ('error-limit', 'document-language',
+#'force', 'help', 'no-validate', 'no-warn', 'verbose', 'docbook', 'html',
+#'xml', 'plaintext', 'macro-expand', 'headers', 'no-split',
+#'number-sections', 'output', 'disable-encoding', 'enable-encoding',
+#'fill-column', 'footnote-style', 'paragraph-indent', 'split-size',
+#'css-include', 'css-ref', 'internal-links', 'transliterate-file-names',
+#'output-indent', 'number-footnotes', 'D', 'I', 'P', 'U');
# always used, even though they are not in makeinfo in C.
-# dump-texi', 'debug', 'test' are for debugging.
# split is in makeinfo in C, as --no-split.
# 'conf-dir', 'init-file' options have to be taken into account for proper
# functionning.
-my @basic_options = ('dump-texi', 'debug', 'test', 'conf-dir', 'init-file',
-'split', 'program', 'set-init-variable');
+#my @basic_options = ('conf-dir', 'init-file',
+#'split', 'program', 'set-init-variable');
# --command=CMD insert CMD in copy of input file
my $makeinfo_help =
@@ -3882,6 +3881,8 @@
print STDERR "$Configure_failed" if $Configure_failed;
die $T2H_FAILURE_TEXT;
}
+ # Now that texi2html can process many files on the command line, this is
+ # not a good heuristic anymore. Not a big deal.
if (@ARGV > 1)
{
eval {Getopt::Long::Configure("no_pass_through");};
@@ -3905,7 +3906,7 @@
my $primary = $key;
$primary =~ s/\|.*//;
next if ($primary eq 'version' or $primary eq 'help');
- next if ($real_command_name eq 'makeinfo' and ! grep {$primary eq $_}
(@makeinfo_options, @basic_options) and $primary !~ /^if/);
+ #next if ($real_command_name eq 'makeinfo' and ! grep {$primary eq $_}
(@makeinfo_options, @basic_options) and $primary !~ /^if/);
$opts->{$primary} = $T2H_OPTIONS->{$key}->{'linkage'} if
defined($T2H_OPTIONS->{$key}->{'linkage'});
push @types, "$key$T2H_OPTIONS->{$key}->{'type'}";
}
@@ -4590,12 +4591,8 @@
{
$out_dir = get_conf('SUBDIR');
}
- #else
- #{
- # $out_dir = $docu_name;
- #}
- if ($out_dir =~ m|(.*)/|)
+ if (defined($out_dir) and $out_dir =~ m|(.*)/|)
{# there is a leading directories
$docu_rdir = "$1/";
}
Index: doc/stamp-vti
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/doc/stamp-vti,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -b -r1.77 -r1.78
--- doc/stamp-vti 13 Jul 2010 12:02:36 -0000 1.77
+++ doc/stamp-vti 14 Jul 2010 15:42:35 -0000 1.78
@@ -1,4 +1,4 @@
address@hidden UPDATED 13 July 2010
address@hidden UPDATED 14 July 2010
@set UPDATED-MONTH July 2010
@set EDITION 5.0
@set VERSION 5.0
Index: doc/texi2html.texi
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/doc/texi2html.texi,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -b -r1.107 -r1.108
--- doc/texi2html.texi 13 Jul 2010 12:02:37 -0000 1.107
+++ doc/texi2html.texi 14 Jul 2010 15:42:35 -0000 1.108
@@ -4662,6 +4662,38 @@
@itemize @bullet
@item API changes between 5.0 and X.X
@itemize @bullet
+
address@hidden obsolete the @option{--iso} command line option.
+
address@hidden obsolete texi2html specific variables. Here is the list with the
associated
+ configuration variables that may be set instead, with
@option{--set-init-variable}:
address@hidden address@hidden address@hidden
address@hidden @option{--toc-links} @tab @code{TOC_LINKS}
address@hidden @option{--short-ext} @tab @code{SHORTEXTN}
address@hidden @option{--prefix} @tab @code{PREFIX}
address@hidden @option{--short-ref} @tab @code{SHORT_REF}
address@hidden @option{--idx-sum} @tab @code{IDX_SUMMARY}
address@hidden @option{--def-table} @tab @code{DEF_TABLE}
address@hidden @option{--ignore-preamble-text} @tab
@code{IGNORE_PREAMBLE_TEXT}
address@hidden @option{--html-xref-prefix} @tab @code{EXTERNAL_DIR}
address@hidden @option{--l2h} @tab @code{L2H}
address@hidden @option{--l2h-l2h} @tab @code{L2H_L2H}
address@hidden @option{--l2h-skip} @tab @code{L2H_SKIP}
address@hidden @option{--l2h-tmp} @tab @code{L2H_TMP}
address@hidden @option{--l2h-file} @tab @code{L2H_FILE}
address@hidden @option{--l2h-clean} @tab @code{L2H_CLEAN}
address@hidden @option{--use-nodes} @tab @code{USE_NODES}
address@hidden @option{--monolithic} @tab @code{MONOLITHIC}
address@hidden @option{--top-file} @tab @code{TOP_FILE}
address@hidden @option{--toc-file} @tab @code{TOC_FILE}
address@hidden @option{--frames} @tab @code{FRAMES}
address@hidden @option{--menu} @tab @code{SHOW_MENU}
address@hidden @option{--debug} @tab @code{DEBUG}
address@hidden @option{--doctype} @tab @code{DOCTYPE}
address@hidden @option{--frameset-doctype} @tab @code{FRAMESET_DOCTYPE}
address@hidden @option{--test} @tab @code{TEST}
address@hidden multitable
+
@item remove completly $INVISIBLE_MARK, $USE_GLOSSARY, $CHECK, $EXPAND,
$ENCODING, $CENTER_IMAGE, $HREF_DIR_INSTEAD_FILE, $USE_MENU_DIRECTIONS
they have been obsolete, sometimes for many years.
Index: doc/version.texi
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/doc/version.texi,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -b -r1.77 -r1.78
--- doc/version.texi 13 Jul 2010 12:02:37 -0000 1.77
+++ doc/version.texi 14 Jul 2010 15:42:35 -0000 1.78
@@ -1,4 +1,4 @@
address@hidden UPDATED 13 July 2010
address@hidden UPDATED 14 July 2010
@set UPDATED-MONTH July 2010
@set EDITION 5.0
@set VERSION 5.0
Index: test/run_test.sh
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/run_test.sh,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- test/run_test.sh 13 Jul 2010 12:02:52 -0000 1.28
+++ test/run_test.sh 14 Jul 2010 15:42:35 -0000 1.29
@@ -150,7 +150,14 @@
else
use_latex2html=no
use_tex4ht=no
+ maybe_use_latex2html=no
if echo "$remaining" | grep -qs -- '-l2h'; then
+ maybe_use_latex2html=yes
+ fi
+ if echo "$remaining" | grep -qs -- 'L2H 1'; then
+ maybe_use_latex2html=yes
+ fi
+ if [ $maybe_use_latex2html = 'yes' ]; then
if [ "$no_latex2html" = 'yes' ]; then
echo "S: (no latex2html) $dir"
continue
Index: test/run_test_all.sh
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/run_test_all.sh,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- test/run_test_all.sh 13 Jul 2010 12:02:52 -0000 1.16
+++ test/run_test_all.sh 14 Jul 2010 15:42:35 -0000 1.17
@@ -197,7 +197,14 @@
use_latex2html=no
use_tex4ht=no
l2h_tmp_dir=
+ maybe_use_latex2html=no
if echo "$remaining" | grep -qs -- '-l2h'; then
+ maybe_use_latex2html=yes
+ fi
+ if echo "$remaining" | grep -qs -- 'L2H 1'; then
+ maybe_use_latex2html=yes
+ fi
+ if [ $maybe_use_latex2html = 'yes' ]; then
if [ "$no_latex2html" = 'yes' ]; then
echo "S: (no latex2html) $current"
continue 2
Index: test/encodings/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/encodings/tests.txt,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- test/encodings/tests.txt 13 Jul 2010 12:03:00 -0000 1.14
+++ test/encodings/tests.txt 14 Jul 2010 15:42:35 -0000 1.15
@@ -13,16 +13,16 @@
texi formatting_utf8.texi
nodetest nodetest.texi
nodetest_chapter nodetest.texi --split chapter
-nodetest_use_nodes_no_unicode nodetest.texi --set-init-var 'USE_UNICODE 0'
--node-files --use-nodes --split node
-nodetest_use_nodes_no_unidecode nodetest.texi --set-init-var 'USE_UNIDECODE 0'
--node-files --use-nodes --split node
-nodetest_use_nodes nodetest.texi --node-files --use-nodes --split node
+nodetest_use_nodes_no_unicode nodetest.texi --set-init-var 'USE_UNICODE 0'
--node-files --set-init-var 'USE_NODES 1' --split node
+nodetest_use_nodes_no_unidecode nodetest.texi --set-init-var 'USE_UNIDECODE 0'
--node-files --set-init-var 'USE_NODES 1' --split node
+nodetest_use_nodes nodetest.texi --node-files --set-init-var 'USE_NODES 1'
--split node
nodetest_no_unicode nodetest.texi --set-init-var 'USE_UNICODE 0'
nodetest_utf8 nodetest_utf8.texi
# the following is not perfect, since there is no map for @,{@'C}
# it isn't rightly transformed in _1e14 but in _0112_0300
nodetest_utf8_no_unicode nodetest_utf8.texi --set-init-var 'USE_UNICODE 0'
-nodetest_utf8_use_nodes nodetest_utf8.texi --node-files --use-nodes --split
node
-nodetest_utf8_use_nodes_no_unidecode nodetest_utf8.texi --set-init-var
'USE_UNIDECODE 0' --node-files --use-nodes --split node
+nodetest_utf8_use_nodes nodetest_utf8.texi --node-files --set-init-var
'USE_NODES 1' --split node
+nodetest_utf8_use_nodes_no_unidecode nodetest_utf8.texi --set-init-var
'USE_UNIDECODE 0' --node-files --set-init-var 'USE_NODES 1' --split node
nodetest_to_utf8_latin1 nodetest_latin1.texi --init utf8.init
nodetest_latin1 nodetest_latin1.texi
nodetest_latin1_no_unicode nodetest_latin1.texi --set-init-var 'USE_UNICODE 0'
Index:
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
---
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.2
13 Jul 2010 12:03:00 -0000 1.4
+++
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.2
14 Jul 2010 15:42:35 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_latin1.texi:4: warning: Encoding latin1 is not a canonical
texinfo encoding
Index:
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
---
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2
13 Jul 2010 12:03:00 -0000 1.4
+++
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2
14 Jul 2010 15:42:35 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_latin1.texi:4: warning: Encoding latin1 is not a canonical
texinfo encoding
Index:
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
---
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2
13 Jul 2010 12:03:01 -0000 1.4
+++
test/encodings/res_info/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2
14 Jul 2010 15:42:35 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_latin1.texi:4: warning: Encoding latin1 is not a canonical
texinfo encoding
Index:
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
---
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.2
13 Jul 2010 12:03:01 -0000 1.4
+++
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.2
14 Jul 2010 15:42:35 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_utf8.texi:4: warning: Encoding utf8 is not a canonical
texinfo encoding
Index:
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
---
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2
13 Jul 2010 12:03:01 -0000 1.6
+++
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2
14 Jul 2010 15:42:35 -0000 1.7
@@ -1,4 +1,3 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_utf8.texi:4: warning: Encoding utf8 is not a canonical
texinfo encoding
warning: Document encoding is utf8, but there is no unicode support
Index:
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
---
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2
13 Jul 2010 12:03:01 -0000 1.4
+++
test/encodings/res_info/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2
14 Jul 2010 15:42:36 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
at_commands_in_refs_utf8.texi:4: warning: Encoding utf8 is not a canonical
texinfo encoding
Index: test/encodings/res_info/nodetest_latin1_use_nodes/nodetest_latin1.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_latin1_use_nodes/nodetest_latin1.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/encodings/res_info/nodetest_latin1_use_nodes/nodetest_latin1.2 13 Jul
2010 12:03:02 -0000 1.5
+++ test/encodings/res_info/nodetest_latin1_use_nodes/nodetest_latin1.2 14 Jul
2010 15:42:36 -0000 1.6
@@ -1,4 +1,3 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
nodetest_latin1.texi:3: warning: Encoding latin1 is not a canonical texinfo
encoding
nodetest_latin1.texi:273: Node equivalent with address@hidden' already used
address@hidden' (l. 305)
Index:
test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
---
test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.2
13 Jul 2010 12:03:02 -0000 1.5
+++
test/encodings/res_info/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.2
14 Jul 2010 15:42:36 -0000 1.6
@@ -1,4 +1,3 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
nodetest_latin1.texi:3: warning: Encoding latin1 is not a canonical texinfo
encoding
nodetest_latin1.texi:273: Node equivalent with address@hidden' already used
address@hidden' (l. 305)
Index: test/encodings/res_info/nodetest_use_nodes/nodetest.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes/nodetest.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/encodings/res_info/nodetest_use_nodes/nodetest.2 13 Jul 2010
12:03:02 -0000 1.6
+++ test/encodings/res_info/nodetest_use_nodes/nodetest.2 14 Jul 2010
15:42:36 -0000 1.7
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodetest.texi:305: Anchor `@,{c}' previously defined (l. 298)
nodetest.texi:332: Node equivalent with address@hidden' already used
address@hidden' (l. 364)
Index: test/encodings/res_info/nodetest_use_nodes_no_unicode/nodetest.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes_no_unicode/nodetest.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/encodings/res_info/nodetest_use_nodes_no_unicode/nodetest.2 13 Jul
2010 12:03:02 -0000 1.6
+++ test/encodings/res_info/nodetest_use_nodes_no_unicode/nodetest.2 14 Jul
2010 15:42:36 -0000 1.7
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodetest.texi:305: Anchor `@,{c}' previously defined (l. 298)
nodetest.texi:332: Node equivalent with address@hidden' already used
address@hidden' (l. 364)
Index: test/encodings/res_info/nodetest_use_nodes_no_unidecode/nodetest.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_use_nodes_no_unidecode/nodetest.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/encodings/res_info/nodetest_use_nodes_no_unidecode/nodetest.2 13 Jul
2010 12:03:02 -0000 1.6
+++ test/encodings/res_info/nodetest_use_nodes_no_unidecode/nodetest.2 14 Jul
2010 15:42:36 -0000 1.7
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodetest.texi:305: Anchor `@,{c}' previously defined (l. 298)
nodetest.texi:332: Node equivalent with address@hidden' already used
address@hidden' (l. 364)
Index: test/encodings/res_info/nodetest_utf8_use_nodes/nodetest_utf8.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_utf8_use_nodes/nodetest_utf8.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/encodings/res_info/nodetest_utf8_use_nodes/nodetest_utf8.2 13 Jul
2010 12:03:03 -0000 1.5
+++ test/encodings/res_info/nodetest_utf8_use_nodes/nodetest_utf8.2 14 Jul
2010 15:42:36 -0000 1.6
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodetest_utf8.texi:3: warning: Encoding utf8 is not a canonical texinfo
encoding
nodetest_utf8.texi:273: Node equivalent with address@hidden' already used
address@hidden' (l. 305)
Index:
test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
---
test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.2
13 Jul 2010 12:03:03 -0000 1.5
+++
test/encodings/res_info/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.2
14 Jul 2010 15:42:36 -0000 1.6
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodetest_utf8.texi:3: warning: Encoding utf8 is not a canonical texinfo
encoding
nodetest_utf8.texi:273: Node equivalent with address@hidden' already used
address@hidden' (l. 305)
Index: test/formatting/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/formatting/tests.txt,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -b -r1.46 -r1.47
--- test/formatting/tests.txt 13 Jul 2010 12:03:04 -0000 1.46
+++ test/formatting/tests.txt 14 Jul 2010 15:42:36 -0000 1.47
@@ -6,7 +6,7 @@
texi float_copying.texi
texi macro_in_menu.texi
texi ref_in_anchor.texi
-texi tex.texi --l2h --iftex
+texi tex.texi --set-init-var 'L2H 1' --iftex
texi block_EOL.texi
texi detailmenus.texi
texi commands_in_ifset.texi
@@ -68,19 +68,19 @@
float_copying float_copying.texi --split chapter
macro_in_menu macro_in_menu.texi
ref_in_anchor ref_in_anchor.texi
-tex tex.texi --l2h --iftex
+tex tex.texi --set-init-var 'L2H 1' --iftex
tex_notex tex.texi
tex_httex tex.texi --init tex4ht.init --iftex
tex_mediawiki tex.texi --init mediawiki.init --iftex
tex_httex_mediawiki tex.texi --html --init tex4ht.init --init mediawiki.init
--iftex
-tex_l2h_mediawiki tex.texi --html --l2h --iftex --init mediawiki.init
+tex_l2h_mediawiki tex.texi --html --set-init-var 'L2H 1' --iftex --init
mediawiki.init
block_EOL block_EOL.texi
-block_EOL_tex block_EOL.texi --l2h --iftex
+block_EOL_tex block_EOL.texi --set-init-var 'L2H 1' --iftex
detailmenus detailmenus.texi
detailmenus_simple detailmenus.texi --set-init-var 'SIMPLE_MENU 1'
commands_in_ifset commands_in_ifset.texi
-simplest_test_prefix simplest.texi --prefix=truc
-simplest_test_prefix_info simplest.texi --info --prefix=truc
+simplest_test_prefix simplest.texi --set-init-var 'PREFIX truc'
+simplest_test_prefix_info simplest.texi --info --set-init-var 'PREFIX truc'
simplest_test_css simplest.texi --css-include file.css
simplest_test_date_in_header simplest.texi --set-init-var 'DATE_IN_HEADER 1'
punctuation punctuation.texi
@@ -147,7 +147,7 @@
simple_images_info simple_images.texi --init info.init
nested_formats_info nested_formats.texi --init info.init
formatting_html ../coverage/formatting.texi --html --no-split
-formatting_html_nodes ../coverage/formatting.texi --html --split node
--node-files --top-file=index.html
+formatting_html_nodes ../coverage/formatting.texi --html --split node
--node-files --set-init-var 'TOP_FILE index.html'
formatting_info ../coverage/formatting.texi --init info.init -U texi2html
formatting_plaintext ../coverage/formatting.texi --plaintext -U texi2html
formatting_mediawiki ../coverage/formatting.texi --init mediawiki.init
Index: test/formatting/res_info/block_EOL_tex/block_EOL.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/block_EOL_tex/block_EOL.2,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/formatting/res_info/block_EOL_tex/block_EOL.2 11 Jan 2010 00:08:59
-0000 1.1
+++ test/formatting/res_info/block_EOL_tex/block_EOL.2 14 Jul 2010 15:42:36
-0000 1.2
@@ -1,4 +1,3 @@
-Unknown option: l2h
block_EOL.texi:44: Bad argument `html.' to address@hidden', using `html'
block_EOL.texi:74: Bad argument `tex.' to address@hidden', using `tex'
block_EOL.texi:105: Bad argument `verbatim.' to address@hidden', using
`verbatim'
Index: test/formatting/res_info/formatting_html_nodes/formatting.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/formatting_html_nodes/formatting.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/formatting/res_info/formatting_html_nodes/formatting.2 22 Dec 2009
23:27:43 -0000 1.5
+++ test/formatting/res_info/formatting_html_nodes/formatting.2 14 Jul 2010
15:42:36 -0000 1.6
@@ -1,5 +1,3 @@
-Unknown option: node-files
-Unknown option: top-file
formatting.texi:18: warning: @ctrl is obsolete. (via @mymacro)
formatting.texi:28: warning: @ctrl is obsolete. (via @mymacro)
formatting.texi:38: warning: @ctrl is obsolete. (via @mymacro)
Index: test/formatting/res_info/simplest_test_prefix/simplest.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix/simplest.2,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/formatting/res_info/simplest_test_prefix/simplest.2 26 Oct 2009
23:21:58 -0000 1.1
+++ test/formatting/res_info/simplest_test_prefix/simplest.2 14 Jul 2010
15:42:36 -0000 1.2
@@ -1 +0,0 @@
-Unknown option: prefix
Index: test/formatting/res_info/simplest_test_prefix_info/simplest.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/simplest_test_prefix_info/simplest.2,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/formatting/res_info/simplest_test_prefix_info/simplest.2 26 Oct
2009 23:21:58 -0000 1.1
+++ test/formatting/res_info/simplest_test_prefix_info/simplest.2 14 Jul
2010 15:42:36 -0000 1.2
@@ -1,2 +0,0 @@
-Unknown option: info
-Unknown option: prefix
Index: test/formatting/res_info/tex/tex.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/tex/tex.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/formatting/res_info/tex/tex.2 8 Nov 2009 17:20:22 -0000 1.6
+++ test/formatting/res_info/tex/tex.2 14 Jul 2010 15:42:36 -0000 1.7
@@ -1,2 +1 @@
-Unknown option: l2h
tex.texi:42: Unknown command `\'
Index: test/formatting/res_info/tex_l2h_mediawiki/tex
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/formatting/res_info/tex_l2h_mediawiki/tex 11 Nov 2009 14:05:32
-0000 1.2
+++ test/formatting/res_info/tex_l2h_mediawiki/tex 14 Jul 2010 15:42:36
-0000 1.3
@@ -2,17 +2,25 @@
<div id="Tests"></div>
== Tests ==
-Now tex on the same line <pre class="tex"> some
-$$ \chi^2 = \sum_{i=1}^N
+Now tex on the same line
+some
+<br />
+<div class="mathdisplay" align="CENTER"><!-- MATH
+\begin{displaymath}
+\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
-\over \sigma_i\right)^2 $$
-</pre> bidule
+\over \sigma_i\right)^2
+\end{displaymath}
+-->[[Image:tex_1.png|179px|\begin{displaymath}\chi^2 = \sum_{i=1}^N
+\left(y_i - (a + b x_i)
+\over \sigma_i\right)^2 \end{displaymath}]]</div>
+<br clear="ALL" /> bidule
Some text one the line following @end tex
Now tex on the following line, valid fot tex (with @end tex on a line).
-<pre class="tex"> some
-tex \TeX
-</pre>
+some
+tex <span class="logo-TeX">T<small>E</small>X</span>
+
Same that @html (but empty following line not ignored).
Test of @math
Index: test/formatting/res_info/tex_l2h_mediawiki/tex.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/tex_l2h_mediawiki/tex.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/formatting/res_info/tex_l2h_mediawiki/tex.2 8 Nov 2009 17:20:22
-0000 1.3
+++ test/formatting/res_info/tex_l2h_mediawiki/tex.2 14 Jul 2010 15:42:36
-0000 1.4
@@ -1,2 +1,2 @@
-Unknown option: l2h
+texexpand
tex.texi:42: Unknown command `\'
Index: test/formatting/res_info/texi_tex/tex.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/formatting/res_info/texi_tex/tex.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/formatting/res_info/texi_tex/tex.2 4 Aug 2009 07:58:37 -0000
1.2
+++ test/formatting/res_info/texi_tex/tex.2 14 Jul 2010 15:42:37 -0000
1.3
@@ -1 +0,0 @@
-Unknown option: l2h
Index: test/htmlxref/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/htmlxref/tests.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/htmlxref/tests.txt 18 Aug 2008 18:03:25 -0000 1.1
+++ test/htmlxref/tests.txt 14 Jul 2010 15:42:37 -0000 1.2
@@ -1,2 +1,2 @@
htmlxref ../sectionning/test_refs.texi
-htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes
--node-files
+htmlxref_nodes ../sectionning/test_refs.texi --split node --set-init-var
'USE_NODES 1' --node-files
Index: test/htmlxref/res_info/htmlxref_nodes/test_refs.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/htmlxref/res_info/htmlxref_nodes/test_refs.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/htmlxref/res_info/htmlxref_nodes/test_refs.2 13 Jul 2010 12:03:05
-0000 1.4
+++ test/htmlxref/res_info/htmlxref_nodes/test_refs.2 14 Jul 2010 15:42:37
-0000 1.5
@@ -1,5 +1,3 @@
-Unknown option: use-nodes
-Unknown option: node-files
./.texinfo/htmlxref.cnf:14: Unrecognized type: foo
./.texinfo/htmlxref.cnf:15: Missing type
warning: Ignoring splitting for format info
Index: test/htmlxref-only_mono/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/htmlxref-only_mono/tests.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/htmlxref-only_mono/tests.txt 18 Aug 2008 18:03:26 -0000 1.1
+++ test/htmlxref-only_mono/tests.txt 14 Jul 2010 15:42:37 -0000 1.2
@@ -1,2 +1,2 @@
htmlxref ../sectionning/test_refs.texi
-htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes
--node-files
+htmlxref_nodes ../sectionning/test_refs.texi --split node --set-init-var
'USE_NODES 1' --node-files
Index: test/htmlxref-only_mono/res_info/htmlxref_nodes/test_refs.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/htmlxref-only_mono/res_info/htmlxref_nodes/test_refs.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/htmlxref-only_mono/res_info/htmlxref_nodes/test_refs.2 13 Jul 2010
12:03:05 -0000 1.3
+++ test/htmlxref-only_mono/res_info/htmlxref_nodes/test_refs.2 14 Jul 2010
15:42:37 -0000 1.4
@@ -1,3 +1 @@
-Unknown option: use-nodes
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/htmlxref-only_split/tests.txt
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/htmlxref-only_split/tests.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- test/htmlxref-only_split/tests.txt 18 Aug 2008 18:03:28 -0000 1.1
+++ test/htmlxref-only_split/tests.txt 14 Jul 2010 15:42:37 -0000 1.2
@@ -1,2 +1,2 @@
htmlxref ../sectionning/test_refs.texi
-htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes
--node-files
+htmlxref_nodes ../sectionning/test_refs.texi --split node --set-init-var
'USE_NODES 1' --node-files
Index: test/htmlxref-only_split/res_info/htmlxref_nodes/test_refs.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/htmlxref-only_split/res_info/htmlxref_nodes/test_refs.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/htmlxref-only_split/res_info/htmlxref_nodes/test_refs.2 13 Jul
2010 12:03:05 -0000 1.3
+++ test/htmlxref-only_split/res_info/htmlxref_nodes/test_refs.2 14 Jul
2010 15:42:37 -0000 1.4
@@ -1,3 +1 @@
-Unknown option: use-nodes
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/indices/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/indices/tests.txt,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- test/indices/tests.txt 13 Jul 2010 12:03:08 -0000 1.22
+++ test/indices/tests.txt 14 Jul 2010 15:42:37 -0000 1.23
@@ -6,7 +6,7 @@
makeinfo_index_split index_split.texi --init makeinfo.init --init
index_test.init
index_no_node index_no_node.texi --split chapter --init index_test.init
makeinfo_nodes_before_top nodes_before_top.texi --init makeinfo.init --init
index_test.init --split node --no-node-files
-nodes_before_top nodes_before_top.texi --use-nodes --init index_test.init
--split chapter
+nodes_before_top nodes_before_top.texi --set-init-var 'USE_NODES 1' --init
index_test.init --split chapter
# there is no sectionning command in nodes_before_top.texi, so when called as
# texi2html there is nothing split, including indices.
nodes_before_top_no_nodes nodes_before_top.texi --init index_test.init --split
chapter
@@ -14,7 +14,7 @@
nodes_before_top_and_sections_monolithic nodes_before_top_and_sections.texi
makeinfo_nodes_before_top_and_sections nodes_before_top_and_sections.texi
--init makeinfo.init --init index_test.init
nodes_before_top_and_sections_html_chapter nodes_before_top_and_sections.texi
--html --split chapter
-nodes_before_top_and_sections_html_chapter_nodes
nodes_before_top_and_sections.texi --html --use-nodes --node-files --split
chapter
+nodes_before_top_and_sections_html_chapter_nodes
nodes_before_top_and_sections.texi --html --set-init-var 'USE_NODES 1'
--node-files --split chapter
index_special_region index_special_region.texi --split chapter --set-init-var
'USE_TITLEPAGE_FOR_TITLE 0'
index_special_region_no_region index_special_region_no_region.texi --split
chapter --set-init-var 'USE_TITLEPAGE_FOR_TITLE 0'
index_special_region_no_insertcopying
index_special_region_no_insertcopying.texi --split chapter --set-init-var
'USE_TITLEPAGE_FOR_TITLE 0'
Index: test/indices/res_info/makeinfo_nodes_before_top/nodes_before_top.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/indices/res_info/makeinfo_nodes_before_top/nodes_before_top.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/indices/res_info/makeinfo_nodes_before_top/nodes_before_top.2 22 Sep
2009 20:22:27 -0000 1.4
+++ test/indices/res_info/makeinfo_nodes_before_top/nodes_before_top.2 14 Jul
2010 15:42:37 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: no-node-files
nodes_before_top.texi:6: warning: unreferenced node `first before top'
warning: Must specify a title with a title command or @top
Index: test/indices/res_info/nodes_before_top/nodes_before_top.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/indices/res_info/nodes_before_top/nodes_before_top.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/indices/res_info/nodes_before_top/nodes_before_top.2 13 Jul 2010
12:03:09 -0000 1.4
+++ test/indices/res_info/nodes_before_top/nodes_before_top.2 14 Jul 2010
15:42:37 -0000 1.5
@@ -1,3 +1,2 @@
-Unknown option: use-nodes
warning: Ignoring splitting for format info
nodes_before_top.texi:6: warning: unreferenced node `first before top'
Index:
test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes/nodes_before_top_and_sections.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes/nodes_before_top_and_sections.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
---
test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes/nodes_before_top_and_sections.2
22 Sep 2009 20:22:27 -0000 1.2
+++
test/indices/res_info/nodes_before_top_and_sections_html_chapter_nodes/nodes_before_top_and_sections.2
14 Jul 2010 15:42:37 -0000 1.3
@@ -1,3 +1 @@
-Unknown option: use-nodes
-Unknown option: node-files
nodes_before_top_and_sections.texi:6: warning: unreferenced node `first before
top'
Index:
test/indices/res_info/printindex_between_node_section/printindex_between_node_section.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/indices/res_info/printindex_between_node_section/printindex_between_node_section.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
---
test/indices/res_info/printindex_between_node_section/printindex_between_node_section.2
13 Jul 2010 12:03:10 -0000 1.3
+++
test/indices/res_info/printindex_between_node_section/printindex_between_node_section.2
14 Jul 2010 15:42:37 -0000 1.4
@@ -1,2 +1 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
Index:
test/indices/res_info/same_doc_nr_split_index_and_element/same_doc_nr_split_index_and_element.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/indices/res_info/same_doc_nr_split_index_and_element/same_doc_nr_split_index_and_element.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
---
test/indices/res_info/same_doc_nr_split_index_and_element/same_doc_nr_split_index_and_element.2
13 Jul 2010 12:03:10 -0000 1.2
+++
test/indices/res_info/same_doc_nr_split_index_and_element/same_doc_nr_split_index_and_element.2
14 Jul 2010 15:42:37 -0000 1.3
@@ -1,2 +1 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/invalid/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/invalid/tests.txt,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- test/invalid/tests.txt 13 Jul 2010 12:03:15 -0000 1.17
+++ test/invalid/tests.txt 14 Jul 2010 15:42:37 -0000 1.18
@@ -5,18 +5,18 @@
texi code_not_closed_no_newline.texi
texi formats_not_closed.texi
texi commands_not_closed.texi
-texi math_not_closed.texi --l2h --iftex
+texi math_not_closed.texi --set-init-var 'L2H 1' --iftex
texi not_closed_in_menu.texi
texi macro_call_not_closed.texi
texi macro_def_not_closed.texi
texi ignored_not_closed.texi
texi verb_not_closed.texi
-texi tex_not_closed.texi --l2h --iftex
+texi tex_not_closed.texi --set-init-var 'L2H 1' --iftex
texi html_not_closed.texi
texi verbatim_not_closed.texi
texi copying_not_closed.texi
texi node_in_copying.texi
-texi tex_in_copying.texi --l2h --iftex
+texi tex_in_copying.texi --set-init-var 'L2H 1' --iftex
texi titlepage_not_closed.texi
texi footnote_not_closed.texi
texi caption_not_closed.texi
@@ -53,18 +53,18 @@
code_not_closed_no_newline code_not_closed_no_newline.texi
formats_not_closed formats_not_closed.texi
commands_not_closed commands_not_closed.texi
-math_not_closed math_not_closed.texi --l2h --iftex
+math_not_closed math_not_closed.texi --set-init-var 'L2H 1' --iftex
not_closed_in_menu not_closed_in_menu.texi
macro_call_not_closed macro_call_not_closed.texi
macro_def_not_closed macro_def_not_closed.texi
ignored_not_closed ignored_not_closed.texi
verb_not_closed verb_not_closed.texi
-tex_not_closed tex_not_closed.texi --l2h --iftex
+tex_not_closed tex_not_closed.texi --set-init-var 'L2H 1' --iftex
html_not_closed html_not_closed.texi
verbatim_not_closed verbatim_not_closed.texi
copying_not_closed copying_not_closed.texi
node_in_copying node_in_copying.texi
-tex_in_copying tex_in_copying.texi --l2h --iftex
+tex_in_copying tex_in_copying.texi --set-init-var 'L2H 1' --iftex
titlepage_not_closed titlepage_not_closed.texi
footnote_not_closed footnote_not_closed.texi
caption_not_closed caption_not_closed.texi
Index: test/invalid/res_info/math_not_closed/math_not_closed.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/math_not_closed/math_not_closed.2,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/invalid/res_info/math_not_closed/math_not_closed.2 5 Nov 2009
22:55:39 -0000 1.6
+++ test/invalid/res_info/math_not_closed/math_not_closed.2 14 Jul 2010
15:42:37 -0000 1.7
@@ -1,3 +1,2 @@
-Unknown option: l2h
math_not_closed.texi:7: @math missing close brace
math_not_closed.texi:10: @math missing close brace
Index: test/invalid/res_info/tex_in_copying/tex_in_copying.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/tex_in_copying/tex_in_copying.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/invalid/res_info/tex_in_copying/tex_in_copying.2 4 Aug 2009
07:58:39 -0000 1.2
+++ test/invalid/res_info/tex_in_copying/tex_in_copying.2 14 Jul 2010
15:42:37 -0000 1.3
@@ -1 +0,0 @@
-Unknown option: l2h
Index: test/invalid/res_info/tex_not_closed/tex_not_closed.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/tex_not_closed/tex_not_closed.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/invalid/res_info/tex_not_closed/tex_not_closed.2 22 Dec 2009
23:27:55 -0000 1.4
+++ test/invalid/res_info/tex_not_closed/tex_not_closed.2 14 Jul 2010
15:42:38 -0000 1.5
@@ -1,2 +1 @@
-Unknown option: l2h
tex_not_closed.texi:10: Expected @end tex
Index: test/invalid/res_info/texi_math_not_closed/math_not_closed.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/texi_math_not_closed/math_not_closed.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/invalid/res_info/texi_math_not_closed/math_not_closed.2 4 Aug
2009 07:58:39 -0000 1.2
+++ test/invalid/res_info/texi_math_not_closed/math_not_closed.2 14 Jul
2010 15:42:38 -0000 1.3
@@ -1 +0,0 @@
-Unknown option: l2h
Index: test/invalid/res_info/texi_tex_in_copying/tex_in_copying.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/texi_tex_in_copying/tex_in_copying.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/invalid/res_info/texi_tex_in_copying/tex_in_copying.2 4 Aug 2009
07:58:40 -0000 1.2
+++ test/invalid/res_info/texi_tex_in_copying/tex_in_copying.2 14 Jul 2010
15:42:38 -0000 1.3
@@ -1 +0,0 @@
-Unknown option: l2h
Index: test/invalid/res_info/texi_tex_not_closed/tex_not_closed.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/invalid/res_info/texi_tex_not_closed/tex_not_closed.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/invalid/res_info/texi_tex_not_closed/tex_not_closed.2 22 Dec 2009
23:27:55 -0000 1.5
+++ test/invalid/res_info/texi_tex_not_closed/tex_not_closed.2 14 Jul 2010
15:42:38 -0000 1.6
@@ -1,2 +1 @@
-Unknown option: l2h
tex_not_closed.texi:10: Expected @end tex
Index: test/manuals/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/manuals/tests.txt,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- test/manuals/tests.txt 10 Aug 2009 10:01:01 -0000 1.12
+++ test/manuals/tests.txt 14 Jul 2010 15:42:38 -0000 1.13
@@ -6,13 +6,13 @@
hello hello.texi
hello_nodes hello.texi --split node --node-files hello.texi
info-stnd info-stnd.texi --split chapter --node-files
-texinfo texinfo.texi --split chapter --ifinfo --idx-sum
address@hidden@internal_links_texinfo.txt
+texinfo texinfo.texi --split chapter --ifinfo --set-init-var 'IDX_SUMMARY 1'
address@hidden@internal_links_texinfo.txt
texinfo_nodes texinfo.texi --split node --node-files --ifinfo
ccvs cvs.texi --split chapter --init cvs.init
ccvs_mediawiki cvs.texi --init mediawiki.init --split chapter
ccvs_mediawiki_nosplit cvs.texi --init mediawiki.init --init cvs.init
ccvs_info cvs.texi --init info.init
-mini_ker mini_ker.texi --init book.init --split section --node-files
--use-nodes --iftex --init mini_ker_t2h.init --init tex4ht.init
+mini_ker mini_ker.texi --init book.init --split section --node-files
--set-init-var 'USE_NODES 1' --iftex --init mini_ker_t2h.init --init tex4ht.init
texinfo_xml texinfo.texi --init xml.init
texinfo_html texinfo.texi --html
texinfo_html_nosplit texinfo.texi --html --no-split
Index: test/manuals/res_info/hello_nodes/hello.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/manuals/res_info/hello_nodes/hello.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/manuals/res_info/hello_nodes/hello.2 13 Jul 2010 12:03:35 -0000
1.3
+++ test/manuals/res_info/hello_nodes/hello.2 14 Jul 2010 15:42:38 -0000
1.4
@@ -1,2 +1 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/manuals/res_info/info-stnd/info-stnd.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/manuals/res_info/info-stnd/info-stnd.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/manuals/res_info/info-stnd/info-stnd.2 13 Jul 2010 12:03:36 -0000
1.3
+++ test/manuals/res_info/info-stnd/info-stnd.2 14 Jul 2010 15:42:38 -0000
1.4
@@ -1,2 +1 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/manuals/res_info/mini_ker/mini_ker.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/manuals/res_info/mini_ker/mini_ker.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/manuals/res_info/mini_ker/mini_ker.2 5 Nov 2009 22:55:44 -0000
1.5
+++ test/manuals/res_info/mini_ker/mini_ker.2 14 Jul 2010 15:42:38 -0000
1.6
@@ -1,3 +1 @@
-Unknown option: node-files
-Unknown option: use-nodes
dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng
warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning:
DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) dvipng warning: DVI
magnification of 1000 over-ridden by user (1400) mini_ker.texi:1903: warning:
@image file `heavyside' (for HTML) not found, using `heavyside.jpg'
Index: test/manuals/res_info/texinfo/texinfo.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/manuals/res_info/texinfo/texinfo.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/manuals/res_info/texinfo/texinfo.2 13 Jul 2010 12:03:36 -0000
1.3
+++ test/manuals/res_info/texinfo/texinfo.2 14 Jul 2010 15:42:38 -0000
1.4
@@ -1,2 +1 @@
-Unknown option: idx-sum
warning: Ignoring splitting for format info
Index: test/manuals/res_info/texinfo_nodes/texinfo.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/manuals/res_info/texinfo_nodes/texinfo.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/manuals/res_info/texinfo_nodes/texinfo.2 13 Jul 2010 12:03:37
-0000 1.3
+++ test/manuals/res_info/texinfo_nodes/texinfo.2 14 Jul 2010 15:42:39
-0000 1.4
@@ -1,2 +1 @@
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/misc/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/misc/tests.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- test/misc/tests.txt 13 Jul 2010 12:03:38 -0000 1.6
+++ test/misc/tests.txt 14 Jul 2010 15:42:39 -0000 1.7
@@ -7,6 +7,6 @@
viper_unsplit viper.texi --ifinfo
viper_chapter_split viper.texi --split chapter --ifinfo
formatting_html32 ../coverage/formatting.texi --init html32.init
-mini_ker_l2h ../manuals/mini_ker.texi --l2h --iftex
+mini_ker_l2h ../manuals/mini_ker.texi --set-init-var 'L2H 1' --iftex
mini_ker_httex ../manuals/mini_ker.texi --init tex4ht.init --iftex
templates templates.texi
Index: test/misc/res_info/mini_ker_l2h/mini_ker.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/misc/res_info/mini_ker_l2h/mini_ker.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/misc/res_info/mini_ker_l2h/mini_ker.2 4 Aug 2009 14:31:02 -0000
1.4
+++ test/misc/res_info/mini_ker_l2h/mini_ker.2 14 Jul 2010 15:42:39 -0000
1.5
@@ -1,2 +1 @@
-Unknown option: l2h
mini_ker.texi:1903: warning: Cannot find @image file `heavyside.txt'
Index: test/sectionning/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/sectionning/tests.txt,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- test/sectionning/tests.txt 13 Jul 2010 12:03:39 -0000 1.35
+++ test/sectionning/tests.txt 14 Jul 2010 15:42:39 -0000 1.36
@@ -14,33 +14,33 @@
# also text before first chapter is not allowed in docbook.
first_section_no_node first_section_no_node.texi
nodes_before_top nodes_before_top.texi
-nodes_after_top nodes_after_top.texi --use-nodes
+nodes_after_top nodes_after_top.texi --set-init-var 'USE_NODES 1'
nodes_after_top_no_node nodes_after_top.texi
section_nodes_before_top section_nodes_before_top.texi
nodes_after_top_before_chapter nodes_after_top_before_chapter.texi
nodes_after_top_before_section nodes_after_top_before_section.texi --split
chapter
-nodes_after_top_before_section_use_nodes nodes_after_top_before_section.texi
--use-nodes
-nodes_after_top_before_section_use_nodes_chapter
nodes_after_top_before_section.texi --use-nodes --split chapter
-nodes_after_top_before_chapter_use_nodes_chapter
nodes_after_top_before_chapter.texi --use-nodes --split chapter
+nodes_after_top_before_section_use_nodes nodes_after_top_before_section.texi
--set-init-var 'USE_NODES 1'
+nodes_after_top_before_section_use_nodes_chapter
nodes_after_top_before_section.texi --set-init-var 'USE_NODES 1' --split chapter
+nodes_after_top_before_chapter_use_nodes_chapter
nodes_after_top_before_chapter.texi --set-init-var 'USE_NODES 1' --split chapter
# --debug 255
nodes_test nodes_test.texi
no_section_no_node no_section.texi
-no_section no_section.texi --use-nodes
-no_section_directions no_section.texi --init test_directions.init --use-nodes
+no_section no_section.texi --set-init-var 'USE_NODES 1'
+no_section_directions no_section.texi --init test_directions.init
--set-init-var 'USE_NODES 1'
no_section_directions_no_node no_section.texi --init test_directions.init
no_node no_node.texi
no_node_directions no_node.texi --init test_directions.init
no_node_chapter_split no_node.texi --split chapter
no_node_no_top no_node_no_top.texi
-no_section_no_top no_section_no_top.texi --use-nodes
+no_section_no_top no_section_no_top.texi --set-init-var 'USE_NODES 1'
no_section_no_top_no_node no_section_no_top.texi
one_section one_section.texi
one_node_no_node one_node.texi
-one_node one_node.texi --use-nodes
+one_node one_node.texi --set-init-var 'USE_NODES 1'
one_node_and_section one_node_and_section.texi
first_section_and_nodes first_section_and_nodes.texi
double_top double_top.texi
-rec_nodes rec_nodes.texi --use-nodes
+rec_nodes rec_nodes.texi --set-init-var 'USE_NODES 1'
rec_nodes_no_node rec_nodes.texi
makeinfo_rec_nodes rec_nodes.texi --init makeinfo.init --no-node-files
lower_subsub lower_subsub.texi
@@ -50,12 +50,12 @@
section_before_chapter section_before_chapter.texi
node_footnote_end node_footnote.texi --footnote-style=end
# --debug 255
-node_footnote_use_node node_footnote.texi --use-node --node-files
--footnote-style=end --split node
+node_footnote_use_node node_footnote.texi --set-init-var 'USE_NODES 1'
--node-files --footnote-style=end --split node
test_refs test_refs.texi
test_refs_chapter test_refs.texi --split chapter
-test_refs_nodes test_refs.texi --split node --node-files --use-nodes
+test_refs_nodes test_refs.texi --split node --node-files --set-init-var
'USE_NODES 1'
at_commands_in_refs at_commands_in_refs.texi
-equivalent_nodes equivalent_nodes.texi --use-nodes
+equivalent_nodes equivalent_nodes.texi --set-init-var 'USE_NODES 1'
equivalent_nodes_no_node equivalent_nodes.texi
html-top_no_Top_node html-top.texi
menu-whitespace_plain menu-whitespace.texi
Index: test/sectionning/res_info/equivalent_nodes/equivalent_nodes.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/equivalent_nodes/equivalent_nodes.2,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- test/sectionning/res_info/equivalent_nodes/equivalent_nodes.2 5 Nov
2009 22:55:49 -0000 1.7
+++ test/sectionning/res_info/equivalent_nodes/equivalent_nodes.2 14 Jul
2010 15:42:39 -0000 1.8
@@ -1,4 +1,3 @@
-Unknown option: use-nodes
equivalent_nodes.texi:17: Node equivalent with address@hidden' already used
address@hidden'
equivalent_nodes.texi:15: Node equivalent with `node' already used
address@hidden' (l. 17)
equivalent_nodes.texi:5: Next reference to nonexistent address@hidden'
Index: test/sectionning/res_info/makeinfo_novalidate_split/novalidate.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_split/novalidate.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/sectionning/res_info/makeinfo_novalidate_split/novalidate.2 22 Sep
2009 20:22:31 -0000 1.5
+++ test/sectionning/res_info/makeinfo_novalidate_split/novalidate.2 14 Jul
2010 15:42:39 -0000 1.6
@@ -1,3 +1,2 @@
-Unknown option: no-node-file
novalidate.texi:20: warning: Superfluous arguments for node
novalidate.texi:7: warning: unreferenced node `first'
Index: test/sectionning/res_info/makeinfo_novalidate_unsplit/novalidate.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/makeinfo_novalidate_unsplit/novalidate.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/sectionning/res_info/makeinfo_novalidate_unsplit/novalidate.2 22 Sep
2009 20:22:31 -0000 1.5
+++ test/sectionning/res_info/makeinfo_novalidate_unsplit/novalidate.2 14 Jul
2010 15:42:39 -0000 1.6
@@ -1,3 +1,2 @@
-Unknown option: no-node-file
novalidate.texi:20: warning: Superfluous arguments for node
novalidate.texi:7: warning: unreferenced node `first'
Index: test/sectionning/res_info/makeinfo_rec_nodes/rec_nodes.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/makeinfo_rec_nodes/rec_nodes.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/sectionning/res_info/makeinfo_rec_nodes/rec_nodes.2 6 Sep 2009
12:53:55 -0000 1.5
+++ test/sectionning/res_info/makeinfo_rec_nodes/rec_nodes.2 14 Jul 2010
15:42:39 -0000 1.6
@@ -1,2 +1 @@
-Unknown option: no-node-files
warning: Must specify a title with a title command or @top
Index: test/sectionning/res_info/no_section/no_section.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/no_section/no_section.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/sectionning/res_info/no_section/no_section.2 4 Aug 2009 07:58:56
-0000 1.4
+++ test/sectionning/res_info/no_section/no_section.2 14 Jul 2010 15:42:39
-0000 1.5
@@ -1,2 +1 @@
-Unknown option: use-nodes
no_section.texi:9: warning: For `Top', up in menu `Top' and up `(dir)' don't
match
Index: test/sectionning/res_info/no_section_directions/no_section.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/no_section_directions/no_section.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/sectionning/res_info/no_section_directions/no_section.2 4 Aug
2009 07:58:56 -0000 1.4
+++ test/sectionning/res_info/no_section_directions/no_section.2 14 Jul
2010 15:42:39 -0000 1.5
@@ -1,2 +1 @@
-Unknown option: use-nodes
no_section.texi:9: warning: For `Top', up in menu `Top' and up `(dir)' don't
match
Index: test/sectionning/res_info/no_section_no_top/no_section_no_top.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/no_section_no_top/no_section_no_top.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/sectionning/res_info/no_section_no_top/no_section_no_top.2 6 Sep
2009 12:53:57 -0000 1.4
+++ test/sectionning/res_info/no_section_no_top/no_section_no_top.2 14 Jul
2010 15:42:39 -0000 1.5
@@ -1,2 +1 @@
-Unknown option: use-nodes
warning: Document without Top node.
Index: test/sectionning/res_info/node_footnote_use_node/node_footnote.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/node_footnote_use_node/node_footnote.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/sectionning/res_info/node_footnote_use_node/node_footnote.2 13 Jul
2010 12:03:42 -0000 1.5
+++ test/sectionning/res_info/node_footnote_use_node/node_footnote.2 14 Jul
2010 15:42:39 -0000 1.6
@@ -1,3 +1 @@
-Unknown option: use-node
-Unknown option: node-files
warning: Ignoring splitting for format info
Index: test/sectionning/res_info/nodes_after_top/nodes_after_top.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/nodes_after_top/nodes_after_top.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/sectionning/res_info/nodes_after_top/nodes_after_top.2 4 Aug 2009
07:58:56 -0000 1.2
+++ test/sectionning/res_info/nodes_after_top/nodes_after_top.2 14 Jul 2010
15:42:39 -0000 1.3
@@ -1 +0,0 @@
-Unknown option: use-nodes
Index:
test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter/nodes_after_top_before_chapter.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter/nodes_after_top_before_chapter.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
---
test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter/nodes_after_top_before_chapter.2
13 Jul 2010 12:03:42 -0000 1.2
+++
test/sectionning/res_info/nodes_after_top_before_chapter_use_nodes_chapter/nodes_after_top_before_chapter.2
14 Jul 2010 15:42:39 -0000 1.3
@@ -1,2 +1 @@
-Unknown option: use-nodes
warning: Ignoring splitting for format info
Index:
test/sectionning/res_info/nodes_after_top_before_section_use_nodes/nodes_after_top_before_section.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes/nodes_after_top_before_section.2,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
---
test/sectionning/res_info/nodes_after_top_before_section_use_nodes/nodes_after_top_before_section.2
5 Sep 2009 07:24:31 -0000 1.1
+++
test/sectionning/res_info/nodes_after_top_before_section_use_nodes/nodes_after_top_before_section.2
14 Jul 2010 15:42:40 -0000 1.2
@@ -1 +0,0 @@
-Unknown option: use-nodes
Index:
test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter/nodes_after_top_before_section.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter/nodes_after_top_before_section.2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
---
test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter/nodes_after_top_before_section.2
13 Jul 2010 12:03:43 -0000 1.2
+++
test/sectionning/res_info/nodes_after_top_before_section_use_nodes_chapter/nodes_after_top_before_section.2
14 Jul 2010 15:42:40 -0000 1.3
@@ -1,2 +1 @@
-Unknown option: use-nodes
warning: Ignoring splitting for format info
Index: test/sectionning/res_info/one_node/one_node.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/one_node/one_node.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/sectionning/res_info/one_node/one_node.2 6 Sep 2009 12:53:57
-0000 1.4
+++ test/sectionning/res_info/one_node/one_node.2 14 Jul 2010 15:42:40
-0000 1.5
@@ -1,2 +1 @@
-Unknown option: use-nodes
warning: Document without Top node.
Index: test/sectionning/res_info/rec_nodes/rec_nodes.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/rec_nodes/rec_nodes.2,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/sectionning/res_info/rec_nodes/rec_nodes.2 4 Aug 2009 07:58:56
-0000 1.4
+++ test/sectionning/res_info/rec_nodes/rec_nodes.2 14 Jul 2010 15:42:40
-0000 1.5
@@ -1 +0,0 @@
-Unknown option: use-nodes
Index: test/sectionning/res_info/test_refs_nodes/test_refs.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/sectionning/res_info/test_refs_nodes/test_refs.2,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/sectionning/res_info/test_refs_nodes/test_refs.2 13 Jul 2010
12:03:43 -0000 1.3
+++ test/sectionning/res_info/test_refs_nodes/test_refs.2 14 Jul 2010
15:42:40 -0000 1.4
@@ -1,3 +1 @@
-Unknown option: node-files
-Unknown option: use-nodes
warning: Ignoring splitting for format info
Index: test/singular_manual/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/singular_manual/tests.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- test/singular_manual/tests.txt 13 Jul 2010 12:03:46 -0000 1.4
+++ test/singular_manual/tests.txt 14 Jul 2010 15:42:40 -0000 1.5
@@ -1,4 +1,5 @@
texi singular.texi
singular_plain singular.texi --split chapter
+# Use the obsolete command-line switch to test that they function
singular singular.texi --init-file t2h_singular.init --l2h --short-ext
--prefix=sing --top-file=index.htm --noVerbose
-singular_httex singular.texi --init-file t2h_singular.init --init tex4ht.init
--short-ext --prefix=sing --top-file=index.htm --noVerbose
+singular_httex singular.texi --init-file t2h_singular.init --init tex4ht.init
--set-init-var 'SHORTEXTN 1' --set-init-var 'PREFIX sing' --set-init-var
'TOP_FILE index.htm' --no-verbose
Index: test/singular_manual/res_all/singular/singular.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/singular_manual/res_all/singular/singular.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/singular_manual/res_all/singular/singular.2 16 Mar 2010 08:16:33
-0000 1.5
+++ test/singular_manual/res_all/singular/singular.2 14 Jul 2010 15:42:40
-0000 1.6
@@ -1,3 +1,7 @@
+Unknown option: l2h
+Unknown option: short-ext
+Unknown option: prefix
+Unknown option: top-file
normal_lib.tex:26: Multiple @menu
equising_lib.tex:27: Multiple @menu
hnoether_lib.tex:45: Multiple @menu
Index: test/singular_manual/res_info/singular_httex/sing_cp.idx
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/singular_manual/res_info/singular_httex/sing_cp.idx,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/singular_manual/res_info/singular_httex/sing_cp.idx 1 Nov 2009
19:00:55 -0000 1.3
+++ test/singular_manual/res_info/singular_httex/sing_cp.idx 14 Jul 2010
15:42:41 -0000 1.4
@@ -1,8634 +1,8634 @@
key: !
- origin_href: sing.info#index-_0021
+ origin_href: sing.htm#index-_0021
entry: !
texi_entry: !
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: !=
- origin_href: sing.info#index-_0021_003d
+ origin_href: sing.htm#index-_0021_003d
entry: !=
texi_entry: !=
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: !=
- origin_href: sing.info#index-_0021_003d-1
+ origin_href: sing.htm#index-_0021_003d-1
entry: !=
texi_entry: !=
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: "
- origin_href: sing.info#index-_0022
+ origin_href: sing.htm#index-_0022
entry: "
texi_entry: "
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: #
- origin_href: sing.info#index-_0023
+ origin_href: sing.htm#index-_0023
entry: #
texi_entry: #
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: $
- origin_href: sing.info#index-_0024
+ origin_href: sing.htm#index-_0024
entry: $
texi_entry: $
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: %
- origin_href: sing.info#index-_0025
+ origin_href: sing.htm#index-_0025
entry: %
texi_entry: %
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: &&
- origin_href: sing.info#index-_0026_0026
+ origin_href: sing.htm#index-_0026_0026
entry: &&
texi_entry: &&
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: &&
- origin_href: sing.info#index-_0026_0026-1
+ origin_href: sing.htm#index-_0026_0026-1
entry: &&
texi_entry: &&
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: (
- origin_href: sing.info#index-_0028
+ origin_href: sing.htm#index-_0028
entry: (
texi_entry: (
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: )
- origin_href: sing.info#index-_0029
+ origin_href: sing.htm#index-_0029
entry: )
texi_entry: )
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: *
- origin_href: sing.info#index-_002a
+ origin_href: sing.htm#index-_002a
entry: *
texi_entry: *
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: **
- origin_href: sing.info#index-_002a_002a
+ origin_href: sing.htm#index-_002a_002a
entry: **
texi_entry: **
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: +
- origin_href: sing.info#index-_002b
+ origin_href: sing.htm#index-_002b
entry: +
texi_entry: +
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: -
- origin_href: sing.info#index-_002d
+ origin_href: sing.htm#index-_002d
entry: -
texi_entry: -
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: -allow-net
- origin_href: sing.info#index-_002d_002dallow_002dnet
+ origin_href: sing.htm#index-_002d_002dallow_002dnet
entry: -allow-net
texi_entry: --allow-net
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -b
- origin_href: sing.info#index-_002db
+ origin_href: sing.htm#index-_002db
entry: -b
texi_entry: -b
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -batch
- origin_href: sing.info#index-_002d_002dbatch
+ origin_href: sing.htm#index-_002d_002dbatch
entry: -batch
texi_entry: --batch
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -browser
- origin_href: sing.info#index-_002d_002dbrowser
+ origin_href: sing.htm#index-_002d_002dbrowser
entry: -browser
texi_entry: --browser
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -c
- origin_href: sing.info#index-_002dc
+ origin_href: sing.htm#index-_002dc
entry: -c
texi_entry: -c
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -d
- origin_href: sing.info#index-_002dd
+ origin_href: sing.htm#index-_002dd
entry: -d
texi_entry: -d
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -e
- origin_href: sing.info#index-_002de
+ origin_href: sing.htm#index-_002de
entry: -e
texi_entry: -e
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -echo
- origin_href: sing.info#index-_002d_002decho
+ origin_href: sing.htm#index-_002d_002decho
entry: -echo
texi_entry: --echo
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -emacs
- origin_href: sing.info#index-_002d_002demacs
+ origin_href: sing.htm#index-_002d_002demacs
entry: -emacs
texi_entry: --emacs
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -emacs-dir
- origin_href: sing.info#index-_002d_002demacs_002ddir
+ origin_href: sing.htm#index-_002d_002demacs_002ddir
entry: -emacs-dir
texi_entry: --emacs-dir
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -emacs-load
- origin_href: sing.info#index-_002d_002demacs_002dload
+ origin_href: sing.htm#index-_002d_002demacs_002dload
entry: -emacs-load
texi_entry: --emacs-load
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -execute
- origin_href: sing.info#index-_002d_002dexecute
+ origin_href: sing.htm#index-_002d_002dexecute
entry: -execute
texi_entry: --execute
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -h
- origin_href: sing.info#index-_002dh
+ origin_href: sing.htm#index-_002dh
entry: -h
texi_entry: -h
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -help
- origin_href: sing.info#index-_002d_002dhelp
+ origin_href: sing.htm#index-_002d_002dhelp
entry: -help
texi_entry: --help
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -min-time
- origin_href: sing.info#index-_002d_002dmin_002dtime
+ origin_href: sing.htm#index-_002d_002dmin_002dtime
entry: -min-time
texi_entry: --min-time
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -MPhost
- origin_href: sing.info#index-_002d_002dMPhost
+ origin_href: sing.htm#index-_002d_002dMPhost
entry: -MPhost
texi_entry: --MPhost
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -MPport
- origin_href: sing.info#index-_002d_002dMPport
+ origin_href: sing.htm#index-_002d_002dMPport
entry: -MPport
texi_entry: --MPport
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -no-out
- origin_href: sing.info#index-_002d_002dno_002dout
+ origin_href: sing.htm#index-_002d_002dno_002dout
entry: -no-out
texi_entry: --no-out
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -no-rc
- origin_href: sing.info#index-_002d_002dno_002drc
+ origin_href: sing.htm#index-_002d_002dno_002drc
entry: -no-rc
texi_entry: --no-rc
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -no-stdlib
- origin_href: sing.info#index-_002d_002dno_002dstdlib
+ origin_href: sing.htm#index-_002d_002dno_002dstdlib
entry: -no-stdlib
texi_entry: --no-stdlib
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -no-tty
- origin_href: sing.info#index-_002d_002dno_002dtty
+ origin_href: sing.htm#index-_002d_002dno_002dtty
entry: -no-tty
texi_entry: --no-tty
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -no-warn
- origin_href: sing.info#index-_002d_002dno_002dwarn
+ origin_href: sing.htm#index-_002d_002dno_002dwarn
entry: -no-warn
texi_entry: --no-warn
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -q
- origin_href: sing.info#index-_002dq
+ origin_href: sing.htm#index-_002dq
entry: -q
texi_entry: -q
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -quiet
- origin_href: sing.info#index-_002d_002dquiet
+ origin_href: sing.htm#index-_002d_002dquiet
entry: -quiet
texi_entry: --quiet
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -r
- origin_href: sing.info#index-_002dr
+ origin_href: sing.htm#index-_002dr
entry: -r
texi_entry: -r
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -random
- origin_href: sing.info#index-_002d_002drandom
+ origin_href: sing.htm#index-_002d_002drandom
entry: -random
texi_entry: --random
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -sdb
- origin_href: sing.info#index-_002d_002dsdb
+ origin_href: sing.htm#index-_002d_002dsdb
entry: -sdb
texi_entry: --sdb
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -singular
- origin_href: sing.info#index-_002d_002dsingular
+ origin_href: sing.htm#index-_002d_002dsingular
entry: -singular
texi_entry: --singular
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -ticks-per-sec
- origin_href: sing.info#index-_002d_002dticks_002dper_002dsec
+ origin_href: sing.htm#index-_002d_002dticks_002dper_002dsec
entry: -ticks-per-sec
texi_entry: --ticks-per-sec
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -u
- origin_href: sing.info#index-_002du
+ origin_href: sing.htm#index-_002du
entry: -u
texi_entry: -u
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -user-option
- origin_href: sing.info#index-_002d_002duser_002doption
+ origin_href: sing.htm#index-_002d_002duser_002doption
entry: -user-option
texi_entry: --user-option
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -v
- origin_href: sing.info#index-_002dv
+ origin_href: sing.htm#index-_002dv
entry: -v
texi_entry: -v
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: -verbose
- origin_href: sing.info#index-_002d_002dverbose
+ origin_href: sing.htm#index-_002d_002dverbose
entry: -verbose
texi_entry: --verbose
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: ..
- origin_href: sing.info#index-_002e_002e
+ origin_href: sing.htm#index-_002e_002e
entry: ..
texi_entry: ..
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: .singularrc file
- origin_href: sing.info#index-_002esingularrc-file
+ origin_href: sing.htm#index-_002esingularrc-file
entry: .singularrc file
texi_entry: .singularrc file
- element_href: sing.info#Startup-sequence
+ element_href: sing.htm#Startup-sequence
element_text: Startup sequence
key: .singularrc file, no loading
- origin_href: sing.info#index-_002esingularrc-file_002c-no-loading
+ origin_href: sing.htm#index-_002esingularrc-file_002c-no-loading
entry: .singularrc file, no loading
texi_entry: .singularrc file, no loading
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: /
- origin_href: sing.info#index-_002f
+ origin_href: sing.htm#index-_002f
entry: /
texi_entry: /
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: //
- origin_href: sing.info#index-_002f_002f
+ origin_href: sing.htm#index-_002f_002f
entry: //
texi_entry: //
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: //
- origin_href: sing.info#index-_002f_002f-1
+ origin_href: sing.htm#index-_002f_002f-1
entry: //
texi_entry: //
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: //
- origin_href: sing.info#index-_002f_002f-2
+ origin_href: sing.htm#index-_002f_002f-2
entry: //
texi_entry: //
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ;
- origin_href: sing.info#index-_003b
+ origin_href: sing.htm#index-_003b
entry: ;
texi_entry: ;
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: <
- origin_href: sing.info#index-_003c
+ origin_href: sing.htm#index-_003c
entry: <
texi_entry: <
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: <
- origin_href: sing.info#index-_003c-1
+ origin_href: sing.htm#index-_003c-1
entry: <
texi_entry: <
- element_href: sing.info#filecmd
+ element_href: sing.htm#filecmd
element_text: filecmd
key: <=
- origin_href: sing.info#index-_003c_003d
+ origin_href: sing.htm#index-_003c_003d
entry: <=
texi_entry: <=
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: <=
- origin_href: sing.info#index-_003c_003d-1
+ origin_href: sing.htm#index-_003c_003d-1
entry: <=
texi_entry: <=
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: <>
- origin_href: sing.info#index-_003c_003e
+ origin_href: sing.htm#index-_003c_003e
entry: <>
texi_entry: <>
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: <>
- origin_href: sing.info#index-_003c_003e-1
+ origin_href: sing.htm#index-_003c_003e-1
entry: <>
texi_entry: <>
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: =
- origin_href: sing.info#index-_003d
+ origin_href: sing.htm#index-_003d
entry: =
texi_entry: =
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ==
- origin_href: sing.info#index-_003d_003d
+ origin_href: sing.htm#index-_003d_003d
entry: ==
texi_entry: ==
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ==
- origin_href: sing.info#index-_003d_003d-1
+ origin_href: sing.htm#index-_003d_003d-1
entry: ==
texi_entry: ==
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: >
- origin_href: sing.info#index-_003e
+ origin_href: sing.htm#index-_003e
entry: >
texi_entry: >
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: >=
- origin_href: sing.info#index-_003e_003d
+ origin_href: sing.htm#index-_003e_003d
entry: >=
texi_entry: >=
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: >=
- origin_href: sing.info#index-_003e_003d-1
+ origin_href: sing.htm#index-_003e_003d-1
entry: >=
texi_entry: >=
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: ?
- origin_href: sing.info#index-_003f
+ origin_href: sing.htm#index-_003f
entry: ?
texi_entry: ?
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ?
- origin_href: sing.info#index-_003f-1
+ origin_href: sing.htm#index-_003f-1
entry: ?
texi_entry: ?
- element_href: sing.info#help
+ element_href: sing.htm#help
element_text: help
key: [
- origin_href: sing.info#index-_005b
+ origin_href: sing.htm#index-_005b
entry: [
texi_entry: [
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: \
- origin_href: sing.info#index-_005c
+ origin_href: sing.htm#index-_005c
entry: \
texi_entry: \
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ]
- origin_href: sing.info#index-_005d
+ origin_href: sing.htm#index-_005d
entry: ]
texi_entry: ]
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ^
- origin_href: sing.info#index-_005e
+ origin_href: sing.htm#index-_005e
entry: ^
texi_entry: ^
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: _
- origin_href: sing.info#index-_005f
+ origin_href: sing.htm#index-_005f
entry: _
texi_entry: _
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: `
- origin_href: sing.info#index-_0060
+ origin_href: sing.htm#index-_0060
entry: `
texi_entry: `
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ||
- origin_href: sing.info#index-_007c_007c
+ origin_href: sing.htm#index-_007c_007c
entry: ||
texi_entry: ||
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ||
- origin_href: sing.info#index-_007c_007c-1
+ origin_href: sing.htm#index-_007c_007c-1
entry: ||
texi_entry: ||
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: ~
- origin_href: sing.info#index-_007e
+ origin_href: sing.htm#index-_007e
entry: ~
texi_entry: ~
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: ~
- origin_href: sing.info#index-_007e-1
+ origin_href: sing.htm#index-_007e-1
entry: ~
texi_entry: ~
- element_href: sing.info#g_t_007e
+ element_href: sing.htm#g_t_007e
element_text: ~
key: a, ordering
- origin_href: sing.info#index-a_002c-ordering
+ origin_href: sing.htm#index-a_002c-ordering
entry: a, ordering
texi_entry: a, ordering
- element_href: sing.info#Extra-weight-vector
+ element_href: sing.htm#Extra-weight-vector
element_text: Extra weight vector
key: absValue
- origin_href: sing.info#index-absValue
+ origin_href: sing.htm#index-absValue
entry: absValue
texi_entry: absValue
- element_href: sing.info#absValue
+ element_href: sing.htm#absValue
element_text: absValue
key: actionIsProper
- origin_href: sing.info#index-actionIsProper
+ origin_href: sing.htm#index-actionIsProper
entry: actionIsProper
texi_entry: actionIsProper
- element_href: sing.info#actionIsProper
+ element_href: sing.htm#actionIsProper
element_text: actionIsProper
key: addcol
- origin_href: sing.info#index-addcol
+ origin_href: sing.htm#index-addcol
entry: addcol
texi_entry: addcol
- element_href: sing.info#addcol
+ element_href: sing.htm#addcol
element_text: addcol
key: addrow
- origin_href: sing.info#index-addrow
+ origin_href: sing.htm#index-addrow
entry: addrow
texi_entry: addrow
- element_href: sing.info#addrow
+ element_href: sing.htm#addrow
element_text: addrow
key: adjoint
- origin_href: sing.info#index-adjoint
+ origin_href: sing.htm#index-adjoint
entry: adjoint
texi_entry: adjoint
- element_href: sing.info#adjoint
+ element_href: sing.htm#adjoint
element_text: adjoint
key: adjunction divisor
- origin_href: sing.info#index-adjunction-divisor
+ origin_href: sing.htm#index-adjunction-divisor
entry: adjunction divisor
texi_entry: adjunction divisor
- element_href: sing.info#Adj_005fdiv
+ element_href: sing.htm#Adj_005fdiv
element_text: Adj_div
key: Adj_div
- origin_href: sing.info#index-Adj_005fdiv
+ origin_href: sing.htm#index-Adj_005fdiv
entry: Adj_div
texi_entry: Adj_div
- element_href: sing.info#Adj_005fdiv
+ element_href: sing.htm#Adj_005fdiv
element_text: Adj_div
key: AGcode_L
- origin_href: sing.info#index-AGcode_005fL
+ origin_href: sing.htm#index-AGcode_005fL
entry: AGcode_L
texi_entry: AGcode_L
- element_href: sing.info#AGcode_005fL
+ element_href: sing.htm#AGcode_005fL
element_text: AGcode_L
key: AGcode_Omega
- origin_href: sing.info#index-AGcode_005fOmega
+ origin_href: sing.htm#index-AGcode_005fOmega
entry: AGcode_Omega
texi_entry: AGcode_Omega
- element_href: sing.info#AGcode_005fOmega
+ element_href: sing.htm#AGcode_005fOmega
element_text: AGcode_Omega
key: ainvar.lib
- origin_href: sing.info#index-ainvar_002elib
+ origin_href: sing.htm#index-ainvar_002elib
entry: ainvar.lib
texi_entry: ainvar.lib
- element_href: sing.info#ainvar_005flib
+ element_href: sing.htm#ainvar_005flib
element_text: ainvar_lib
key: ainvar_lib
- origin_href: sing.info#index-ainvar_005flib
+ origin_href: sing.htm#index-ainvar_005flib
entry: ainvar_lib
texi_entry: ainvar_lib
- element_href: sing.info#ainvar_005flib
+ element_href: sing.htm#ainvar_005flib
element_text: ainvar_lib
key: algDependent
- origin_href: sing.info#index-algDependent
+ origin_href: sing.htm#index-algDependent
entry: algDependent
texi_entry: algDependent
- element_href: sing.info#algDependent
+ element_href: sing.htm#algDependent
element_text: algDependent
key: algebra.lib
- origin_href: sing.info#index-algebra_002elib
+ origin_href: sing.htm#index-algebra_002elib
entry: algebra.lib
texi_entry: algebra.lib
- element_href: sing.info#algebra_005flib
+ element_href: sing.htm#algebra_005flib
element_text: algebra_lib
key: Algebraic dependence
- origin_href: sing.info#index-Algebraic-dependence
+ origin_href: sing.htm#index-Algebraic-dependence
entry: Algebraic dependence
texi_entry: Algebraic dependence
- element_href: sing.info#Algebraic-dependence
+ element_href: sing.htm#Algebraic-dependence
element_text: Algebraic dependence
key: algebraic field extension
- origin_href: sing.info#index-algebraic-field-extension
+ origin_href: sing.htm#index-algebraic-field-extension
entry: algebraic field extension
texi_entry: algebraic field extension
- element_href: sing.info#splitring
+ element_href: sing.htm#splitring
element_text: splitring
key: Algebraic Geometry codes
- origin_href: sing.info#index-Algebraic-Geometry-codes
+ origin_href: sing.htm#index-Algebraic-Geometry-codes
entry: Algebraic Geometry codes
texi_entry: Algebraic Geometry codes
- element_href: sing.info#brnoeth_005flib
+ element_href: sing.htm#brnoeth_005flib
element_text: brnoeth_lib
key: algebra_containment
- origin_href: sing.info#index-algebra_005fcontainment
+ origin_href: sing.htm#index-algebra_005fcontainment
entry: algebra_containment
texi_entry: algebra_containment
- element_href: sing.info#algebra_005fcontainment
+ element_href: sing.htm#algebra_005fcontainment
element_text: algebra_containment
key: algebra_lib
- origin_href: sing.info#index-algebra_005flib
+ origin_href: sing.htm#index-algebra_005flib
entry: algebra_lib
texi_entry: algebra_lib
- element_href: sing.info#algebra_005flib
+ element_href: sing.htm#algebra_005flib
element_text: algebra_lib
key: algorithm of Bigatti, La Scala and Robbiano
- origin_href: sing.info#index-algorithm-of-Bigatti_002c-La-Scala-and-Robbiano
+ origin_href: sing.htm#index-algorithm-of-Bigatti_002c-La-Scala-and-Robbiano
entry: algorithm of Bigatti, La Scala and Robbiano
texi_entry: algorithm of Bigatti, La Scala and Robbiano
- element_href: sing.info#Bigatti-and-La-Scala-and-Robbiano
+ element_href: sing.htm#Bigatti-and-La-Scala-and-Robbiano
element_text: Bigatti and La Scala and Robbiano
key: algorithm of Conti and Traverso
- origin_href: sing.info#index-algorithm-of-Conti-and-Traverso
+ origin_href: sing.htm#index-algorithm-of-Conti-and-Traverso
entry: algorithm of Conti and Traverso
texi_entry: algorithm of Conti and Traverso
- element_href: sing.info#Conti-and-Traverso
+ element_href: sing.htm#Conti-and-Traverso
element_text: Conti and Traverso
key: algorithm of Di Biase and Urbanke
- origin_href: sing.info#index-algorithm-of-Di-Biase-and-Urbanke
+ origin_href: sing.htm#index-algorithm-of-Di-Biase-and-Urbanke
entry: algorithm of Di Biase and Urbanke
texi_entry: algorithm of Di Biase and Urbanke
- element_href: sing.info#Di-Biase-and-Urbanke
+ element_href: sing.htm#Di-Biase-and-Urbanke
element_text: Di Biase and Urbanke
key: algorithm of Hosten and Sturmfels
- origin_href: sing.info#index-algorithm-of-Hosten-and-Sturmfels
+ origin_href: sing.htm#index-algorithm-of-Hosten-and-Sturmfels
entry: algorithm of Hosten and Sturmfels
texi_entry: algorithm of Hosten and Sturmfels
- element_href: sing.info#Hosten-and-Sturmfels
+ element_href: sing.htm#Hosten-and-Sturmfels
element_text: Hosten and Sturmfels
key: algorithm of Pottier
- origin_href: sing.info#index-algorithm-of-Pottier
+ origin_href: sing.htm#index-algorithm-of-Pottier
entry: algorithm of Pottier
texi_entry: algorithm of Pottier
- element_href: sing.info#Pottier
+ element_href: sing.htm#Pottier
element_text: Pottier
key: alg_kernel
- origin_href: sing.info#index-alg_005fkernel
+ origin_href: sing.htm#index-alg_005fkernel
entry: alg_kernel
texi_entry: alg_kernel
- element_href: sing.info#alg_005fkernel
+ element_href: sing.htm#alg_005fkernel
element_text: alg_kernel
key: all.lib
- origin_href: sing.info#index-all_002elib
+ origin_href: sing.htm#index-all_002elib
entry: all.lib
texi_entry: all.lib
- element_href: sing.info#all_005flib
+ element_href: sing.htm#all_005flib
element_text: all_lib
key: allowing net access
- origin_href: sing.info#index-allowing-net-access
+ origin_href: sing.htm#index-allowing-net-access
entry: allowing net access
texi_entry: allowing net access
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: allprint
- origin_href: sing.info#index-allprint
+ origin_href: sing.htm#index-allprint
entry: allprint
texi_entry: allprint
- element_href: sing.info#allprint
+ element_href: sing.htm#allprint
element_text: allprint
key: allsquarefree
- origin_href: sing.info#index-allsquarefree
+ origin_href: sing.htm#index-allsquarefree
entry: allsquarefree
texi_entry: allsquarefree
- element_href: sing.info#allsquarefree
+ element_href: sing.htm#allsquarefree
element_text: allsquarefree
key: all_lib
- origin_href: sing.info#index-all_005flib
+ origin_href: sing.htm#index-all_005flib
entry: all_lib
texi_entry: all_lib
- element_href: sing.info#all_005flib
+ element_href: sing.htm#all_005flib
element_text: all_lib
key: and
- origin_href: sing.info#index-and
+ origin_href: sing.htm#index-and
entry: and
texi_entry: and
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: and
- origin_href: sing.info#index-and-1
+ origin_href: sing.htm#index-and-1
entry: and
texi_entry: and
- element_href: sing.info#Evaluation-of-logical-expressions
+ element_href: sing.htm#Evaluation-of-logical-expressions
element_text: Evaluation of logical expressions
key: Ann
- origin_href: sing.info#index-Ann
+ origin_href: sing.htm#index-Ann
entry: Ann
texi_entry: Ann
- element_href: sing.info#Ann
+ element_href: sing.htm#Ann
element_text: Ann
key: annil
- origin_href: sing.info#index-annil
+ origin_href: sing.htm#index-annil
entry: annil
texi_entry: annil
- element_href: sing.info#annil
+ element_href: sing.htm#annil
element_text: annil
key: ArnoldAction
- origin_href: sing.info#index-ArnoldAction
+ origin_href: sing.htm#index-ArnoldAction
entry: ArnoldAction
texi_entry: ArnoldAction
- element_href: sing.info#ArnoldAction
+ element_href: sing.htm#ArnoldAction
element_text: ArnoldAction
key: ASCII
- origin_href: sing.info#index-ASCII
+ origin_href: sing.htm#index-ASCII
entry: ASCII
texi_entry: ASCII
- element_href: sing.info#ASCII
+ element_href: sing.htm#ASCII
element_text: ASCII
key: ASCII links
- origin_href: sing.info#index-ASCII-links
+ origin_href: sing.htm#index-ASCII-links
entry: ASCII links
texi_entry: ASCII links
- element_href: sing.info#ASCII-links
+ element_href: sing.htm#ASCII-links
element_text: ASCII links
key: attrib
- origin_href: sing.info#index-attrib
+ origin_href: sing.htm#index-attrib
entry: attrib
texi_entry: attrib
- element_href: sing.info#attrib
+ element_href: sing.htm#attrib
element_text: attrib
key: A_L
- origin_href: sing.info#index-A_005fL
+ origin_href: sing.htm#index-A_005fL
entry: A_L
texi_entry: A_L
- element_href: sing.info#A_005fL
+ element_href: sing.htm#A_005fL
element_text: A_L
key: A_Z
- origin_href: sing.info#index-A_005fZ
+ origin_href: sing.htm#index-A_005fZ
entry: A_Z
texi_entry: A_Z
- element_href: sing.info#A_005fZ
+ element_href: sing.htm#A_005fZ
element_text: A_Z
key: Bachmann, Olaf
- origin_href: sing.info#index-Bachmann_002c-Olaf
+ origin_href: sing.htm#index-Bachmann_002c-Olaf
entry: Bachmann, Olaf
texi_entry: Bachmann, Olaf
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Background
- origin_href: sing.info#index-Background
+ origin_href: sing.htm#index-Background
entry: Background
texi_entry: Background
- element_href: sing.info#Background
+ element_href: sing.htm#Background
element_text: Background
key: bareiss
- origin_href: sing.info#index-bareiss
+ origin_href: sing.htm#index-bareiss
entry: bareiss
texi_entry: bareiss
- element_href: sing.info#bareiss
+ element_href: sing.htm#bareiss
element_text: bareiss
key: basicinvariants
- origin_href: sing.info#index-basicinvariants
+ origin_href: sing.htm#index-basicinvariants
entry: basicinvariants
texi_entry: basicinvariants
- element_href: sing.info#basicinvariants
+ element_href: sing.htm#basicinvariants
element_text: basicinvariants
key: bernstein
- origin_href: sing.info#index-bernstein
+ origin_href: sing.htm#index-bernstein
entry: bernstein
texi_entry: bernstein
- element_href: sing.info#bernstein
+ element_href: sing.htm#bernstein
element_text: bernstein
key: Bernstein polynomial
- origin_href: sing.info#index-Bernstein-polynomial
+ origin_href: sing.htm#index-Bernstein-polynomial
entry: Bernstein polynomial
texi_entry: Bernstein polynomial
- element_href: sing.info#bernstein
+ element_href: sing.htm#bernstein
element_text: bernstein
key: betti
- origin_href: sing.info#index-betti
+ origin_href: sing.htm#index-betti
entry: betti
texi_entry: betti
- element_href: sing.info#betti
+ element_href: sing.htm#betti
element_text: betti
key: Betti number
- origin_href: sing.info#index-Betti-number
+ origin_href: sing.htm#index-Betti-number
entry: Betti number
texi_entry: Betti number
- element_href: sing.info#Betti-numbers-and-regularity
+ element_href: sing.htm#Betti-numbers-and-regularity
element_text: Betti numbers and regularity
key: Bigatti-La Scala-Robbiano algorithm
- origin_href: sing.info#index-Bigatti_002dLa-Scala_002dRobbiano-algorithm
+ origin_href: sing.htm#index-Bigatti_002dLa-Scala_002dRobbiano-algorithm
entry: Bigatti-La Scala-Robbiano algorithm
texi_entry: Bigatti-La Scala-Robbiano algorithm
- element_href: sing.info#Bigatti-and-La-Scala-and-Robbiano
+ element_href: sing.htm#Bigatti-and-La-Scala-and-Robbiano
element_text: Bigatti and La Scala and Robbiano
key: BinDir
- origin_href: sing.info#index-BinDir
+ origin_href: sing.htm#index-BinDir
entry: BinDir
texi_entry: BinDir
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: binomial
- origin_href: sing.info#index-binomial
+ origin_href: sing.htm#index-binomial
entry: binomial
texi_entry: binomial
- element_href: sing.info#binomial
+ element_href: sing.htm#binomial
element_text: binomial
key: block
- origin_href: sing.info#index-block
+ origin_href: sing.htm#index-block
entry: block
texi_entry: block
- element_href: sing.info#Flow-control
+ element_href: sing.htm#Flow-control
element_text: Flow control
key: block
- origin_href: sing.info#index-block-1
+ origin_href: sing.htm#index-block-1
entry: block
texi_entry: block
- element_href: sing.info#Control-structures
+ element_href: sing.htm#Control-structures
element_text: Control structures
key: blowup0
- origin_href: sing.info#index-blowup0
+ origin_href: sing.htm#index-blowup0
entry: blowup0
texi_entry: blowup0
- element_href: sing.info#blowup0
+ element_href: sing.htm#blowup0
element_text: blowup0
key: boolean expressions
- origin_href: sing.info#index-boolean-expressions
+ origin_href: sing.htm#index-boolean-expressions
entry: boolean expressions
texi_entry: boolean expressions
- element_href: sing.info#boolean-expressions
+ element_href: sing.htm#boolean-expressions
element_text: boolean expressions
key: boolean operations
- origin_href: sing.info#index-boolean-operations
+ origin_href: sing.htm#index-boolean-operations
entry: boolean operations
texi_entry: boolean operations
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: bracket
- origin_href: sing.info#index-bracket
+ origin_href: sing.htm#index-bracket
entry: bracket
texi_entry: bracket
- element_href: sing.info#Usage-of-brackets
+ element_href: sing.htm#Usage-of-brackets
element_text: Usage of brackets
key: Branches of an Isolated Space Curve Singularity
- origin_href: sing.info#index-Branches-of-an-Isolated-Space-Curve-Singularity
+ origin_href: sing.htm#index-Branches-of-an-Isolated-Space-Curve-Singularity
entry: Branches of an Isolated Space Curve Singularity
texi_entry: Branches of an Isolated Space Curve Singularity
- element_href: sing.info#Branches-of-an-Isolated-Space-Curve-Singularity
+ element_href: sing.htm#Branches-of-an-Isolated-Space-Curve-Singularity
element_text: Branches of an Isolated Space Curve Singularity
key: break
- origin_href: sing.info#index-break
+ origin_href: sing.htm#index-break
entry: break
texi_entry: break
- element_href: sing.info#break
+ element_href: sing.htm#break
element_text: break
key: break point
- origin_href: sing.info#index-break-point
+ origin_href: sing.htm#index-break-point
entry: break point
texi_entry: break point
- element_href: sing.info#g_t_007e
+ element_href: sing.htm#g_t_007e
element_text: ~
key: breakpoint
- origin_href: sing.info#index-breakpoint
+ origin_href: sing.htm#index-breakpoint
entry: breakpoint
texi_entry: breakpoint
- element_href: sing.info#breakpoint
+ element_href: sing.htm#breakpoint
element_text: breakpoint
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice
+ origin_href: sing.htm#index-Brieskorn-lattice
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-1
+ origin_href: sing.htm#index-Brieskorn-lattice-1
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#gmsring
+ element_href: sing.htm#gmsring
element_text: gmsring
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-2
+ origin_href: sing.htm#index-Brieskorn-lattice-2
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#gmsnf
+ element_href: sing.htm#gmsnf
element_text: gmsnf
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-3
+ origin_href: sing.htm#index-Brieskorn-lattice-3
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#gmscoeffs
+ element_href: sing.htm#gmscoeffs
element_text: gmscoeffs
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-4
+ origin_href: sing.htm#index-Brieskorn-lattice-4
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#bernstein
+ element_href: sing.htm#bernstein
element_text: bernstein
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-5
+ origin_href: sing.htm#index-Brieskorn-lattice-5
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#monodromy
+ element_href: sing.htm#monodromy
element_text: monodromy
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-6
+ origin_href: sing.htm#index-Brieskorn-lattice-6
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-7
+ origin_href: sing.htm#index-Brieskorn-lattice-7
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-8
+ origin_href: sing.htm#index-Brieskorn-lattice-8
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-9
+ origin_href: sing.htm#index-Brieskorn-lattice-9
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-10
+ origin_href: sing.htm#index-Brieskorn-lattice-10
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-11
+ origin_href: sing.htm#index-Brieskorn-lattice-11
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: Brieskorn lattice
- origin_href: sing.info#index-Brieskorn-lattice-12
+ origin_href: sing.htm#index-Brieskorn-lattice-12
entry: Brieskorn lattice
texi_entry: Brieskorn lattice
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: Brill-Noether algorithm
- origin_href: sing.info#index-Brill_002dNoether-algorithm
+ origin_href: sing.htm#index-Brill_002dNoether-algorithm
entry: Brill-Noether algorithm
texi_entry: Brill-Noether algorithm
- element_href: sing.info#brnoeth_005flib
+ element_href: sing.htm#brnoeth_005flib
element_text: brnoeth_lib
key: BrillNoether
- origin_href: sing.info#index-BrillNoether
+ origin_href: sing.htm#index-BrillNoether
entry: BrillNoether
texi_entry: BrillNoether
- element_href: sing.info#BrillNoether
+ element_href: sing.htm#BrillNoether
element_text: BrillNoether
key: brnoeth.lib
- origin_href: sing.info#index-brnoeth_002elib
+ origin_href: sing.htm#index-brnoeth_002elib
entry: brnoeth.lib
texi_entry: brnoeth.lib
- element_href: sing.info#brnoeth_005flib
+ element_href: sing.htm#brnoeth_005flib
element_text: brnoeth_lib
key: brnoeth_lib
- origin_href: sing.info#index-brnoeth_005flib
+ origin_href: sing.htm#index-brnoeth_005flib
entry: brnoeth_lib
texi_entry: brnoeth_lib
- element_href: sing.info#brnoeth_005flib
+ element_href: sing.htm#brnoeth_005flib
element_text: brnoeth_lib
key: browser, command line option
- origin_href: sing.info#index-browser_002c-command-line-option
+ origin_href: sing.htm#index-browser_002c-command-line-option
entry: browser, command line option
texi_entry: browser, command line option
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: browser, setting the
- origin_href: sing.info#index-browser_002c-setting-the
+ origin_href: sing.htm#index-browser_002c-setting-the
entry: browser, setting the
texi_entry: browser, setting the
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: browsers
- origin_href: sing.info#index-browsers
+ origin_href: sing.htm#index-browsers
entry: browsers
texi_entry: browsers
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: browsers, setting the
- origin_href: sing.info#index-browsers_002c-setting-the
+ origin_href: sing.htm#index-browsers_002c-setting-the
entry: browsers, setting the
texi_entry: browsers, setting the
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: Buchberger algorithm for toric ideals
- origin_href: sing.info#index-Buchberger-algorithm-for-toric-ideals
+ origin_href: sing.htm#index-Buchberger-algorithm-for-toric-ideals
entry: Buchberger algorithm for toric ideals
texi_entry: Buchberger algorithm for toric ideals
- element_href: sing.info#Buchberger-algorithm
+ element_href: sing.htm#Buchberger-algorithm
element_text: Buchberger algorithm
key: bug, ESingular
- origin_href: sing.info#index-bug_002c-ESingular
+ origin_href: sing.htm#index-bug_002c-ESingular
entry: bug, ESingular
texi_entry: bug, ESingular
- element_href: sing.info#Troubleshooting
+ element_href: sing.htm#Troubleshooting
element_text: Troubleshooting
key: busadj
- origin_href: sing.info#index-busadj
+ origin_href: sing.htm#index-busadj
entry: busadj
texi_entry: busadj
- element_href: sing.info#busadj
+ element_href: sing.htm#busadj
element_text: busadj
key: C programming language
- origin_href: sing.info#index-C-programming-language
+ origin_href: sing.htm#index-C-programming-language
entry: C programming language
texi_entry: C programming language
- element_href: sing.info#Major-differences-to-the-C-programming-language
+ element_href: sing.htm#Major-differences-to-the-C-programming-language
element_text: Major differences to the C programming language
key: C, module ordering
- origin_href: sing.info#index-C_002c-module-ordering
+ origin_href: sing.htm#index-C_002c-module-ordering
entry: C, module ordering
texi_entry: C, module ordering
- element_href: sing.info#Module-orderings
+ element_href: sing.htm#Module-orderings
element_text: Module orderings
key: c, module ordering
- origin_href: sing.info#index-c_002c-module-ordering
+ origin_href: sing.htm#index-c_002c-module-ordering
entry: c, module ordering
texi_entry: c, module ordering
- element_href: sing.info#Module-orderings
+ element_href: sing.htm#Module-orderings
element_text: Module orderings
key: case
- origin_href: sing.info#index-case
+ origin_href: sing.htm#index-case
entry: case
texi_entry: case
- element_href: sing.info#No-case-or-switch-statement
+ element_href: sing.htm#No-case-or-switch-statement
element_text: No case or switch statement
key: category in a library
- origin_href: sing.info#index-category-in-a-library
+ origin_href: sing.htm#index-category-in-a-library
entry: category in a library
texi_entry: category in a library
- element_href: sing.info#Format-of-a-library
+ element_href: sing.htm#Format-of-a-library
element_text: Format of a library
key: Change of rings
- origin_href: sing.info#index-Change-of-rings
+ origin_href: sing.htm#index-Change-of-rings
entry: Change of rings
texi_entry: Change of rings
- element_href: sing.info#Change-of-rings
+ element_href: sing.htm#Change-of-rings
element_text: Change of rings
key: changechar
- origin_href: sing.info#index-changechar
+ origin_href: sing.htm#index-changechar
entry: changechar
texi_entry: changechar
- element_href: sing.info#changechar
+ element_href: sing.htm#changechar
element_text: changechar
key: changeord
- origin_href: sing.info#index-changeord
+ origin_href: sing.htm#index-changeord
entry: changeord
texi_entry: changeord
- element_href: sing.info#changeord
+ element_href: sing.htm#changeord
element_text: changeord
key: changes
- origin_href: sing.info#index-changes
+ origin_href: sing.htm#index-changes
entry: changes
texi_entry: changes
- element_href: sing.info#News-and-changes
+ element_href: sing.htm#News-and-changes
element_text: News and changes
key: changevar
- origin_href: sing.info#index-changevar
+ origin_href: sing.htm#index-changevar
entry: changevar
texi_entry: changevar
- element_href: sing.info#changevar
+ element_href: sing.htm#changevar
element_text: changevar
key: char
- origin_href: sing.info#index-char
+ origin_href: sing.htm#index-char
entry: char
texi_entry: char
- element_href: sing.info#char
+ element_href: sing.htm#char
element_text: char
key: characteristic exponents
- origin_href: sing.info#index-characteristic-exponents
+ origin_href: sing.htm#index-characteristic-exponents
entry: characteristic exponents
texi_entry: characteristic exponents
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: Characteristic sets
- origin_href: sing.info#index-Characteristic-sets
+ origin_href: sing.htm#index-Characteristic-sets
entry: Characteristic sets
texi_entry: Characteristic sets
- element_href: sing.info#Characteristic-sets
+ element_href: sing.htm#Characteristic-sets
element_text: Characteristic sets
key: charpoly
- origin_href: sing.info#index-charpoly
+ origin_href: sing.htm#index-charpoly
entry: charpoly
texi_entry: charpoly
- element_href: sing.info#charpoly
+ element_href: sing.htm#charpoly
element_text: charpoly
key: charstr
- origin_href: sing.info#index-charstr
+ origin_href: sing.htm#index-charstr
entry: charstr
texi_entry: charstr
- element_href: sing.info#charstr
+ element_href: sing.htm#charstr
element_text: charstr
key: char_series
- origin_href: sing.info#index-char_005fseries
+ origin_href: sing.htm#index-char_005fseries
entry: char_series
texi_entry: char_series
- element_href: sing.info#char_005fseries
+ element_href: sing.htm#char_005fseries
element_text: char_series
key: Classification
- origin_href: sing.info#index-Classification
+ origin_href: sing.htm#index-Classification
entry: Classification
texi_entry: Classification
- element_href: sing.info#Classification
+ element_href: sing.htm#Classification
element_text: Classification
key: classify
- origin_href: sing.info#index-classify
+ origin_href: sing.htm#index-classify
entry: classify
texi_entry: classify
- element_href: sing.info#classify
+ element_href: sing.htm#classify
element_text: classify
key: classify.lib
- origin_href: sing.info#index-classify_002elib
+ origin_href: sing.htm#index-classify_002elib
entry: classify.lib
texi_entry: classify.lib
- element_href: sing.info#classify_005flib
+ element_href: sing.htm#classify_005flib
element_text: classify_lib
key: classify_lib
- origin_href: sing.info#index-classify_005flib
+ origin_href: sing.htm#index-classify_005flib
entry: classify_lib
texi_entry: classify_lib
- element_href: sing.info#classify_005flib
+ element_href: sing.htm#classify_005flib
element_text: classify_lib
key: cleardenom
- origin_href: sing.info#index-cleardenom
+ origin_href: sing.htm#index-cleardenom
entry: cleardenom
texi_entry: cleardenom
- element_href: sing.info#cleardenom
+ element_href: sing.htm#cleardenom
element_text: cleardenom
key: close
- origin_href: sing.info#index-close
+ origin_href: sing.htm#index-close
entry: close
texi_entry: close
- element_href: sing.info#close
+ element_href: sing.htm#close
element_text: close
key: closed_points
- origin_href: sing.info#index-closed_005fpoints
+ origin_href: sing.htm#index-closed_005fpoints
entry: closed_points
texi_entry: closed_points
- element_href: sing.info#closed_005fpoints
+ element_href: sing.htm#closed_005fpoints
element_text: closed_points
key: closetex
- origin_href: sing.info#index-closetex
+ origin_href: sing.htm#index-closetex
entry: closetex
texi_entry: closetex
- element_href: sing.info#closetex
+ element_href: sing.htm#closetex
element_text: closetex
key: closureFrac
- origin_href: sing.info#index-closureFrac
+ origin_href: sing.htm#index-closureFrac
entry: closureFrac
texi_entry: closureFrac
- element_href: sing.info#closureFrac
+ element_href: sing.htm#closureFrac
element_text: closureFrac
key: closureRingtower
- origin_href: sing.info#index-closureRingtower
+ origin_href: sing.htm#index-closureRingtower
entry: closureRingtower
texi_entry: closureRingtower
- element_href: sing.info#closureRingtower
+ element_href: sing.htm#closureRingtower
element_text: closureRingtower
key: clrSBmod
- origin_href: sing.info#index-clrSBmod
+ origin_href: sing.htm#index-clrSBmod
entry: clrSBmod
texi_entry: clrSBmod
- element_href: sing.info#clrSBmod
+ element_href: sing.htm#clrSBmod
element_text: clrSBmod
key: CMtype
- origin_href: sing.info#index-CMtype
+ origin_href: sing.htm#index-CMtype
entry: CMtype
texi_entry: CMtype
- element_href: sing.info#CMtype
+ element_href: sing.htm#CMtype
element_text: CMtype
key: Coding theory
- origin_href: sing.info#index-Coding-theory
+ origin_href: sing.htm#index-Coding-theory
entry: Coding theory
texi_entry: Coding theory
- element_href: sing.info#Coding-theory
+ element_href: sing.htm#Coding-theory
element_text: Coding theory
key: coef
- origin_href: sing.info#index-coef
+ origin_href: sing.htm#index-coef
entry: coef
texi_entry: coef
- element_href: sing.info#coef
+ element_href: sing.htm#coef
element_text: coef
key: coefficient field
- origin_href: sing.info#index-coefficient-field
+ origin_href: sing.htm#index-coefficient-field
entry: coefficient field
texi_entry: coefficient field
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: coeffs
- origin_href: sing.info#index-coeffs
+ origin_href: sing.htm#index-coeffs
entry: coeffs
texi_entry: coeffs
- element_href: sing.info#coeffs
+ element_href: sing.htm#coeffs
element_text: coeffs
key: colred
- origin_href: sing.info#index-colred
+ origin_href: sing.htm#index-colred
entry: colred
texi_entry: colred
- element_href: sing.info#colred
+ element_href: sing.htm#colred
element_text: colred
key: comma
- origin_href: sing.info#index-comma
+ origin_href: sing.htm#index-comma
entry: comma
texi_entry: comma
- element_href: sing.info#Usage-of-commas
+ element_href: sing.htm#Usage-of-commas
element_text: Usage of commas
key: Command line options
- origin_href: sing.info#index-Command-line-options
+ origin_href: sing.htm#index-Command-line-options
entry: Command line options
texi_entry: Command line options
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: command-line option, setting value of
- origin_href: sing.info#index-command_002dline-option_002c-setting-value-of
+ origin_href: sing.htm#index-command_002dline-option_002c-setting-value-of
entry: command-line option, setting value of
texi_entry: command-line option, setting value of
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: command-line option, value of
- origin_href: sing.info#index-command_002dline-option_002c-value-of
+ origin_href: sing.htm#index-command_002dline-option_002c-value-of
entry: command-line option, value of
texi_entry: command-line option, value of
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: command-line options, print all values of
- origin_href:
sing.info#index-command_002dline-options_002c-print-all-values-of
+ origin_href: sing.htm#index-command_002dline-options_002c-print-all-values-of
entry: command-line options, print all values of
texi_entry: command-line options, print all values of
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: command-line options, short help
- origin_href: sing.info#index-command_002dline-options_002c-short-help
+ origin_href: sing.htm#index-command_002dline-options_002c-short-help
entry: command-line options, short help
texi_entry: command-line options, short help
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: Commands
- origin_href: sing.info#index-Commands
+ origin_href: sing.htm#index-Commands
entry: Commands
texi_entry: Commands
- element_href: sing.info#Functions-and-system-variables
+ element_href: sing.htm#Functions-and-system-variables
element_text: Functions and system variables
key: Commutative algebra
- origin_href: sing.info#index-Commutative-algebra
+ origin_href: sing.htm#index-Commutative-algebra
entry: Commutative algebra
texi_entry: Commutative algebra
- element_href: sing.info#Commutative-algebra
+ element_href: sing.htm#Commutative-algebra
element_text: Commutative algebra
key: completeReduction
- origin_href: sing.info#index-completeReduction
+ origin_href: sing.htm#index-completeReduction
entry: completeReduction
texi_entry: completeReduction
- element_href: sing.info#completeReduction
+ element_href: sing.htm#completeReduction
element_text: completeReduction
key: complex
- origin_href: sing.info#index-complex
+ origin_href: sing.htm#index-complex
entry: complex
texi_entry: complex
- element_href: sing.info#Rings-and-orderings
+ element_href: sing.htm#Rings-and-orderings
element_text: Rings and orderings
key: Components of Windows installation
- origin_href: sing.info#index-Components-of-Windows-installation
+ origin_href: sing.htm#index-Components-of-Windows-installation
entry: Components of Windows installation
texi_entry: Components of Windows installation
- element_href: sing.info#Installation-preliminaries
+ element_href: sing.htm#Installation-preliminaries
element_text: Installation preliminaries
key: compress
- origin_href: sing.info#index-compress
+ origin_href: sing.htm#index-compress
entry: compress
texi_entry: compress
- element_href: sing.info#compress
+ element_href: sing.htm#compress
element_text: compress
key: concat
- origin_href: sing.info#index-concat
+ origin_href: sing.htm#index-concat
entry: concat
texi_entry: concat
- element_href: sing.info#concat
+ element_href: sing.htm#concat
element_text: concat
key: conductor, degree
- origin_href: sing.info#index-conductor_002c-degree
+ origin_href: sing.htm#index-conductor_002c-degree
entry: conductor, degree
texi_entry: conductor, degree
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: ContainedQ
- origin_href: sing.info#index-ContainedQ
+ origin_href: sing.htm#index-ContainedQ
entry: ContainedQ
texi_entry: ContainedQ
- element_href: sing.info#ContainedQ
+ element_href: sing.htm#ContainedQ
element_text: ContainedQ
key: content
- origin_href: sing.info#index-content
+ origin_href: sing.htm#index-content
entry: content
texi_entry: content
- element_href: sing.info#content
+ element_href: sing.htm#content
element_text: content
key: Conti-Traverso algorithm
- origin_href: sing.info#index-Conti_002dTraverso-algorithm
+ origin_href: sing.htm#index-Conti_002dTraverso-algorithm
entry: Conti-Traverso algorithm
texi_entry: Conti-Traverso algorithm
- element_href: sing.info#Conti-and-Traverso
+ element_href: sing.htm#Conti-and-Traverso
element_text: Conti and Traverso
key: continue
- origin_href: sing.info#index-continue
+ origin_href: sing.htm#index-continue
entry: continue
texi_entry: continue
- element_href: sing.info#continue
+ element_href: sing.htm#continue
element_text: continue
key: continue
- origin_href: sing.info#index-continue-1
+ origin_href: sing.htm#index-continue-1
entry: continue
texi_entry: continue
- element_href: sing.info#Behavior-of-continue
+ element_href: sing.htm#Behavior-of-continue
element_text: Behavior of continue
key: contract
- origin_href: sing.info#index-contract
+ origin_href: sing.htm#index-contract
entry: contract
texi_entry: contract
- element_href: sing.info#contract
+ element_href: sing.htm#contract
element_text: contract
key: contributors
- origin_href: sing.info#index-contributors
+ origin_href: sing.htm#index-contributors
entry: contributors
texi_entry: contributors
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: Control structures
- origin_href: sing.info#index-Control-structures
+ origin_href: sing.htm#index-Control-structures
entry: Control structures
texi_entry: Control structures
- element_href: sing.info#Control-structures
+ element_href: sing.htm#Control-structures
element_text: Control structures
key: control_Matrix
- origin_href: sing.info#index-control_005fMatrix
+ origin_href: sing.htm#index-control_005fMatrix
entry: control_Matrix
texi_entry: control_Matrix
- element_href: sing.info#control_005fMatrix
+ element_href: sing.htm#control_005fMatrix
element_text: control_Matrix
key: copyright
- origin_href: sing.info#index-copyright
+ origin_href: sing.htm#index-copyright
entry: copyright
texi_entry: copyright
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: corank
- origin_href: sing.info#index-corank
+ origin_href: sing.htm#index-corank
entry: corank
texi_entry: corank
- element_href: sing.info#corank
+ element_href: sing.htm#corank
element_text: corank
key: Critical points
- origin_href: sing.info#index-Critical-points
+ origin_href: sing.htm#index-Critical-points
entry: Critical points
texi_entry: Critical points
- element_href: sing.info#Critical-points
+ element_href: sing.htm#Critical-points
element_text: Critical points
key: cup
- origin_href: sing.info#index-cup
+ origin_href: sing.htm#index-cup
entry: cup
texi_entry: cup
- element_href: sing.info#cup
+ element_href: sing.htm#cup
element_text: cup
key: cupproduct
- origin_href: sing.info#index-cupproduct
+ origin_href: sing.htm#index-cupproduct
entry: cupproduct
texi_entry: cupproduct
- element_href: sing.info#cupproduct
+ element_href: sing.htm#cupproduct
element_text: cupproduct
key: curve singularities
- origin_href: sing.info#index-curve-singularities
+ origin_href: sing.htm#index-curve-singularities
entry: curve singularities
texi_entry: curve singularities
- element_href: sing.info#hnoether_005flib
+ element_href: sing.htm#hnoether_005flib
element_text: hnoether_lib
key: curve singularities
- origin_href: sing.info#index-curve-singularities-1
+ origin_href: sing.htm#index-curve-singularities-1
entry: curve singularities
texi_entry: curve singularities
- element_href: sing.info#parametrizesing
+ element_href: sing.htm#parametrizesing
element_text: parametrizesing
key: Customization of the Emacs interface
- origin_href: sing.info#index-Customization-of-the-Emacs-interface
+ origin_href: sing.htm#index-Customization-of-the-Emacs-interface
entry: Customization of the Emacs interface
texi_entry: Customization of the Emacs interface
- element_href: sing.info#Customization-of-the-Emacs-interface
+ element_href: sing.htm#Customization-of-the-Emacs-interface
element_text: Customization of the Emacs interface
key: cyclic
- origin_href: sing.info#index-cyclic
+ origin_href: sing.htm#index-cyclic
entry: cyclic
texi_entry: cyclic
- element_href: sing.info#cyclic
+ element_href: sing.htm#cyclic
element_text: cyclic
key: Cyclic roots
- origin_href: sing.info#index-Cyclic-roots
+ origin_href: sing.htm#index-Cyclic-roots
entry: Cyclic roots
texi_entry: Cyclic roots
- element_href: sing.info#Cyclic-roots
+ element_href: sing.htm#Cyclic-roots
element_text: Cyclic roots
key: cyclotomic
- origin_href: sing.info#index-cyclotomic
+ origin_href: sing.htm#index-cyclotomic
entry: cyclotomic
texi_entry: cyclotomic
- element_href: sing.info#cyclotomic
+ element_href: sing.htm#cyclotomic
element_text: cyclotomic
key: Data types
- origin_href: sing.info#index-Data-types
+ origin_href: sing.htm#index-Data-types
entry: Data types
texi_entry: Data types
- element_href: sing.info#Data-types
+ element_href: sing.htm#Data-types
element_text: Data types
key: DBM links
- origin_href: sing.info#index-DBM-links
+ origin_href: sing.htm#index-DBM-links
entry: DBM links
texi_entry: DBM links
- element_href: sing.info#DBM-links
+ element_href: sing.htm#DBM-links
element_text: DBM links
key: dbprint
- origin_href: sing.info#index-dbprint
+ origin_href: sing.htm#index-dbprint
entry: dbprint
texi_entry: dbprint
- element_href: sing.info#dbprint
+ element_href: sing.htm#dbprint
element_text: dbprint
key: debugger
- origin_href: sing.info#index-debugger
+ origin_href: sing.htm#index-debugger
entry: debugger
texi_entry: debugger
- element_href: sing.info#Source-code-debugger
+ element_href: sing.htm#Source-code-debugger
element_text: Source code debugger
key: debugging library code
- origin_href: sing.info#index-debugging-library-code
+ origin_href: sing.htm#index-debugging-library-code
entry: debugging library code
texi_entry: debugging library code
- element_href: sing.info#Source-code-debugger
+ element_href: sing.htm#Source-code-debugger
element_text: Source code debugger
key: Debugging tools
- origin_href: sing.info#index-Debugging-tools
+ origin_href: sing.htm#index-Debugging-tools
entry: Debugging tools
texi_entry: Debugging tools
- element_href: sing.info#Debugging-tools
+ element_href: sing.htm#Debugging-tools
element_text: Debugging tools
key: debugLib, option
- origin_href: sing.info#index-debugLib_002c-option
+ origin_href: sing.htm#index-debugLib_002c-option
entry: debugLib, option
texi_entry: debugLib, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: debug_log
- origin_href: sing.info#index-debug_005flog
+ origin_href: sing.htm#index-debug_005flog
entry: debug_log
texi_entry: debug_log
- element_href: sing.info#debug_005flog
+ element_href: sing.htm#debug_005flog
element_text: debug_log
key: dec1var
- origin_href: sing.info#index-dec1var
+ origin_href: sing.htm#index-dec1var
entry: dec1var
texi_entry: dec1var
- element_href: sing.info#dec1var
+ element_href: sing.htm#dec1var
element_text: dec1var
key: decodeSV
- origin_href: sing.info#index-decodeSV
+ origin_href: sing.htm#index-decodeSV
entry: decodeSV
texi_entry: decodeSV
- element_href: sing.info#decodeSV
+ element_href: sing.htm#decodeSV
element_text: decodeSV
key: def
- origin_href: sing.info#index-def
+ origin_href: sing.htm#index-def
entry: def
texi_entry: def
- element_href: sing.info#def
+ element_href: sing.htm#def
element_text: def
key: def declarations
- origin_href: sing.info#index-def-declarations
+ origin_href: sing.htm#index-def-declarations
entry: def declarations
texi_entry: def declarations
- element_href: sing.info#def-declarations
+ element_href: sing.htm#def-declarations
element_text: def declarations
key: DefaultDir
- origin_href: sing.info#index-DefaultDir
+ origin_href: sing.htm#index-DefaultDir
entry: DefaultDir
texi_entry: DefaultDir
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: defined
- origin_href: sing.info#index-defined
+ origin_href: sing.htm#index-defined
entry: defined
texi_entry: defined
- element_href: sing.info#defined
+ element_href: sing.htm#defined
element_text: defined
key: deform
- origin_href: sing.info#index-deform
+ origin_href: sing.htm#index-deform
entry: deform
texi_entry: deform
- element_href: sing.info#deform
+ element_href: sing.htm#deform
element_text: deform
key: deform.lib
- origin_href: sing.info#index-deform_002elib
+ origin_href: sing.htm#index-deform_002elib
entry: deform.lib
texi_entry: deform.lib
- element_href: sing.info#deform_005flib
+ element_href: sing.htm#deform_005flib
element_text: deform_lib
key: Deformations
- origin_href: sing.info#index-Deformations
+ origin_href: sing.htm#index-Deformations
entry: Deformations
texi_entry: Deformations
- element_href: sing.info#Deformations
+ element_href: sing.htm#Deformations
element_text: Deformations
key: deform_lib
- origin_href: sing.info#index-deform_005flib
+ origin_href: sing.htm#index-deform_005flib
entry: deform_lib
texi_entry: deform_lib
- element_href: sing.info#deform_005flib
+ element_href: sing.htm#deform_005flib
element_text: deform_lib
key: defring
- origin_href: sing.info#index-defring
+ origin_href: sing.htm#index-defring
entry: defring
texi_entry: defring
- element_href: sing.info#defring
+ element_href: sing.htm#defring
element_text: defring
key: defringp
- origin_href: sing.info#index-defringp
+ origin_href: sing.htm#index-defringp
entry: defringp
texi_entry: defringp
- element_href: sing.info#defringp
+ element_href: sing.htm#defringp
element_text: defringp
key: defrings
- origin_href: sing.info#index-defrings
+ origin_href: sing.htm#index-defrings
entry: defrings
texi_entry: defrings
- element_href: sing.info#defrings
+ element_href: sing.htm#defrings
element_text: defrings
key: deg
- origin_href: sing.info#index-deg
+ origin_href: sing.htm#index-deg
entry: deg
texi_entry: deg
- element_href: sing.info#deg
+ element_href: sing.htm#deg
element_text: deg
key: degBound
- origin_href: sing.info#index-degBound
+ origin_href: sing.htm#index-degBound
entry: degBound
texi_entry: degBound
- element_href: sing.info#degBound
+ element_href: sing.htm#degBound
element_text: degBound
key: degree
- origin_href: sing.info#index-degree
+ origin_href: sing.htm#index-degree
entry: degree
texi_entry: degree
- element_href: sing.info#degree
+ element_href: sing.htm#degree
element_text: degree
key: degree
- origin_href: sing.info#index-degree-1
+ origin_href: sing.htm#index-degree-1
entry: degree
texi_entry: degree
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: degree lexicographical ordering
- origin_href: sing.info#index-degree-lexicographical-ordering
+ origin_href: sing.htm#index-degree-lexicographical-ordering
entry: degree lexicographical ordering
texi_entry: degree lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: degree reverse lexicographical ordering
- origin_href: sing.info#index-degree-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-degree-reverse-lexicographical-ordering
entry: degree reverse lexicographical ordering
texi_entry: degree reverse lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: degreepart
- origin_href: sing.info#index-degreepart
+ origin_href: sing.htm#index-degreepart
entry: degreepart
texi_entry: degreepart
- element_href: sing.info#degreepart
+ element_href: sing.htm#degreepart
element_text: degreepart
key: delete
- origin_href: sing.info#index-delete
+ origin_href: sing.htm#index-delete
entry: delete
texi_entry: delete
- element_href: sing.info#delete
+ element_href: sing.htm#delete
element_text: delete
key: deleteSublist
- origin_href: sing.info#index-deleteSublist
+ origin_href: sing.htm#index-deleteSublist
entry: deleteSublist
texi_entry: deleteSublist
- element_href: sing.info#deleteSublist
+ element_href: sing.htm#deleteSublist
element_text: deleteSublist
key: delta
- origin_href: sing.info#index-delta
+ origin_href: sing.htm#index-delta
entry: delta
texi_entry: delta
- element_href: sing.info#delta
+ element_href: sing.htm#delta
element_text: delta
key: delta invariant
- origin_href: sing.info#index-delta-invariant
+ origin_href: sing.htm#index-delta-invariant
entry: delta invariant
texi_entry: delta invariant
- element_href: sing.info#deltaLoc
+ element_href: sing.htm#deltaLoc
element_text: deltaLoc
key: delta invariant
- origin_href: sing.info#index-delta-invariant-1
+ origin_href: sing.htm#index-delta-invariant-1
entry: delta invariant
texi_entry: delta invariant
- element_href: sing.info#delta
+ element_href: sing.htm#delta
element_text: delta
key: delta invariant.
- origin_href: sing.info#index-delta-invariant_002e
+ origin_href: sing.htm#index-delta-invariant_002e
entry: delta invariant.
texi_entry: delta invariant.
- element_href: sing.info#normal
+ element_href: sing.htm#normal
element_text: normal
key: deltaLoc
- origin_href: sing.info#index-deltaLoc
+ origin_href: sing.htm#index-deltaLoc
entry: deltaLoc
texi_entry: deltaLoc
- element_href: sing.info#deltaLoc
+ element_href: sing.htm#deltaLoc
element_text: deltaLoc
key: Demo mode
- origin_href: sing.info#index-Demo-mode
+ origin_href: sing.htm#index-Demo-mode
entry: Demo mode
texi_entry: Demo mode
- element_href: sing.info#Demo-mode
+ element_href: sing.htm#Demo-mode
element_text: Demo mode
key: denominator
- origin_href: sing.info#index-denominator
+ origin_href: sing.htm#index-denominator
entry: denominator
texi_entry: denominator
- element_href: sing.info#denominator
+ element_href: sing.htm#denominator
element_text: denominator
key: Depth
- origin_href: sing.info#index-Depth
+ origin_href: sing.htm#index-Depth
entry: Depth
texi_entry: Depth
- element_href: sing.info#Depth
+ element_href: sing.htm#Depth
element_text: Depth
key: depth
- origin_href: sing.info#index-depth
+ origin_href: sing.htm#index-depth
entry: depth
texi_entry: depth
- element_href: sing.info#depth
+ element_href: sing.htm#depth
element_text: depth
key: derivate
- origin_href: sing.info#index-derivate
+ origin_href: sing.htm#index-derivate
entry: derivate
texi_entry: derivate
- element_href: sing.info#derivate
+ element_href: sing.htm#derivate
element_text: derivate
key: det
- origin_href: sing.info#index-det
+ origin_href: sing.htm#index-det
entry: det
texi_entry: det
- element_href: sing.info#det
+ element_href: sing.htm#det
element_text: det
key: detadj
- origin_href: sing.info#index-detadj
+ origin_href: sing.htm#index-detadj
entry: detadj
texi_entry: detadj
- element_href: sing.info#detadj
+ element_href: sing.htm#detadj
element_text: detadj
key: det_B
- origin_href: sing.info#index-det_005fB
+ origin_href: sing.htm#index-det_005fB
entry: det_B
texi_entry: det_B
- element_href: sing.info#det_005fB
+ element_href: sing.htm#det_005fB
element_text: det_B
key: develop
- origin_href: sing.info#index-develop
+ origin_href: sing.htm#index-develop
entry: develop
texi_entry: develop
- element_href: sing.info#develop
+ element_href: sing.htm#develop
element_text: develop
key: Di Biase-Urbanke algorithm
- origin_href: sing.info#index-Di-Biase_002dUrbanke-algorithm
+ origin_href: sing.htm#index-Di-Biase_002dUrbanke-algorithm
entry: Di Biase-Urbanke algorithm
texi_entry: Di Biase-Urbanke algorithm
- element_href: sing.info#Di-Biase-and-Urbanke
+ element_href: sing.htm#Di-Biase-and-Urbanke
element_text: Di Biase and Urbanke
key: diag
- origin_href: sing.info#index-diag
+ origin_href: sing.htm#index-diag
entry: diag
texi_entry: diag
- element_href: sing.info#diag
+ element_href: sing.htm#diag
element_text: diag
key: diag_test
- origin_href: sing.info#index-diag_005ftest
+ origin_href: sing.htm#index-diag_005ftest
entry: diag_test
texi_entry: diag_test
- element_href: sing.info#diag_005ftest
+ element_href: sing.htm#diag_005ftest
element_text: diag_test
key: diff
- origin_href: sing.info#index-diff
+ origin_href: sing.htm#index-diff
entry: diff
texi_entry: diff
- element_href: sing.info#diff
+ element_href: sing.htm#diff
element_text: diff
key: dim
- origin_href: sing.info#index-dim
+ origin_href: sing.htm#index-dim
entry: dim
texi_entry: dim
- element_href: sing.info#dim
+ element_href: sing.htm#dim
element_text: dim
key: dim_slocus
- origin_href: sing.info#index-dim_005fslocus
+ origin_href: sing.htm#index-dim_005fslocus
entry: dim_slocus
texi_entry: dim_slocus
- element_href: sing.info#dim_005fslocus
+ element_href: sing.htm#dim_005fslocus
element_text: dim_slocus
key: discr
- origin_href: sing.info#index-discr
+ origin_href: sing.htm#index-discr
entry: discr
texi_entry: discr
- element_href: sing.info#discr
+ element_href: sing.htm#discr
element_text: discr
key: DISPLAY environment variable
- origin_href: sing.info#index-DISPLAY-environment-variable
+ origin_href: sing.htm#index-DISPLAY-environment-variable
entry: DISPLAY environment variable
texi_entry: DISPLAY environment variable
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: displayHNE
- origin_href: sing.info#index-displayHNE
+ origin_href: sing.htm#index-displayHNE
entry: displayHNE
texi_entry: displayHNE
- element_href: sing.info#displayHNE
+ element_href: sing.htm#displayHNE
element_text: displayHNE
key: displayInvariants
- origin_href: sing.info#index-displayInvariants
+ origin_href: sing.htm#index-displayInvariants
entry: displayInvariants
texi_entry: displayInvariants
- element_href: sing.info#displayInvariants
+ element_href: sing.htm#displayInvariants
element_text: displayInvariants
key: displayMultsequence
- origin_href: sing.info#index-displayMultsequence
+ origin_href: sing.htm#index-displayMultsequence
entry: displayMultsequence
texi_entry: displayMultsequence
- element_href: sing.info#displayMultsequence
+ element_href: sing.htm#displayMultsequence
element_text: displayMultsequence
key: div
- origin_href: sing.info#index-div
+ origin_href: sing.htm#index-div
entry: div
texi_entry: div
- element_href: sing.info#int-operations
+ element_href: sing.htm#int-operations
element_text: int operations
key: div
- origin_href: sing.info#index-div-1
+ origin_href: sing.htm#index-div-1
entry: div
texi_entry: div
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: division
- origin_href: sing.info#index-division
+ origin_href: sing.htm#index-division
entry: division
texi_entry: division
- element_href: sing.info#division
+ element_href: sing.htm#division
element_text: division
key: Documentation of a library
- origin_href: sing.info#index-Documentation-of-a-library
+ origin_href: sing.htm#index-Documentation-of-a-library
entry: Documentation of a library
texi_entry: Documentation of a library
- element_href: sing.info#Documentation-of-a-library
+ element_href: sing.htm#Documentation-of-a-library
element_text: Documentation of a library
key: downloading
- origin_href: sing.info#index-downloading
+ origin_href: sing.htm#index-downloading
entry: downloading
texi_entry: downloading
- element_href: sing.info#Downloading-instructions
+ element_href: sing.htm#Downloading-instructions
element_text: Downloading instructions
key: dp, global ordering
- origin_href: sing.info#index-dp_002c-global-ordering
+ origin_href: sing.htm#index-dp_002c-global-ordering
entry: dp, global ordering
texi_entry: dp, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: Dp, global ordering
- origin_href: sing.info#index-Dp_002c-global-ordering
+ origin_href: sing.htm#index-Dp_002c-global-ordering
entry: Dp, global ordering
texi_entry: Dp, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: ds, local ordering
- origin_href: sing.info#index-ds_002c-local-ordering
+ origin_href: sing.htm#index-ds_002c-local-ordering
entry: ds, local ordering
texi_entry: ds, local ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: Ds, local ordering
- origin_href: sing.info#index-Ds_002c-local-ordering
+ origin_href: sing.htm#index-Ds_002c-local-ordering
entry: Ds, local ordering
texi_entry: Ds, local ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: dsum
- origin_href: sing.info#index-dsum
+ origin_href: sing.htm#index-dsum
entry: dsum
texi_entry: dsum
- element_href: sing.info#dsum
+ element_href: sing.htm#dsum
element_text: dsum
key: dual_code
- origin_href: sing.info#index-dual_005fcode
+ origin_href: sing.htm#index-dual_005fcode
entry: dual_code
texi_entry: dual_code
- element_href: sing.info#dual_005fcode
+ element_href: sing.htm#dual_005fcode
element_text: dual_code
key: dump
- origin_href: sing.info#index-dump
+ origin_href: sing.htm#index-dump
entry: dump
texi_entry: dump
- element_href: sing.info#dump
+ element_href: sing.htm#dump
element_text: dump
key: echo
- origin_href: sing.info#index-echo
+ origin_href: sing.htm#index-echo
entry: echo
texi_entry: echo
- element_href: sing.info#echo
+ element_href: sing.htm#echo
element_text: echo
key: Editing input
- origin_href: sing.info#index-Editing-input
+ origin_href: sing.htm#index-Editing-input
entry: Editing input
texi_entry: Editing input
- element_href: sing.info#Editing-input
+ element_href: sing.htm#Editing-input
element_text: Editing input
key: Editing SINGULAR input files with Emacs
- origin_href: sing.info#index-Editing-SINGULAR-input-files-with-Emacs
+ origin_href: sing.htm#index-Editing-SINGULAR-input-files-with-Emacs
entry: Editing SINGULAR input files with Emacs
texi_entry: Editing SINGULAR input files with Emacs
- element_href: sing.info#Editing-SINGULAR-input-files-with-Emacs
+ element_href: sing.htm#Editing-SINGULAR-input-files-with-Emacs
element_text: Editing SINGULAR input files with Emacs
key: EGCD
- origin_href: sing.info#index-EGCD
+ origin_href: sing.htm#index-EGCD
entry: EGCD
texi_entry: EGCD
- element_href: sing.info#EGCD
+ element_href: sing.htm#EGCD
element_text: EGCD
key: EGCDMain
- origin_href: sing.info#index-EGCDMain
+ origin_href: sing.htm#index-EGCDMain
entry: EGCDMain
texi_entry: EGCDMain
- element_href: sing.info#EGCDMain
+ element_href: sing.htm#EGCDMain
element_text: EGCDMain
key: eigenvals
- origin_href: sing.info#index-eigenvals
+ origin_href: sing.htm#index-eigenvals
entry: eigenvals
texi_entry: eigenvals
- element_href: sing.info#eigenvals
+ element_href: sing.htm#eigenvals
element_text: eigenvals
key: elim
- origin_href: sing.info#index-elim
+ origin_href: sing.htm#index-elim
entry: elim
texi_entry: elim
- element_href: sing.info#elim
+ element_href: sing.htm#elim
element_text: elim
key: elim.lib
- origin_href: sing.info#index-elim_002elib
+ origin_href: sing.htm#index-elim_002elib
entry: elim.lib
texi_entry: elim.lib
- element_href: sing.info#elim_005flib
+ element_href: sing.htm#elim_005flib
element_text: elim_lib
key: elim1
- origin_href: sing.info#index-elim1
+ origin_href: sing.htm#index-elim1
entry: elim1
texi_entry: elim1
- element_href: sing.info#elim1
+ element_href: sing.htm#elim1
element_text: elim1
key: eliminate
- origin_href: sing.info#index-eliminate
+ origin_href: sing.htm#index-eliminate
entry: eliminate
texi_entry: eliminate
- element_href: sing.info#eliminate
+ element_href: sing.htm#eliminate
element_text: eliminate
key: Elimination
- origin_href: sing.info#index-Elimination
+ origin_href: sing.htm#index-Elimination
entry: Elimination
texi_entry: Elimination
- element_href: sing.info#Elimination
+ element_href: sing.htm#Elimination
element_text: Elimination
key: elimlinearpart
- origin_href: sing.info#index-elimlinearpart
+ origin_href: sing.htm#index-elimlinearpart
entry: elimlinearpart
texi_entry: elimlinearpart
- element_href: sing.info#elimlinearpart
+ element_href: sing.htm#elimlinearpart
element_text: elimlinearpart
key: elimpart
- origin_href: sing.info#index-elimpart
+ origin_href: sing.htm#index-elimpart
entry: elimpart
texi_entry: elimpart
- element_href: sing.info#elimpart
+ element_href: sing.htm#elimpart
element_text: elimpart
key: elimpartanyr
- origin_href: sing.info#index-elimpartanyr
+ origin_href: sing.htm#index-elimpartanyr
entry: elimpartanyr
texi_entry: elimpartanyr
- element_href: sing.info#elimpartanyr
+ element_href: sing.htm#elimpartanyr
element_text: elimpartanyr
key: elim_lib
- origin_href: sing.info#index-elim_005flib
+ origin_href: sing.htm#index-elim_005flib
entry: elim_lib
texi_entry: elim_lib
- element_href: sing.info#elim_005flib
+ element_href: sing.htm#elim_005flib
element_text: elim_lib
key: else
- origin_href: sing.info#index-else
+ origin_href: sing.htm#index-else
entry: else
texi_entry: else
- element_href: sing.info#if
+ element_href: sing.htm#if
element_text: if
key: Emacs
- origin_href: sing.info#index-Emacs
+ origin_href: sing.htm#index-Emacs
entry: Emacs
texi_entry: Emacs
- element_href: sing.info#Emacs-user-interface
+ element_href: sing.htm#Emacs-user-interface
element_text: Emacs user interface
key: Emacs, a quick guide
- origin_href: sing.info#index-Emacs_002c-a-quick-guide
+ origin_href: sing.htm#index-Emacs_002c-a-quick-guide
entry: Emacs, a quick guide
texi_entry: Emacs, a quick guide
- element_href: sing.info#A-quick-guide-to-Emacs
+ element_href: sing.htm#A-quick-guide-to-Emacs
element_text: A quick guide to Emacs
key: Emacs, customization of Singular mode
- origin_href: sing.info#index-Emacs_002c-customization-of-Singular-mode
+ origin_href: sing.htm#index-Emacs_002c-customization-of-Singular-mode
entry: Emacs, customization of Singular mode
texi_entry: Emacs, customization of Singular mode
- element_href: sing.info#Customization-of-the-Emacs-interface
+ element_href: sing.htm#Customization-of-the-Emacs-interface
element_text: Customization of the Emacs interface
key: Emacs, editing Singular input files
- origin_href: sing.info#index-Emacs_002c-editing-Singular-input-files
+ origin_href: sing.htm#index-Emacs_002c-editing-Singular-input-files
entry: Emacs, editing Singular input files
texi_entry: Emacs, editing Singular input files
- element_href: sing.info#Editing-SINGULAR-input-files-with-Emacs
+ element_href: sing.htm#Editing-SINGULAR-input-files-with-Emacs
element_text: Editing SINGULAR input files with Emacs
key: Emacs, important commands
- origin_href: sing.info#index-Emacs_002c-important-commands
+ origin_href: sing.htm#index-Emacs_002c-important-commands
entry: Emacs, important commands
texi_entry: Emacs, important commands
- element_href: sing.info#Top-20-Emacs-commands
+ element_href: sing.htm#Top-20-Emacs-commands
element_text: Top 20 Emacs commands
key: Emacs, overview
- origin_href: sing.info#index-Emacs_002c-overview
+ origin_href: sing.htm#index-Emacs_002c-overview
entry: Emacs, overview
texi_entry: Emacs, overview
- element_href: sing.info#A-quick-guide-to-Emacs
+ element_href: sing.htm#A-quick-guide-to-Emacs
element_text: A quick guide to Emacs
key: Emacs, running Singular under
- origin_href: sing.info#index-Emacs_002c-running-Singular-under
+ origin_href: sing.htm#index-Emacs_002c-running-Singular-under
entry: Emacs, running Singular under
texi_entry: Emacs, running Singular under
- element_href: sing.info#Running-SINGULAR-under-Emacs
+ element_href: sing.htm#Running-SINGULAR-under-Emacs
element_text: Running SINGULAR under Emacs
key: Emacs, Singular demo mode
- origin_href: sing.info#index-Emacs_002c-Singular-demo-mode
+ origin_href: sing.htm#index-Emacs_002c-Singular-demo-mode
entry: Emacs, Singular demo mode
texi_entry: Emacs, Singular demo mode
- element_href: sing.info#Demo-mode
+ element_href: sing.htm#Demo-mode
element_text: Demo mode
key: Emacs, user interface
- origin_href: sing.info#index-Emacs_002c-user-interface
+ origin_href: sing.htm#index-Emacs_002c-user-interface
entry: Emacs, user interface
texi_entry: Emacs, user interface
- element_href: sing.info#Emacs-user-interface
+ element_href: sing.htm#Emacs-user-interface
element_text: Emacs user interface
key: endomorphism filtration
- origin_href: sing.info#index-endomorphism-filtration
+ origin_href: sing.htm#index-endomorphism-filtration
entry: endomorphism filtration
texi_entry: endomorphism filtration
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: endvfilt
- origin_href: sing.info#index-endvfilt
+ origin_href: sing.htm#index-endvfilt
entry: endvfilt
texi_entry: endvfilt
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: environment variable, DISPLAY
- origin_href: sing.info#index-environment-variable_002c-DISPLAY
+ origin_href: sing.htm#index-environment-variable_002c-DISPLAY
entry: environment variable, DISPLAY
texi_entry: environment variable, DISPLAY
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: equidim
- origin_href: sing.info#index-equidim
+ origin_href: sing.htm#index-equidim
entry: equidim
texi_entry: equidim
- element_href: sing.info#equidim
+ element_href: sing.htm#equidim
element_text: equidim
key: equidimMax
- origin_href: sing.info#index-equidimMax
+ origin_href: sing.htm#index-equidimMax
entry: equidimMax
texi_entry: equidimMax
- element_href: sing.info#equidimMax
+ element_href: sing.htm#equidimMax
element_text: equidimMax
key: equidimMaxEHV
- origin_href: sing.info#index-equidimMaxEHV
+ origin_href: sing.htm#index-equidimMaxEHV
entry: equidimMaxEHV
texi_entry: equidimMaxEHV
- element_href: sing.info#equidimMaxEHV
+ element_href: sing.htm#equidimMaxEHV
element_text: equidimMaxEHV
key: equiRadical
- origin_href: sing.info#index-equiRadical
+ origin_href: sing.htm#index-equiRadical
entry: equiRadical
texi_entry: equiRadical
- element_href: sing.info#equiRadical
+ element_href: sing.htm#equiRadical
element_text: equiRadical
key: equising.lib
- origin_href: sing.info#index-equising_002elib
+ origin_href: sing.htm#index-equising_002elib
entry: equising.lib
texi_entry: equising.lib
- element_href: sing.info#equising_005flib
+ element_href: sing.htm#equising_005flib
element_text: equising_lib
key: equisingular stratum
- origin_href: sing.info#index-equisingular-stratum
+ origin_href: sing.htm#index-equisingular-stratum
entry: equisingular stratum
texi_entry: equisingular stratum
- element_href: sing.info#esStratum
+ element_href: sing.htm#esStratum
element_text: esStratum
key: equisingularity ideal
- origin_href: sing.info#index-equisingularity-ideal
+ origin_href: sing.htm#index-equisingularity-ideal
entry: equisingularity ideal
texi_entry: equisingularity ideal
- element_href: sing.info#esIdeal
+ element_href: sing.htm#esIdeal
element_text: esIdeal
key: equising_lib
- origin_href: sing.info#index-equising_005flib
+ origin_href: sing.htm#index-equising_005flib
entry: equising_lib
texi_entry: equising_lib
- element_href: sing.info#equising_005flib
+ element_href: sing.htm#equising_005flib
element_text: equising_lib
key: ERROR
- origin_href: sing.info#index-ERROR
+ origin_href: sing.htm#index-ERROR
entry: ERROR
texi_entry: ERROR
- element_href: sing.info#ERROR
+ element_href: sing.htm#ERROR
element_text: ERROR
key: error recovery
- origin_href: sing.info#index-error-recovery
+ origin_href: sing.htm#index-error-recovery
entry: error recovery
texi_entry: error recovery
- element_href: sing.info#The-SINGULAR-prompt
+ element_href: sing.htm#The-SINGULAR-prompt
element_text: The SINGULAR prompt
key: esIdeal
- origin_href: sing.info#index-esIdeal
+ origin_href: sing.htm#index-esIdeal
entry: esIdeal
texi_entry: esIdeal
- element_href: sing.info#esIdeal
+ element_href: sing.htm#esIdeal
element_text: esIdeal
key: ESingular, no prompt
- origin_href: sing.info#index-ESingular_002c-no-prompt
+ origin_href: sing.htm#index-ESingular_002c-no-prompt
entry: ESingular, no prompt
texi_entry: ESingular, no prompt
- element_href: sing.info#Troubleshooting
+ element_href: sing.htm#Troubleshooting
element_text: Troubleshooting
key: esStratum
- origin_href: sing.info#index-esStratum
+ origin_href: sing.htm#index-esStratum
entry: esStratum
texi_entry: esStratum
- element_href: sing.info#esStratum
+ element_href: sing.htm#esStratum
element_text: esStratum
key: eval
- origin_href: sing.info#index-eval
+ origin_href: sing.htm#index-eval
entry: eval
texi_entry: eval
- element_href: sing.info#eval
+ element_href: sing.htm#eval
element_text: eval
key: evaluate_reynolds
- origin_href: sing.info#index-evaluate_005freynolds
+ origin_href: sing.htm#index-evaluate_005freynolds
entry: evaluate_reynolds
texi_entry: evaluate_reynolds
- element_href: sing.info#evaluate_005freynolds
+ element_href: sing.htm#evaluate_005freynolds
element_text: evaluate_reynolds
key: Evaluation of logical expressions
- origin_href: sing.info#index-Evaluation-of-logical-expressions
+ origin_href: sing.htm#index-Evaluation-of-logical-expressions
entry: Evaluation of logical expressions
texi_entry: Evaluation of logical expressions
- element_href: sing.info#Evaluation-of-logical-expressions
+ element_href: sing.htm#Evaluation-of-logical-expressions
element_text: Evaluation of logical expressions
key: evnf
- origin_href: sing.info#index-evnf
+ origin_href: sing.htm#index-evnf
entry: evnf
texi_entry: evnf
- element_href: sing.info#evnf
+ element_href: sing.htm#evnf
element_text: evnf
key: example
- origin_href: sing.info#index-example
+ origin_href: sing.htm#index-example
entry: example
texi_entry: example
- element_href: sing.info#example
+ element_href: sing.htm#example
element_text: example
key: Examples
- origin_href: sing.info#index-Examples
+ origin_href: sing.htm#index-Examples
entry: Examples
texi_entry: Examples
- element_href: sing.info#Examples
+ element_href: sing.htm#Examples
element_text: Examples
key: Examples of ring declarations
- origin_href: sing.info#index-Examples-of-ring-declarations
+ origin_href: sing.htm#index-Examples-of-ring-declarations
entry: Examples of ring declarations
texi_entry: Examples of ring declarations
- element_href: sing.info#Examples-of-ring-declarations
+ element_href: sing.htm#Examples-of-ring-declarations
element_text: Examples of ring declarations
key: execute
- origin_href: sing.info#index-execute
+ origin_href: sing.htm#index-execute
entry: execute
texi_entry: execute
- element_href: sing.info#execute
+ element_href: sing.htm#execute
element_text: execute
key: exit
- origin_href: sing.info#index-exit
+ origin_href: sing.htm#index-exit
entry: exit
texi_entry: exit
- element_href: sing.info#exit
+ element_href: sing.htm#exit
element_text: exit
key: exit
- origin_href: sing.info#index-exit-1
+ origin_href: sing.htm#index-exit-1
entry: exit
texi_entry: exit
- element_href: sing.info#quit
+ element_href: sing.htm#quit
element_text: quit
key: export
- origin_href: sing.info#index-export
+ origin_href: sing.htm#index-export
entry: export
texi_entry: export
- element_href: sing.info#export
+ element_href: sing.htm#export
element_text: export
key: expression list
- origin_href: sing.info#index-expression-list
+ origin_href: sing.htm#index-expression-list
entry: expression list
texi_entry: expression list
- element_href: sing.info#Data-types
+ element_href: sing.htm#Data-types
element_text: Data types
key: Ext
- origin_href: sing.info#index-Ext
+ origin_href: sing.htm#index-Ext
entry: Ext
texi_entry: Ext
- element_href: sing.info#Computation-of-Ext
+ element_href: sing.htm#Computation-of-Ext
element_text: Computation of Ext
key: Ext
- origin_href: sing.info#index-Ext-1
+ origin_href: sing.htm#index-Ext-1
entry: Ext
texi_entry: Ext
- element_href: sing.info#Ext
+ element_href: sing.htm#Ext
element_text: Ext
key: extcurve
- origin_href: sing.info#index-extcurve
+ origin_href: sing.htm#index-extcurve
entry: extcurve
texi_entry: extcurve
- element_href: sing.info#extcurve
+ element_href: sing.htm#extcurve
element_text: extcurve
key: extdevelop
- origin_href: sing.info#index-extdevelop
+ origin_href: sing.htm#index-extdevelop
entry: extdevelop
texi_entry: extdevelop
- element_href: sing.info#extdevelop
+ element_href: sing.htm#extdevelop
element_text: extdevelop
key: extendring
- origin_href: sing.info#index-extendring
+ origin_href: sing.htm#index-extendring
entry: extendring
texi_entry: extendring
- element_href: sing.info#extendring
+ element_href: sing.htm#extendring
element_text: extendring
key: extension of rings
- origin_href: sing.info#index-extension-of-rings
+ origin_href: sing.htm#index-extension-of-rings
entry: extension of rings
texi_entry: extension of rings
- element_href: sing.info#splitring
+ element_href: sing.htm#splitring
element_text: splitring
key: extgcd
- origin_href: sing.info#index-extgcd
+ origin_href: sing.htm#index-extgcd
entry: extgcd
texi_entry: extgcd
- element_href: sing.info#extgcd
+ element_href: sing.htm#extgcd
element_text: extgcd
key: Extra weight vector
- origin_href: sing.info#index-Extra-weight-vector
+ origin_href: sing.htm#index-Extra-weight-vector
entry: Extra weight vector
texi_entry: Extra weight vector
- element_href: sing.info#Extra-weight-vector
+ element_href: sing.htm#Extra-weight-vector
element_text: Extra weight vector
key: Ext_R
- origin_href: sing.info#index-Ext_005fR
+ origin_href: sing.htm#index-Ext_005fR
entry: Ext_R
texi_entry: Ext_R
- element_href: sing.info#Ext_005fR
+ element_href: sing.htm#Ext_005fR
element_text: Ext_R
key: facstd
- origin_href: sing.info#index-facstd
+ origin_href: sing.htm#index-facstd
entry: facstd
texi_entry: facstd
- element_href: sing.info#facstd
+ element_href: sing.htm#facstd
element_text: facstd
key: Factor
- origin_href: sing.info#index-Factor
+ origin_href: sing.htm#index-Factor
entry: Factor
texi_entry: Factor
- element_href: sing.info#Factor
+ element_href: sing.htm#Factor
element_text: Factor
key: factorH
- origin_href: sing.info#index-factorH
+ origin_href: sing.htm#index-factorH
entry: factorH
texi_entry: factorH
- element_href: sing.info#factorH
+ element_href: sing.htm#factorH
element_text: factorH
key: factorial
- origin_href: sing.info#index-factorial
+ origin_href: sing.htm#index-factorial
entry: factorial
texi_entry: factorial
- element_href: sing.info#factorial
+ element_href: sing.htm#factorial
element_text: factorial
key: Factorization
- origin_href: sing.info#index-Factorization
+ origin_href: sing.htm#index-Factorization
entry: Factorization
texi_entry: Factorization
- element_href: sing.info#Factorization
+ element_href: sing.htm#Factorization
element_text: Factorization
key: factorize
- origin_href: sing.info#index-factorize
+ origin_href: sing.htm#index-factorize
entry: factorize
texi_entry: factorize
- element_href: sing.info#factorize
+ element_href: sing.htm#factorize
element_text: factorize
key: FactorMain
- origin_href: sing.info#index-FactorMain
+ origin_href: sing.htm#index-FactorMain
entry: FactorMain
texi_entry: FactorMain
- element_href: sing.info#FactorMain
+ element_href: sing.htm#FactorMain
element_text: FactorMain
key: factory
- origin_href: sing.info#index-factory
+ origin_href: sing.htm#index-factory
entry: factory
texi_entry: factory
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: Fast lexicographical GB
- origin_href: sing.info#index-Fast-lexicographical-GB
+ origin_href: sing.htm#index-Fast-lexicographical-GB
entry: Fast lexicographical GB
texi_entry: Fast lexicographical GB
- element_href: sing.info#Fast-lexicographical-GB
+ element_href: sing.htm#Fast-lexicographical-GB
element_text: Fast lexicographical GB
key: fastelim
- origin_href: sing.info#index-fastelim
+ origin_href: sing.htm#index-fastelim
entry: fastelim
texi_entry: fastelim
- element_href: sing.info#fastelim
+ element_href: sing.htm#fastelim
element_text: fastelim
key: fastHC, option
- origin_href: sing.info#index-fastHC_002c-option
+ origin_href: sing.htm#index-fastHC_002c-option
entry: fastHC, option
texi_entry: fastHC, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: fetch
- origin_href: sing.info#index-fetch
+ origin_href: sing.htm#index-fetch
entry: fetch
texi_entry: fetch
- element_href: sing.info#fetch
+ element_href: sing.htm#fetch
element_text: fetch
key: fetchall
- origin_href: sing.info#index-fetchall
+ origin_href: sing.htm#index-fetchall
entry: fetchall
texi_entry: fetchall
- element_href: sing.info#fetchall
+ element_href: sing.htm#fetchall
element_text: fetchall
key: fglm
- origin_href: sing.info#index-fglm
+ origin_href: sing.htm#index-fglm
entry: fglm
texi_entry: fglm
- element_href: sing.info#fglm
+ element_href: sing.htm#fglm
element_text: fglm
key: fglm
- origin_href: sing.info#index-fglm-1
+ origin_href: sing.htm#index-fglm-1
entry: fglm
texi_entry: fglm
- element_href: sing.info#stdfglm
+ element_href: sing.htm#stdfglm
element_text: stdfglm
key: fglmquot
- origin_href: sing.info#index-fglmquot
+ origin_href: sing.htm#index-fglmquot
entry: fglmquot
texi_entry: fglmquot
- element_href: sing.info#fglmquot
+ element_href: sing.htm#fglmquot
element_text: fglmquot
key: fglm_solve
- origin_href: sing.info#index-fglm_005fsolve
+ origin_href: sing.htm#index-fglm_005fsolve
entry: fglm_solve
texi_entry: fglm_solve
- element_href: sing.info#fglm_005fsolve
+ element_href: sing.htm#fglm_005fsolve
element_text: fglm_solve
key: fibonacci
- origin_href: sing.info#index-fibonacci
+ origin_href: sing.htm#index-fibonacci
entry: fibonacci
texi_entry: fibonacci
- element_href: sing.info#fibonacci
+ element_href: sing.htm#fibonacci
element_text: fibonacci
key: field
- origin_href: sing.info#index-field
+ origin_href: sing.htm#index-field
entry: field
texi_entry: field
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: file, .singularrc
- origin_href: sing.info#index-file_002c-_002esingularrc
+ origin_href: sing.htm#index-file_002c-_002esingularrc
entry: file, .singularrc
texi_entry: file, .singularrc
- element_href: sing.info#Startup-sequence
+ element_href: sing.htm#Startup-sequence
element_text: Startup sequence
key: filecmd
- origin_href: sing.info#index-filecmd
+ origin_href: sing.htm#index-filecmd
entry: filecmd
texi_entry: filecmd
- element_href: sing.info#filecmd
+ element_href: sing.htm#filecmd
element_text: filecmd
key: find
- origin_href: sing.info#index-find
+ origin_href: sing.htm#index-find
entry: find
texi_entry: find
- element_href: sing.info#find
+ element_href: sing.htm#find
element_text: find
key: finduni
- origin_href: sing.info#index-finduni
+ origin_href: sing.htm#index-finduni
entry: finduni
texi_entry: finduni
- element_href: sing.info#finduni
+ element_href: sing.htm#finduni
element_text: finduni
key: findvars
- origin_href: sing.info#index-findvars
+ origin_href: sing.htm#index-findvars
entry: findvars
texi_entry: findvars
- element_href: sing.info#findvars
+ element_href: sing.htm#findvars
element_text: findvars
key: finite field
- origin_href: sing.info#index-finite-field
+ origin_href: sing.htm#index-finite-field
entry: finite field
texi_entry: finite field
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: Finite fields
- origin_href: sing.info#index-Finite-fields
+ origin_href: sing.htm#index-Finite-fields
entry: Finite fields
texi_entry: Finite fields
- element_href: sing.info#Finite-fields
+ element_href: sing.htm#Finite-fields
element_text: Finite fields
key: finitenessTest
- origin_href: sing.info#index-finitenessTest
+ origin_href: sing.htm#index-finitenessTest
entry: finitenessTest
texi_entry: finitenessTest
- element_href: sing.info#finitenessTest
+ element_href: sing.htm#finitenessTest
element_text: finitenessTest
key: finvar.lib
- origin_href: sing.info#index-finvar_002elib
+ origin_href: sing.htm#index-finvar_002elib
entry: finvar.lib
texi_entry: finvar.lib
- element_href: sing.info#finvar_005flib
+ element_href: sing.htm#finvar_005flib
element_text: finvar_lib
key: finvar_lib
- origin_href: sing.info#index-finvar_005flib
+ origin_href: sing.htm#index-finvar_005flib
entry: finvar_lib
texi_entry: finvar_lib
- element_href: sing.info#finvar_005flib
+ element_href: sing.htm#finvar_005flib
element_text: finvar_lib
key: First steps
- origin_href: sing.info#index-First-steps
+ origin_href: sing.htm#index-First-steps
entry: First steps
texi_entry: First steps
- element_href: sing.info#First-steps
+ element_href: sing.htm#First-steps
element_text: First steps
key: fitting
- origin_href: sing.info#index-fitting
+ origin_href: sing.htm#index-fitting
entry: fitting
texi_entry: fitting
- element_href: sing.info#fitting
+ element_href: sing.htm#fitting
element_text: fitting
key: flatten
- origin_href: sing.info#index-flatten
+ origin_href: sing.htm#index-flatten
entry: flatten
texi_entry: flatten
- element_href: sing.info#flatten
+ element_href: sing.htm#flatten
element_text: flatten
key: flatteningStrat
- origin_href: sing.info#index-flatteningStrat
+ origin_href: sing.htm#index-flatteningStrat
entry: flatteningStrat
texi_entry: flatteningStrat
- element_href: sing.info#flatteningStrat
+ element_href: sing.htm#flatteningStrat
element_text: flatteningStrat
key: Flow control
- origin_href: sing.info#index-Flow-control
+ origin_href: sing.htm#index-Flow-control
entry: Flow control
texi_entry: Flow control
- element_href: sing.info#Flow-control
+ element_href: sing.htm#Flow-control
element_text: Flow control
key: for
- origin_href: sing.info#index-for
+ origin_href: sing.htm#index-for
entry: for
texi_entry: for
- element_href: sing.info#for
+ element_href: sing.htm#for
element_text: for
key: Format of a library
- origin_href: sing.info#index-Format-of-a-library
+ origin_href: sing.htm#index-Format-of-a-library
entry: Format of a library
texi_entry: Format of a library
- element_href: sing.info#Format-of-a-library
+ element_href: sing.htm#Format-of-a-library
element_text: Format of a library
key: Formatting output
- origin_href: sing.info#index-Formatting-output
+ origin_href: sing.htm#index-Formatting-output
entry: Formatting output
texi_entry: Formatting output
- element_href: sing.info#Formatting-output
+ element_href: sing.htm#Formatting-output
element_text: Formatting output
key: fprintf
- origin_href: sing.info#index-fprintf
+ origin_href: sing.htm#index-fprintf
entry: fprintf
texi_entry: fprintf
- element_href: sing.info#fprintf
+ element_href: sing.htm#fprintf
element_text: fprintf
key: Free resolution
- origin_href: sing.info#index-Free-resolution
+ origin_href: sing.htm#index-Free-resolution
entry: Free resolution
texi_entry: Free resolution
- element_href: sing.info#Free-resolution
+ element_href: sing.htm#Free-resolution
element_text: Free resolution
key: freemodule
- origin_href: sing.info#index-freemodule
+ origin_href: sing.htm#index-freemodule
entry: freemodule
texi_entry: freemodule
- element_href: sing.info#freemodule
+ element_href: sing.htm#freemodule
element_text: freemodule
key: freerank
- origin_href: sing.info#index-freerank
+ origin_href: sing.htm#index-freerank
entry: freerank
texi_entry: freerank
- element_href: sing.info#freerank
+ element_href: sing.htm#freerank
element_text: freerank
key: Fru"bis-Kru"ger, Anne
- origin_href: sing.info#index-Frubis_002dKruger_002c-Anne
+ origin_href: sing.htm#index-Frubis_002dKruger_002c-Anne
entry: Fru"bis-Kru"ger, Anne
texi_entry: Fr@"ubis-Kr@"uger, Anne
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Functions
- origin_href: sing.info#index-Functions
+ origin_href: sing.htm#index-Functions
entry: Functions
texi_entry: Functions
- element_href: sing.info#Functions
+ element_href: sing.htm#Functions
element_text: Functions
key: furtherInvar
- origin_href: sing.info#index-furtherInvar
+ origin_href: sing.htm#index-furtherInvar
entry: furtherInvar
texi_entry: furtherInvar
- element_href: sing.info#furtherInvar
+ element_href: sing.htm#furtherInvar
element_text: furtherInvar
key: further_hn_proc
- origin_href: sing.info#index-further_005fhn_005fproc
+ origin_href: sing.htm#index-further_005fhn_005fproc
entry: further_hn_proc
texi_entry: further_hn_proc
- element_href: sing.info#further_005fhn_005fproc
+ element_href: sing.htm#further_005fhn_005fproc
element_text: further_hn_proc
key: galois field
- origin_href: sing.info#index-galois-field
+ origin_href: sing.htm#index-galois-field
entry: galois field
texi_entry: galois field
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection
+ origin_href: sing.htm#index-Gauss_002dManin-connection
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#Gauss_002dManin-connection
+ element_href: sing.htm#Gauss_002dManin-connection
element_text: Gauss-Manin connection
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-1
+ origin_href: sing.htm#index-Gauss_002dManin-connection-1
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-2
+ origin_href: sing.htm#index-Gauss_002dManin-connection-2
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#gmsring
+ element_href: sing.htm#gmsring
element_text: gmsring
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-3
+ origin_href: sing.htm#index-Gauss_002dManin-connection-3
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#gmsnf
+ element_href: sing.htm#gmsnf
element_text: gmsnf
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-4
+ origin_href: sing.htm#index-Gauss_002dManin-connection-4
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#gmscoeffs
+ element_href: sing.htm#gmscoeffs
element_text: gmscoeffs
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-5
+ origin_href: sing.htm#index-Gauss_002dManin-connection-5
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#bernstein
+ element_href: sing.htm#bernstein
element_text: bernstein
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-6
+ origin_href: sing.htm#index-Gauss_002dManin-connection-6
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#monodromy
+ element_href: sing.htm#monodromy
element_text: monodromy
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-7
+ origin_href: sing.htm#index-Gauss_002dManin-connection-7
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-8
+ origin_href: sing.htm#index-Gauss_002dManin-connection-8
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-9
+ origin_href: sing.htm#index-Gauss_002dManin-connection-9
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-10
+ origin_href: sing.htm#index-Gauss_002dManin-connection-10
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-11
+ origin_href: sing.htm#index-Gauss_002dManin-connection-11
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-12
+ origin_href: sing.htm#index-Gauss_002dManin-connection-12
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-13
+ origin_href: sing.htm#index-Gauss_002dManin-connection-13
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: Gauss-Manin connection
- origin_href: sing.info#index-Gauss_002dManin-connection-14
+ origin_href: sing.htm#index-Gauss_002dManin-connection-14
entry: Gauss-Manin connection
texi_entry: Gauss-Manin connection
- element_href: sing.info#spectrumnd
+ element_href: sing.htm#spectrumnd
element_text: spectrumnd
key: gaussman.lib
- origin_href: sing.info#index-gaussman_002elib
+ origin_href: sing.htm#index-gaussman_002elib
entry: gaussman.lib
texi_entry: gaussman.lib
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: gaussman_lib
- origin_href: sing.info#index-gaussman_005flib
+ origin_href: sing.htm#index-gaussman_005flib
entry: gaussman_lib
texi_entry: gaussman_lib
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: gaussred
- origin_href: sing.info#index-gaussred
+ origin_href: sing.htm#index-gaussred
entry: gaussred
texi_entry: gaussred
- element_href: sing.info#gaussred
+ element_href: sing.htm#gaussred
element_text: gaussred
key: gaussred_pivot
- origin_href: sing.info#index-gaussred_005fpivot
+ origin_href: sing.htm#index-gaussred_005fpivot
entry: gaussred_pivot
texi_entry: gaussred_pivot
- element_href: sing.info#gaussred_005fpivot
+ element_href: sing.htm#gaussred_005fpivot
element_text: gaussred_pivot
key: gauss_col
- origin_href: sing.info#index-gauss_005fcol
+ origin_href: sing.htm#index-gauss_005fcol
entry: gauss_col
texi_entry: gauss_col
- element_href: sing.info#gauss_005fcol
+ element_href: sing.htm#gauss_005fcol
element_text: gauss_col
key: gauss_nf
- origin_href: sing.info#index-gauss_005fnf
+ origin_href: sing.htm#index-gauss_005fnf
entry: gauss_nf
texi_entry: gauss_nf
- element_href: sing.info#gauss_005fnf
+ element_href: sing.htm#gauss_005fnf
element_text: gauss_nf
key: gauss_row
- origin_href: sing.info#index-gauss_005frow
+ origin_href: sing.htm#index-gauss_005frow
entry: gauss_row
texi_entry: gauss_row
- element_href: sing.info#gauss_005frow
+ element_href: sing.htm#gauss_005frow
element_text: gauss_row
key: gcd
- origin_href: sing.info#index-gcd
+ origin_href: sing.htm#index-gcd
entry: gcd
texi_entry: gcd
- element_href: sing.info#gcd
+ element_href: sing.htm#gcd
element_text: gcd
key: gen
- origin_href: sing.info#index-gen
+ origin_href: sing.htm#index-gen
entry: gen
texi_entry: gen
- element_href: sing.info#gen
+ element_href: sing.htm#gen
element_text: gen
key: General command syntax
- origin_href: sing.info#index-General-command-syntax
+ origin_href: sing.htm#index-General-command-syntax
entry: General command syntax
texi_entry: General command syntax
- element_href: sing.info#General-command-syntax
+ element_href: sing.htm#General-command-syntax
element_text: General command syntax
key: General concepts
- origin_href: sing.info#index-General-concepts
+ origin_href: sing.htm#index-General-concepts
entry: General concepts
texi_entry: General concepts
- element_href: sing.info#General-concepts
+ element_href: sing.htm#General-concepts
element_text: General concepts
key: General purpose
- origin_href: sing.info#index-General-purpose
+ origin_href: sing.htm#index-General-purpose
entry: General purpose
texi_entry: General purpose
- element_href: sing.info#General-purpose
+ element_href: sing.htm#General-purpose
element_text: General purpose
key: General syntax of a ring declaration
- origin_href: sing.info#index-General-syntax-of-a-ring-declaration
+ origin_href: sing.htm#index-General-syntax-of-a-ring-declaration
entry: General syntax of a ring declaration
texi_entry: General syntax of a ring declaration
- element_href: sing.info#General-syntax-of-a-ring-declaration
+ element_href: sing.htm#General-syntax-of-a-ring-declaration
element_text: General syntax of a ring declaration
key: general weighted lexicographical ordering
- origin_href: sing.info#index-general-weighted-lexicographical-ordering
+ origin_href: sing.htm#index-general-weighted-lexicographical-ordering
entry: general weighted lexicographical ordering
texi_entry: general weighted lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: general weighted reverse lexicographical ordering
- origin_href:
sing.info#index-general-weighted-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-general-weighted-reverse-lexicographical-ordering
entry: general weighted reverse lexicographical ordering
texi_entry: general weighted reverse lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: general.lib
- origin_href: sing.info#index-general_002elib
+ origin_href: sing.htm#index-general_002elib
entry: general.lib
texi_entry: general.lib
- element_href: sing.info#general_005flib
+ element_href: sing.htm#general_005flib
element_text: general_lib
key: general_lib
- origin_href: sing.info#index-general_005flib
+ origin_href: sing.htm#index-general_005flib
entry: general_lib
texi_entry: general_lib
- element_href: sing.info#general_005flib
+ element_href: sing.htm#general_005flib
element_text: general_lib
key: genericid
- origin_href: sing.info#index-genericid
+ origin_href: sing.htm#index-genericid
entry: genericid
texi_entry: genericid
- element_href: sing.info#genericid
+ element_href: sing.htm#genericid
element_text: genericid
key: genericmat
- origin_href: sing.info#index-genericmat
+ origin_href: sing.htm#index-genericmat
entry: genericmat
texi_entry: genericmat
- element_href: sing.info#genericmat
+ element_href: sing.htm#genericmat
element_text: genericmat
key: genus
- origin_href: sing.info#index-genus
+ origin_href: sing.htm#index-genus
entry: genus
texi_entry: genus
- element_href: sing.info#genus
+ element_href: sing.htm#genus
element_text: genus
key: German Umlaute
- origin_href: sing.info#index-German-Umlaute
+ origin_href: sing.htm#index-German-Umlaute
entry: German Umlaute
texi_entry: German Umlaute
- element_href: sing.info#Limitations
+ element_href: sing.htm#Limitations
element_text: Limitations
key: getData
- origin_href: sing.info#index-getData
+ origin_href: sing.htm#index-getData
entry: getData
texi_entry: getData
- element_href: sing.info#getData
+ element_href: sing.htm#getData
element_text: getData
key: getdump
- origin_href: sing.info#index-getdump
+ origin_href: sing.htm#index-getdump
entry: getdump
texi_entry: getdump
- element_href: sing.info#getdump
+ element_href: sing.htm#getdump
element_text: getdump
key: getenv
- origin_href: sing.info#index-getenv
+ origin_href: sing.htm#index-getenv
entry: getenv
texi_entry: getenv
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: Getting started
- origin_href: sing.info#index-Getting-started
+ origin_href: sing.htm#index-Getting-started
entry: Getting started
texi_entry: Getting started
- element_href: sing.info#Getting-started
+ element_href: sing.htm#Getting-started
element_text: Getting started
key: Global orderings
- origin_href: sing.info#index-Global-orderings
+ origin_href: sing.htm#index-Global-orderings
entry: Global orderings
texi_entry: Global orderings
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: GMP
- origin_href: sing.info#index-GMP
+ origin_href: sing.htm#index-GMP
entry: GMP
texi_entry: GMP
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: gmscoeffs
- origin_href: sing.info#index-gmscoeffs
+ origin_href: sing.htm#index-gmscoeffs
entry: gmscoeffs
texi_entry: gmscoeffs
- element_href: sing.info#gmscoeffs
+ element_href: sing.htm#gmscoeffs
element_text: gmscoeffs
key: gmsnf
- origin_href: sing.info#index-gmsnf
+ origin_href: sing.htm#index-gmsnf
entry: gmsnf
texi_entry: gmsnf
- element_href: sing.info#gmsnf
+ element_href: sing.htm#gmsnf
element_text: gmsnf
key: gmsring
- origin_href: sing.info#index-gmsring
+ origin_href: sing.htm#index-gmsring
entry: gmsring
texi_entry: gmsring
- element_href: sing.info#gmsring
+ element_href: sing.htm#gmsring
element_text: gmsring
key: graphics.lib
- origin_href: sing.info#index-graphics_002elib
+ origin_href: sing.htm#index-graphics_002elib
entry: graphics.lib
texi_entry: graphics.lib
- element_href: sing.info#graphics_005flib
+ element_href: sing.htm#graphics_005flib
element_text: graphics_lib
key: graphics_lib
- origin_href: sing.info#index-graphics_005flib
+ origin_href: sing.htm#index-graphics_005flib
entry: graphics_lib
texi_entry: graphics_lib
- element_href: sing.info#graphics_005flib
+ element_href: sing.htm#graphics_005flib
element_text: graphics_lib
key: Grassmann, Hubert
- origin_href: sing.info#index-Grassmann_002c-Hubert
+ origin_href: sing.htm#index-Grassmann_002c-Hubert
entry: Grassmann, Hubert
texi_entry: Grassmann, Hubert
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Greuel, Gert-Martin
- origin_href: sing.info#index-Greuel_002c-Gert_002dMartin
+ origin_href: sing.htm#index-Greuel_002c-Gert_002dMartin
entry: Greuel, Gert-Martin
texi_entry: Greuel, Gert-Martin
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: groebner
- origin_href: sing.info#index-groebner
+ origin_href: sing.htm#index-groebner
entry: groebner
texi_entry: groebner
- element_href: sing.info#groebner
+ element_href: sing.htm#groebner
element_text: groebner
key: ground field
- origin_href: sing.info#index-ground-field
+ origin_href: sing.htm#index-ground-field
entry: ground field
texi_entry: ground field
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: group_reynolds
- origin_href: sing.info#index-group_005freynolds
+ origin_href: sing.htm#index-group_005freynolds
entry: group_reynolds
texi_entry: group_reynolds
- element_href: sing.info#group_005freynolds
+ element_href: sing.htm#group_005freynolds
element_text: group_reynolds
key: GTZmod
- origin_href: sing.info#index-GTZmod
+ origin_href: sing.htm#index-GTZmod
entry: GTZmod
texi_entry: GTZmod
- element_href: sing.info#GTZmod
+ element_href: sing.htm#GTZmod
element_text: GTZmod
key: GTZopt
- origin_href: sing.info#index-GTZopt
+ origin_href: sing.htm#index-GTZopt
entry: GTZopt
texi_entry: GTZopt
- element_href: sing.info#GTZopt
+ element_href: sing.htm#GTZopt
element_text: GTZopt
key: Guidelines for writing a library
- origin_href: sing.info#index-Guidelines-for-writing-a-library
+ origin_href: sing.htm#index-Guidelines-for-writing-a-library
entry: Guidelines for writing a library
texi_entry: Guidelines for writing a library
- element_href: sing.info#Guidelines-for-writing-a-library
+ element_href: sing.htm#Guidelines-for-writing-a-library
element_text: Guidelines for writing a library
key: G_a -Invariants
- origin_href: sing.info#index-G_005fa-_002dInvariants
+ origin_href: sing.htm#index-G_005fa-_002dInvariants
entry: G_a -Invariants
texi_entry: G_a -Invariants
- element_href: sing.info#G_005fa-_002dInvariants
+ element_href: sing.htm#G_005fa-_002dInvariants
element_text: G_a -Invariants
key: H2basis
- origin_href: sing.info#index-H2basis
+ origin_href: sing.htm#index-H2basis
entry: H2basis
texi_entry: H2basis
- element_href: sing.info#H2basis
+ element_href: sing.htm#H2basis
element_text: H2basis
key: Hamburger-Noether expansion
- origin_href: sing.info#index-Hamburger_002dNoether-expansion
+ origin_href: sing.htm#index-Hamburger_002dNoether-expansion
entry: Hamburger-Noether expansion
texi_entry: Hamburger-Noether expansion
- element_href: sing.info#hnoether_005flib
+ element_href: sing.htm#hnoether_005flib
element_text: hnoether_lib
key: Hamburger-Noether expansions
- origin_href: sing.info#index-Hamburger_002dNoether-expansions
+ origin_href: sing.htm#index-Hamburger_002dNoether-expansions
entry: Hamburger-Noether expansions
texi_entry: Hamburger-Noether expansions
- element_href: sing.info#Adj_005fdiv
+ element_href: sing.htm#Adj_005fdiv
element_text: Adj_div
key: hardware platform
- origin_href: sing.info#index-hardware-platform
+ origin_href: sing.htm#index-hardware-platform
entry: hardware platform
texi_entry: hardware platform
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: Hcode
- origin_href: sing.info#index-Hcode
+ origin_href: sing.htm#index-Hcode
entry: Hcode
texi_entry: Hcode
- element_href: sing.info#Hcode
+ element_href: sing.htm#Hcode
element_text: Hcode
key: headStand
- origin_href: sing.info#index-headStand
+ origin_href: sing.htm#index-headStand
entry: headStand
texi_entry: headStand
- element_href: sing.info#headStand
+ element_href: sing.htm#headStand
element_text: headStand
key: help
- origin_href: sing.info#index-help
+ origin_href: sing.htm#index-help
entry: help
texi_entry: help
- element_href: sing.info#help
+ element_href: sing.htm#help
element_text: help
key: help browsers
- origin_href: sing.info#index-help-browsers
+ origin_href: sing.htm#index-help-browsers
entry: help browsers
texi_entry: help browsers
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, dummy
- origin_href: sing.info#index-help-browsers_002c-dummy
+ origin_href: sing.htm#index-help-browsers_002c-dummy
entry: help browsers, dummy
texi_entry: help browsers, dummy
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, dummy
- origin_href: sing.info#index-help-browsers_002c-dummy-1
+ origin_href: sing.htm#index-help-browsers_002c-dummy-1
entry: help browsers, dummy
texi_entry: help browsers, dummy
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, emacs
- origin_href: sing.info#index-help-browsers_002c-emacs
+ origin_href: sing.htm#index-help-browsers_002c-emacs
entry: help browsers, emacs
texi_entry: help browsers, emacs
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, html
- origin_href: sing.info#index-help-browsers_002c-html
+ origin_href: sing.htm#index-help-browsers_002c-html
entry: help browsers, html
texi_entry: help browsers, html
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, info
- origin_href: sing.info#index-help-browsers_002c-info
+ origin_href: sing.htm#index-help-browsers_002c-info
entry: help browsers, info
texi_entry: help browsers, info
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, netscape
- origin_href: sing.info#index-help-browsers_002c-netscape
+ origin_href: sing.htm#index-help-browsers_002c-netscape
entry: help browsers, netscape
texi_entry: help browsers, netscape
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, setting command to use
- origin_href: sing.info#index-help-browsers_002c-setting-command-to-use
+ origin_href: sing.htm#index-help-browsers_002c-setting-command-to-use
entry: help browsers, setting command to use
texi_entry: help browsers, setting command to use
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, setting the
- origin_href: sing.info#index-help-browsers_002c-setting-the
+ origin_href: sing.htm#index-help-browsers_002c-setting-the
entry: help browsers, setting the
texi_entry: help browsers, setting the
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: help browsers, tkinfo
- origin_href: sing.info#index-help-browsers_002c-tkinfo
+ origin_href: sing.htm#index-help-browsers_002c-tkinfo
entry: help browsers, tkinfo
texi_entry: help browsers, tkinfo
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, winhlp
- origin_href: sing.info#index-help-browsers_002c-winhlp
+ origin_href: sing.htm#index-help-browsers_002c-winhlp
entry: help browsers, winhlp
texi_entry: help browsers, winhlp
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help browsers, xinfo
- origin_href: sing.info#index-help-browsers_002c-xinfo
+ origin_href: sing.htm#index-help-browsers_002c-xinfo
entry: help browsers, xinfo
texi_entry: help browsers, xinfo
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: help string of a library
- origin_href: sing.info#index-help-string-of-a-library
+ origin_href: sing.htm#index-help-string-of-a-library
entry: help string of a library
texi_entry: help string of a library
- element_href: sing.info#The-help-string-of-a-library
+ element_href: sing.htm#The-help-string-of-a-library
element_text: The help string of a library
key: help string of a procedure
- origin_href: sing.info#index-help-string-of-a-procedure
+ origin_href: sing.htm#index-help-string-of-a-procedure
entry: help string of a procedure
texi_entry: help string of a procedure
- element_href: sing.info#The-help-string-of-procedures
+ element_href: sing.htm#The-help-string-of-procedures
element_text: The help string of procedures
key: help, accessing over the net
- origin_href: sing.info#index-help_002c-accessing-over-the-net
+ origin_href: sing.htm#index-help_002c-accessing-over-the-net
entry: help, accessing over the net
texi_entry: help, accessing over the net
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: help, online help system
- origin_href: sing.info#index-help_002c-online-help-system
+ origin_href: sing.htm#index-help_002c-online-help-system
entry: help, online help system
texi_entry: help, online help system
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: hessenberg
- origin_href: sing.info#index-hessenberg
+ origin_href: sing.htm#index-hessenberg
entry: hessenberg
texi_entry: hessenberg
- element_href: sing.info#hessenberg
+ element_href: sing.htm#hessenberg
element_text: hessenberg
key: highcorner
- origin_href: sing.info#index-highcorner
+ origin_href: sing.htm#index-highcorner
entry: highcorner
texi_entry: highcorner
- element_href: sing.info#highcorner
+ element_href: sing.htm#highcorner
element_text: highcorner
key: hilb
- origin_href: sing.info#index-hilb
+ origin_href: sing.htm#index-hilb
entry: hilb
texi_entry: hilb
- element_href: sing.info#hilb
+ element_href: sing.htm#hilb
element_text: hilb
key: Hilbert function
- origin_href: sing.info#index-Hilbert-function
+ origin_href: sing.htm#index-Hilbert-function
entry: Hilbert function
texi_entry: Hilbert function
- element_href: sing.info#stdhilb
+ element_href: sing.htm#stdhilb
element_text: stdhilb
key: Hilbert function
- origin_href: sing.info#index-Hilbert-function-1
+ origin_href: sing.htm#index-Hilbert-function-1
entry: Hilbert function
texi_entry: Hilbert function
- element_href: sing.info#Hilbert-function
+ element_href: sing.htm#Hilbert-function
element_text: Hilbert function
key: Hilbert series
- origin_href: sing.info#index-Hilbert-series
+ origin_href: sing.htm#index-Hilbert-series
entry: Hilbert series
texi_entry: Hilbert series
- element_href: sing.info#Hilbert-function
+ element_href: sing.htm#Hilbert-function
element_text: Hilbert function
key: HilbertSeries
- origin_href: sing.info#index-HilbertSeries
+ origin_href: sing.htm#index-HilbertSeries
entry: HilbertSeries
texi_entry: HilbertSeries
- element_href: sing.info#HilbertSeries
+ element_href: sing.htm#HilbertSeries
element_text: HilbertSeries
key: HilbertWeights
- origin_href: sing.info#index-HilbertWeights
+ origin_href: sing.htm#index-HilbertWeights
entry: HilbertWeights
texi_entry: HilbertWeights
- element_href: sing.info#HilbertWeights
+ element_href: sing.htm#HilbertWeights
element_text: HilbertWeights
key: hilbPoly
- origin_href: sing.info#index-hilbPoly
+ origin_href: sing.htm#index-hilbPoly
entry: hilbPoly
texi_entry: hilbPoly
- element_href: sing.info#hilbPoly
+ element_href: sing.htm#hilbPoly
element_text: hilbPoly
key: hilbvec
- origin_href: sing.info#index-hilbvec
+ origin_href: sing.htm#index-hilbvec
entry: hilbvec
texi_entry: hilbvec
- element_href: sing.info#hilbvec
+ element_href: sing.htm#hilbvec
element_text: hilbvec
key: hnexpansion
- origin_href: sing.info#index-hnexpansion
+ origin_href: sing.htm#index-hnexpansion
entry: hnexpansion
texi_entry: hnexpansion
- element_href: sing.info#hnexpansion
+ element_href: sing.htm#hnexpansion
element_text: hnexpansion
key: hnoether.lib
- origin_href: sing.info#index-hnoether_002elib
+ origin_href: sing.htm#index-hnoether_002elib
entry: hnoether.lib
texi_entry: hnoether.lib
- element_href: sing.info#hnoether_005flib
+ element_href: sing.htm#hnoether_005flib
element_text: hnoether_lib
key: hnoether_lib
- origin_href: sing.info#index-hnoether_005flib
+ origin_href: sing.htm#index-hnoether_005flib
entry: hnoether_lib
texi_entry: hnoether_lib
- element_href: sing.info#hnoether_005flib
+ element_href: sing.htm#hnoether_005flib
element_text: hnoether_lib
key: Hom
- origin_href: sing.info#index-Hom
+ origin_href: sing.htm#index-Hom
entry: Hom
texi_entry: Hom
- element_href: sing.info#Hom
+ element_href: sing.htm#Hom
element_text: Hom
key: HomJJ
- origin_href: sing.info#index-HomJJ
+ origin_href: sing.htm#index-HomJJ
entry: HomJJ
texi_entry: HomJJ
- element_href: sing.info#HomJJ
+ element_href: sing.htm#HomJJ
element_text: HomJJ
key: homog
- origin_href: sing.info#index-homog
+ origin_href: sing.htm#index-homog
entry: homog
texi_entry: homog
- element_href: sing.info#homog
+ element_href: sing.htm#homog
element_text: homog
key: homolog.lib
- origin_href: sing.info#index-homolog_002elib
+ origin_href: sing.htm#index-homolog_002elib
entry: homolog.lib
texi_entry: homolog.lib
- element_href: sing.info#homolog_005flib
+ element_href: sing.htm#homolog_005flib
element_text: homolog_lib
key: homology
- origin_href: sing.info#index-homology
+ origin_href: sing.htm#index-homology
entry: homology
texi_entry: homology
- element_href: sing.info#homology
+ element_href: sing.htm#homology
element_text: homology
key: homolog_lib
- origin_href: sing.info#index-homolog_005flib
+ origin_href: sing.htm#index-homolog_005flib
entry: homolog_lib
texi_entry: homolog_lib
- element_href: sing.info#homolog_005flib
+ element_href: sing.htm#homolog_005flib
element_text: homolog_lib
key: Hosten-Sturmfels algorithm
- origin_href: sing.info#index-Hosten_002dSturmfels-algorithm
+ origin_href: sing.htm#index-Hosten_002dSturmfels-algorithm
entry: Hosten-Sturmfels algorithm
texi_entry: Hosten-Sturmfels algorithm
- element_href: sing.info#Hosten-and-Sturmfels
+ element_href: sing.htm#Hosten-and-Sturmfels
element_text: Hosten and Sturmfels
key: How to enter and exit
- origin_href: sing.info#index-How-to-enter-and-exit
+ origin_href: sing.htm#index-How-to-enter-and-exit
entry: How to enter and exit
texi_entry: How to enter and exit
- element_href: sing.info#How-to-enter-and-exit
+ element_href: sing.htm#How-to-enter-and-exit
element_text: How to enter and exit
key: How to use this manual
- origin_href: sing.info#index-How-to-use-this-manual
+ origin_href: sing.htm#index-How-to-use-this-manual
entry: How to use this manual
texi_entry: How to use this manual
- element_href: sing.info#How-to-use-this-manual
+ element_href: sing.htm#How-to-use-this-manual
element_text: How to use this manual
key: howto, download
- origin_href: sing.info#index-howto_002c-download
+ origin_href: sing.htm#index-howto_002c-download
entry: howto, download
texi_entry: howto, download
- element_href: sing.info#Downloading-instructions
+ element_href: sing.htm#Downloading-instructions
element_text: Downloading instructions
key: howto, install on Macintosh
- origin_href: sing.info#index-howto_002c-install-on-Macintosh
+ origin_href: sing.htm#index-howto_002c-install-on-Macintosh
entry: howto, install on Macintosh
texi_entry: howto, install on Macintosh
- element_href: sing.info#Macintosh-installation-instructions
+ element_href: sing.htm#Macintosh-installation-instructions
element_text: Macintosh installation instructions
key: howto, install on Unix
- origin_href: sing.info#index-howto_002c-install-on-Unix
+ origin_href: sing.htm#index-howto_002c-install-on-Unix
entry: howto, install on Unix
texi_entry: howto, install on Unix
- element_href: sing.info#Unix-installation-instructions
+ element_href: sing.htm#Unix-installation-instructions
element_text: Unix installation instructions
key: howto, install on Windows
- origin_href: sing.info#index-howto_002c-install-on-Windows
+ origin_href: sing.htm#index-howto_002c-install-on-Windows
entry: howto, install on Windows
texi_entry: howto, install on Windows
- element_href: sing.info#Windows-installation-instructions
+ element_href: sing.htm#Windows-installation-instructions
element_text: Windows installation instructions
key: hres
- origin_href: sing.info#index-hres
+ origin_href: sing.htm#index-hres
entry: hres
texi_entry: hres
- element_href: sing.info#hres
+ element_href: sing.htm#hres
element_text: hres
key: html, default help
- origin_href: sing.info#index-html_002c-default-help
+ origin_href: sing.htm#index-html_002c-default-help
entry: html, default help
texi_entry: html, default help
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: html, default help
- origin_href: sing.info#index-html_002c-default-help-1
+ origin_href: sing.htm#index-html_002c-default-help-1
entry: html, default help
texi_entry: html, default help
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: hypersurface singularity
- origin_href: sing.info#index-hypersurface-singularity
+ origin_href: sing.htm#index-hypersurface-singularity
entry: hypersurface singularity
texi_entry: hypersurface singularity
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: id2mod
- origin_href: sing.info#index-id2mod
+ origin_href: sing.htm#index-id2mod
entry: id2mod
texi_entry: id2mod
- element_href: sing.info#id2mod
+ element_href: sing.htm#id2mod
element_text: id2mod
key: ideal
- origin_href: sing.info#index-ideal
+ origin_href: sing.htm#index-ideal
entry: ideal
texi_entry: ideal
- element_href: sing.info#ideal
+ element_href: sing.htm#ideal
element_text: ideal
key: ideal declarations
- origin_href: sing.info#index-ideal-declarations
+ origin_href: sing.htm#index-ideal-declarations
entry: ideal declarations
texi_entry: ideal declarations
- element_href: sing.info#ideal-declarations
+ element_href: sing.htm#ideal-declarations
element_text: ideal declarations
key: ideal expressions
- origin_href: sing.info#index-ideal-expressions
+ origin_href: sing.htm#index-ideal-expressions
entry: ideal expressions
texi_entry: ideal expressions
- element_href: sing.info#ideal-expressions
+ element_href: sing.htm#ideal-expressions
element_text: ideal expressions
key: Ideal membership
- origin_href: sing.info#index-Ideal-membership
+ origin_href: sing.htm#index-Ideal-membership
entry: Ideal membership
texi_entry: Ideal membership
- element_href: sing.info#Properties
+ element_href: sing.htm#Properties
element_text: Properties
key: ideal operations
- origin_href: sing.info#index-ideal-operations
+ origin_href: sing.htm#index-ideal-operations
entry: ideal operations
texi_entry: ideal operations
- element_href: sing.info#ideal-operations
+ element_href: sing.htm#ideal-operations
element_text: ideal operations
key: ideal related functions
- origin_href: sing.info#index-ideal-related-functions
+ origin_href: sing.htm#index-ideal-related-functions
entry: ideal related functions
texi_entry: ideal related functions
- element_href: sing.info#ideal-related-functions
+ element_href: sing.htm#ideal-related-functions
element_text: ideal related functions
key: ideal, toric
- origin_href: sing.info#index-ideal_002c-toric
+ origin_href: sing.htm#index-ideal_002c-toric
entry: ideal, toric
texi_entry: ideal, toric
- element_href: sing.info#Toric-ideals
+ element_href: sing.htm#Toric-ideals
element_text: Toric ideals
key: ideals
- origin_href: sing.info#index-ideals
+ origin_href: sing.htm#index-ideals
entry: ideals
texi_entry: ideals
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: idealSimplify
- origin_href: sing.info#index-idealSimplify
+ origin_href: sing.htm#index-idealSimplify
entry: idealSimplify
texi_entry: idealSimplify
- element_href: sing.info#idealSimplify
+ element_href: sing.htm#idealSimplify
element_text: idealSimplify
key: idealSplit
- origin_href: sing.info#index-idealSplit
+ origin_href: sing.htm#index-idealSplit
entry: idealSplit
texi_entry: idealSplit
- element_href: sing.info#idealSplit
+ element_href: sing.htm#idealSplit
element_text: idealSplit
key: identifier
- origin_href: sing.info#index-identifier
+ origin_href: sing.htm#index-identifier
entry: identifier
texi_entry: identifier
- element_href: sing.info#Identifier-resolution
+ element_href: sing.htm#Identifier-resolution
element_text: Identifier resolution
key: Identifiers, syntax of
- origin_href: sing.info#index-Identifiers_002c-syntax-of
+ origin_href: sing.htm#index-Identifiers_002c-syntax-of
entry: Identifiers, syntax of
texi_entry: Identifiers, syntax of
- element_href: sing.info#Names
+ element_href: sing.htm#Names
element_text: Names
key: if
- origin_href: sing.info#index-if
+ origin_href: sing.htm#index-if
entry: if
texi_entry: if
- element_href: sing.info#if
+ element_href: sing.htm#if
element_text: if
key: ImageGroup
- origin_href: sing.info#index-ImageGroup
+ origin_href: sing.htm#index-ImageGroup
entry: ImageGroup
texi_entry: ImageGroup
- element_href: sing.info#ImageGroup
+ element_href: sing.htm#ImageGroup
element_text: ImageGroup
key: ImageVariety
- origin_href: sing.info#index-ImageVariety
+ origin_href: sing.htm#index-ImageVariety
entry: ImageVariety
texi_entry: ImageVariety
- element_href: sing.info#ImageVariety
+ element_href: sing.htm#ImageVariety
element_text: ImageVariety
key: image_of_variety
- origin_href: sing.info#index-image_005fof_005fvariety
+ origin_href: sing.htm#index-image_005fof_005fvariety
entry: image_of_variety
texi_entry: image_of_variety
- element_href: sing.info#image_005fof_005fvariety
+ element_href: sing.htm#image_005fof_005fvariety
element_text: image_of_variety
key: imap
- origin_href: sing.info#index-imap
+ origin_href: sing.htm#index-imap
entry: imap
texi_entry: imap
- element_href: sing.info#imap
+ element_href: sing.htm#imap
element_text: imap
key: Imap, option
- origin_href: sing.info#index-Imap_002c-option
+ origin_href: sing.htm#index-Imap_002c-option
entry: Imap, option
texi_entry: Imap, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: imapall
- origin_href: sing.info#index-imapall
+ origin_href: sing.htm#index-imapall
entry: imapall
texi_entry: imapall
- element_href: sing.info#imapall
+ element_href: sing.htm#imapall
element_text: imapall
key: impart
- origin_href: sing.info#index-impart
+ origin_href: sing.htm#index-impart
entry: impart
texi_entry: impart
- element_href: sing.info#impart
+ element_href: sing.htm#impart
element_text: impart
key: Implemented algorithms
- origin_href: sing.info#index-Implemented-algorithms
+ origin_href: sing.htm#index-Implemented-algorithms
entry: Implemented algorithms
texi_entry: Implemented algorithms
- element_href: sing.info#Implemented-algorithms
+ element_href: sing.htm#Implemented-algorithms
element_text: Implemented algorithms
key: IN
- origin_href: sing.info#index-IN
+ origin_href: sing.htm#index-IN
entry: IN
texi_entry: IN
- element_href: sing.info#lead
+ element_href: sing.htm#lead
element_text: lead
key: indepSet
- origin_href: sing.info#index-indepSet
+ origin_href: sing.htm#index-indepSet
entry: indepSet
texi_entry: indepSet
- element_href: sing.info#indepSet
+ element_href: sing.htm#indepSet
element_text: indepSet
key: Index
- origin_href: sing.info#index-Index
+ origin_href: sing.htm#index-Index
entry: Index
texi_entry: Index
- element_href: sing.info#Index
+ element_href: sing.htm#Index
element_text: Index
key: indexed names
- origin_href: sing.info#index-indexed-names
+ origin_href: sing.htm#index-indexed-names
entry: indexed names
texi_entry: indexed names
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: indSet
- origin_href: sing.info#index-indSet
+ origin_href: sing.htm#index-indSet
entry: indSet
texi_entry: indSet
- element_href: sing.info#indSet
+ element_href: sing.htm#indSet
element_text: indSet
key: info
- origin_href: sing.info#index-info
+ origin_href: sing.htm#index-info
entry: info
texi_entry: info
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: info
- origin_href: sing.info#index-info-1
+ origin_href: sing.htm#index-info-1
entry: info
texi_entry: info
- element_href: sing.info#Info-help-browsers
+ element_href: sing.htm#Info-help-browsers
element_text: Info help browsers
key: INFO environment variable
- origin_href: sing.info#index-INFO-environment-variable
+ origin_href: sing.htm#index-INFO-environment-variable
entry: INFO environment variable
texi_entry: INFO environment variable
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: info in a library
- origin_href: sing.info#index-info-in-a-library
+ origin_href: sing.htm#index-info-in-a-library
entry: info in a library
texi_entry: info in a library
- element_href: sing.info#Format-of-a-library
+ element_href: sing.htm#Format-of-a-library
element_text: Format of a library
key: info string of a library
- origin_href: sing.info#index-info-string-of-a-library
+ origin_href: sing.htm#index-info-string-of-a-library
entry: info string of a library
texi_entry: info string of a library
- element_href: sing.info#The-help-string-of-a-library
+ element_href: sing.htm#The-help-string-of-a-library
element_text: The help string of a library
key: init_debug
- origin_href: sing.info#index-init_005fdebug
+ origin_href: sing.htm#index-init_005fdebug
entry: init_debug
texi_entry: init_debug
- element_href: sing.info#init_005fdebug
+ element_href: sing.htm#init_005fdebug
element_text: init_debug
key: inout.lib
- origin_href: sing.info#index-inout_002elib
+ origin_href: sing.htm#index-inout_002elib
entry: inout.lib
texi_entry: inout.lib
- element_href: sing.info#inout_005flib
+ element_href: sing.htm#inout_005flib
element_text: inout_lib
key: inout_lib
- origin_href: sing.info#index-inout_005flib
+ origin_href: sing.htm#index-inout_005flib
entry: inout_lib
texi_entry: inout_lib
- element_href: sing.info#inout_005flib
+ element_href: sing.htm#inout_005flib
element_text: inout_lib
key: input
- origin_href: sing.info#index-input
+ origin_href: sing.htm#index-input
entry: input
texi_entry: input
- element_href: sing.info#Input-and-output
+ element_href: sing.htm#Input-and-output
element_text: Input and output
key: insert
- origin_href: sing.info#index-insert
+ origin_href: sing.htm#index-insert
entry: insert
texi_entry: insert
- element_href: sing.info#insert
+ element_href: sing.htm#insert
element_text: insert
key: instructions, downloading
- origin_href: sing.info#index-instructions_002c-downloading
+ origin_href: sing.htm#index-instructions_002c-downloading
entry: instructions, downloading
texi_entry: instructions, downloading
- element_href: sing.info#Downloading-instructions
+ element_href: sing.htm#Downloading-instructions
element_text: Downloading instructions
key: instructions, Macintosh installation
- origin_href: sing.info#index-instructions_002c-Macintosh-installation
+ origin_href: sing.htm#index-instructions_002c-Macintosh-installation
entry: instructions, Macintosh installation
texi_entry: instructions, Macintosh installation
- element_href: sing.info#Macintosh-installation-instructions
+ element_href: sing.htm#Macintosh-installation-instructions
element_text: Macintosh installation instructions
key: instructions, Unix installation
- origin_href: sing.info#index-instructions_002c-Unix-installation
+ origin_href: sing.htm#index-instructions_002c-Unix-installation
entry: instructions, Unix installation
texi_entry: instructions, Unix installation
- element_href: sing.info#Unix-installation-instructions
+ element_href: sing.htm#Unix-installation-instructions
element_text: Unix installation instructions
key: instructions, Windows installation
- origin_href: sing.info#index-instructions_002c-Windows-installation
+ origin_href: sing.htm#index-instructions_002c-Windows-installation
entry: instructions, Windows installation
texi_entry: instructions, Windows installation
- element_href: sing.info#Windows-installation-instructions
+ element_href: sing.htm#Windows-installation-instructions
element_text: Windows installation instructions
key: inSubring
- origin_href: sing.info#index-inSubring
+ origin_href: sing.htm#index-inSubring
entry: inSubring
texi_entry: inSubring
- element_href: sing.info#inSubring
+ element_href: sing.htm#inSubring
element_text: inSubring
key: int
- origin_href: sing.info#index-int
+ origin_href: sing.htm#index-int
entry: int
texi_entry: int
- element_href: sing.info#int
+ element_href: sing.htm#int
element_text: int
key: int declarations
- origin_href: sing.info#index-int-declarations
+ origin_href: sing.htm#index-int-declarations
entry: int declarations
texi_entry: int declarations
- element_href: sing.info#int-declarations
+ element_href: sing.htm#int-declarations
element_text: int declarations
key: int expressions
- origin_href: sing.info#index-int-expressions
+ origin_href: sing.htm#index-int-expressions
entry: int expressions
texi_entry: int expressions
- element_href: sing.info#int-expressions
+ element_href: sing.htm#int-expressions
element_text: int expressions
key: int operations
- origin_href: sing.info#index-int-operations
+ origin_href: sing.htm#index-int-operations
entry: int operations
texi_entry: int operations
- element_href: sing.info#int-operations
+ element_href: sing.htm#int-operations
element_text: int operations
key: int related functions
- origin_href: sing.info#index-int-related-functions
+ origin_href: sing.htm#index-int-related-functions
entry: int related functions
texi_entry: int related functions
- element_href: sing.info#int-related-functions
+ element_href: sing.htm#int-related-functions
element_text: int related functions
key: integer division
- origin_href: sing.info#index-integer-division
+ origin_href: sing.htm#index-integer-division
entry: integer division
texi_entry: integer division
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: integer programming
- origin_href: sing.info#index-integer-programming
+ origin_href: sing.htm#index-integer-programming
entry: integer programming
texi_entry: integer programming
- element_href: sing.info#Integer-programming
+ element_href: sing.htm#Integer-programming
element_text: Integer programming
key: Interactive use
- origin_href: sing.info#index-Interactive-use
+ origin_href: sing.htm#index-Interactive-use
entry: Interactive use
texi_entry: Interactive use
- element_href: sing.info#Interactive-use
+ element_href: sing.htm#Interactive-use
element_text: Interactive use
key: interface, Emacs
- origin_href: sing.info#index-interface_002c-Emacs
+ origin_href: sing.htm#index-interface_002c-Emacs
entry: interface, Emacs
texi_entry: interface, Emacs
- element_href: sing.info#Emacs-user-interface
+ element_href: sing.htm#Emacs-user-interface
element_text: Emacs user interface
key: internalfunctions
- origin_href: sing.info#index-internalfunctions
+ origin_href: sing.htm#index-internalfunctions
entry: internalfunctions
texi_entry: internalfunctions
- element_href: sing.info#internalfunctions
+ element_href: sing.htm#internalfunctions
element_text: internalfunctions
key: interpolate
- origin_href: sing.info#index-interpolate
+ origin_href: sing.htm#index-interpolate
entry: interpolate
texi_entry: interpolate
- element_href: sing.info#interpolate
+ element_href: sing.htm#interpolate
element_text: interpolate
key: interred
- origin_href: sing.info#index-interred
+ origin_href: sing.htm#index-interred
entry: interred
texi_entry: interred
- element_href: sing.info#interred
+ element_href: sing.htm#interred
element_text: interred
key: Interrupting SINGULAR
- origin_href: sing.info#index-Interrupting-SINGULAR
+ origin_href: sing.htm#index-Interrupting-SINGULAR
entry: Interrupting SINGULAR
texi_entry: Interrupting SINGULAR
- element_href: sing.info#Interrupting-SINGULAR
+ element_href: sing.htm#Interrupting-SINGULAR
element_text: Interrupting SINGULAR
key: intersect
- origin_href: sing.info#index-intersect
+ origin_href: sing.htm#index-intersect
entry: intersect
texi_entry: intersect
- element_href: sing.info#intersect
+ element_href: sing.htm#intersect
element_text: intersect
key: intersection
- origin_href: sing.info#index-intersection
+ origin_href: sing.htm#index-intersection
entry: intersection
texi_entry: intersection
- element_href: sing.info#intersection
+ element_href: sing.htm#intersection
element_text: intersection
key: intersection multiplicity
- origin_href: sing.info#index-intersection-multiplicity
+ origin_href: sing.htm#index-intersection-multiplicity
entry: intersection multiplicity
texi_entry: intersection multiplicity
- element_href: sing.info#intersection
+ element_href: sing.htm#intersection
element_text: intersection
key: intmat
- origin_href: sing.info#index-intmat
+ origin_href: sing.htm#index-intmat
entry: intmat
texi_entry: intmat
- element_href: sing.info#intmat
+ element_href: sing.htm#intmat
element_text: intmat
key: intmat declarations
- origin_href: sing.info#index-intmat-declarations
+ origin_href: sing.htm#index-intmat-declarations
entry: intmat declarations
texi_entry: intmat declarations
- element_href: sing.info#intmat-declarations
+ element_href: sing.htm#intmat-declarations
element_text: intmat declarations
key: intmat expressions
- origin_href: sing.info#index-intmat-expressions
+ origin_href: sing.htm#index-intmat-expressions
entry: intmat expressions
texi_entry: intmat expressions
- element_href: sing.info#intmat-expressions
+ element_href: sing.htm#intmat-expressions
element_text: intmat expressions
key: intmat operations
- origin_href: sing.info#index-intmat-operations
+ origin_href: sing.htm#index-intmat-operations
entry: intmat operations
texi_entry: intmat operations
- element_href: sing.info#intmat-operations
+ element_href: sing.htm#intmat-operations
element_text: intmat operations
key: intmat related functions
- origin_href: sing.info#index-intmat-related-functions
+ origin_href: sing.htm#index-intmat-related-functions
entry: intmat related functions
texi_entry: intmat related functions
- element_href: sing.info#intmat-related-functions
+ element_href: sing.htm#intmat-related-functions
element_text: intmat related functions
key: intmat type cast
- origin_href: sing.info#index-intmat-type-cast
+ origin_href: sing.htm#index-intmat-type-cast
entry: intmat type cast
texi_entry: intmat type cast
- element_href: sing.info#intmat-type-cast
+ element_href: sing.htm#intmat-type-cast
element_text: intmat type cast
key: intprog.lib
- origin_href: sing.info#index-intprog_002elib
+ origin_href: sing.htm#index-intprog_002elib
entry: intprog.lib
texi_entry: intprog.lib
- element_href: sing.info#intprog_005flib
+ element_href: sing.htm#intprog_005flib
element_text: intprog_lib
key: intprog_lib
- origin_href: sing.info#index-intprog_005flib
+ origin_href: sing.htm#index-intprog_005flib
entry: intprog_lib
texi_entry: intprog_lib
- element_href: sing.info#intprog_005flib
+ element_href: sing.htm#intprog_005flib
element_text: intprog_lib
key: Introduction
- origin_href: sing.info#index-Introduction
+ origin_href: sing.htm#index-Introduction
entry: Introduction
texi_entry: Introduction
- element_href: sing.info#Introduction
+ element_href: sing.htm#Introduction
element_text: Introduction
key: intStrategy, option
- origin_href: sing.info#index-intStrategy_002c-option
+ origin_href: sing.htm#index-intStrategy_002c-option
entry: intStrategy, option
texi_entry: intStrategy, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: intvec
- origin_href: sing.info#index-intvec
+ origin_href: sing.htm#index-intvec
entry: intvec
texi_entry: intvec
- element_href: sing.info#intvec
+ element_href: sing.htm#intvec
element_text: intvec
key: intvec declarations
- origin_href: sing.info#index-intvec-declarations
+ origin_href: sing.htm#index-intvec-declarations
entry: intvec declarations
texi_entry: intvec declarations
- element_href: sing.info#intvec-declarations
+ element_href: sing.htm#intvec-declarations
element_text: intvec declarations
key: intvec expressions
- origin_href: sing.info#index-intvec-expressions
+ origin_href: sing.htm#index-intvec-expressions
entry: intvec expressions
texi_entry: intvec expressions
- element_href: sing.info#intvec-expressions
+ element_href: sing.htm#intvec-expressions
element_text: intvec expressions
key: intvec operations
- origin_href: sing.info#index-intvec-operations
+ origin_href: sing.htm#index-intvec-operations
entry: intvec operations
texi_entry: intvec operations
- element_href: sing.info#intvec-operations
+ element_href: sing.htm#intvec-operations
element_text: intvec operations
key: intvec related functions
- origin_href: sing.info#index-intvec-related-functions
+ origin_href: sing.htm#index-intvec-related-functions
entry: intvec related functions
texi_entry: intvec related functions
- element_href: sing.info#intvec-related-functions
+ element_href: sing.htm#intvec-related-functions
element_text: intvec related functions
key: Invariant theory
- origin_href: sing.info#index-Invariant-theory
+ origin_href: sing.htm#index-Invariant-theory
entry: Invariant theory
texi_entry: Invariant theory
- element_href: sing.info#Invariant-theory
+ element_href: sing.htm#Invariant-theory
element_text: Invariant theory
key: InvariantQ
- origin_href: sing.info#index-InvariantQ
+ origin_href: sing.htm#index-InvariantQ
entry: InvariantQ
texi_entry: InvariantQ
- element_href: sing.info#InvariantQ
+ element_href: sing.htm#InvariantQ
element_text: InvariantQ
key: invariantRing
- origin_href: sing.info#index-invariantRing
+ origin_href: sing.htm#index-invariantRing
entry: invariantRing
texi_entry: invariantRing
- element_href: sing.info#invariantRing
+ element_href: sing.htm#invariantRing
element_text: invariantRing
key: InvariantRing
- origin_href: sing.info#index-InvariantRing
+ origin_href: sing.htm#index-InvariantRing
entry: InvariantRing
texi_entry: InvariantRing
- element_href: sing.info#InvariantRing
+ element_href: sing.htm#InvariantRing
element_text: InvariantRing
key: invariants
- origin_href: sing.info#index-invariants
+ origin_href: sing.htm#index-invariants
entry: invariants
texi_entry: invariants
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: Invariants of a finite group
- origin_href: sing.info#index-Invariants-of-a-finite-group
+ origin_href: sing.htm#index-Invariants-of-a-finite-group
entry: Invariants of a finite group
texi_entry: Invariants of a finite group
- element_href: sing.info#Invariants-of-a-finite-group
+ element_href: sing.htm#Invariants-of-a-finite-group
element_text: Invariants of a finite group
key: invariant_basis
- origin_href: sing.info#index-invariant_005fbasis
+ origin_href: sing.htm#index-invariant_005fbasis
entry: invariant_basis
texi_entry: invariant_basis
- element_href: sing.info#invariant_005fbasis
+ element_href: sing.htm#invariant_005fbasis
element_text: invariant_basis
key: invariant_basis_reynolds
- origin_href: sing.info#index-invariant_005fbasis_005freynolds
+ origin_href: sing.htm#index-invariant_005fbasis_005freynolds
entry: invariant_basis_reynolds
texi_entry: invariant_basis_reynolds
- element_href: sing.info#invariant_005fbasis_005freynolds
+ element_href: sing.htm#invariant_005fbasis_005freynolds
element_text: invariant_basis_reynolds
key: invariant_ring
- origin_href: sing.info#index-invariant_005fring
+ origin_href: sing.htm#index-invariant_005fring
entry: invariant_ring
texi_entry: invariant_ring
- element_href: sing.info#invariant_005fring
+ element_href: sing.htm#invariant_005fring
element_text: invariant_ring
key: invariant_ring_random
- origin_href: sing.info#index-invariant_005fring_005frandom
+ origin_href: sing.htm#index-invariant_005fring_005frandom
entry: invariant_ring_random
texi_entry: invariant_ring_random
- element_href: sing.info#invariant_005fring_005frandom
+ element_href: sing.htm#invariant_005fring_005frandom
element_text: invariant_ring_random
key: inverse
- origin_href: sing.info#index-inverse
+ origin_href: sing.htm#index-inverse
entry: inverse
texi_entry: inverse
- element_href: sing.info#inverse
+ element_href: sing.htm#inverse
element_text: inverse
key: inverse_B
- origin_href: sing.info#index-inverse_005fB
+ origin_href: sing.htm#index-inverse_005fB
entry: inverse_B
texi_entry: inverse_B
- element_href: sing.info#inverse_005fB
+ element_href: sing.htm#inverse_005fB
element_text: inverse_B
key: inverse_L
- origin_href: sing.info#index-inverse_005fL
+ origin_href: sing.htm#index-inverse_005fL
entry: inverse_L
texi_entry: inverse_L
- element_href: sing.info#inverse_005fL
+ element_href: sing.htm#inverse_005fL
element_text: inverse_L
key: InvertNumberMain
- origin_href: sing.info#index-InvertNumberMain
+ origin_href: sing.htm#index-InvertNumberMain
entry: InvertNumberMain
texi_entry: InvertNumberMain
- element_href: sing.info#InvertNumberMain
+ element_href: sing.htm#InvertNumberMain
element_text: InvertNumberMain
key: invunit
- origin_href: sing.info#index-invunit
+ origin_href: sing.htm#index-invunit
entry: invunit
texi_entry: invunit
- element_href: sing.info#invunit
+ element_href: sing.htm#invunit
element_text: invunit
key: irreducible power series
- origin_href: sing.info#index-irreducible-power-series
+ origin_href: sing.htm#index-irreducible-power-series
entry: irreducible power series
texi_entry: irreducible power series
- element_href: sing.info#is_005firred
+ element_href: sing.htm#is_005firred
element_text: is_irred
key: isCM
- origin_href: sing.info#index-isCM
+ origin_href: sing.htm#index-isCM
entry: isCM
texi_entry: isCM
- element_href: sing.info#isCM
+ element_href: sing.htm#isCM
element_text: isCM
key: isCMcod2
- origin_href: sing.info#index-isCMcod2
+ origin_href: sing.htm#index-isCMcod2
entry: isCMcod2
texi_entry: isCMcod2
- element_href: sing.info#isCMcod2
+ element_href: sing.htm#isCMcod2
element_text: isCMcod2
key: isEquising
- origin_href: sing.info#index-isEquising
+ origin_href: sing.htm#index-isEquising
entry: isEquising
texi_entry: isEquising
- element_href: sing.info#isEquising
+ element_href: sing.htm#isEquising
element_text: isEquising
key: isFlat
- origin_href: sing.info#index-isFlat
+ origin_href: sing.htm#index-isFlat
entry: isFlat
texi_entry: isFlat
- element_href: sing.info#isFlat
+ element_href: sing.htm#isFlat
element_text: isFlat
key: isLocallyFree
- origin_href: sing.info#index-isLocallyFree
+ origin_href: sing.htm#index-isLocallyFree
entry: isLocallyFree
texi_entry: isLocallyFree
- element_href: sing.info#isLocallyFree
+ element_href: sing.htm#isLocallyFree
element_text: isLocallyFree
key: isReg
- origin_href: sing.info#index-isReg
+ origin_href: sing.htm#index-isReg
entry: isReg
texi_entry: isReg
- element_href: sing.info#isReg
+ element_href: sing.htm#isReg
element_text: isReg
key: is_active
- origin_href: sing.info#index-is_005factive
+ origin_href: sing.htm#index-is_005factive
entry: is_active
texi_entry: is_active
- element_href: sing.info#is_005factive
+ element_href: sing.htm#is_005factive
element_text: is_active
key: is_bijective
- origin_href: sing.info#index-is_005fbijective
+ origin_href: sing.htm#index-is_005fbijective
entry: is_bijective
texi_entry: is_bijective
- element_href: sing.info#is_005fbijective
+ element_href: sing.htm#is_005fbijective
element_text: is_bijective
key: is_ci
- origin_href: sing.info#index-is_005fci
+ origin_href: sing.htm#index-is_005fci
entry: is_ci
texi_entry: is_ci
- element_href: sing.info#is_005fci
+ element_href: sing.htm#is_005fci
element_text: is_ci
key: is_complex
- origin_href: sing.info#index-is_005fcomplex
+ origin_href: sing.htm#index-is_005fcomplex
entry: is_complex
texi_entry: is_complex
- element_href: sing.info#is_005fcomplex
+ element_href: sing.htm#is_005fcomplex
element_text: is_complex
key: is_homog
- origin_href: sing.info#index-is_005fhomog
+ origin_href: sing.htm#index-is_005fhomog
entry: is_homog
texi_entry: is_homog
- element_href: sing.info#is_005fhomog
+ element_href: sing.htm#is_005fhomog
element_text: is_homog
key: is_injective
- origin_href: sing.info#index-is_005finjective
+ origin_href: sing.htm#index-is_005finjective
entry: is_injective
texi_entry: is_injective
- element_href: sing.info#is_005finjective
+ element_href: sing.htm#is_005finjective
element_text: is_injective
key: is_irred
- origin_href: sing.info#index-is_005firred
+ origin_href: sing.htm#index-is_005firred
entry: is_irred
texi_entry: is_irred
- element_href: sing.info#is_005firred
+ element_href: sing.htm#is_005firred
element_text: is_irred
key: is_is
- origin_href: sing.info#index-is_005fis
+ origin_href: sing.htm#index-is_005fis
entry: is_is
texi_entry: is_is
- element_href: sing.info#is_005fis
+ element_href: sing.htm#is_005fis
element_text: is_is
key: is_NND
- origin_href: sing.info#index-is_005fNND
+ origin_href: sing.htm#index-is_005fNND
entry: is_NND
texi_entry: is_NND
- element_href: sing.info#is_005fNND
+ element_href: sing.htm#is_005fNND
element_text: is_NND
key: is_reg
- origin_href: sing.info#index-is_005freg
+ origin_href: sing.htm#index-is_005freg
entry: is_reg
texi_entry: is_reg
- element_href: sing.info#is_005freg
+ element_href: sing.htm#is_005freg
element_text: is_reg
key: is_regs
- origin_href: sing.info#index-is_005fregs
+ origin_href: sing.htm#index-is_005fregs
entry: is_regs
texi_entry: is_regs
- element_href: sing.info#is_005fregs
+ element_href: sing.htm#is_005fregs
element_text: is_regs
key: is_surjective
- origin_href: sing.info#index-is_005fsurjective
+ origin_href: sing.htm#index-is_005fsurjective
entry: is_surjective
texi_entry: is_surjective
- element_href: sing.info#is_005fsurjective
+ element_href: sing.htm#is_005fsurjective
element_text: is_surjective
key: is_zero
- origin_href: sing.info#index-is_005fzero
+ origin_href: sing.htm#index-is_005fzero
entry: is_zero
texi_entry: is_zero
- element_href: sing.info#is_005fzero
+ element_href: sing.htm#is_005fzero
element_text: is_zero
key: jacob
- origin_href: sing.info#index-jacob
+ origin_href: sing.htm#index-jacob
entry: jacob
texi_entry: jacob
- element_href: sing.info#jacob
+ element_href: sing.htm#jacob
element_text: jacob
key: jacoblift
- origin_href: sing.info#index-jacoblift
+ origin_href: sing.htm#index-jacoblift
entry: jacoblift
texi_entry: jacoblift
- element_href: sing.info#jacoblift
+ element_href: sing.htm#jacoblift
element_text: jacoblift
key: jet
- origin_href: sing.info#index-jet
+ origin_href: sing.htm#index-jet
entry: jet
texi_entry: jet
- element_href: sing.info#jet
+ element_href: sing.htm#jet
element_text: jet
key: jordan
- origin_href: sing.info#index-jordan
+ origin_href: sing.htm#index-jordan
entry: jordan
texi_entry: jordan
- element_href: sing.info#jordan
+ element_href: sing.htm#jordan
element_text: jordan
key: jordanbasis
- origin_href: sing.info#index-jordanbasis
+ origin_href: sing.htm#index-jordanbasis
entry: jordanbasis
texi_entry: jordanbasis
- element_href: sing.info#jordanbasis
+ element_href: sing.htm#jordanbasis
element_text: jordanbasis
key: jordanmatrix
- origin_href: sing.info#index-jordanmatrix
+ origin_href: sing.htm#index-jordanmatrix
entry: jordanmatrix
texi_entry: jordanmatrix
- element_href: sing.info#jordanmatrix
+ element_href: sing.htm#jordanmatrix
element_text: jordanmatrix
key: jordannf
- origin_href: sing.info#index-jordannf
+ origin_href: sing.htm#index-jordannf
entry: jordannf
texi_entry: jordannf
- element_href: sing.info#jordannf
+ element_href: sing.htm#jordannf
element_text: jordannf
key: katsura
- origin_href: sing.info#index-katsura
+ origin_href: sing.htm#index-katsura
entry: katsura
texi_entry: katsura
- element_href: sing.info#katsura
+ element_href: sing.htm#katsura
element_text: katsura
key: kbase
- origin_href: sing.info#index-kbase
+ origin_href: sing.htm#index-kbase
entry: kbase
texi_entry: kbase
- element_href: sing.info#kbase
+ element_href: sing.htm#kbase
element_text: kbase
key: keepring
- origin_href: sing.info#index-keepring
+ origin_href: sing.htm#index-keepring
entry: keepring
texi_entry: keepring
- element_href: sing.info#keepring
+ element_href: sing.htm#keepring
element_text: keepring
key: Keilen, Thomas
- origin_href: sing.info#index-Keilen_002c-Thomas
+ origin_href: sing.htm#index-Keilen_002c-Thomas
entry: Keilen, Thomas
texi_entry: Keilen, Thomas
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: kernel
- origin_href: sing.info#index-kernel
+ origin_href: sing.htm#index-kernel
entry: kernel
texi_entry: kernel
- element_href: sing.info#preimage
+ element_href: sing.htm#preimage
element_text: preimage
key: kernel
- origin_href: sing.info#index-kernel-1
+ origin_href: sing.htm#index-kernel-1
entry: kernel
texi_entry: kernel
- element_href: sing.info#kernel
+ element_href: sing.htm#kernel
element_text: kernel
key: Kernel of module homomorphisms
- origin_href: sing.info#index-Kernel-of-module-homomorphisms
+ origin_href: sing.htm#index-Kernel-of-module-homomorphisms
entry: Kernel of module homomorphisms
texi_entry: Kernel of module homomorphisms
- element_href: sing.info#Kernel-of-module-homomorphisms
+ element_href: sing.htm#Kernel-of-module-homomorphisms
element_text: Kernel of module homomorphisms
key: kill
- origin_href: sing.info#index-kill
+ origin_href: sing.htm#index-kill
entry: kill
texi_entry: kill
- element_href: sing.info#kill
+ element_href: sing.htm#kill
element_text: kill
key: killall
- origin_href: sing.info#index-killall
+ origin_href: sing.htm#index-killall
entry: killall
texi_entry: killall
- element_href: sing.info#killall
+ element_href: sing.htm#killall
element_text: killall
key: killattrib
- origin_href: sing.info#index-killattrib
+ origin_href: sing.htm#index-killattrib
entry: killattrib
texi_entry: killattrib
- element_href: sing.info#killattrib
+ element_href: sing.htm#killattrib
element_text: killattrib
key: kill_rings
- origin_href: sing.info#index-kill_005frings
+ origin_href: sing.htm#index-kill_005frings
entry: kill_rings
texi_entry: kill_rings
- element_href: sing.info#kill_005frings
+ element_href: sing.htm#kill_005frings
element_text: kill_rings
key: kmemory
- origin_href: sing.info#index-kmemory
+ origin_href: sing.htm#index-kmemory
entry: kmemory
texi_entry: kmemory
- element_href: sing.info#kmemory
+ element_href: sing.htm#kmemory
element_text: kmemory
key: kohom
- origin_href: sing.info#index-kohom
+ origin_href: sing.htm#index-kohom
entry: kohom
texi_entry: kohom
- element_href: sing.info#kohom
+ element_href: sing.htm#kohom
element_text: kohom
key: kontrahom
- origin_href: sing.info#index-kontrahom
+ origin_href: sing.htm#index-kontrahom
entry: kontrahom
texi_entry: kontrahom
- element_href: sing.info#kontrahom
+ element_href: sing.htm#kontrahom
element_text: kontrahom
key: koszul
- origin_href: sing.info#index-koszul
+ origin_href: sing.htm#index-koszul
entry: koszul
texi_entry: koszul
- element_href: sing.info#koszul
+ element_href: sing.htm#koszul
element_text: koszul
key: KoszulHomology
- origin_href: sing.info#index-KoszulHomology
+ origin_href: sing.htm#index-KoszulHomology
entry: KoszulHomology
texi_entry: KoszulHomology
- element_href: sing.info#KoszulHomology
+ element_href: sing.htm#KoszulHomology
element_text: KoszulHomology
key: Kru"ger, Kai
- origin_href: sing.info#index-Kruger_002c-Kai
+ origin_href: sing.htm#index-Kruger_002c-Kai
entry: Kru"ger, Kai
texi_entry: Kr@"uger, Kai
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: KSpencerKernel
- origin_href: sing.info#index-KSpencerKernel
+ origin_href: sing.htm#index-KSpencerKernel
entry: KSpencerKernel
texi_entry: KSpencerKernel
- element_href: sing.info#KSpencerKernel
+ element_href: sing.htm#KSpencerKernel
element_text: KSpencerKernel
key: laguerre
- origin_href: sing.info#index-laguerre
+ origin_href: sing.htm#index-laguerre
entry: laguerre
texi_entry: laguerre
- element_href: sing.info#laguerre
+ element_href: sing.htm#laguerre
element_text: laguerre
key: laguerre_solve
- origin_href: sing.info#index-laguerre_005fsolve
+ origin_href: sing.htm#index-laguerre_005fsolve
entry: laguerre_solve
texi_entry: laguerre_solve
- element_href: sing.info#laguerre_005fsolve
+ element_href: sing.htm#laguerre_005fsolve
element_text: laguerre_solve
key: latex.lib
- origin_href: sing.info#index-latex_002elib
+ origin_href: sing.htm#index-latex_002elib
entry: latex.lib
texi_entry: latex.lib
- element_href: sing.info#latex_005flib
+ element_href: sing.htm#latex_005flib
element_text: latex_lib
key: latex_lib
- origin_href: sing.info#index-latex_005flib
+ origin_href: sing.htm#index-latex_005flib
entry: latex_lib
texi_entry: latex_lib
- element_href: sing.info#latex_005flib
+ element_href: sing.htm#latex_005flib
element_text: latex_lib
key: lcm
- origin_href: sing.info#index-lcm
+ origin_href: sing.htm#index-lcm
entry: lcm
texi_entry: lcm
- element_href: sing.info#lcm
+ element_href: sing.htm#lcm
element_text: lcm
key: lead
- origin_href: sing.info#index-lead
+ origin_href: sing.htm#index-lead
entry: lead
texi_entry: lead
- element_href: sing.info#lead
+ element_href: sing.htm#lead
element_text: lead
key: leadcoef
- origin_href: sing.info#index-leadcoef
+ origin_href: sing.htm#index-leadcoef
entry: leadcoef
texi_entry: leadcoef
- element_href: sing.info#leadcoef
+ element_href: sing.htm#leadcoef
element_text: leadcoef
key: leadexp
- origin_href: sing.info#index-leadexp
+ origin_href: sing.htm#index-leadexp
entry: leadexp
texi_entry: leadexp
- element_href: sing.info#leadexp
+ element_href: sing.htm#leadexp
element_text: leadexp
key: leadmonom
- origin_href: sing.info#index-leadmonom
+ origin_href: sing.htm#index-leadmonom
entry: leadmonom
texi_entry: leadmonom
- element_href: sing.info#leadmonom
+ element_href: sing.htm#leadmonom
element_text: leadmonom
key: Levandovskyy, Viktor
- origin_href: sing.info#index-Levandovskyy_002c-Viktor
+ origin_href: sing.htm#index-Levandovskyy_002c-Viktor
entry: Levandovskyy, Viktor
texi_entry: Levandovskyy, Viktor
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: lexicographical ordering
- origin_href: sing.info#index-lexicographical-ordering
+ origin_href: sing.htm#index-lexicographical-ordering
entry: lexicographical ordering
texi_entry: lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: lex_solve
- origin_href: sing.info#index-lex_005fsolve
+ origin_href: sing.htm#index-lex_005fsolve
entry: lex_solve
texi_entry: lex_solve
- element_href: sing.info#lex_005fsolve
+ element_href: sing.htm#lex_005fsolve
element_text: lex_solve
key: LIB
- origin_href: sing.info#index-LIB
+ origin_href: sing.htm#index-LIB
entry: LIB
texi_entry: LIB
- element_href: sing.info#LIB
+ element_href: sing.htm#LIB
element_text: LIB
key: lib2doc
- origin_href: sing.info#index-lib2doc
+ origin_href: sing.htm#index-lib2doc
entry: lib2doc
texi_entry: lib2doc
- element_href: sing.info#lib2doc
+ element_href: sing.htm#lib2doc
element_text: lib2doc
key: libfac
- origin_href: sing.info#index-libfac
+ origin_href: sing.htm#index-libfac
entry: libfac
texi_entry: libfac
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: libparse
- origin_href: sing.info#index-libparse
+ origin_href: sing.htm#index-libparse
entry: libparse
texi_entry: libparse
- element_href: sing.info#libparse
+ element_href: sing.htm#libparse
element_text: libparse
key: Libraries
- origin_href: sing.info#index-Libraries
+ origin_href: sing.htm#index-Libraries
entry: Libraries
texi_entry: Libraries
- element_href: sing.info#Libraries
+ element_href: sing.htm#Libraries
element_text: Libraries
key: library, documentation
- origin_href: sing.info#index-library_002c-documentation
+ origin_href: sing.htm#index-library_002c-documentation
entry: library, documentation
texi_entry: library, documentation
- element_href: sing.info#Documentation-of-a-library
+ element_href: sing.htm#Documentation-of-a-library
element_text: Documentation of a library
key: library, Guidelines for writing
- origin_href: sing.info#index-library_002c-Guidelines-for-writing
+ origin_href: sing.htm#index-library_002c-Guidelines-for-writing
entry: library, Guidelines for writing
texi_entry: library, Guidelines for writing
- element_href: sing.info#Guidelines-for-writing-a-library
+ element_href: sing.htm#Guidelines-for-writing-a-library
element_text: Guidelines for writing a library
key: library, help string
- origin_href: sing.info#index-library_002c-help-string
+ origin_href: sing.htm#index-library_002c-help-string
entry: library, help string
texi_entry: library, help string
- element_href: sing.info#The-help-string-of-a-library
+ element_href: sing.htm#The-help-string-of-a-library
element_text: The help string of a library
key: library, info string
- origin_href: sing.info#index-library_002c-info-string
+ origin_href: sing.htm#index-library_002c-info-string
entry: library, info string
texi_entry: library, info string
- element_href: sing.info#The-help-string-of-a-library
+ element_href: sing.htm#The-help-string-of-a-library
element_text: The help string of a library
key: library, info string
- origin_href: sing.info#index-library_002c-info-string-1
+ origin_href: sing.htm#index-library_002c-info-string-1
entry: library, info string
texi_entry: library, info string
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: library, procedures
- origin_href: sing.info#index-library_002c-procedures
+ origin_href: sing.htm#index-library_002c-procedures
entry: library, procedures
texi_entry: library, procedures
- element_href: sing.info#Procedures-in-a-library
+ element_href: sing.htm#Procedures-in-a-library
element_text: Procedures in a library
key: library, template
- origin_href: sing.info#index-library_002c-template
+ origin_href: sing.htm#index-library_002c-template
entry: library, template
texi_entry: library, template
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: library, template.lib
- origin_href: sing.info#index-library_002c-template_002elib
+ origin_href: sing.htm#index-library_002c-template_002elib
entry: library, template.lib
texi_entry: library, template.lib
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: library, typesetting of help strings
- origin_href: sing.info#index-library_002c-typesetting-of-help-strings
+ origin_href: sing.htm#index-library_002c-typesetting-of-help-strings
entry: library, typesetting of help strings
texi_entry: library, typesetting of help strings
- element_href: sing.info#Typesetting-of-help-strings
+ element_href: sing.htm#Typesetting-of-help-strings
element_text: Typesetting of help strings
key: LIBs
- origin_href: sing.info#index-LIBs
+ origin_href: sing.htm#index-LIBs
entry: LIBs
texi_entry: LIBs
- element_href: sing.info#SINGULAR-libraries
+ element_href: sing.htm#SINGULAR-libraries
element_text: SINGULAR libraries
key: lift
- origin_href: sing.info#index-lift
+ origin_href: sing.htm#index-lift
entry: lift
texi_entry: lift
- element_href: sing.info#lift
+ element_href: sing.htm#lift
element_text: lift
key: liftstd
- origin_href: sing.info#index-liftstd
+ origin_href: sing.htm#index-liftstd
entry: liftstd
texi_entry: liftstd
- element_href: sing.info#liftstd
+ element_href: sing.htm#liftstd
element_text: liftstd
key: lift_kbase
- origin_href: sing.info#index-lift_005fkbase
+ origin_href: sing.htm#index-lift_005fkbase
entry: lift_kbase
texi_entry: lift_kbase
- element_href: sing.info#lift_005fkbase
+ element_href: sing.htm#lift_005fkbase
element_text: lift_kbase
key: lift_rel_kb
- origin_href: sing.info#index-lift_005frel_005fkb
+ origin_href: sing.htm#index-lift_005frel_005fkb
entry: lift_rel_kb
texi_entry: lift_rel_kb
- element_href: sing.info#lift_005frel_005fkb
+ element_href: sing.htm#lift_005frel_005fkb
element_text: lift_rel_kb
key: Limitations
- origin_href: sing.info#index-Limitations
+ origin_href: sing.htm#index-Limitations
entry: Limitations
texi_entry: Limitations
- element_href: sing.info#Limitations
+ element_href: sing.htm#Limitations
element_text: Limitations
key: linalg.lib
- origin_href: sing.info#index-linalg_002elib
+ origin_href: sing.htm#index-linalg_002elib
entry: linalg.lib
texi_entry: linalg.lib
- element_href: sing.info#linalg_005flib
+ element_href: sing.htm#linalg_005flib
element_text: linalg_lib
key: linalg_lib
- origin_href: sing.info#index-linalg_005flib
+ origin_href: sing.htm#index-linalg_005flib
entry: linalg_lib
texi_entry: linalg_lib
- element_href: sing.info#linalg_005flib
+ element_href: sing.htm#linalg_005flib
element_text: linalg_lib
key: Linear algebra
- origin_href: sing.info#index-Linear-algebra
+ origin_href: sing.htm#index-Linear-algebra
entry: Linear algebra
texi_entry: Linear algebra
- element_href: sing.info#Linear-algebra
+ element_href: sing.htm#Linear-algebra
element_text: Linear algebra
key: linear code, dual
- origin_href: sing.info#index-linear-code_002c-dual
+ origin_href: sing.htm#index-linear-code_002c-dual
entry: linear code, dual
texi_entry: linear code, dual
- element_href: sing.info#dual_005fcode
+ element_href: sing.htm#dual_005fcode
element_text: dual_code
key: linear code, systematic
- origin_href: sing.info#index-linear-code_002c-systematic
+ origin_href: sing.htm#index-linear-code_002c-systematic
entry: linear code, systematic
texi_entry: linear code, systematic
- element_href: sing.info#sys_005fcode
+ element_href: sing.htm#sys_005fcode
element_text: sys_code
key: LinearActionQ
- origin_href: sing.info#index-LinearActionQ
+ origin_href: sing.htm#index-LinearActionQ
entry: LinearActionQ
texi_entry: LinearActionQ
- element_href: sing.info#LinearActionQ
+ element_href: sing.htm#LinearActionQ
element_text: LinearActionQ
key: LinearCombinationQ
- origin_href: sing.info#index-LinearCombinationQ
+ origin_href: sing.htm#index-LinearCombinationQ
entry: LinearCombinationQ
texi_entry: LinearCombinationQ
- element_href: sing.info#LinearCombinationQ
+ element_href: sing.htm#LinearCombinationQ
element_text: LinearCombinationQ
key: LinearizeAction
- origin_href: sing.info#index-LinearizeAction
+ origin_href: sing.htm#index-LinearizeAction
entry: LinearizeAction
texi_entry: LinearizeAction
- element_href: sing.info#LinearizeAction
+ element_href: sing.htm#LinearizeAction
element_text: LinearizeAction
key: linearpart
- origin_href: sing.info#index-linearpart
+ origin_href: sing.htm#index-linearpart
entry: linearpart
texi_entry: linearpart
- element_href: sing.info#linearpart
+ element_href: sing.htm#linearpart
element_text: linearpart
key: link
- origin_href: sing.info#index-link
+ origin_href: sing.htm#index-link
entry: link
texi_entry: link
- element_href: sing.info#link
+ element_href: sing.htm#link
element_text: link
key: link
- origin_href: sing.info#index-link-1
+ origin_href: sing.htm#index-link-1
entry: link
texi_entry: link
- element_href: sing.info#Parallelization-with-MPtcp-links
+ element_href: sing.htm#Parallelization-with-MPtcp-links
element_text: Parallelization with MPtcp links
key: link declarations
- origin_href: sing.info#index-link-declarations
+ origin_href: sing.htm#index-link-declarations
entry: link declarations
texi_entry: link declarations
- element_href: sing.info#link-declarations
+ element_href: sing.htm#link-declarations
element_text: link declarations
key: link expressions
- origin_href: sing.info#index-link-expressions
+ origin_href: sing.htm#index-link-expressions
entry: link expressions
texi_entry: link expressions
- element_href: sing.info#link-expressions
+ element_href: sing.htm#link-expressions
element_text: link expressions
key: link related functions
- origin_href: sing.info#index-link-related-functions
+ origin_href: sing.htm#index-link-related-functions
entry: link related functions
texi_entry: link related functions
- element_href: sing.info#link-related-functions
+ element_href: sing.htm#link-related-functions
element_text: link related functions
key: list
- origin_href: sing.info#index-list
+ origin_href: sing.htm#index-list
entry: list
texi_entry: list
- element_href: sing.info#list
+ element_href: sing.htm#list
element_text: list
key: list declarations
- origin_href: sing.info#index-list-declarations
+ origin_href: sing.htm#index-list-declarations
entry: list declarations
texi_entry: list declarations
- element_href: sing.info#list-declarations
+ element_href: sing.htm#list-declarations
element_text: list declarations
key: list expressions
- origin_href: sing.info#index-list-expressions
+ origin_href: sing.htm#index-list-expressions
entry: list expressions
texi_entry: list expressions
- element_href: sing.info#list-expressions
+ element_href: sing.htm#list-expressions
element_text: list expressions
key: list operations
- origin_href: sing.info#index-list-operations
+ origin_href: sing.htm#index-list-operations
entry: list operations
texi_entry: list operations
- element_href: sing.info#list-operations
+ element_href: sing.htm#list-operations
element_text: list operations
key: list related functions
- origin_href: sing.info#index-list-related-functions
+ origin_href: sing.htm#index-list-related-functions
entry: list related functions
texi_entry: list related functions
- element_href: sing.info#list-related-functions
+ element_href: sing.htm#list-related-functions
element_text: list related functions
key: listvar
- origin_href: sing.info#index-listvar
+ origin_href: sing.htm#index-listvar
entry: listvar
texi_entry: listvar
- element_href: sing.info#listvar
+ element_href: sing.htm#listvar
element_text: listvar
key: Loading of a library
- origin_href: sing.info#index-Loading-of-a-library
+ origin_href: sing.htm#index-Loading-of-a-library
entry: Loading of a library
texi_entry: Loading of a library
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: loadLib, option
- origin_href: sing.info#index-loadLib_002c-option
+ origin_href: sing.htm#index-loadLib_002c-option
entry: loadLib, option
texi_entry: loadLib, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: loadProc, option
- origin_href: sing.info#index-loadProc_002c-option
+ origin_href: sing.htm#index-loadProc_002c-option
entry: loadProc, option
texi_entry: loadProc, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: local names
- origin_href: sing.info#index-local-names
+ origin_href: sing.htm#index-local-names
entry: local names
texi_entry: local names
- element_href: sing.info#Names-in-procedures
+ element_href: sing.htm#Names-in-procedures
element_text: Names in procedures
key: Local orderings
- origin_href: sing.info#index-Local-orderings
+ origin_href: sing.htm#index-Local-orderings
entry: Local orderings
texi_entry: Local orderings
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: local weighted lexicographical ordering
- origin_href: sing.info#index-local-weighted-lexicographical-ordering
+ origin_href: sing.htm#index-local-weighted-lexicographical-ordering
entry: local weighted lexicographical ordering
texi_entry: local weighted lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: local weighted reverse lexicographical ordering
- origin_href: sing.info#index-local-weighted-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-local-weighted-reverse-lexicographical-ordering
entry: local weighted reverse lexicographical ordering
texi_entry: local weighted reverse lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: localInvar
- origin_href: sing.info#index-localInvar
+ origin_href: sing.htm#index-localInvar
entry: localInvar
texi_entry: localInvar
- element_href: sing.info#localInvar
+ element_href: sing.htm#localInvar
element_text: localInvar
key: locstd
- origin_href: sing.info#index-locstd
+ origin_href: sing.htm#index-locstd
entry: locstd
texi_entry: locstd
- element_href: sing.info#locstd
+ element_href: sing.htm#locstd
element_text: locstd
key: Long coefficients
- origin_href: sing.info#index-Long-coefficients
+ origin_href: sing.htm#index-Long-coefficients
entry: Long coefficients
texi_entry: Long coefficients
- element_href: sing.info#Long-coefficients
+ element_href: sing.htm#Long-coefficients
element_text: Long coefficients
key: Lossen, Christoph
- origin_href: sing.info#index-Lossen_002c-Christoph
+ origin_href: sing.htm#index-Lossen_002c-Christoph
entry: Lossen, Christoph
texi_entry: Lossen, Christoph
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: lp, global ordering
- origin_href: sing.info#index-lp_002c-global-ordering
+ origin_href: sing.htm#index-lp_002c-global-ordering
entry: lp, global ordering
texi_entry: lp, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: lprint
- origin_href: sing.info#index-lprint
+ origin_href: sing.htm#index-lprint
entry: lprint
texi_entry: lprint
- element_href: sing.info#lprint
+ element_href: sing.htm#lprint
element_text: lprint
key: lres
- origin_href: sing.info#index-lres
+ origin_href: sing.htm#index-lres
entry: lres
texi_entry: lres
- element_href: sing.info#lres
+ element_href: sing.htm#lres
element_text: lres
key: ls, local ordering
- origin_href: sing.info#index-ls_002c-local-ordering
+ origin_href: sing.htm#index-ls_002c-local-ordering
entry: ls, local ordering
texi_entry: ls, local ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: M, ordering
- origin_href: sing.info#index-M_002c-ordering
+ origin_href: sing.htm#index-M_002c-ordering
entry: M, ordering
texi_entry: M, ordering
- element_href: sing.info#Matrix-orderings
+ element_href: sing.htm#Matrix-orderings
element_text: Matrix orderings
key: Macintosh installation
- origin_href: sing.info#index-Macintosh-installation
+ origin_href: sing.htm#index-Macintosh-installation
entry: Macintosh installation
texi_entry: Macintosh installation
- element_href: sing.info#Macintosh-installation-instructions
+ element_href: sing.htm#Macintosh-installation-instructions
element_text: Macintosh installation instructions
key: map
- origin_href: sing.info#index-map
+ origin_href: sing.htm#index-map
entry: map
texi_entry: map
- element_href: sing.info#map
+ element_href: sing.htm#map
element_text: map
key: map declarations
- origin_href: sing.info#index-map-declarations
+ origin_href: sing.htm#index-map-declarations
entry: map declarations
texi_entry: map declarations
- element_href: sing.info#map-declarations
+ element_href: sing.htm#map-declarations
element_text: map declarations
key: map expressions
- origin_href: sing.info#index-map-expressions
+ origin_href: sing.htm#index-map-expressions
entry: map expressions
texi_entry: map expressions
- element_href: sing.info#map-expressions
+ element_href: sing.htm#map-expressions
element_text: map expressions
key: map operations
- origin_href: sing.info#index-map-operations
+ origin_href: sing.htm#index-map-operations
entry: map operations
texi_entry: map operations
- element_href: sing.info#map-operations
+ element_href: sing.htm#map-operations
element_text: map operations
key: mapall
- origin_href: sing.info#index-mapall
+ origin_href: sing.htm#index-mapall
entry: mapall
texi_entry: mapall
- element_href: sing.info#mapall
+ element_href: sing.htm#mapall
element_text: mapall
key: mapIsFinite
- origin_href: sing.info#index-mapIsFinite
+ origin_href: sing.htm#index-mapIsFinite
entry: mapIsFinite
texi_entry: mapIsFinite
- element_href: sing.info#mapIsFinite
+ element_href: sing.htm#mapIsFinite
element_text: mapIsFinite
key: Mathematical background
- origin_href: sing.info#index-Mathematical-background
+ origin_href: sing.htm#index-Mathematical-background
entry: Mathematical background
texi_entry: Mathematical background
- element_href: sing.info#Mathematical-background
+ element_href: sing.htm#Mathematical-background
element_text: Mathematical background
key: mathematical objects
- origin_href: sing.info#index-mathematical-objects
+ origin_href: sing.htm#index-mathematical-objects
entry: mathematical objects
texi_entry: mathematical objects
- element_href: sing.info#Representation-of-mathematical-objects
+ element_href: sing.htm#Representation-of-mathematical-objects
element_text: Representation of mathematical objects
key: mathinit
- origin_href: sing.info#index-mathinit
+ origin_href: sing.htm#index-mathinit
entry: mathinit
texi_entry: mathinit
- element_href: sing.info#mathinit
+ element_href: sing.htm#mathinit
element_text: mathinit
key: matrix
- origin_href: sing.info#index-matrix
+ origin_href: sing.htm#index-matrix
entry: matrix
texi_entry: matrix
- element_href: sing.info#matrix
+ element_href: sing.htm#matrix
element_text: matrix
key: matrix declarations
- origin_href: sing.info#index-matrix-declarations
+ origin_href: sing.htm#index-matrix-declarations
entry: matrix declarations
texi_entry: matrix declarations
- element_href: sing.info#matrix-declarations
+ element_href: sing.htm#matrix-declarations
element_text: matrix declarations
key: matrix expressions
- origin_href: sing.info#index-matrix-expressions
+ origin_href: sing.htm#index-matrix-expressions
entry: matrix expressions
texi_entry: matrix expressions
- element_href: sing.info#matrix-expressions
+ element_href: sing.htm#matrix-expressions
element_text: matrix expressions
key: matrix operations
- origin_href: sing.info#index-matrix-operations
+ origin_href: sing.htm#index-matrix-operations
entry: matrix operations
texi_entry: matrix operations
- element_href: sing.info#matrix-operations
+ element_href: sing.htm#matrix-operations
element_text: matrix operations
key: Matrix orderings
- origin_href: sing.info#index-Matrix-orderings
+ origin_href: sing.htm#index-Matrix-orderings
entry: Matrix orderings
texi_entry: Matrix orderings
- element_href: sing.info#Matrix-orderings
+ element_href: sing.htm#Matrix-orderings
element_text: Matrix orderings
key: matrix related functions
- origin_href: sing.info#index-matrix-related-functions
+ origin_href: sing.htm#index-matrix-related-functions
entry: matrix related functions
texi_entry: matrix related functions
- element_href: sing.info#matrix-related-functions
+ element_href: sing.htm#matrix-related-functions
element_text: matrix related functions
key: matrix type cast
- origin_href: sing.info#index-matrix-type-cast
+ origin_href: sing.htm#index-matrix-type-cast
entry: matrix type cast
texi_entry: matrix type cast
- element_href: sing.info#matrix-type-cast
+ element_href: sing.htm#matrix-type-cast
element_text: matrix type cast
key: matrix.lib
- origin_href: sing.info#index-matrix_002elib
+ origin_href: sing.htm#index-matrix_002elib
entry: matrix.lib
texi_entry: matrix.lib
- element_href: sing.info#matrix_005flib
+ element_href: sing.htm#matrix_005flib
element_text: matrix_lib
key: matrixT1
- origin_href: sing.info#index-matrixT1
+ origin_href: sing.htm#index-matrixT1
entry: matrixT1
texi_entry: matrixT1
- element_href: sing.info#matrixT1
+ element_href: sing.htm#matrixT1
element_text: matrixT1
key: matrix_lib
- origin_href: sing.info#index-matrix_005flib
+ origin_href: sing.htm#index-matrix_005flib
entry: matrix_lib
texi_entry: matrix_lib
- element_href: sing.info#matrix_005flib
+ element_href: sing.htm#matrix_005flib
element_text: matrix_lib
key: mat_rk
- origin_href: sing.info#index-mat_005frk
+ origin_href: sing.htm#index-mat_005frk
entry: mat_rk
texi_entry: mat_rk
- element_href: sing.info#mat_005frk
+ element_href: sing.htm#mat_005frk
element_text: mat_rk
key: Max
- origin_href: sing.info#index-Max
+ origin_href: sing.htm#index-Max
entry: Max
texi_entry: Max
- element_href: sing.info#Max
+ element_href: sing.htm#Max
element_text: Max
key: maxcoef
- origin_href: sing.info#index-maxcoef
+ origin_href: sing.htm#index-maxcoef
entry: maxcoef
texi_entry: maxcoef
- element_href: sing.info#maxcoef
+ element_href: sing.htm#maxcoef
element_text: maxcoef
key: maxdeg
- origin_href: sing.info#index-maxdeg
+ origin_href: sing.htm#index-maxdeg
entry: maxdeg
texi_entry: maxdeg
- element_href: sing.info#maxdeg
+ element_href: sing.htm#maxdeg
element_text: maxdeg
key: maxdeg1
- origin_href: sing.info#index-maxdeg1
+ origin_href: sing.htm#index-maxdeg1
entry: maxdeg1
texi_entry: maxdeg1
- element_href: sing.info#maxdeg1
+ element_href: sing.htm#maxdeg1
element_text: maxdeg1
key: maxideal
- origin_href: sing.info#index-maxideal
+ origin_href: sing.htm#index-maxideal
entry: maxideal
texi_entry: maxideal
- element_href: sing.info#maxideal
+ element_href: sing.htm#maxideal
element_text: maxideal
key: mdouble
- origin_href: sing.info#index-mdouble
+ origin_href: sing.htm#index-mdouble
entry: mdouble
texi_entry: mdouble
- element_href: sing.info#mdouble
+ element_href: sing.htm#mdouble
element_text: mdouble
key: mem, option
- origin_href: sing.info#index-mem_002c-option
+ origin_href: sing.htm#index-mem_002c-option
entry: mem, option
texi_entry: mem, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: memory
- origin_href: sing.info#index-memory
+ origin_href: sing.htm#index-memory
entry: memory
texi_entry: memory
- element_href: sing.info#memory
+ element_href: sing.htm#memory
element_text: memory
key: memory managment
- origin_href: sing.info#index-memory-managment
+ origin_href: sing.htm#index-memory-managment
entry: memory managment
texi_entry: memory managment
- element_href: sing.info#memory
+ element_href: sing.htm#memory
element_text: memory
key: Milnor
- origin_href: sing.info#index-Milnor
+ origin_href: sing.htm#index-Milnor
entry: Milnor
texi_entry: Milnor
- element_href: sing.info#Milnor-and-Tjurina
+ element_href: sing.htm#Milnor-and-Tjurina
element_text: Milnor and Tjurina
key: milnor
- origin_href: sing.info#index-milnor
+ origin_href: sing.htm#index-milnor
entry: milnor
texi_entry: milnor
- element_href: sing.info#milnor
+ element_href: sing.htm#milnor
element_text: milnor
key: milnorcode
- origin_href: sing.info#index-milnorcode
+ origin_href: sing.htm#index-milnorcode
entry: milnorcode
texi_entry: milnorcode
- element_href: sing.info#milnorcode
+ element_href: sing.htm#milnorcode
element_text: milnorcode
key: Min
- origin_href: sing.info#index-Min
+ origin_href: sing.htm#index-Min
entry: Min
texi_entry: Min
- element_href: sing.info#Min
+ element_href: sing.htm#Min
element_text: Min
key: minAssChar
- origin_href: sing.info#index-minAssChar
+ origin_href: sing.htm#index-minAssChar
entry: minAssChar
texi_entry: minAssChar
- element_href: sing.info#minAssChar
+ element_href: sing.htm#minAssChar
element_text: minAssChar
key: minAssGTZ
- origin_href: sing.info#index-minAssGTZ
+ origin_href: sing.htm#index-minAssGTZ
entry: minAssGTZ
texi_entry: minAssGTZ
- element_href: sing.info#minAssGTZ
+ element_href: sing.htm#minAssGTZ
element_text: minAssGTZ
key: minbase
- origin_href: sing.info#index-minbase
+ origin_href: sing.htm#index-minbase
entry: minbase
texi_entry: minbase
- element_href: sing.info#minbase
+ element_href: sing.htm#minbase
element_text: minbase
key: mindeg
- origin_href: sing.info#index-mindeg
+ origin_href: sing.htm#index-mindeg
entry: mindeg
texi_entry: mindeg
- element_href: sing.info#mindeg
+ element_href: sing.htm#mindeg
element_text: mindeg
key: mindeg1
- origin_href: sing.info#index-mindeg1
+ origin_href: sing.htm#index-mindeg1
entry: mindeg1
texi_entry: mindeg1
- element_href: sing.info#mindeg1
+ element_href: sing.htm#mindeg1
element_text: mindeg1
key: minimal display time, setting the
- origin_href: sing.info#index-minimal-display-time_002c-setting-the
+ origin_href: sing.htm#index-minimal-display-time_002c-setting-the
entry: minimal display time, setting the
texi_entry: minimal display time, setting the
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: MinimalDecomposition
- origin_href: sing.info#index-MinimalDecomposition
+ origin_href: sing.htm#index-MinimalDecomposition
entry: MinimalDecomposition
texi_entry: MinimalDecomposition
- element_href: sing.info#MinimalDecomposition
+ element_href: sing.htm#MinimalDecomposition
element_text: MinimalDecomposition
key: minipoly
- origin_href: sing.info#index-minipoly
+ origin_href: sing.htm#index-minipoly
entry: minipoly
texi_entry: minipoly
- element_href: sing.info#minipoly
+ element_href: sing.htm#minipoly
element_text: minipoly
key: minor
- origin_href: sing.info#index-minor
+ origin_href: sing.htm#index-minor
entry: minor
texi_entry: minor
- element_href: sing.info#minor
+ element_href: sing.htm#minor
element_text: minor
key: minpoly
- origin_href: sing.info#index-minpoly
+ origin_href: sing.htm#index-minpoly
entry: minpoly
texi_entry: minpoly
- element_href: sing.info#minpoly
+ element_href: sing.htm#minpoly
element_text: minpoly
key: minres
- origin_href: sing.info#index-minres
+ origin_href: sing.htm#index-minres
entry: minres
texi_entry: minres
- element_href: sing.info#minres
+ element_href: sing.htm#minres
element_text: minres
key: minRes, option
- origin_href: sing.info#index-minRes_002c-option
+ origin_href: sing.htm#index-minRes_002c-option
entry: minRes, option
texi_entry: minRes, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: minSatMod
- origin_href: sing.info#index-minSatMod
+ origin_href: sing.htm#index-minSatMod
entry: minSatMod
texi_entry: minSatMod
- element_href: sing.info#minSatMod
+ element_href: sing.htm#minSatMod
element_text: minSatMod
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure
+ origin_href: sing.htm#index-mixed-Hodge-structure
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-1
+ origin_href: sing.htm#index-mixed-Hodge-structure-1
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-2
+ origin_href: sing.htm#index-mixed-Hodge-structure-2
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-3
+ origin_href: sing.htm#index-mixed-Hodge-structure-3
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-4
+ origin_href: sing.htm#index-mixed-Hodge-structure-4
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-5
+ origin_href: sing.htm#index-mixed-Hodge-structure-5
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: mixed Hodge structure
- origin_href: sing.info#index-mixed-Hodge-structure-6
+ origin_href: sing.htm#index-mixed-Hodge-structure-6
entry: mixed Hodge structure
texi_entry: mixed Hodge structure
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: mod
- origin_href: sing.info#index-mod
+ origin_href: sing.htm#index-mod
entry: mod
texi_entry: mod
- element_href: sing.info#int-operations
+ element_href: sing.htm#int-operations
element_text: int operations
key: mod
- origin_href: sing.info#index-mod-1
+ origin_href: sing.htm#index-mod-1
entry: mod
texi_entry: mod
- element_href: sing.info#number-operations
+ element_href: sing.htm#number-operations
element_text: number operations
key: mod2id
- origin_href: sing.info#index-mod2id
+ origin_href: sing.htm#index-mod2id
entry: mod2id
texi_entry: mod2id
- element_href: sing.info#mod2id
+ element_href: sing.htm#mod2id
element_text: mod2id
key: modDec
- origin_href: sing.info#index-modDec
+ origin_href: sing.htm#index-modDec
entry: modDec
texi_entry: modDec
- element_href: sing.info#modDec
+ element_href: sing.htm#modDec
element_text: modDec
key: ModEqn
- origin_href: sing.info#index-ModEqn
+ origin_href: sing.htm#index-ModEqn
entry: ModEqn
texi_entry: ModEqn
- element_href: sing.info#ModEqn
+ element_href: sing.htm#ModEqn
element_text: ModEqn
key: module
- origin_href: sing.info#index-module
+ origin_href: sing.htm#index-module
entry: module
texi_entry: module
- element_href: sing.info#module
+ element_href: sing.htm#module
element_text: module
key: module declarations
- origin_href: sing.info#index-module-declarations
+ origin_href: sing.htm#index-module-declarations
entry: module declarations
texi_entry: module declarations
- element_href: sing.info#module-declarations
+ element_href: sing.htm#module-declarations
element_text: module declarations
key: module expressions
- origin_href: sing.info#index-module-expressions
+ origin_href: sing.htm#index-module-expressions
entry: module expressions
texi_entry: module expressions
- element_href: sing.info#module-expressions
+ element_href: sing.htm#module-expressions
element_text: module expressions
key: module operations
- origin_href: sing.info#index-module-operations
+ origin_href: sing.htm#index-module-operations
entry: module operations
texi_entry: module operations
- element_href: sing.info#module-operations
+ element_href: sing.htm#module-operations
element_text: module operations
key: module ordering C
- origin_href: sing.info#index-module-ordering-C
+ origin_href: sing.htm#index-module-ordering-C
entry: module ordering C
texi_entry: module ordering C
- element_href: sing.info#Module-orderings
+ element_href: sing.htm#Module-orderings
element_text: Module orderings
key: module ordering c
- origin_href: sing.info#index-module-ordering-c
+ origin_href: sing.htm#index-module-ordering-c
entry: module ordering c
texi_entry: module ordering c
- element_href: sing.info#Module-orderings
+ element_href: sing.htm#Module-orderings
element_text: Module orderings
key: Module orderings
- origin_href: sing.info#index-Module-orderings
+ origin_href: sing.htm#index-Module-orderings
entry: Module orderings
texi_entry: Module orderings
- element_href: sing.info#Module-orderings
+ element_href: sing.htm#Module-orderings
element_text: Module orderings
key: module related functions
- origin_href: sing.info#index-module-related-functions
+ origin_href: sing.htm#index-module-related-functions
entry: module related functions
texi_entry: module related functions
- element_href: sing.info#module-related-functions
+ element_href: sing.htm#module-related-functions
element_text: module related functions
key: Modules and and their annihilator
- origin_href: sing.info#index-Modules-and-and-their-annihilator
+ origin_href: sing.htm#index-Modules-and-and-their-annihilator
entry: Modules and and their annihilator
texi_entry: Modules and and their annihilator
- element_href: sing.info#Modules-and-their-annihilator
+ element_href: sing.htm#Modules-and-their-annihilator
element_text: Modules and their annihilator
key: modulesEqual
- origin_href: sing.info#index-modulesEqual
+ origin_href: sing.htm#index-modulesEqual
entry: modulesEqual
texi_entry: modulesEqual
- element_href: sing.info#modulesEqual
+ element_href: sing.htm#modulesEqual
element_text: modulesEqual
key: module_containment
- origin_href: sing.info#index-module_005fcontainment
+ origin_href: sing.htm#index-module_005fcontainment
entry: module_containment
texi_entry: module_containment
- element_href: sing.info#module_005fcontainment
+ element_href: sing.htm#module_005fcontainment
element_text: module_containment
key: modulo
- origin_href: sing.info#index-modulo
+ origin_href: sing.htm#index-modulo
entry: modulo
texi_entry: modulo
- element_href: sing.info#modulo
+ element_href: sing.htm#modulo
element_text: modulo
key: mod_versal
- origin_href: sing.info#index-mod_005fversal
+ origin_href: sing.htm#index-mod_005fversal
entry: mod_versal
texi_entry: mod_versal
- element_href: sing.info#mod_005fversal
+ element_href: sing.htm#mod_005fversal
element_text: mod_versal
key: molien
- origin_href: sing.info#index-molien
+ origin_href: sing.htm#index-molien
entry: molien
texi_entry: molien
- element_href: sing.info#molien
+ element_href: sing.htm#molien
element_text: molien
key: mondromy.lib
- origin_href: sing.info#index-mondromy_002elib
+ origin_href: sing.htm#index-mondromy_002elib
entry: mondromy.lib
texi_entry: mondromy.lib
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: mondromy_lib
- origin_href: sing.info#index-mondromy_005flib
+ origin_href: sing.htm#index-mondromy_005flib
entry: mondromy_lib
texi_entry: mondromy_lib
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: monitor
- origin_href: sing.info#index-monitor
+ origin_href: sing.htm#index-monitor
entry: monitor
texi_entry: monitor
- element_href: sing.info#monitor
+ element_href: sing.htm#monitor
element_text: monitor
key: monodromy
- origin_href: sing.info#index-monodromy
+ origin_href: sing.htm#index-monodromy
entry: monodromy
texi_entry: monodromy
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: monodromy
- origin_href: sing.info#index-monodromy-1
+ origin_href: sing.htm#index-monodromy-1
entry: monodromy
texi_entry: monodromy
- element_href: sing.info#monodromy
+ element_href: sing.htm#monodromy
element_text: monodromy
key: monodromy
- origin_href: sing.info#index-monodromy-2
+ origin_href: sing.htm#index-monodromy-2
entry: monodromy
texi_entry: monodromy
- element_href: sing.info#monodromy
+ element_href: sing.htm#monodromy
element_text: monodromy
key: Monodromy
- origin_href: sing.info#index-Monodromy
+ origin_href: sing.htm#index-Monodromy
entry: Monodromy
texi_entry: Monodromy
- element_href: sing.info#mondromy_005flib
+ element_href: sing.htm#mondromy_005flib
element_text: mondromy_lib
key: monodromyB
- origin_href: sing.info#index-monodromyB
+ origin_href: sing.htm#index-monodromyB
entry: monodromyB
texi_entry: monodromyB
- element_href: sing.info#monodromyB
+ element_href: sing.htm#monodromyB
element_text: monodromyB
key: Monomial orderings
- origin_href: sing.info#index-Monomial-orderings
+ origin_href: sing.htm#index-Monomial-orderings
entry: Monomial orderings
texi_entry: Monomial orderings
- element_href: sing.info#Monomial-orderings
+ element_href: sing.htm#Monomial-orderings
element_text: Monomial orderings
key: monomial orderings
- origin_href: sing.info#index-monomial-orderings
+ origin_href: sing.htm#index-monomial-orderings
entry: monomial orderings
texi_entry: monomial orderings
- element_href: sing.info#General-definitions-for-orderings
+ element_href: sing.htm#General-definitions-for-orderings
element_text: General definitions for orderings
key: monomial orderings introduction
- origin_href: sing.info#index-monomial-orderings-introduction
+ origin_href: sing.htm#index-monomial-orderings-introduction
entry: monomial orderings introduction
texi_entry: monomial orderings introduction
- element_href: sing.info#Introduction-to-orderings
+ element_href: sing.htm#Introduction-to-orderings
element_text: Introduction to orderings
key: Monomial orderings, Term orderings
- origin_href: sing.info#index-Monomial-orderings_002c-Term-orderings
+ origin_href: sing.htm#index-Monomial-orderings_002c-Term-orderings
entry: Monomial orderings, Term orderings
texi_entry: Monomial orderings, Term orderings
- element_href: sing.info#Term-orderings
+ element_href: sing.htm#Term-orderings
element_text: Term orderings
key: monomials and precedence
- origin_href: sing.info#index-monomials-and-precedence
+ origin_href: sing.htm#index-monomials-and-precedence
entry: monomials and precedence
texi_entry: monomials and precedence
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: morsesplit
- origin_href: sing.info#index-morsesplit
+ origin_href: sing.htm#index-morsesplit
entry: morsesplit
texi_entry: morsesplit
- element_href: sing.info#morsesplit
+ element_href: sing.htm#morsesplit
element_text: morsesplit
key: MP
- origin_href: sing.info#index-MP
+ origin_href: sing.htm#index-MP
entry: MP
texi_entry: MP
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: MP links
- origin_href: sing.info#index-MP-links
+ origin_href: sing.htm#index-MP-links
entry: MP links
texi_entry: MP links
- element_href: sing.info#MP-links
+ element_href: sing.htm#MP-links
element_text: MP links
key: MP, groebner basis computations
- origin_href: sing.info#index-MP_002c-groebner-basis-computations
+ origin_href: sing.htm#index-MP_002c-groebner-basis-computations
entry: MP, groebner basis computations
texi_entry: MP, groebner basis computations
- element_href: sing.info#groebner
+ element_href: sing.htm#groebner
element_text: groebner
key: MPfile links
- origin_href: sing.info#index-MPfile-links
+ origin_href: sing.htm#index-MPfile-links
entry: MPfile links
texi_entry: MPfile links
- element_href: sing.info#MPfile-links
+ element_href: sing.htm#MPfile-links
element_text: MPfile links
key: mplot
- origin_href: sing.info#index-mplot
+ origin_href: sing.htm#index-mplot
entry: mplot
texi_entry: mplot
- element_href: sing.info#mplot
+ element_href: sing.htm#mplot
element_text: mplot
key: mpresmat
- origin_href: sing.info#index-mpresmat
+ origin_href: sing.htm#index-mpresmat
entry: mpresmat
texi_entry: mpresmat
- element_href: sing.info#mpresmat
+ element_href: sing.htm#mpresmat
element_text: mpresmat
key: mprimdec.lib
- origin_href: sing.info#index-mprimdec_002elib
+ origin_href: sing.htm#index-mprimdec_002elib
entry: mprimdec.lib
texi_entry: mprimdec.lib
- element_href: sing.info#mprimdec_005flib
+ element_href: sing.htm#mprimdec_005flib
element_text: mprimdec_lib
key: mprimdec_lib
- origin_href: sing.info#index-mprimdec_005flib
+ origin_href: sing.htm#index-mprimdec_005flib
entry: mprimdec_lib
texi_entry: mprimdec_lib
- element_href: sing.info#mprimdec_005flib
+ element_href: sing.htm#mprimdec_005flib
element_text: mprimdec_lib
key: MPtcp
- origin_href: sing.info#index-MPtcp
+ origin_href: sing.htm#index-MPtcp
entry: MPtcp
texi_entry: MPtcp
- element_href: sing.info#Parallelization-with-MPtcp-links
+ element_href: sing.htm#Parallelization-with-MPtcp-links
element_text: Parallelization with MPtcp links
key: MPtcp links
- origin_href: sing.info#index-MPtcp-links
+ origin_href: sing.htm#index-MPtcp-links
entry: MPtcp links
texi_entry: MPtcp links
- element_href: sing.info#MPtcp-links
+ element_href: sing.htm#MPtcp-links
element_text: MPtcp links
key: mp_res_mat
- origin_href: sing.info#index-mp_005fres_005fmat
+ origin_href: sing.htm#index-mp_005fres_005fmat
entry: mp_res_mat
texi_entry: mp_res_mat
- element_href: sing.info#mp_005fres_005fmat
+ element_href: sing.htm#mp_005fres_005fmat
element_text: mp_res_mat
key: mregular.lib
- origin_href: sing.info#index-mregular_002elib
+ origin_href: sing.htm#index-mregular_002elib
entry: mregular.lib
texi_entry: mregular.lib
- element_href: sing.info#mregular_005flib
+ element_href: sing.htm#mregular_005flib
element_text: mregular_lib
key: mregular_lib
- origin_href: sing.info#index-mregular_005flib
+ origin_href: sing.htm#index-mregular_005flib
entry: mregular_lib
texi_entry: mregular_lib
- element_href: sing.info#mregular_005flib
+ element_href: sing.htm#mregular_005flib
element_text: mregular_lib
key: mres
- origin_href: sing.info#index-mres
+ origin_href: sing.htm#index-mres
entry: mres
texi_entry: mres
- element_href: sing.info#mres
+ element_href: sing.htm#mres
element_text: mres
key: mstd
- origin_href: sing.info#index-mstd
+ origin_href: sing.htm#index-mstd
entry: mstd
texi_entry: mstd
- element_href: sing.info#mstd
+ element_href: sing.htm#mstd
element_text: mstd
key: msum
- origin_href: sing.info#index-msum
+ origin_href: sing.htm#index-msum
entry: msum
texi_entry: msum
- element_href: sing.info#msum
+ element_href: sing.htm#msum
element_text: msum
key: mtripple
- origin_href: sing.info#index-mtripple
+ origin_href: sing.htm#index-mtripple
entry: mtripple
texi_entry: mtripple
- element_href: sing.info#mtripple
+ element_href: sing.htm#mtripple
element_text: mtripple
key: mult
- origin_href: sing.info#index-mult
+ origin_href: sing.htm#index-mult
entry: mult
texi_entry: mult
- element_href: sing.info#mult
+ element_href: sing.htm#mult
element_text: mult
key: mult
- origin_href: sing.info#index-mult-1
+ origin_href: sing.htm#index-mult-1
entry: mult
texi_entry: mult
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: multBound
- origin_href: sing.info#index-multBound
+ origin_href: sing.htm#index-multBound
entry: multBound
texi_entry: multBound
- element_href: sing.info#multBound
+ element_href: sing.htm#multBound
element_text: multBound
key: multcol
- origin_href: sing.info#index-multcol
+ origin_href: sing.htm#index-multcol
entry: multcol
texi_entry: multcol
- element_href: sing.info#multcol
+ element_href: sing.htm#multcol
element_text: multcol
key: multiplicities, sequence of
- origin_href: sing.info#index-multiplicities_002c-sequence-of
+ origin_href: sing.htm#index-multiplicities_002c-sequence-of
entry: multiplicities, sequence of
texi_entry: multiplicities, sequence of
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: multiplicity sequence
- origin_href: sing.info#index-multiplicity-sequence
+ origin_href: sing.htm#index-multiplicity-sequence
entry: multiplicity sequence
texi_entry: multiplicity sequence
- element_href: sing.info#multsequence
+ element_href: sing.htm#multsequence
element_text: multsequence
key: multrow
- origin_href: sing.info#index-multrow
+ origin_href: sing.htm#index-multrow
entry: multrow
texi_entry: multrow
- element_href: sing.info#multrow
+ element_href: sing.htm#multrow
element_text: multrow
key: multsequence
- origin_href: sing.info#index-multsequence
+ origin_href: sing.htm#index-multsequence
entry: multsequence
texi_entry: multsequence
- element_href: sing.info#multsequence
+ element_href: sing.htm#multsequence
element_text: multsequence
key: nameof
- origin_href: sing.info#index-nameof
+ origin_href: sing.htm#index-nameof
entry: nameof
texi_entry: nameof
- element_href: sing.info#nameof
+ element_href: sing.htm#nameof
element_text: nameof
key: Names
- origin_href: sing.info#index-Names
+ origin_href: sing.htm#index-Names
entry: Names
texi_entry: Names
- element_href: sing.info#Names
+ element_href: sing.htm#Names
element_text: Names
key: names
- origin_href: sing.info#index-names
+ origin_href: sing.htm#index-names
entry: names
texi_entry: names
- element_href: sing.info#names
+ element_href: sing.htm#names
element_text: names
key: Names in procedures
- origin_href: sing.info#index-Names-in-procedures
+ origin_href: sing.htm#index-Names-in-procedures
entry: Names in procedures
texi_entry: Names in procedures
- element_href: sing.info#Names-in-procedures
+ element_href: sing.htm#Names-in-procedures
element_text: Names in procedures
key: nblocks
- origin_href: sing.info#index-nblocks
+ origin_href: sing.htm#index-nblocks
entry: nblocks
texi_entry: nblocks
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: ncols
- origin_href: sing.info#index-ncols
+ origin_href: sing.htm#index-ncols
entry: ncols
texi_entry: ncols
- element_href: sing.info#ncols
+ element_href: sing.htm#ncols
element_text: ncols
key: negative degree lexicographical ordering
- origin_href: sing.info#index-negative-degree-lexicographical-ordering
+ origin_href: sing.htm#index-negative-degree-lexicographical-ordering
entry: negative degree lexicographical ordering
texi_entry: negative degree lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: negative degree reverse lexicographical ordering
- origin_href: sing.info#index-negative-degree-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-negative-degree-reverse-lexicographical-ordering
entry: negative degree reverse lexicographical ordering
texi_entry: negative degree reverse lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: negative lexicographical ordering
- origin_href: sing.info#index-negative-lexicographical-ordering
+ origin_href: sing.htm#index-negative-lexicographical-ordering
entry: negative lexicographical ordering
texi_entry: negative lexicographical ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: net access
- origin_href: sing.info#index-net-access
+ origin_href: sing.htm#index-net-access
entry: net access
texi_entry: net access
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: netscape
- origin_href: sing.info#index-netscape
+ origin_href: sing.htm#index-netscape
entry: netscape
texi_entry: netscape
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: NETSCAPE environment variable
- origin_href: sing.info#index-NETSCAPE-environment-variable
+ origin_href: sing.htm#index-NETSCAPE-environment-variable
entry: NETSCAPE environment variable
texi_entry: NETSCAPE environment variable
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: Neumann, Wolfgang
- origin_href: sing.info#index-Neumann_002c-Wolfgang
+ origin_href: sing.htm#index-Neumann_002c-Wolfgang
entry: Neumann, Wolfgang
texi_entry: Neumann, Wolfgang
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: newline
- origin_href: sing.info#index-newline
+ origin_href: sing.htm#index-newline
entry: newline
texi_entry: newline
- element_href: sing.info#string
+ element_href: sing.htm#string
element_text: string
key: news
- origin_href: sing.info#index-news
+ origin_href: sing.htm#index-news
entry: news
texi_entry: news
- element_href: sing.info#News-and-changes
+ element_href: sing.htm#News-and-changes
element_text: News and changes
key: Newton non-degenerate
- origin_href: sing.info#index-Newton-non_002ddegenerate
+ origin_href: sing.htm#index-Newton-non_002ddegenerate
entry: Newton non-degenerate
texi_entry: Newton non-degenerate
- element_href: sing.info#is_005fNND
+ element_href: sing.htm#is_005fNND
element_text: is_NND
key: Newton polygon
- origin_href: sing.info#index-Newton-polygon
+ origin_href: sing.htm#index-Newton-polygon
entry: Newton polygon
texi_entry: Newton polygon
- element_href: sing.info#newtonpoly
+ element_href: sing.htm#newtonpoly
element_text: newtonpoly
key: Newton polygon
- origin_href: sing.info#index-Newton-polygon-1
+ origin_href: sing.htm#index-Newton-polygon-1
entry: Newton polygon
texi_entry: Newton polygon
- element_href: sing.info#is_005fNND
+ element_href: sing.htm#is_005fNND
element_text: is_NND
key: newtonpoly
- origin_href: sing.info#index-newtonpoly
+ origin_href: sing.htm#index-newtonpoly
entry: newtonpoly
texi_entry: newtonpoly
- element_href: sing.info#newtonpoly
+ element_href: sing.htm#newtonpoly
element_text: newtonpoly
key: NF
- origin_href: sing.info#index-NF
+ origin_href: sing.htm#index-NF
entry: NF
texi_entry: NF
- element_href: sing.info#reduce
+ element_href: sing.htm#reduce
element_text: reduce
key: nf_icis
- origin_href: sing.info#index-nf_005ficis
+ origin_href: sing.htm#index-nf_005ficis
entry: nf_icis
texi_entry: nf_icis
- element_href: sing.info#nf_005ficis
+ element_href: sing.htm#nf_005ficis
element_text: nf_icis
key: noether
- origin_href: sing.info#index-noether
+ origin_href: sing.htm#index-noether
entry: noether
texi_entry: noether
- element_href: sing.info#noether
+ element_href: sing.htm#noether
element_text: noether
key: noetherNormal
- origin_href: sing.info#index-noetherNormal
+ origin_href: sing.htm#index-noetherNormal
entry: noetherNormal
texi_entry: noetherNormal
- element_href: sing.info#noetherNormal
+ element_href: sing.htm#noetherNormal
element_text: noetherNormal
key: non-english special characters
- origin_href: sing.info#index-non_002denglish-special-characters
+ origin_href: sing.htm#index-non_002denglish-special-characters
entry: non-english special characters
texi_entry: non-english special characters
- element_href: sing.info#Limitations
+ element_href: sing.htm#Limitations
element_text: Limitations
key: none, option
- origin_href: sing.info#index-none_002c-option
+ origin_href: sing.htm#index-none_002c-option
entry: none, option
texi_entry: none, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: normal
- origin_href: sing.info#index-normal
+ origin_href: sing.htm#index-normal
entry: normal
texi_entry: normal
- element_href: sing.info#normal
+ element_href: sing.htm#normal
element_text: normal
key: Normal form
- origin_href: sing.info#index-Normal-form
+ origin_href: sing.htm#index-Normal-form
entry: Normal form
texi_entry: Normal form
- element_href: sing.info#Properties
+ element_href: sing.htm#Properties
element_text: Properties
key: normal.lib
- origin_href: sing.info#index-normal_002elib
+ origin_href: sing.htm#index-normal_002elib
entry: normal.lib
texi_entry: normal.lib
- element_href: sing.info#normal_005flib
+ element_href: sing.htm#normal_005flib
element_text: normal_lib
key: normalform
- origin_href: sing.info#index-normalform
+ origin_href: sing.htm#index-normalform
entry: normalform
texi_entry: normalform
- element_href: sing.info#normalform
+ element_href: sing.htm#normalform
element_text: normalform
key: normalI
- origin_href: sing.info#index-normalI
+ origin_href: sing.htm#index-normalI
entry: normalI
texi_entry: normalI
- element_href: sing.info#normalI
+ element_href: sing.htm#normalI
element_text: normalI
key: Normalization
- origin_href: sing.info#index-Normalization
+ origin_href: sing.htm#index-Normalization
entry: Normalization
texi_entry: Normalization
- element_href: sing.info#Normalization
+ element_href: sing.htm#Normalization
element_text: Normalization
key: normalization
- origin_href: sing.info#index-normalization
+ origin_href: sing.htm#index-normalization
entry: normalization
texi_entry: normalization
- element_href: sing.info#normal
+ element_href: sing.htm#normal
element_text: normal
key: normalization
- origin_href: sing.info#index-normalization-1
+ origin_href: sing.htm#index-normalization-1
entry: normalization
texi_entry: normalization
- element_href: sing.info#parametrize
+ element_href: sing.htm#parametrize
element_text: parametrize
key: normalization
- origin_href: sing.info#index-normalization-2
+ origin_href: sing.htm#index-normalization-2
entry: normalization
texi_entry: normalization
- element_href: sing.info#parametrizepd
+ element_href: sing.htm#parametrizepd
element_text: parametrizepd
key: normalize
- origin_href: sing.info#index-normalize
+ origin_href: sing.htm#index-normalize
entry: normalize
texi_entry: normalize
- element_href: sing.info#normalize
+ element_href: sing.htm#normalize
element_text: normalize
key: normal_lib
- origin_href: sing.info#index-normal_005flib
+ origin_href: sing.htm#index-normal_005flib
entry: normal_lib
texi_entry: normal_lib
- element_href: sing.info#normal_005flib
+ element_href: sing.htm#normal_005flib
element_text: normal_lib
key: not
- origin_href: sing.info#index-not
+ origin_href: sing.htm#index-not
entry: not
texi_entry: not
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: notBuckets, option
- origin_href: sing.info#index-notBuckets_002c-option
+ origin_href: sing.htm#index-notBuckets_002c-option
entry: notBuckets, option
texi_entry: notBuckets, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: notRegularity, option
- origin_href: sing.info#index-notRegularity_002c-option
+ origin_href: sing.htm#index-notRegularity_002c-option
entry: notRegularity, option
texi_entry: notRegularity, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: notSugar, option
- origin_href: sing.info#index-notSugar_002c-option
+ origin_href: sing.htm#index-notSugar_002c-option
entry: notSugar, option
texi_entry: notSugar, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: npars
- origin_href: sing.info#index-npars
+ origin_href: sing.htm#index-npars
entry: npars
texi_entry: npars
- element_href: sing.info#npars
+ element_href: sing.htm#npars
element_text: npars
key: nres
- origin_href: sing.info#index-nres
+ origin_href: sing.htm#index-nres
entry: nres
texi_entry: nres
- element_href: sing.info#nres
+ element_href: sing.htm#nres
element_text: nres
key: nrows
- origin_href: sing.info#index-nrows
+ origin_href: sing.htm#index-nrows
entry: nrows
texi_entry: nrows
- element_href: sing.info#nrows
+ element_href: sing.htm#nrows
element_text: nrows
key: nselect
- origin_href: sing.info#index-nselect
+ origin_href: sing.htm#index-nselect
entry: nselect
texi_entry: nselect
- element_href: sing.info#nselect
+ element_href: sing.htm#nselect
element_text: nselect
key: NSplaces
- origin_href: sing.info#index-NSplaces
+ origin_href: sing.htm#index-NSplaces
entry: NSplaces
texi_entry: NSplaces
- element_href: sing.info#NSplaces
+ element_href: sing.htm#NSplaces
element_text: NSplaces
key: ntsolve.lib
- origin_href: sing.info#index-ntsolve_002elib
+ origin_href: sing.htm#index-ntsolve_002elib
entry: ntsolve.lib
texi_entry: ntsolve.lib
- element_href: sing.info#ntsolve_005flib
+ element_href: sing.htm#ntsolve_005flib
element_text: ntsolve_lib
key: ntsolve_lib
- origin_href: sing.info#index-ntsolve_005flib
+ origin_href: sing.htm#index-ntsolve_005flib
entry: ntsolve_lib
texi_entry: ntsolve_lib
- element_href: sing.info#ntsolve_005flib
+ element_href: sing.htm#ntsolve_005flib
element_text: ntsolve_lib
key: nt_solve
- origin_href: sing.info#index-nt_005fsolve
+ origin_href: sing.htm#index-nt_005fsolve
entry: nt_solve
texi_entry: nt_solve
- element_href: sing.info#nt_005fsolve
+ element_href: sing.htm#nt_005fsolve
element_text: nt_solve
key: NullCone
- origin_href: sing.info#index-NullCone
+ origin_href: sing.htm#index-NullCone
entry: NullCone
texi_entry: NullCone
- element_href: sing.info#NullCone
+ element_href: sing.htm#NullCone
element_text: NullCone
key: number
- origin_href: sing.info#index-number
+ origin_href: sing.htm#index-number
entry: number
texi_entry: number
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: number declarations
- origin_href: sing.info#index-number-declarations
+ origin_href: sing.htm#index-number-declarations
entry: number declarations
texi_entry: number declarations
- element_href: sing.info#number-declarations
+ element_href: sing.htm#number-declarations
element_text: number declarations
key: number expressions
- origin_href: sing.info#index-number-expressions
+ origin_href: sing.htm#index-number-expressions
entry: number expressions
texi_entry: number expressions
- element_href: sing.info#number-expressions
+ element_href: sing.htm#number-expressions
element_text: number expressions
key: number operations
- origin_href: sing.info#index-number-operations
+ origin_href: sing.htm#index-number-operations
entry: number operations
texi_entry: number operations
- element_href: sing.info#number-operations
+ element_href: sing.htm#number-operations
element_text: number operations
key: number related functions
- origin_href: sing.info#index-number-related-functions
+ origin_href: sing.htm#index-number-related-functions
entry: number related functions
texi_entry: number related functions
- element_href: sing.info#number-related-functions
+ element_href: sing.htm#number-related-functions
element_text: number related functions
key: number_e
- origin_href: sing.info#index-number_005fe
+ origin_href: sing.htm#index-number_005fe
entry: number_e
texi_entry: number_e
- element_href: sing.info#number_005fe
+ element_href: sing.htm#number_005fe
element_text: number_e
key: number_pi
- origin_href: sing.info#index-number_005fpi
+ origin_href: sing.htm#index-number_005fpi
entry: number_pi
texi_entry: number_pi
- element_href: sing.info#number_005fpi
+ element_href: sing.htm#number_005fpi
element_text: number_pi
key: numerator
- origin_href: sing.info#index-numerator
+ origin_href: sing.htm#index-numerator
entry: numerator
texi_entry: numerator
- element_href: sing.info#numerator
+ element_href: sing.htm#numerator
element_text: numerator
key: nvars
- origin_href: sing.info#index-nvars
+ origin_href: sing.htm#index-nvars
entry: nvars
texi_entry: nvars
- element_href: sing.info#nvars
+ element_href: sing.htm#nvars
element_text: nvars
key: Objects
- origin_href: sing.info#index-Objects
+ origin_href: sing.htm#index-Objects
entry: Objects
texi_entry: Objects
- element_href: sing.info#Objects
+ element_href: sing.htm#Objects
element_text: Objects
key: oldStd, option
- origin_href: sing.info#index-oldStd_002c-option
+ origin_href: sing.htm#index-oldStd_002c-option
entry: oldStd, option
texi_entry: oldStd, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: online help
- origin_href: sing.info#index-online-help
+ origin_href: sing.htm#index-online-help
entry: online help
texi_entry: online help
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: open
- origin_href: sing.info#index-open
+ origin_href: sing.htm#index-open
entry: open
texi_entry: open
- element_href: sing.info#open
+ element_href: sing.htm#open
element_text: open
key: opentex
- origin_href: sing.info#index-opentex
+ origin_href: sing.htm#index-opentex
entry: opentex
texi_entry: opentex
- element_href: sing.info#opentex
+ element_href: sing.htm#opentex
element_text: opentex
key: opposite Hodge filtration
- origin_href: sing.info#index-opposite-Hodge-filtration
+ origin_href: sing.htm#index-opposite-Hodge-filtration
entry: opposite Hodge filtration
texi_entry: opposite Hodge filtration
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: option
- origin_href: sing.info#index-option
+ origin_href: sing.htm#index-option
entry: option
texi_entry: option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: or
- origin_href: sing.info#index-or
+ origin_href: sing.htm#index-or
entry: or
texi_entry: or
- element_href: sing.info#boolean-operations
+ element_href: sing.htm#boolean-operations
element_text: boolean operations
key: or
- origin_href: sing.info#index-or-1
+ origin_href: sing.htm#index-or-1
entry: or
texi_entry: or
- element_href: sing.info#Evaluation-of-logical-expressions
+ element_href: sing.htm#Evaluation-of-logical-expressions
element_text: Evaluation of logical expressions
key: orbit_variety
- origin_href: sing.info#index-orbit_005fvariety
+ origin_href: sing.htm#index-orbit_005fvariety
entry: orbit_variety
texi_entry: orbit_variety
- element_href: sing.info#orbit_005fvariety
+ element_href: sing.htm#orbit_005fvariety
element_text: orbit_variety
key: ord
- origin_href: sing.info#index-ord
+ origin_href: sing.htm#index-ord
entry: ord
texi_entry: ord
- element_href: sing.info#ord
+ element_href: sing.htm#ord
element_text: ord
key: orderings
- origin_href: sing.info#index-orderings
+ origin_href: sing.htm#index-orderings
entry: orderings
texi_entry: orderings
- element_href: sing.info#General-definitions-for-orderings
+ element_href: sing.htm#General-definitions-for-orderings
element_text: General definitions for orderings
key: orderings introduction
- origin_href: sing.info#index-orderings-introduction
+ origin_href: sing.htm#index-orderings-introduction
entry: orderings introduction
texi_entry: orderings introduction
- element_href: sing.info#Introduction-to-orderings
+ element_href: sing.htm#Introduction-to-orderings
element_text: Introduction to orderings
key: orderings, a
- origin_href: sing.info#index-orderings_002c-a
+ origin_href: sing.htm#index-orderings_002c-a
entry: orderings, a
texi_entry: orderings, a
- element_href: sing.info#Extra-weight-vector
+ element_href: sing.htm#Extra-weight-vector
element_text: Extra weight vector
key: orderings, global
- origin_href: sing.info#index-orderings_002c-global
+ origin_href: sing.htm#index-orderings_002c-global
entry: orderings, global
texi_entry: orderings, global
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: orderings, local
- origin_href: sing.info#index-orderings_002c-local
+ origin_href: sing.htm#index-orderings_002c-local
entry: orderings, local
texi_entry: orderings, local
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: orderings, M
- origin_href: sing.info#index-orderings_002c-M
+ origin_href: sing.htm#index-orderings_002c-M
entry: orderings, M
texi_entry: orderings, M
- element_href: sing.info#Matrix-orderings
+ element_href: sing.htm#Matrix-orderings
element_text: Matrix orderings
key: orderings, product
- origin_href: sing.info#index-orderings_002c-product
+ origin_href: sing.htm#index-orderings_002c-product
entry: orderings, product
texi_entry: orderings, product
- element_href: sing.info#Product-orderings
+ element_href: sing.htm#Product-orderings
element_text: Product orderings
key: ordstr
- origin_href: sing.info#index-ordstr
+ origin_href: sing.htm#index-ordstr
entry: ordstr
texi_entry: ordstr
- element_href: sing.info#ordstr
+ element_href: sing.htm#ordstr
element_text: ordstr
key: ord_test
- origin_href: sing.info#index-ord_005ftest
+ origin_href: sing.htm#index-ord_005ftest
entry: ord_test
texi_entry: ord_test
- element_href: sing.info#ord_005ftest
+ element_href: sing.htm#ord_005ftest
element_text: ord_test
key: orthogonalize
- origin_href: sing.info#index-orthogonalize
+ origin_href: sing.htm#index-orthogonalize
entry: orthogonalize
texi_entry: orthogonalize
- element_href: sing.info#orthogonalize
+ element_href: sing.htm#orthogonalize
element_text: orthogonalize
key: outer
- origin_href: sing.info#index-outer
+ origin_href: sing.htm#index-outer
entry: outer
texi_entry: outer
- element_href: sing.info#outer
+ element_href: sing.htm#outer
element_text: outer
key: output
- origin_href: sing.info#index-output
+ origin_href: sing.htm#index-output
entry: output
texi_entry: output
- element_href: sing.info#Input-and-output
+ element_href: sing.htm#Input-and-output
element_text: Input and output
key: par
- origin_href: sing.info#index-par
+ origin_href: sing.htm#index-par
entry: par
texi_entry: par
- element_href: sing.info#par
+ element_href: sing.htm#par
element_text: par
key: Parallelization
- origin_href: sing.info#index-Parallelization
+ origin_href: sing.htm#index-Parallelization
entry: Parallelization
texi_entry: Parallelization
- element_href: sing.info#Parallelization-with-MPtcp-links
+ element_href: sing.htm#Parallelization-with-MPtcp-links
element_text: Parallelization with MPtcp links
key: paramet.lib
- origin_href: sing.info#index-paramet_002elib
+ origin_href: sing.htm#index-paramet_002elib
entry: paramet.lib
texi_entry: paramet.lib
- element_href: sing.info#paramet_005flib
+ element_href: sing.htm#paramet_005flib
element_text: paramet_lib
key: Parameter list
- origin_href: sing.info#index-Parameter-list
+ origin_href: sing.htm#index-Parameter-list
entry: Parameter list
texi_entry: Parameter list
- element_href: sing.info#Parameter-list
+ element_href: sing.htm#Parameter-list
element_text: Parameter list
key: parameter, as numbers
- origin_href: sing.info#index-parameter_002c-as-numbers
+ origin_href: sing.htm#index-parameter_002c-as-numbers
entry: parameter, as numbers
texi_entry: parameter, as numbers
- element_href: sing.info#number
+ element_href: sing.htm#number
element_text: number
key: Parameters
- origin_href: sing.info#index-Parameters
+ origin_href: sing.htm#index-Parameters
entry: Parameters
texi_entry: Parameters
- element_href: sing.info#Parameters
+ element_href: sing.htm#Parameters
element_text: Parameters
key: parametrisation
- origin_href: sing.info#index-parametrisation
+ origin_href: sing.htm#index-parametrisation
entry: parametrisation
texi_entry: parametrisation
- element_href: sing.info#parametrisation
+ element_href: sing.htm#parametrisation
element_text: parametrisation
key: parametrization
- origin_href: sing.info#index-parametrization
+ origin_href: sing.htm#index-parametrization
entry: parametrization
texi_entry: parametrization
- element_href: sing.info#parametrisation
+ element_href: sing.htm#parametrisation
element_text: parametrisation
key: parametrization
- origin_href: sing.info#index-parametrization-1
+ origin_href: sing.htm#index-parametrization-1
entry: parametrization
texi_entry: parametrization
- element_href: sing.info#parametrize
+ element_href: sing.htm#parametrize
element_text: parametrize
key: parametrization
- origin_href: sing.info#index-parametrization-2
+ origin_href: sing.htm#index-parametrization-2
entry: parametrization
texi_entry: parametrization
- element_href: sing.info#parametrizepd
+ element_href: sing.htm#parametrizepd
element_text: parametrizepd
key: parametrization
- origin_href: sing.info#index-parametrization-3
+ origin_href: sing.htm#index-parametrization-3
entry: parametrization
texi_entry: parametrization
- element_href: sing.info#parametrizesing
+ element_href: sing.htm#parametrizesing
element_text: parametrizesing
key: parametrize
- origin_href: sing.info#index-parametrize
+ origin_href: sing.htm#index-parametrize
entry: parametrize
texi_entry: parametrize
- element_href: sing.info#parametrize
+ element_href: sing.htm#parametrize
element_text: parametrize
key: parametrizepd
- origin_href: sing.info#index-parametrizepd
+ origin_href: sing.htm#index-parametrizepd
entry: parametrizepd
texi_entry: parametrizepd
- element_href: sing.info#parametrizepd
+ element_href: sing.htm#parametrizepd
element_text: parametrizepd
key: parametrizesing
- origin_href: sing.info#index-parametrizesing
+ origin_href: sing.htm#index-parametrizesing
entry: parametrizesing
texi_entry: parametrizesing
- element_href: sing.info#parametrizesing
+ element_href: sing.htm#parametrizesing
element_text: parametrizesing
key: paramet_lib
- origin_href: sing.info#index-paramet_005flib
+ origin_href: sing.htm#index-paramet_005flib
entry: paramet_lib
texi_entry: paramet_lib
- element_href: sing.info#paramet_005flib
+ element_href: sing.htm#paramet_005flib
element_text: paramet_lib
key: pardeg
- origin_href: sing.info#index-pardeg
+ origin_href: sing.htm#index-pardeg
entry: pardeg
texi_entry: pardeg
- element_href: sing.info#pardeg
+ element_href: sing.htm#pardeg
element_text: pardeg
key: parstr
- origin_href: sing.info#index-parstr
+ origin_href: sing.htm#index-parstr
entry: parstr
texi_entry: parstr
- element_href: sing.info#parstr
+ element_href: sing.htm#parstr
element_text: parstr
key: partial_molien
- origin_href: sing.info#index-partial_005fmolien
+ origin_href: sing.htm#index-partial_005fmolien
entry: partial_molien
texi_entry: partial_molien
- element_href: sing.info#partial_005fmolien
+ element_href: sing.htm#partial_005fmolien
element_text: partial_molien
key: path
- origin_href: sing.info#index-path
+ origin_href: sing.htm#index-path
entry: path
texi_entry: path
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: pause
- origin_href: sing.info#index-pause
+ origin_href: sing.htm#index-pause
entry: pause
texi_entry: pause
- element_href: sing.info#pause
+ element_href: sing.htm#pause
element_text: pause
key: permcol
- origin_href: sing.info#index-permcol
+ origin_href: sing.htm#index-permcol
entry: permcol
texi_entry: permcol
- element_href: sing.info#permcol
+ element_href: sing.htm#permcol
element_text: permcol
key: permrow
- origin_href: sing.info#index-permrow
+ origin_href: sing.htm#index-permrow
entry: permrow
texi_entry: permrow
- element_href: sing.info#permrow
+ element_href: sing.htm#permrow
element_text: permrow
key: permute_L
- origin_href: sing.info#index-permute_005fL
+ origin_href: sing.htm#index-permute_005fL
entry: permute_L
texi_entry: permute_L
- element_href: sing.info#permute_005fL
+ element_href: sing.htm#permute_005fL
element_text: permute_L
key: Pfister, Gerhard
- origin_href: sing.info#index-Pfister_002c-Gerhard
+ origin_href: sing.htm#index-Pfister_002c-Gerhard
entry: Pfister, Gerhard
texi_entry: Pfister, Gerhard
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: pid
- origin_href: sing.info#index-pid
+ origin_href: sing.htm#index-pid
entry: pid
texi_entry: pid
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: plot
- origin_href: sing.info#index-plot
+ origin_href: sing.htm#index-plot
entry: plot
texi_entry: plot
- element_href: sing.info#plot
+ element_href: sing.htm#plot
element_text: plot
key: pmat
- origin_href: sing.info#index-pmat
+ origin_href: sing.htm#index-pmat
entry: pmat
texi_entry: pmat
- element_href: sing.info#pmat
+ element_href: sing.htm#pmat
element_text: pmat
key: Pohl, Wilfred
- origin_href: sing.info#index-Pohl_002c-Wilfred
+ origin_href: sing.htm#index-Pohl_002c-Wilfred
entry: Pohl, Wilfred
texi_entry: Pohl, Wilfred
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Polar curves
- origin_href: sing.info#index-Polar-curves
+ origin_href: sing.htm#index-Polar-curves
entry: Polar curves
texi_entry: Polar curves
- element_href: sing.info#Polar-curves
+ element_href: sing.htm#Polar-curves
element_text: Polar curves
key: poly
- origin_href: sing.info#index-poly
+ origin_href: sing.htm#index-poly
entry: poly
texi_entry: poly
- element_href: sing.info#poly
+ element_href: sing.htm#poly
element_text: poly
key: poly declarations
- origin_href: sing.info#index-poly-declarations
+ origin_href: sing.htm#index-poly-declarations
entry: poly declarations
texi_entry: poly declarations
- element_href: sing.info#poly-declarations
+ element_href: sing.htm#poly-declarations
element_text: poly declarations
key: poly expressions
- origin_href: sing.info#index-poly-expressions
+ origin_href: sing.htm#index-poly-expressions
entry: poly expressions
texi_entry: poly expressions
- element_href: sing.info#poly-expressions
+ element_href: sing.htm#poly-expressions
element_text: poly expressions
key: poly operations
- origin_href: sing.info#index-poly-operations
+ origin_href: sing.htm#index-poly-operations
entry: poly operations
texi_entry: poly operations
- element_href: sing.info#poly-operations
+ element_href: sing.htm#poly-operations
element_text: poly operations
key: poly related functions
- origin_href: sing.info#index-poly-related-functions
+ origin_href: sing.htm#index-poly-related-functions
entry: poly related functions
texi_entry: poly related functions
- element_href: sing.info#poly-related-functions
+ element_href: sing.htm#poly-related-functions
element_text: poly related functions
key: poly.lib
- origin_href: sing.info#index-poly_002elib
+ origin_href: sing.htm#index-poly_002elib
entry: poly.lib
texi_entry: poly.lib
- element_href: sing.info#poly_005flib
+ element_href: sing.htm#poly_005flib
element_text: poly_lib
key: Polynomial data
- origin_href: sing.info#index-Polynomial-data
+ origin_href: sing.htm#index-Polynomial-data
entry: Polynomial data
texi_entry: Polynomial data
- element_href: sing.info#Polynomial-data
+ element_href: sing.htm#Polynomial-data
element_text: Polynomial data
key: poly_lib
- origin_href: sing.info#index-poly_005flib
+ origin_href: sing.htm#index-poly_005flib
entry: poly_lib
texi_entry: poly_lib
- element_href: sing.info#poly_005flib
+ element_href: sing.htm#poly_005flib
element_text: poly_lib
key: posweight
- origin_href: sing.info#index-posweight
+ origin_href: sing.htm#index-posweight
entry: posweight
texi_entry: posweight
- element_href: sing.info#posweight
+ element_href: sing.htm#posweight
element_text: posweight
key: pos_def
- origin_href: sing.info#index-pos_005fdef
+ origin_href: sing.htm#index-pos_005fdef
entry: pos_def
texi_entry: pos_def
- element_href: sing.info#pos_005fdef
+ element_href: sing.htm#pos_005fdef
element_text: pos_def
key: Pottier algorithm
- origin_href: sing.info#index-Pottier-algorithm
+ origin_href: sing.htm#index-Pottier-algorithm
entry: Pottier algorithm
texi_entry: Pottier algorithm
- element_href: sing.info#Pottier
+ element_href: sing.htm#Pottier
element_text: Pottier
key: power
- origin_href: sing.info#index-power
+ origin_href: sing.htm#index-power
entry: power
texi_entry: power
- element_href: sing.info#power
+ element_href: sing.htm#power
element_text: power
key: power_products
- origin_href: sing.info#index-power_005fproducts
+ origin_href: sing.htm#index-power_005fproducts
entry: power_products
texi_entry: power_products
- element_href: sing.info#power_005fproducts
+ element_href: sing.htm#power_005fproducts
element_text: power_products
key: preComp
- origin_href: sing.info#index-preComp
+ origin_href: sing.htm#index-preComp
entry: preComp
texi_entry: preComp
- element_href: sing.info#preComp
+ element_href: sing.htm#preComp
element_text: preComp
key: Preface
- origin_href: sing.info#index-Preface
+ origin_href: sing.htm#index-Preface
entry: Preface
texi_entry: Preface
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: preimage
- origin_href: sing.info#index-preimage
+ origin_href: sing.htm#index-preimage
entry: preimage
texi_entry: preimage
- element_href: sing.info#preimage
+ element_href: sing.htm#preimage
element_text: preimage
key: prepareAss
- origin_href: sing.info#index-prepareAss
+ origin_href: sing.htm#index-prepareAss
entry: prepareAss
texi_entry: prepareAss
- element_href: sing.info#prepareAss
+ element_href: sing.htm#prepareAss
element_text: prepareAss
key: prepMat
- origin_href: sing.info#index-prepMat
+ origin_href: sing.htm#index-prepMat
entry: prepMat
texi_entry: prepMat
- element_href: sing.info#prepMat
+ element_href: sing.htm#prepMat
element_text: prepMat
key: prepSV
- origin_href: sing.info#index-prepSV
+ origin_href: sing.htm#index-prepSV
entry: prepSV
texi_entry: prepSV
- element_href: sing.info#prepSV
+ element_href: sing.htm#prepSV
element_text: prepSV
key: presolve.lib
- origin_href: sing.info#index-presolve_002elib
+ origin_href: sing.htm#index-presolve_002elib
entry: presolve.lib
texi_entry: presolve.lib
- element_href: sing.info#presolve_005flib
+ element_href: sing.htm#presolve_005flib
element_text: presolve_lib
key: presolve_lib
- origin_href: sing.info#index-presolve_005flib
+ origin_href: sing.htm#index-presolve_005flib
entry: presolve_lib
texi_entry: presolve_lib
- element_href: sing.info#presolve_005flib
+ element_href: sing.htm#presolve_005flib
element_text: presolve_lib
key: Primary decomposition
- origin_href: sing.info#index-Primary-decomposition
+ origin_href: sing.htm#index-Primary-decomposition
entry: Primary decomposition
texi_entry: Primary decomposition
- element_href: sing.info#Primary-decomposition
+ element_href: sing.htm#Primary-decomposition
element_text: Primary decomposition
key: primary_char0
- origin_href: sing.info#index-primary_005fchar0
+ origin_href: sing.htm#index-primary_005fchar0
entry: primary_char0
texi_entry: primary_char0
- element_href: sing.info#primary_005fchar0
+ element_href: sing.htm#primary_005fchar0
element_text: primary_char0
key: primary_char0_no_molien
- origin_href: sing.info#index-primary_005fchar0_005fno_005fmolien
+ origin_href: sing.htm#index-primary_005fchar0_005fno_005fmolien
entry: primary_char0_no_molien
texi_entry: primary_char0_no_molien
- element_href: sing.info#primary_005fchar0_005fno_005fmolien
+ element_href: sing.htm#primary_005fchar0_005fno_005fmolien
element_text: primary_char0_no_molien
key: primary_char0_no_molien_random
- origin_href: sing.info#index-primary_005fchar0_005fno_005fmolien_005frandom
+ origin_href: sing.htm#index-primary_005fchar0_005fno_005fmolien_005frandom
entry: primary_char0_no_molien_random
texi_entry: primary_char0_no_molien_random
- element_href: sing.info#primary_005fchar0_005fno_005fmolien_005frandom
+ element_href: sing.htm#primary_005fchar0_005fno_005fmolien_005frandom
element_text: primary_char0_no_molien_random
key: primary_char0_random
- origin_href: sing.info#index-primary_005fchar0_005frandom
+ origin_href: sing.htm#index-primary_005fchar0_005frandom
entry: primary_char0_random
texi_entry: primary_char0_random
- element_href: sing.info#primary_005fchar0_005frandom
+ element_href: sing.htm#primary_005fchar0_005frandom
element_text: primary_char0_random
key: primary_charp
- origin_href: sing.info#index-primary_005fcharp
+ origin_href: sing.htm#index-primary_005fcharp
entry: primary_charp
texi_entry: primary_charp
- element_href: sing.info#primary_005fcharp
+ element_href: sing.htm#primary_005fcharp
element_text: primary_charp
key: primary_charp_no_molien
- origin_href: sing.info#index-primary_005fcharp_005fno_005fmolien
+ origin_href: sing.htm#index-primary_005fcharp_005fno_005fmolien
entry: primary_charp_no_molien
texi_entry: primary_charp_no_molien
- element_href: sing.info#primary_005fcharp_005fno_005fmolien
+ element_href: sing.htm#primary_005fcharp_005fno_005fmolien
element_text: primary_charp_no_molien
key: primary_charp_no_molien_random
- origin_href: sing.info#index-primary_005fcharp_005fno_005fmolien_005frandom
+ origin_href: sing.htm#index-primary_005fcharp_005fno_005fmolien_005frandom
entry: primary_charp_no_molien_random
texi_entry: primary_charp_no_molien_random
- element_href: sing.info#primary_005fcharp_005fno_005fmolien_005frandom
+ element_href: sing.htm#primary_005fcharp_005fno_005fmolien_005frandom
element_text: primary_charp_no_molien_random
key: primary_charp_random
- origin_href: sing.info#index-primary_005fcharp_005frandom
+ origin_href: sing.htm#index-primary_005fcharp_005frandom
entry: primary_charp_random
texi_entry: primary_charp_random
- element_href: sing.info#primary_005fcharp_005frandom
+ element_href: sing.htm#primary_005fcharp_005frandom
element_text: primary_charp_random
key: primary_charp_without
- origin_href: sing.info#index-primary_005fcharp_005fwithout
+ origin_href: sing.htm#index-primary_005fcharp_005fwithout
entry: primary_charp_without
texi_entry: primary_charp_without
- element_href: sing.info#primary_005fcharp_005fwithout
+ element_href: sing.htm#primary_005fcharp_005fwithout
element_text: primary_charp_without
key: primary_charp_without_random
- origin_href: sing.info#index-primary_005fcharp_005fwithout_005frandom
+ origin_href: sing.htm#index-primary_005fcharp_005fwithout_005frandom
entry: primary_charp_without_random
texi_entry: primary_charp_without_random
- element_href: sing.info#primary_005fcharp_005fwithout_005frandom
+ element_href: sing.htm#primary_005fcharp_005fwithout_005frandom
element_text: primary_charp_without_random
key: primary_invariants
- origin_href: sing.info#index-primary_005finvariants
+ origin_href: sing.htm#index-primary_005finvariants
entry: primary_invariants
texi_entry: primary_invariants
- element_href: sing.info#primary_005finvariants
+ element_href: sing.htm#primary_005finvariants
element_text: primary_invariants
key: primary_invariants_random
- origin_href: sing.info#index-primary_005finvariants_005frandom
+ origin_href: sing.htm#index-primary_005finvariants_005frandom
entry: primary_invariants_random
texi_entry: primary_invariants_random
- element_href: sing.info#primary_005finvariants_005frandom
+ element_href: sing.htm#primary_005finvariants_005frandom
element_text: primary_invariants_random
key: primdec.lib
- origin_href: sing.info#index-primdec_002elib
+ origin_href: sing.htm#index-primdec_002elib
entry: primdec.lib
texi_entry: primdec.lib
- element_href: sing.info#primdec_005flib
+ element_href: sing.htm#primdec_005flib
element_text: primdec_lib
key: PrimdecA
- origin_href: sing.info#index-PrimdecA
+ origin_href: sing.htm#index-PrimdecA
entry: PrimdecA
texi_entry: PrimdecA
- element_href: sing.info#PrimdecA
+ element_href: sing.htm#PrimdecA
element_text: PrimdecA
key: PrimdecB
- origin_href: sing.info#index-PrimdecB
+ origin_href: sing.htm#index-PrimdecB
entry: PrimdecB
texi_entry: PrimdecB
- element_href: sing.info#PrimdecB
+ element_href: sing.htm#PrimdecB
element_text: PrimdecB
key: primdecGTZ
- origin_href: sing.info#index-primdecGTZ
+ origin_href: sing.htm#index-primdecGTZ
entry: primdecGTZ
texi_entry: primdecGTZ
- element_href: sing.info#primdecGTZ
+ element_href: sing.htm#primdecGTZ
element_text: primdecGTZ
key: primdecSY
- origin_href: sing.info#index-primdecSY
+ origin_href: sing.htm#index-primdecSY
entry: primdecSY
texi_entry: primdecSY
- element_href: sing.info#primdecSY
+ element_href: sing.htm#primdecSY
element_text: primdecSY
key: primdec_lib
- origin_href: sing.info#index-primdec_005flib
+ origin_href: sing.htm#index-primdec_005flib
entry: primdec_lib
texi_entry: primdec_lib
- element_href: sing.info#primdec_005flib
+ element_href: sing.htm#primdec_005flib
element_text: primdec_lib
key: prime
- origin_href: sing.info#index-prime
+ origin_href: sing.htm#index-prime
entry: prime
texi_entry: prime
- element_href: sing.info#prime
+ element_href: sing.htm#prime
element_text: prime
key: primeClosure
- origin_href: sing.info#index-primeClosure
+ origin_href: sing.htm#index-primeClosure
entry: primeClosure
texi_entry: primeClosure
- element_href: sing.info#primeClosure
+ element_href: sing.htm#primeClosure
element_text: primeClosure
key: primecoeffs
- origin_href: sing.info#index-primecoeffs
+ origin_href: sing.htm#index-primecoeffs
entry: primecoeffs
texi_entry: primecoeffs
- element_href: sing.info#primecoeffs
+ element_href: sing.htm#primecoeffs
element_text: primecoeffs
key: primefactors
- origin_href: sing.info#index-primefactors
+ origin_href: sing.htm#index-primefactors
entry: primefactors
texi_entry: primefactors
- element_href: sing.info#primefactors
+ element_href: sing.htm#primefactors
element_text: primefactors
key: primes
- origin_href: sing.info#index-primes
+ origin_href: sing.htm#index-primes
entry: primes
texi_entry: primes
- element_href: sing.info#primes
+ element_href: sing.htm#primes
element_text: primes
key: primitiv.lib
- origin_href: sing.info#index-primitiv_002elib
+ origin_href: sing.htm#index-primitiv_002elib
entry: primitiv.lib
texi_entry: primitiv.lib
- element_href: sing.info#primitiv_005flib
+ element_href: sing.htm#primitiv_005flib
element_text: primitiv_lib
key: primitive
- origin_href: sing.info#index-primitive
+ origin_href: sing.htm#index-primitive
entry: primitive
texi_entry: primitive
- element_href: sing.info#primitive
+ element_href: sing.htm#primitive
element_text: primitive
key: primitive element
- origin_href: sing.info#index-primitive-element
+ origin_href: sing.htm#index-primitive-element
entry: primitive element
texi_entry: primitive element
- element_href: sing.info#primitive
+ element_href: sing.htm#primitive
element_text: primitive
key: primitive_extra
- origin_href: sing.info#index-primitive_005fextra
+ origin_href: sing.htm#index-primitive_005fextra
entry: primitive_extra
texi_entry: primitive_extra
- element_href: sing.info#primitive_005fextra
+ element_href: sing.htm#primitive_005fextra
element_text: primitive_extra
key: primitiv_lib
- origin_href: sing.info#index-primitiv_005flib
+ origin_href: sing.htm#index-primitiv_005flib
entry: primitiv_lib
texi_entry: primitiv_lib
- element_href: sing.info#primitiv_005flib
+ element_href: sing.htm#primitiv_005flib
element_text: primitiv_lib
key: primTest
- origin_href: sing.info#index-primTest
+ origin_href: sing.htm#index-primTest
entry: primTest
texi_entry: primTest
- element_href: sing.info#primTest
+ element_href: sing.htm#primTest
element_text: primTest
key: print
- origin_href: sing.info#index-print
+ origin_href: sing.htm#index-print
entry: print
texi_entry: print
- element_href: sing.info#print
+ element_href: sing.htm#print
element_text: print
key: printf
- origin_href: sing.info#index-printf
+ origin_href: sing.htm#index-printf
entry: printf
texi_entry: printf
- element_href: sing.info#printf
+ element_href: sing.htm#printf
element_text: printf
key: printlevel
- origin_href: sing.info#index-printlevel
+ origin_href: sing.htm#index-printlevel
entry: printlevel
texi_entry: printlevel
- element_href: sing.info#printlevel
+ element_href: sing.htm#printlevel
element_text: printlevel
key: proc
- origin_href: sing.info#index-proc
+ origin_href: sing.htm#index-proc
entry: proc
texi_entry: proc
- element_href: sing.info#proc
+ element_href: sing.htm#proc
element_text: proc
key: proc declaration
- origin_href: sing.info#index-proc-declaration
+ origin_href: sing.htm#index-proc-declaration
entry: proc declaration
texi_entry: proc declaration
- element_href: sing.info#proc-declaration
+ element_href: sing.htm#proc-declaration
element_text: proc declaration
key: Procedure commands
- origin_href: sing.info#index-Procedure-commands
+ origin_href: sing.htm#index-Procedure-commands
entry: Procedure commands
texi_entry: Procedure commands
- element_href: sing.info#Procedure-commands
+ element_href: sing.htm#Procedure-commands
element_text: Procedure commands
key: Procedure definition
- origin_href: sing.info#index-Procedure-definition
+ origin_href: sing.htm#index-Procedure-definition
entry: Procedure definition
texi_entry: Procedure definition
- element_href: sing.info#Procedure-definition
+ element_href: sing.htm#Procedure-definition
element_text: Procedure definition
key: procedure, ASCII help
- origin_href: sing.info#index-procedure_002c-ASCII-help
+ origin_href: sing.htm#index-procedure_002c-ASCII-help
entry: procedure, ASCII help
texi_entry: procedure, ASCII help
- element_href: sing.info#mdouble
+ element_href: sing.htm#mdouble
element_text: mdouble
key: procedure, ASCII/Texinfo help
- origin_href: sing.info#index-procedure_002c-ASCII_002fTexinfo-help
+ origin_href: sing.htm#index-procedure_002c-ASCII_002fTexinfo-help
entry: procedure, ASCII/Texinfo help
texi_entry: procedure, ASCII/Texinfo help
- element_href: sing.info#msum
+ element_href: sing.htm#msum
element_text: msum
key: procedure, texinfo help
- origin_href: sing.info#index-procedure_002c-texinfo-help
+ origin_href: sing.htm#index-procedure_002c-texinfo-help
entry: procedure, texinfo help
texi_entry: procedure, texinfo help
- element_href: sing.info#mtripple
+ element_href: sing.htm#mtripple
element_text: mtripple
key: Procedures
- origin_href: sing.info#index-Procedures
+ origin_href: sing.htm#index-Procedures
entry: Procedures
texi_entry: Procedures
- element_href: sing.info#Procedures
+ element_href: sing.htm#Procedures
element_text: Procedures
key: Procedures and LIB
- origin_href: sing.info#index-Procedures-and-LIB
+ origin_href: sing.htm#index-Procedures-and-LIB
entry: Procedures and LIB
texi_entry: Procedures and LIB
- element_href: sing.info#Procedures-and-LIB
+ element_href: sing.htm#Procedures-and-LIB
element_text: Procedures and LIB
key: Procedures and libraries
- origin_href: sing.info#index-Procedures-and-libraries
+ origin_href: sing.htm#index-Procedures-and-libraries
entry: Procedures and libraries
texi_entry: Procedures and libraries
- element_href: sing.info#Procedures-and-libraries
+ element_href: sing.htm#Procedures-and-libraries
element_text: Procedures and libraries
key: Procedures in a library
- origin_href: sing.info#index-Procedures-in-a-library
+ origin_href: sing.htm#index-Procedures-in-a-library
entry: Procedures in a library
texi_entry: Procedures in a library
- element_href: sing.info#Procedures-in-a-library
+ element_href: sing.htm#Procedures-in-a-library
element_text: Procedures in a library
key: procedures, help string
- origin_href: sing.info#index-procedures_002c-help-string
+ origin_href: sing.htm#index-procedures_002c-help-string
entry: procedures, help string
texi_entry: procedures, help string
- element_href: sing.info#The-help-string-of-procedures
+ element_href: sing.htm#The-help-string-of-procedures
element_text: The help string of procedures
key: procedures, static
- origin_href: sing.info#index-procedures_002c-static
+ origin_href: sing.htm#index-procedures_002c-static
entry: procedures, static
texi_entry: procedures, static
- element_href: sing.info#Procedure-definition
+ element_href: sing.htm#Procedure-definition
element_text: Procedure definition
key: product
- origin_href: sing.info#index-product
+ origin_href: sing.htm#index-product
entry: product
texi_entry: product
- element_href: sing.info#product
+ element_href: sing.htm#product
element_text: product
key: Product orderings
- origin_href: sing.info#index-Product-orderings
+ origin_href: sing.htm#index-Product-orderings
entry: Product orderings
texi_entry: Product orderings
- element_href: sing.info#Product-orderings
+ element_href: sing.htm#Product-orderings
element_text: Product orderings
key: progress watch
- origin_href: sing.info#index-progress-watch
+ origin_href: sing.htm#index-progress-watch
entry: progress watch
texi_entry: progress watch
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: prompt
- origin_href: sing.info#index-prompt
+ origin_href: sing.htm#index-prompt
entry: prompt
texi_entry: prompt
- element_href: sing.info#The-SINGULAR-prompt
+ element_href: sing.htm#The-SINGULAR-prompt
element_text: The SINGULAR prompt
key: prompt, option
- origin_href: sing.info#index-prompt_002c-option
+ origin_href: sing.htm#index-prompt_002c-option
entry: prompt, option
texi_entry: prompt, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: prot, option
- origin_href: sing.info#index-prot_002c-option
+ origin_href: sing.htm#index-prot_002c-option
entry: prot, option
texi_entry: prot, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: protocoll of computations
- origin_href: sing.info#index-protocoll-of-computations
+ origin_href: sing.htm#index-protocoll-of-computations
entry: protocoll of computations
texi_entry: protocoll of computations
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: prune
- origin_href: sing.info#index-prune
+ origin_href: sing.htm#index-prune
entry: prune
texi_entry: prune
- element_href: sing.info#prune
+ element_href: sing.htm#prune
element_text: prune
key: Puiseux expansion
- origin_href: sing.info#index-Puiseux-expansion
+ origin_href: sing.htm#index-Puiseux-expansion
entry: Puiseux expansion
texi_entry: Puiseux expansion
- element_href: sing.info#hnoether_005flib
+ element_href: sing.htm#hnoether_005flib
element_text: hnoether_lib
key: Puiseux pairs
- origin_href: sing.info#index-Puiseux-pairs
+ origin_href: sing.htm#index-Puiseux-pairs
entry: Puiseux pairs
texi_entry: Puiseux pairs
- element_href: sing.info#Puiseux-pairs
+ element_href: sing.htm#Puiseux-pairs
element_text: Puiseux pairs
key: Puiseux pairs
- origin_href: sing.info#index-Puiseux-pairs-1
+ origin_href: sing.htm#index-Puiseux-pairs-1
entry: Puiseux pairs
texi_entry: Puiseux pairs
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: puiseux2generators
- origin_href: sing.info#index-puiseux2generators
+ origin_href: sing.htm#index-puiseux2generators
entry: puiseux2generators
texi_entry: puiseux2generators
- element_href: sing.info#puiseux2generators
+ element_href: sing.htm#puiseux2generators
element_text: puiseux2generators
key: qhmatrix
- origin_href: sing.info#index-qhmatrix
+ origin_href: sing.htm#index-qhmatrix
entry: qhmatrix
texi_entry: qhmatrix
- element_href: sing.info#qhmatrix
+ element_href: sing.htm#qhmatrix
element_text: qhmatrix
key: qhmoduli.lib
- origin_href: sing.info#index-qhmoduli_002elib
+ origin_href: sing.htm#index-qhmoduli_002elib
entry: qhmoduli.lib
texi_entry: qhmoduli.lib
- element_href: sing.info#qhmoduli_005flib
+ element_href: sing.htm#qhmoduli_005flib
element_text: qhmoduli_lib
key: qhmoduli_lib
- origin_href: sing.info#index-qhmoduli_005flib
+ origin_href: sing.htm#index-qhmoduli_005flib
entry: qhmoduli_lib
texi_entry: qhmoduli_lib
- element_href: sing.info#qhmoduli_005flib
+ element_href: sing.htm#qhmoduli_005flib
element_text: qhmoduli_lib
key: qhspectrum
- origin_href: sing.info#index-qhspectrum
+ origin_href: sing.htm#index-qhspectrum
entry: qhspectrum
texi_entry: qhspectrum
- element_href: sing.info#qhspectrum
+ element_href: sing.htm#qhspectrum
element_text: qhspectrum
key: qhweight
- origin_href: sing.info#index-qhweight
+ origin_href: sing.htm#index-qhweight
entry: qhweight
texi_entry: qhweight
- element_href: sing.info#qhweight
+ element_href: sing.htm#qhweight
element_text: qhweight
key: qring
- origin_href: sing.info#index-qring
+ origin_href: sing.htm#index-qring
entry: qring
texi_entry: qring
- element_href: sing.info#qring
+ element_href: sing.htm#qring
element_text: qring
key: qring
- origin_href: sing.info#index-qring-1
+ origin_href: sing.htm#index-qring-1
entry: qring
texi_entry: qring
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: qring declaration
- origin_href: sing.info#index-qring-declaration
+ origin_href: sing.htm#index-qring-declaration
entry: qring declaration
texi_entry: qring declaration
- element_href: sing.info#qring-declaration
+ element_href: sing.htm#qring-declaration
element_text: qring declaration
key: quickclass
- origin_href: sing.info#index-quickclass
+ origin_href: sing.htm#index-quickclass
entry: quickclass
texi_entry: quickclass
- element_href: sing.info#quickclass
+ element_href: sing.htm#quickclass
element_text: quickclass
key: quit
- origin_href: sing.info#index-quit
+ origin_href: sing.htm#index-quit
entry: quit
texi_entry: quit
- element_href: sing.info#quit
+ element_href: sing.htm#quit
element_text: quit
key: quot
- origin_href: sing.info#index-quot
+ origin_href: sing.htm#index-quot
entry: quot
texi_entry: quot
- element_href: sing.info#quot
+ element_href: sing.htm#quot
element_text: quot
key: quote
- origin_href: sing.info#index-quote
+ origin_href: sing.htm#index-quote
entry: quote
texi_entry: quote
- element_href: sing.info#quote
+ element_href: sing.htm#quote
element_text: quote
key: quotient
- origin_href: sing.info#index-quotient
+ origin_href: sing.htm#index-quotient
entry: quotient
texi_entry: quotient
- element_href: sing.info#quotient
+ element_href: sing.htm#quotient
element_text: quotient
key: Quotient
- origin_href: sing.info#index-Quotient
+ origin_href: sing.htm#index-Quotient
entry: Quotient
texi_entry: Quotient
- element_href: sing.info#Quotient
+ element_href: sing.htm#Quotient
element_text: Quotient
key: QuotientEquations
- origin_href: sing.info#index-QuotientEquations
+ origin_href: sing.htm#index-QuotientEquations
entry: QuotientEquations
texi_entry: QuotientEquations
- element_href: sing.info#QuotientEquations
+ element_href: sing.htm#QuotientEquations
element_text: QuotientEquations
key: QuotientMain
- origin_href: sing.info#index-QuotientMain
+ origin_href: sing.htm#index-QuotientMain
entry: QuotientMain
texi_entry: QuotientMain
- element_href: sing.info#QuotientMain
+ element_href: sing.htm#QuotientMain
element_text: QuotientMain
key: radical
- origin_href: sing.info#index-radical
+ origin_href: sing.htm#index-radical
entry: radical
texi_entry: radical
- element_href: sing.info#radical
+ element_href: sing.htm#radical
element_text: radical
key: radicalEHV
- origin_href: sing.info#index-radicalEHV
+ origin_href: sing.htm#index-radicalEHV
entry: radicalEHV
texi_entry: radicalEHV
- element_href: sing.info#radicalEHV
+ element_href: sing.htm#radicalEHV
element_text: radicalEHV
key: rad_con
- origin_href: sing.info#index-rad_005fcon
+ origin_href: sing.htm#index-rad_005fcon
entry: rad_con
texi_entry: rad_con
- element_href: sing.info#rad_005fcon
+ element_href: sing.htm#rad_005fcon
element_text: rad_con
key: random
- origin_href: sing.info#index-random
+ origin_href: sing.htm#index-random
entry: random
texi_entry: random
- element_href: sing.info#random
+ element_href: sing.htm#random
element_text: random
key: random number generator, seed
- origin_href: sing.info#index-random-number-generator_002c-seed
+ origin_href: sing.htm#index-random-number-generator_002c-seed
entry: random number generator, seed
texi_entry: random number generator, seed
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: random.lib
- origin_href: sing.info#index-random_002elib
+ origin_href: sing.htm#index-random_002elib
entry: random.lib
texi_entry: random.lib
- element_href: sing.info#random_005flib
+ element_href: sing.htm#random_005flib
element_text: random_lib
key: randomBinomial
- origin_href: sing.info#index-randomBinomial
+ origin_href: sing.htm#index-randomBinomial
entry: randomBinomial
texi_entry: randomBinomial
- element_href: sing.info#randomBinomial
+ element_href: sing.htm#randomBinomial
element_text: randomBinomial
key: randomid
- origin_href: sing.info#index-randomid
+ origin_href: sing.htm#index-randomid
entry: randomid
texi_entry: randomid
- element_href: sing.info#randomid
+ element_href: sing.htm#randomid
element_text: randomid
key: randomLast
- origin_href: sing.info#index-randomLast
+ origin_href: sing.htm#index-randomLast
entry: randomLast
texi_entry: randomLast
- element_href: sing.info#randomLast
+ element_href: sing.htm#randomLast
element_text: randomLast
key: randommat
- origin_href: sing.info#index-randommat
+ origin_href: sing.htm#index-randommat
entry: randommat
texi_entry: randommat
- element_href: sing.info#randommat
+ element_href: sing.htm#randommat
element_text: randommat
key: random_lib
- origin_href: sing.info#index-random_005flib
+ origin_href: sing.htm#index-random_005flib
entry: random_lib
texi_entry: random_lib
- element_href: sing.info#random_005flib
+ element_href: sing.htm#random_005flib
element_text: random_lib
key: read
- origin_href: sing.info#index-read
+ origin_href: sing.htm#index-read
entry: read
texi_entry: read
- element_href: sing.info#read
+ element_href: sing.htm#read
element_text: read
key: reading, option
- origin_href: sing.info#index-reading_002c-option
+ origin_href: sing.htm#index-reading_002c-option
entry: reading, option
texi_entry: reading, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: readline
- origin_href: sing.info#index-readline
+ origin_href: sing.htm#index-readline
entry: readline
texi_entry: readline
- element_href: sing.info#Preface
+ element_href: sing.htm#Preface
element_text: Preface
key: real
- origin_href: sing.info#index-real
+ origin_href: sing.htm#index-real
entry: real
texi_entry: real
- element_href: sing.info#Rings-and-orderings
+ element_href: sing.htm#Rings-and-orderings
element_text: Rings and orderings
key: redefine, option
- origin_href: sing.info#index-redefine_002c-option
+ origin_href: sing.htm#index-redefine_002c-option
entry: redefine, option
texi_entry: redefine, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: redSB, option
- origin_href: sing.info#index-redSB_002c-option
+ origin_href: sing.htm#index-redSB_002c-option
entry: redSB, option
texi_entry: redSB, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: redTail, option
- origin_href: sing.info#index-redTail_002c-option
+ origin_href: sing.htm#index-redTail_002c-option
entry: redTail, option
texi_entry: redTail, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: redThrough, option
- origin_href: sing.info#index-redThrough_002c-option
+ origin_href: sing.htm#index-redThrough_002c-option
entry: redThrough, option
texi_entry: redThrough, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: reduce
- origin_href: sing.info#index-reduce
+ origin_href: sing.htm#index-reduce
entry: reduce
texi_entry: reduce
- element_href: sing.info#reduce
+ element_href: sing.htm#reduce
element_text: reduce
key: reduced standard basis
- origin_href: sing.info#index-reduced-standard-basis
+ origin_href: sing.htm#index-reduced-standard-basis
entry: reduced standard basis
texi_entry: reduced standard basis
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: reduction
- origin_href: sing.info#index-reduction
+ origin_href: sing.htm#index-reduction
entry: reduction
texi_entry: reduction
- element_href: sing.info#reduction
+ element_href: sing.htm#reduction
element_text: reduction
key: ReesAlgebra
- origin_href: sing.info#index-ReesAlgebra
+ origin_href: sing.htm#index-ReesAlgebra
entry: ReesAlgebra
texi_entry: ReesAlgebra
- element_href: sing.info#ReesAlgebra
+ element_href: sing.htm#ReesAlgebra
element_text: ReesAlgebra
key: reesclos.lib
- origin_href: sing.info#index-reesclos_002elib
+ origin_href: sing.htm#index-reesclos_002elib
entry: reesclos.lib
texi_entry: reesclos.lib
- element_href: sing.info#reesclos_005flib
+ element_href: sing.htm#reesclos_005flib
element_text: reesclos_lib
key: reesclos_lib
- origin_href: sing.info#index-reesclos_005flib
+ origin_href: sing.htm#index-reesclos_005flib
entry: reesclos_lib
texi_entry: reesclos_lib
- element_href: sing.info#reesclos_005flib
+ element_href: sing.htm#reesclos_005flib
element_text: reesclos_lib
key: References
- origin_href: sing.info#index-References
+ origin_href: sing.htm#index-References
entry: References
texi_entry: References
- element_href: sing.info#References
+ element_href: sing.htm#References
element_text: References
key: regularity
- origin_href: sing.info#index-regularity
+ origin_href: sing.htm#index-regularity
entry: regularity
texi_entry: regularity
- element_href: sing.info#regularity
+ element_href: sing.htm#regularity
element_text: regularity
key: regularity
- origin_href: sing.info#index-regularity-1
+ origin_href: sing.htm#index-regularity-1
entry: regularity
texi_entry: regularity
- element_href: sing.info#Betti-numbers-and-regularity
+ element_href: sing.htm#Betti-numbers-and-regularity
element_text: Betti numbers and regularity
key: reg_CM
- origin_href: sing.info#index-reg_005fCM
+ origin_href: sing.htm#index-reg_005fCM
entry: reg_CM
texi_entry: reg_CM
- element_href: sing.info#reg_005fCM
+ element_href: sing.htm#reg_005fCM
element_text: reg_CM
key: reg_curve
- origin_href: sing.info#index-reg_005fcurve
+ origin_href: sing.htm#index-reg_005fcurve
entry: reg_curve
texi_entry: reg_curve
- element_href: sing.info#reg_005fcurve
+ element_href: sing.htm#reg_005fcurve
element_text: reg_curve
key: reg_moncurve
- origin_href: sing.info#index-reg_005fmoncurve
+ origin_href: sing.htm#index-reg_005fmoncurve
entry: reg_moncurve
texi_entry: reg_moncurve
- element_href: sing.info#reg_005fmoncurve
+ element_href: sing.htm#reg_005fmoncurve
element_text: reg_moncurve
key: relative_orbit_variety
- origin_href: sing.info#index-relative_005forbit_005fvariety
+ origin_href: sing.htm#index-relative_005forbit_005fvariety
entry: relative_orbit_variety
texi_entry: relative_orbit_variety
- element_href: sing.info#relative_005forbit_005fvariety
+ element_href: sing.htm#relative_005forbit_005fvariety
element_text: relative_orbit_variety
key: Release Notes
- origin_href: sing.info#index-Release-Notes
+ origin_href: sing.htm#index-Release-Notes
entry: Release Notes
texi_entry: Release Notes
- element_href: sing.info#Release-Notes
+ element_href: sing.htm#Release-Notes
element_text: Release Notes
key: relweight
- origin_href: sing.info#index-relweight
+ origin_href: sing.htm#index-relweight
entry: relweight
texi_entry: relweight
- element_href: sing.info#relweight
+ element_href: sing.htm#relweight
element_text: relweight
key: Remainder
- origin_href: sing.info#index-Remainder
+ origin_href: sing.htm#index-Remainder
entry: Remainder
texi_entry: Remainder
- element_href: sing.info#Remainder
+ element_href: sing.htm#Remainder
element_text: Remainder
key: RemainderMain
- origin_href: sing.info#index-RemainderMain
+ origin_href: sing.htm#index-RemainderMain
entry: RemainderMain
texi_entry: RemainderMain
- element_href: sing.info#RemainderMain
+ element_href: sing.htm#RemainderMain
element_text: RemainderMain
key: repart
- origin_href: sing.info#index-repart
+ origin_href: sing.htm#index-repart
entry: repart
texi_entry: repart
- element_href: sing.info#repart
+ element_href: sing.htm#repart
element_text: repart
key: representation, math objects
- origin_href: sing.info#index-representation_002c-math-objects
+ origin_href: sing.htm#index-representation_002c-math-objects
entry: representation, math objects
texi_entry: representation, math objects
- element_href: sing.info#Representation-of-mathematical-objects
+ element_href: sing.htm#Representation-of-mathematical-objects
element_text: Representation of mathematical objects
key: res
- origin_href: sing.info#index-res
+ origin_href: sing.htm#index-res
entry: res
texi_entry: res
- element_href: sing.info#res
+ element_href: sing.htm#res
element_text: res
key: reservedName
- origin_href: sing.info#index-reservedName
+ origin_href: sing.htm#index-reservedName
entry: reservedName
texi_entry: reservedName
- element_href: sing.info#reservedName
+ element_href: sing.htm#reservedName
element_text: reservedName
key: Resolution
- origin_href: sing.info#index-Resolution
+ origin_href: sing.htm#index-Resolution
entry: Resolution
texi_entry: Resolution
- element_href: sing.info#Resolution
+ element_href: sing.htm#Resolution
element_text: Resolution
key: resolution
- origin_href: sing.info#index-resolution
+ origin_href: sing.htm#index-resolution
entry: resolution
texi_entry: resolution
- element_href: sing.info#resolution
+ element_href: sing.htm#resolution
element_text: resolution
key: resolution declarations
- origin_href: sing.info#index-resolution-declarations
+ origin_href: sing.htm#index-resolution-declarations
entry: resolution declarations
texi_entry: resolution declarations
- element_href: sing.info#resolution-declarations
+ element_href: sing.htm#resolution-declarations
element_text: resolution declarations
key: resolution expressions
- origin_href: sing.info#index-resolution-expressions
+ origin_href: sing.htm#index-resolution-expressions
entry: resolution expressions
texi_entry: resolution expressions
- element_href: sing.info#resolution-expressions
+ element_href: sing.htm#resolution-expressions
element_text: resolution expressions
key: resolution related functions
- origin_href: sing.info#index-resolution-related-functions
+ origin_href: sing.htm#index-resolution-related-functions
entry: resolution related functions
texi_entry: resolution related functions
- element_href: sing.info#resolution-related-functions
+ element_href: sing.htm#resolution-related-functions
element_text: resolution related functions
key: resolution, computation of
- origin_href: sing.info#index-resolution_002c-computation-of
+ origin_href: sing.htm#index-resolution_002c-computation-of
entry: resolution, computation of
texi_entry: resolution, computation of
- element_href: sing.info#res
+ element_href: sing.htm#res
element_text: res
key: resolution, hilbert-driven
- origin_href: sing.info#index-resolution_002c-hilbert_002ddriven
+ origin_href: sing.htm#index-resolution_002c-hilbert_002ddriven
entry: resolution, hilbert-driven
texi_entry: resolution, hilbert-driven
- element_href: sing.info#hres
+ element_href: sing.htm#hres
element_text: hres
key: resolution, La Scala's method
- origin_href: sing.info#index-resolution_002c-La-Scala_0027s-method
+ origin_href: sing.htm#index-resolution_002c-La-Scala_0027s-method
entry: resolution, La Scala's method
texi_entry: resolution, La Scala's method
- element_href: sing.info#lres
+ element_href: sing.htm#lres
element_text: lres
key: resultant
- origin_href: sing.info#index-resultant
+ origin_href: sing.htm#index-resultant
entry: resultant
texi_entry: resultant
- element_href: sing.info#resultant
+ element_href: sing.htm#resultant
element_text: resultant
key: return
- origin_href: sing.info#index-return
+ origin_href: sing.htm#index-return
entry: return
texi_entry: return
- element_href: sing.info#return
+ element_href: sing.htm#return
element_text: return
key: return type of procedures
- origin_href: sing.info#index-return-type-of-procedures
+ origin_href: sing.htm#index-return-type-of-procedures
entry: return type of procedures
texi_entry: return type of procedures
- element_href: sing.info#Return-type-of-procedures
+ element_href: sing.htm#Return-type-of-procedures
element_text: Return type of procedures
key: returnSB, option
- origin_href: sing.info#index-returnSB_002c-option
+ origin_href: sing.htm#index-returnSB_002c-option
entry: returnSB, option
texi_entry: returnSB, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: reverse lexicographical ordering
- origin_href: sing.info#index-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-reverse-lexicographical-ordering
entry: reverse lexicographical ordering
texi_entry: reverse lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: ReynoldsImage
- origin_href: sing.info#index-ReynoldsImage
+ origin_href: sing.htm#index-ReynoldsImage
entry: ReynoldsImage
texi_entry: ReynoldsImage
- element_href: sing.info#ReynoldsImage
+ element_href: sing.htm#ReynoldsImage
element_text: ReynoldsImage
key: ReynoldsOperator
- origin_href: sing.info#index-ReynoldsOperator
+ origin_href: sing.htm#index-ReynoldsOperator
entry: ReynoldsOperator
texi_entry: ReynoldsOperator
- element_href: sing.info#ReynoldsOperator
+ element_href: sing.htm#ReynoldsOperator
element_text: ReynoldsOperator
key: reynolds_molien
- origin_href: sing.info#index-reynolds_005fmolien
+ origin_href: sing.htm#index-reynolds_005fmolien
entry: reynolds_molien
texi_entry: reynolds_molien
- element_href: sing.info#reynolds_005fmolien
+ element_href: sing.htm#reynolds_005fmolien
element_text: reynolds_molien
key: ring
- origin_href: sing.info#index-ring
+ origin_href: sing.htm#index-ring
entry: ring
texi_entry: ring
- element_href: sing.info#ring
+ element_href: sing.htm#ring
element_text: ring
key: ring declarations
- origin_href: sing.info#index-ring-declarations
+ origin_href: sing.htm#index-ring-declarations
entry: ring declarations
texi_entry: ring declarations
- element_href: sing.info#ring-declarations
+ element_href: sing.htm#ring-declarations
element_text: ring declarations
key: ring operations
- origin_href: sing.info#index-ring-operations
+ origin_href: sing.htm#index-ring-operations
entry: ring operations
texi_entry: ring operations
- element_href: sing.info#ring-operations
+ element_href: sing.htm#ring-operations
element_text: ring operations
key: ring related functions
- origin_href: sing.info#index-ring-related-functions
+ origin_href: sing.htm#index-ring-related-functions
entry: ring related functions
texi_entry: ring related functions
- element_href: sing.info#ring-related-functions
+ element_href: sing.htm#ring-related-functions
element_text: ring related functions
key: ring.lib
- origin_href: sing.info#index-ring_002elib
+ origin_href: sing.htm#index-ring_002elib
entry: ring.lib
texi_entry: ring.lib
- element_href: sing.info#ring_005flib
+ element_href: sing.htm#ring_005flib
element_text: ring_lib
key: Rings and orderings
- origin_href: sing.info#index-Rings-and-orderings
+ origin_href: sing.htm#index-Rings-and-orderings
entry: Rings and orderings
texi_entry: Rings and orderings
- element_href: sing.info#Rings-and-orderings
+ element_href: sing.htm#Rings-and-orderings
element_text: Rings and orderings
key: Rings and standard bases
- origin_href: sing.info#index-Rings-and-standard-bases
+ origin_href: sing.htm#index-Rings-and-standard-bases
entry: Rings and standard bases
texi_entry: Rings and standard bases
- element_href: sing.info#Rings-and-standard-bases
+ element_href: sing.htm#Rings-and-standard-bases
element_text: Rings and standard bases
key: ringtensor
- origin_href: sing.info#index-ringtensor
+ origin_href: sing.htm#index-ringtensor
entry: ringtensor
texi_entry: ringtensor
- element_href: sing.info#ringtensor
+ element_href: sing.htm#ringtensor
element_text: ringtensor
key: ringweights
- origin_href: sing.info#index-ringweights
+ origin_href: sing.htm#index-ringweights
entry: ringweights
texi_entry: ringweights
- element_href: sing.info#ringweights
+ element_href: sing.htm#ringweights
element_text: ringweights
key: ring_lib
- origin_href: sing.info#index-ring_005flib
+ origin_href: sing.htm#index-ring_005flib
entry: ring_lib
texi_entry: ring_lib
- element_href: sing.info#ring_005flib
+ element_href: sing.htm#ring_005flib
element_text: ring_lib
key: rinvar.lib
- origin_href: sing.info#index-rinvar_002elib
+ origin_href: sing.htm#index-rinvar_002elib
entry: rinvar.lib
texi_entry: rinvar.lib
- element_href: sing.info#rinvar_005flib
+ element_href: sing.htm#rinvar_005flib
element_text: rinvar_lib
key: rinvar_lib
- origin_href: sing.info#index-rinvar_005flib
+ origin_href: sing.htm#index-rinvar_005flib
entry: rinvar_lib
texi_entry: rinvar_lib
- element_href: sing.info#rinvar_005flib
+ element_href: sing.htm#rinvar_005flib
element_text: rinvar_lib
key: rMacaulay
- origin_href: sing.info#index-rMacaulay
+ origin_href: sing.htm#index-rMacaulay
entry: rMacaulay
texi_entry: rMacaulay
- element_href: sing.info#rMacaulay
+ element_href: sing.htm#rMacaulay
element_text: rMacaulay
key: rmx
- origin_href: sing.info#index-rmx
+ origin_href: sing.htm#index-rmx
entry: rmx
texi_entry: rmx
- element_href: sing.info#rmx
+ element_href: sing.htm#rmx
element_text: rmx
key: rm_unitcol
- origin_href: sing.info#index-rm_005funitcol
+ origin_href: sing.htm#index-rm_005funitcol
entry: rm_unitcol
texi_entry: rm_unitcol
- element_href: sing.info#rm_005funitcol
+ element_href: sing.htm#rm_005funitcol
element_text: rm_unitcol
key: rm_unitrow
- origin_href: sing.info#index-rm_005funitrow
+ origin_href: sing.htm#index-rm_005funitrow
entry: rm_unitrow
texi_entry: rm_unitrow
- element_href: sing.info#rm_005funitrow
+ element_href: sing.htm#rm_005funitrow
element_text: rm_unitrow
key: RootDir
- origin_href: sing.info#index-RootDir
+ origin_href: sing.htm#index-RootDir
entry: RootDir
texi_entry: RootDir
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: Roots
- origin_href: sing.info#index-Roots
+ origin_href: sing.htm#index-Roots
entry: Roots
texi_entry: Roots
- element_href: sing.info#Roots
+ element_href: sing.htm#Roots
element_text: Roots
key: RootsMain
- origin_href: sing.info#index-RootsMain
+ origin_href: sing.htm#index-RootsMain
entry: RootsMain
texi_entry: RootsMain
- element_href: sing.info#RootsMain
+ element_href: sing.htm#RootsMain
element_text: RootsMain
key: rowred
- origin_href: sing.info#index-rowred
+ origin_href: sing.htm#index-rowred
entry: rowred
texi_entry: rowred
- element_href: sing.info#rowred
+ element_href: sing.htm#rowred
element_text: rowred
key: rp, global ordering
- origin_href: sing.info#index-rp_002c-global-ordering
+ origin_href: sing.htm#index-rp_002c-global-ordering
entry: rp, global ordering
texi_entry: rp, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: Running SINGULAR under Emacs
- origin_href: sing.info#index-Running-SINGULAR-under-Emacs
+ origin_href: sing.htm#index-Running-SINGULAR-under-Emacs
entry: Running SINGULAR under Emacs
texi_entry: Running SINGULAR under Emacs
- element_href: sing.info#Running-SINGULAR-under-Emacs
+ element_href: sing.htm#Running-SINGULAR-under-Emacs
element_text: Running SINGULAR under Emacs
key: rvalue
- origin_href: sing.info#index-rvalue
+ origin_href: sing.htm#index-rvalue
entry: rvalue
texi_entry: rvalue
- element_href: sing.info#No-rvalue-of-increments-and-assignments
+ element_href: sing.htm#No-rvalue-of-increments-and-assignments
element_text: No rvalue of increments and assignments
key: rvar
- origin_href: sing.info#index-rvar
+ origin_href: sing.htm#index-rvar
entry: rvar
texi_entry: rvar
- element_href: sing.info#rvar
+ element_href: sing.htm#rvar
element_text: rvar
key: SameQ
- origin_href: sing.info#index-SameQ
+ origin_href: sing.htm#index-SameQ
entry: SameQ
texi_entry: SameQ
- element_href: sing.info#SameQ
+ element_href: sing.htm#SameQ
element_text: SameQ
key: sat
- origin_href: sing.info#index-sat
+ origin_href: sing.htm#index-sat
entry: sat
texi_entry: sat
- element_href: sing.info#sat
+ element_href: sing.htm#sat
element_text: sat
key: Saturation
- origin_href: sing.info#index-Saturation
+ origin_href: sing.htm#index-Saturation
entry: Saturation
texi_entry: Saturation
- element_href: sing.info#Saturation
+ element_href: sing.htm#Saturation
element_text: Saturation
key: Schmidt, Jens
- origin_href: sing.info#index-Schmidt_002c-Jens
+ origin_href: sing.htm#index-Schmidt_002c-Jens
entry: Schmidt, Jens
texi_entry: Schmidt, Jens
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Scho"nemann, Hans
- origin_href: sing.info#index-Schonemann_002c-Hans
+ origin_href: sing.htm#index-Schonemann_002c-Hans
entry: Scho"nemann, Hans
texi_entry: Sch@"onemann, Hans
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Schulze, Mathias
- origin_href: sing.info#index-Schulze_002c-Mathias
+ origin_href: sing.htm#index-Schulze_002c-Mathias
entry: Schulze, Mathias
texi_entry: Schulze, Mathias
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: SDB breakpoint
- origin_href: sing.info#index-SDB-breakpoint
+ origin_href: sing.htm#index-SDB-breakpoint
entry: SDB breakpoint
texi_entry: SDB breakpoint
- element_href: sing.info#SDB-breakpoints-in-procedures
+ element_href: sing.htm#SDB-breakpoints-in-procedures
element_text: SDB breakpoints in procedures
key: SDB debugger
- origin_href: sing.info#index-SDB-debugger
+ origin_href: sing.htm#index-SDB-debugger
entry: SDB debugger
texi_entry: SDB debugger
- element_href: sing.info#SDB-breakpoints-in-procedures
+ element_href: sing.htm#SDB-breakpoints-in-procedures
element_text: SDB breakpoints in procedures
key: sdb, source code debugger
- origin_href: sing.info#index-sdb_002c-source-code-debugger
+ origin_href: sing.htm#index-sdb_002c-source-code-debugger
entry: sdb, source code debugger
texi_entry: sdb, source code debugger
- element_href: sing.info#Source-code-debugger
+ element_href: sing.htm#Source-code-debugger
element_text: Source code debugger
key: SearchPath
- origin_href: sing.info#index-SearchPath
+ origin_href: sing.htm#index-SearchPath
entry: SearchPath
texi_entry: SearchPath
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: secondary_and_irreducibles_no_molien
- origin_href:
sing.info#index-secondary_005fand_005firreducibles_005fno_005fmolien
+ origin_href:
sing.htm#index-secondary_005fand_005firreducibles_005fno_005fmolien
entry: secondary_and_irreducibles_no_molien
texi_entry: secondary_and_irreducibles_no_molien
- element_href: sing.info#secondary_005fand_005firreducibles_005fno_005fmolien
+ element_href: sing.htm#secondary_005fand_005firreducibles_005fno_005fmolien
element_text: secondary_and_irreducibles_no_molien
key: secondary_char0
- origin_href: sing.info#index-secondary_005fchar0
+ origin_href: sing.htm#index-secondary_005fchar0
entry: secondary_char0
texi_entry: secondary_char0
- element_href: sing.info#secondary_005fchar0
+ element_href: sing.htm#secondary_005fchar0
element_text: secondary_char0
key: secondary_charp
- origin_href: sing.info#index-secondary_005fcharp
+ origin_href: sing.htm#index-secondary_005fcharp
entry: secondary_charp
texi_entry: secondary_charp
- element_href: sing.info#secondary_005fcharp
+ element_href: sing.htm#secondary_005fcharp
element_text: secondary_charp
key: secondary_not_cohen_macaulay
- origin_href: sing.info#index-secondary_005fnot_005fcohen_005fmacaulay
+ origin_href: sing.htm#index-secondary_005fnot_005fcohen_005fmacaulay
entry: secondary_not_cohen_macaulay
texi_entry: secondary_not_cohen_macaulay
- element_href: sing.info#secondary_005fnot_005fcohen_005fmacaulay
+ element_href: sing.htm#secondary_005fnot_005fcohen_005fmacaulay
element_text: secondary_not_cohen_macaulay
key: secondary_no_molien
- origin_href: sing.info#index-secondary_005fno_005fmolien
+ origin_href: sing.htm#index-secondary_005fno_005fmolien
entry: secondary_no_molien
texi_entry: secondary_no_molien
- element_href: sing.info#secondary_005fno_005fmolien
+ element_href: sing.htm#secondary_005fno_005fmolien
element_text: secondary_no_molien
key: select
- origin_href: sing.info#index-select
+ origin_href: sing.htm#index-select
entry: select
texi_entry: select
- element_href: sing.info#select
+ element_href: sing.htm#select
element_text: select
key: select1
- origin_href: sing.info#index-select1
+ origin_href: sing.htm#index-select1
entry: select1
texi_entry: select1
- element_href: sing.info#select1
+ element_href: sing.htm#select1
element_text: select1
key: semiCMcod2
- origin_href: sing.info#index-semiCMcod2
+ origin_href: sing.htm#index-semiCMcod2
entry: semiCMcod2
texi_entry: semiCMcod2
- element_href: sing.info#semiCMcod2
+ element_href: sing.htm#semiCMcod2
element_text: semiCMcod2
key: semigroup of values
- origin_href: sing.info#index-semigroup-of-values
+ origin_href: sing.htm#index-semigroup-of-values
entry: semigroup of values
texi_entry: semigroup of values
- element_href: sing.info#invariants
+ element_href: sing.htm#invariants
element_text: invariants
key: separateHNE
- origin_href: sing.info#index-separateHNE
+ origin_href: sing.htm#index-separateHNE
entry: separateHNE
texi_entry: separateHNE
- element_href: sing.info#separateHNE
+ element_href: sing.htm#separateHNE
element_text: separateHNE
key: separator
- origin_href: sing.info#index-separator
+ origin_href: sing.htm#index-separator
entry: separator
texi_entry: separator
- element_href: sing.info#separator
+ element_href: sing.htm#separator
element_text: separator
key: setenv
- origin_href: sing.info#index-setenv
+ origin_href: sing.htm#index-setenv
entry: setenv
texi_entry: setenv
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: sethnering
- origin_href: sing.info#index-sethnering
+ origin_href: sing.htm#index-sethnering
entry: sethnering
texi_entry: sethnering
- element_href: sing.info#sethnering
+ element_href: sing.htm#sethnering
element_text: sethnering
key: setring
- origin_href: sing.info#index-setring
+ origin_href: sing.htm#index-setring
entry: setring
texi_entry: setring
- element_href: sing.info#setring
+ element_href: sing.htm#setring
element_text: setring
key: sh
- origin_href: sing.info#index-sh
+ origin_href: sing.htm#index-sh
entry: sh
texi_entry: sh
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: short
- origin_href: sing.info#index-short
+ origin_href: sing.htm#index-short
entry: short
texi_entry: short
- element_href: sing.info#short
+ element_href: sing.htm#short
element_text: short
key: shortid
- origin_href: sing.info#index-shortid
+ origin_href: sing.htm#index-shortid
entry: shortid
texi_entry: shortid
- element_href: sing.info#shortid
+ element_href: sing.htm#shortid
element_text: shortid
key: show
- origin_href: sing.info#index-show
+ origin_href: sing.htm#index-show
entry: show
texi_entry: show
- element_href: sing.info#show
+ element_href: sing.htm#show
element_text: show
key: showrecursive
- origin_href: sing.info#index-showrecursive
+ origin_href: sing.htm#index-showrecursive
entry: showrecursive
texi_entry: showrecursive
- element_href: sing.info#showrecursive
+ element_href: sing.htm#showrecursive
element_text: showrecursive
key: simplex
- origin_href: sing.info#index-simplex
+ origin_href: sing.htm#index-simplex
entry: simplex
texi_entry: simplex
- element_href: sing.info#simplex
+ element_href: sing.htm#simplex
element_text: simplex
key: simplexOut
- origin_href: sing.info#index-simplexOut
+ origin_href: sing.htm#index-simplexOut
entry: simplexOut
texi_entry: simplexOut
- element_href: sing.info#simplexOut
+ element_href: sing.htm#simplexOut
element_text: simplexOut
key: simplify
- origin_href: sing.info#index-simplify
+ origin_href: sing.htm#index-simplify
entry: simplify
texi_entry: simplify
- element_href: sing.info#simplify
+ element_href: sing.htm#simplify
element_text: simplify
key: SimplifyIdeal
- origin_href: sing.info#index-SimplifyIdeal
+ origin_href: sing.htm#index-SimplifyIdeal
entry: SimplifyIdeal
texi_entry: SimplifyIdeal
- element_href: sing.info#SimplifyIdeal
+ element_href: sing.htm#SimplifyIdeal
element_text: SimplifyIdeal
key: sing.lib
- origin_href: sing.info#index-sing_002elib
+ origin_href: sing.htm#index-sing_002elib
entry: sing.lib
texi_entry: sing.lib
- element_href: sing.info#sing_005flib
+ element_href: sing.htm#sing_005flib
element_text: sing_lib
key: Singular
- origin_href: sing.info#index-Singular
+ origin_href: sing.htm#index-Singular
entry: Singular
texi_entry: Singular
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: SINGULAR libraries
- origin_href: sing.info#index-SINGULAR-libraries
+ origin_href: sing.htm#index-SINGULAR-libraries
entry: SINGULAR libraries
texi_entry: SINGULAR libraries
- element_href: sing.info#SINGULAR-libraries
+ element_href: sing.htm#SINGULAR-libraries
element_text: SINGULAR libraries
key: Singular, customization of Emacs user interface
- origin_href:
sing.info#index-Singular_002c-customization-of-Emacs-user-interface
+ origin_href:
sing.htm#index-Singular_002c-customization-of-Emacs-user-interface
entry: Singular, customization of Emacs user interface
texi_entry: Singular, customization of Emacs user interface
- element_href: sing.info#Customization-of-the-Emacs-interface
+ element_href: sing.htm#Customization-of-the-Emacs-interface
element_text: Customization of the Emacs interface
key: Singular, demo mode
- origin_href: sing.info#index-Singular_002c-demo-mode
+ origin_href: sing.htm#index-Singular_002c-demo-mode
entry: Singular, demo mode
texi_entry: Singular, demo mode
- element_href: sing.info#Demo-mode
+ element_href: sing.htm#Demo-mode
element_text: Demo mode
key: Singular, editing input files with Emacs
- origin_href: sing.info#index-Singular_002c-editing-input-files-with-Emacs
+ origin_href: sing.htm#index-Singular_002c-editing-input-files-with-Emacs
entry: Singular, editing input files with Emacs
texi_entry: Singular, editing input files with Emacs
- element_href: sing.info#Editing-SINGULAR-input-files-with-Emacs
+ element_href: sing.htm#Editing-SINGULAR-input-files-with-Emacs
element_text: Editing SINGULAR input files with Emacs
key: Singular, important commands of Emacs interface
- origin_href:
sing.info#index-Singular_002c-important-commands-of-Emacs-interface
+ origin_href:
sing.htm#index-Singular_002c-important-commands-of-Emacs-interface
entry: Singular, important commands of Emacs interface
texi_entry: Singular, important commands of Emacs interface
- element_href: sing.info#Top-20-Emacs-commands
+ element_href: sing.htm#Top-20-Emacs-commands
element_text: Top 20 Emacs commands
key: Singular, running within Emacs
- origin_href: sing.info#index-Singular_002c-running-within-Emacs
+ origin_href: sing.htm#index-Singular_002c-running-within-Emacs
entry: Singular, running within Emacs
texi_entry: Singular, running within Emacs
- element_href: sing.info#Running-SINGULAR-under-Emacs
+ element_href: sing.htm#Running-SINGULAR-under-Emacs
element_text: Running SINGULAR under Emacs
key: SINGULARHIST
- origin_href: sing.info#index-SINGULARHIST
+ origin_href: sing.htm#index-SINGULARHIST
entry: SINGULARHIST
texi_entry: SINGULARHIST
- element_href: sing.info#Editing-input
+ element_href: sing.htm#Editing-input
element_text: Editing input
key: Singularities
- origin_href: sing.info#index-Singularities
+ origin_href: sing.htm#index-Singularities
entry: Singularities
texi_entry: Singularities
- element_href: sing.info#Singularities
+ element_href: sing.htm#Singularities
element_text: Singularities
key: singularities
- origin_href: sing.info#index-singularities
+ origin_href: sing.htm#index-singularities
entry: singularities
texi_entry: singularities
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: singularities
- origin_href: sing.info#index-singularities-1
+ origin_href: sing.htm#index-singularities-1
entry: singularities
texi_entry: singularities
- element_href: sing.info#gmsring
+ element_href: sing.htm#gmsring
element_text: gmsring
key: singularities
- origin_href: sing.info#index-singularities-2
+ origin_href: sing.htm#index-singularities-2
entry: singularities
texi_entry: singularities
- element_href: sing.info#gmsnf
+ element_href: sing.htm#gmsnf
element_text: gmsnf
key: singularities
- origin_href: sing.info#index-singularities-3
+ origin_href: sing.htm#index-singularities-3
entry: singularities
texi_entry: singularities
- element_href: sing.info#gmscoeffs
+ element_href: sing.htm#gmscoeffs
element_text: gmscoeffs
key: singularities
- origin_href: sing.info#index-singularities-4
+ origin_href: sing.htm#index-singularities-4
entry: singularities
texi_entry: singularities
- element_href: sing.info#bernstein
+ element_href: sing.htm#bernstein
element_text: bernstein
key: singularities
- origin_href: sing.info#index-singularities-5
+ origin_href: sing.htm#index-singularities-5
entry: singularities
texi_entry: singularities
- element_href: sing.info#monodromy
+ element_href: sing.htm#monodromy
element_text: monodromy
key: singularities
- origin_href: sing.info#index-singularities-6
+ origin_href: sing.htm#index-singularities-6
entry: singularities
texi_entry: singularities
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: singularities
- origin_href: sing.info#index-singularities-7
+ origin_href: sing.htm#index-singularities-7
entry: singularities
texi_entry: singularities
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: singularities
- origin_href: sing.info#index-singularities-8
+ origin_href: sing.htm#index-singularities-8
entry: singularities
texi_entry: singularities
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: singularities
- origin_href: sing.info#index-singularities-9
+ origin_href: sing.htm#index-singularities-9
entry: singularities
texi_entry: singularities
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: singularities
- origin_href: sing.info#index-singularities-10
+ origin_href: sing.htm#index-singularities-10
entry: singularities
texi_entry: singularities
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: singularities
- origin_href: sing.info#index-singularities-11
+ origin_href: sing.htm#index-singularities-11
entry: singularities
texi_entry: singularities
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: singularities
- origin_href: sing.info#index-singularities-12
+ origin_href: sing.htm#index-singularities-12
entry: singularities
texi_entry: singularities
- element_href: sing.info#spectrumnd
+ element_href: sing.htm#spectrumnd
element_text: spectrumnd
key: singularity
- origin_href: sing.info#index-singularity
+ origin_href: sing.htm#index-singularity
entry: singularity
texi_entry: singularity
- element_href: sing.info#singularity
+ element_href: sing.htm#singularity
element_text: singularity
key: SINGULARPATH
- origin_href: sing.info#index-SINGULARPATH
+ origin_href: sing.htm#index-SINGULARPATH
entry: SINGULARPATH
texi_entry: SINGULARPATH
- element_href: sing.info#Loading-of-a-library
+ element_href: sing.htm#Loading-of-a-library
element_text: Loading of a library
key: singularrc
- origin_href: sing.info#index-singularrc
+ origin_href: sing.htm#index-singularrc
entry: singularrc
texi_entry: singularrc
- element_href: sing.info#Startup-sequence
+ element_href: sing.htm#Startup-sequence
element_text: Startup sequence
key: sing_lib
- origin_href: sing.info#index-sing_005flib
+ origin_href: sing.htm#index-sing_005flib
entry: sing_lib
texi_entry: sing_lib
- element_href: sing.info#sing_005flib
+ element_href: sing.htm#sing_005flib
element_text: sing_lib
key: size
- origin_href: sing.info#index-size
+ origin_href: sing.htm#index-size
entry: size
texi_entry: size
- element_href: sing.info#size
+ element_href: sing.htm#size
element_text: size
key: size
- origin_href: sing.info#index-size-1
+ origin_href: sing.htm#index-size-1
entry: size
texi_entry: size
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: skewmat
- origin_href: sing.info#index-skewmat
+ origin_href: sing.htm#index-skewmat
entry: skewmat
texi_entry: skewmat
- element_href: sing.info#skewmat
+ element_href: sing.htm#skewmat
element_text: skewmat
key: sleep
- origin_href: sing.info#index-sleep
+ origin_href: sing.htm#index-sleep
entry: sleep
texi_entry: sleep
- element_href: sing.info#status
+ element_href: sing.htm#status
element_text: status
key: slocus
- origin_href: sing.info#index-slocus
+ origin_href: sing.htm#index-slocus
entry: slocus
texi_entry: slocus
- element_href: sing.info#slocus
+ element_href: sing.htm#slocus
element_text: slocus
key: solve
- origin_href: sing.info#index-solve
+ origin_href: sing.htm#index-solve
entry: solve
texi_entry: solve
- element_href: sing.info#solve
+ element_href: sing.htm#solve
element_text: solve
key: solve.lib
- origin_href: sing.info#index-solve_002elib
+ origin_href: sing.htm#index-solve_002elib
entry: solve.lib
texi_entry: solve.lib
- element_href: sing.info#solve_005flib
+ element_href: sing.htm#solve_005flib
element_text: solve_lib
key: solvelinearpart
- origin_href: sing.info#index-solvelinearpart
+ origin_href: sing.htm#index-solvelinearpart
entry: solvelinearpart
texi_entry: solvelinearpart
- element_href: sing.info#solvelinearpart
+ element_href: sing.htm#solvelinearpart
element_text: solvelinearpart
key: solve_IP
- origin_href: sing.info#index-solve_005fIP
+ origin_href: sing.htm#index-solve_005fIP
entry: solve_IP
texi_entry: solve_IP
- element_href: sing.info#solve_005fIP
+ element_href: sing.htm#solve_005fIP
element_text: solve_IP
key: solve_lib
- origin_href: sing.info#index-solve_005flib
+ origin_href: sing.htm#index-solve_005flib
entry: solve_lib
texi_entry: solve_lib
- element_href: sing.info#solve_005flib
+ element_href: sing.htm#solve_005flib
element_text: solve_lib
key: sort
- origin_href: sing.info#index-sort
+ origin_href: sing.htm#index-sort
entry: sort
texi_entry: sort
- element_href: sing.info#sort
+ element_href: sing.htm#sort
element_text: sort
key: sortandmap
- origin_href: sing.info#index-sortandmap
+ origin_href: sing.htm#index-sortandmap
entry: sortandmap
texi_entry: sortandmap
- element_href: sing.info#sortandmap
+ element_href: sing.htm#sortandmap
element_text: sortandmap
key: sortier
- origin_href: sing.info#index-sortier
+ origin_href: sing.htm#index-sortier
entry: sortier
texi_entry: sortier
- element_href: sing.info#sortier
+ element_href: sing.htm#sortier
element_text: sortier
key: sortvars
- origin_href: sing.info#index-sortvars
+ origin_href: sing.htm#index-sortvars
entry: sortvars
texi_entry: sortvars
- element_href: sing.info#sortvars
+ element_href: sing.htm#sortvars
element_text: sortvars
key: sortvec
- origin_href: sing.info#index-sortvec
+ origin_href: sing.htm#index-sortvec
entry: sortvec
texi_entry: sortvec
- element_href: sing.info#sortvec
+ element_href: sing.htm#sortvec
element_text: sortvec
key: Source code debugger, invocation
- origin_href: sing.info#index-Source-code-debugger_002c-invocation
+ origin_href: sing.htm#index-Source-code-debugger_002c-invocation
entry: Source code debugger, invocation
texi_entry: Source code debugger, invocation
- element_href: sing.info#Command-line-options
+ element_href: sing.htm#Command-line-options
element_text: Command line options
key: source code debugger, sdb
- origin_href: sing.info#index-source-code-debugger_002c-sdb
+ origin_href: sing.htm#index-source-code-debugger_002c-sdb
entry: source code debugger, sdb
texi_entry: source code debugger, sdb
- element_href: sing.info#Source-code-debugger
+ element_href: sing.htm#Source-code-debugger
element_text: Source code debugger
key: spadd
- origin_href: sing.info#index-spadd
+ origin_href: sing.htm#index-spadd
entry: spadd
texi_entry: spadd
- element_href: sing.info#spadd
+ element_href: sing.htm#spadd
element_text: spadd
key: sparseid
- origin_href: sing.info#index-sparseid
+ origin_href: sing.htm#index-sparseid
entry: sparseid
texi_entry: sparseid
- element_href: sing.info#sparseid
+ element_href: sing.htm#sparseid
element_text: sparseid
key: sparsemat
- origin_href: sing.info#index-sparsemat
+ origin_href: sing.htm#index-sparsemat
entry: sparsemat
texi_entry: sparsemat
- element_href: sing.info#sparsemat
+ element_href: sing.htm#sparsemat
element_text: sparsemat
key: sparsematrix
- origin_href: sing.info#index-sparsematrix
+ origin_href: sing.htm#index-sparsematrix
entry: sparsematrix
texi_entry: sparsematrix
- element_href: sing.info#sparsematrix
+ element_href: sing.htm#sparsematrix
element_text: sparsematrix
key: sparsepoly
- origin_href: sing.info#index-sparsepoly
+ origin_href: sing.htm#index-sparsepoly
entry: sparsepoly
texi_entry: sparsepoly
- element_href: sing.info#sparsepoly
+ element_href: sing.htm#sparsepoly
element_text: sparsepoly
key: sparsetriag
- origin_href: sing.info#index-sparsetriag
+ origin_href: sing.htm#index-sparsetriag
entry: sparsetriag
texi_entry: sparsetriag
- element_href: sing.info#sparsetriag
+ element_href: sing.htm#sparsetriag
element_text: sparsetriag
key: spcurve.lib
- origin_href: sing.info#index-spcurve_002elib
+ origin_href: sing.htm#index-spcurve_002elib
entry: spcurve.lib
texi_entry: spcurve.lib
- element_href: sing.info#spcurve_005flib
+ element_href: sing.htm#spcurve_005flib
element_text: spcurve_lib
key: spcurve_lib
- origin_href: sing.info#index-spcurve_005flib
+ origin_href: sing.htm#index-spcurve_005flib
entry: spcurve_lib
texi_entry: spcurve_lib
- element_href: sing.info#spcurve_005flib
+ element_href: sing.htm#spcurve_005flib
element_text: spcurve_lib
key: Special characters
- origin_href: sing.info#index-Special-characters
+ origin_href: sing.htm#index-Special-characters
entry: Special characters
texi_entry: Special characters
- element_href: sing.info#Special-characters
+ element_href: sing.htm#Special-characters
element_text: Special characters
key: special characters, non-english
- origin_href: sing.info#index-special-characters_002c-non_002denglish
+ origin_href: sing.htm#index-special-characters_002c-non_002denglish
entry: special characters, non-english
texi_entry: special characters, non-english
- element_href: sing.info#Limitations
+ element_href: sing.htm#Limitations
element_text: Limitations
key: specialModulesEqual
- origin_href: sing.info#index-specialModulesEqual
+ origin_href: sing.htm#index-specialModulesEqual
entry: specialModulesEqual
texi_entry: specialModulesEqual
- element_href: sing.info#specialModulesEqual
+ element_href: sing.htm#specialModulesEqual
element_text: specialModulesEqual
key: spectral pairs
- origin_href: sing.info#index-spectral-pairs
+ origin_href: sing.htm#index-spectral-pairs
entry: spectral pairs
texi_entry: spectral pairs
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: spectral pairs
- origin_href: sing.info#index-spectral-pairs-1
+ origin_href: sing.htm#index-spectral-pairs-1
entry: spectral pairs
texi_entry: spectral pairs
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: spectral pairs
- origin_href: sing.info#index-spectral-pairs-2
+ origin_href: sing.htm#index-spectral-pairs-2
entry: spectral pairs
texi_entry: spectral pairs
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: spectrum
- origin_href: sing.info#index-spectrum
+ origin_href: sing.htm#index-spectrum
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: spectrum
- origin_href: sing.info#index-spectrum-1
+ origin_href: sing.htm#index-spectrum-1
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: spectrum
- origin_href: sing.info#index-spectrum-2
+ origin_href: sing.htm#index-spectrum-2
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: spectrum
- origin_href: sing.info#index-spectrum-3
+ origin_href: sing.htm#index-spectrum-3
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: spectrum
- origin_href: sing.info#index-spectrum-4
+ origin_href: sing.htm#index-spectrum-4
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: spectrum
- origin_href: sing.info#index-spectrum-5
+ origin_href: sing.htm#index-spectrum-5
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: spectrum
- origin_href: sing.info#index-spectrum-6
+ origin_href: sing.htm#index-spectrum-6
entry: spectrum
texi_entry: spectrum
- element_href: sing.info#spectrumnd
+ element_href: sing.htm#spectrumnd
element_text: spectrumnd
key: spectrum.lib
- origin_href: sing.info#index-spectrum_002elib
+ origin_href: sing.htm#index-spectrum_002elib
entry: spectrum.lib
texi_entry: spectrum.lib
- element_href: sing.info#spectrum_005flib
+ element_href: sing.htm#spectrum_005flib
element_text: spectrum_lib
key: spectrumnd
- origin_href: sing.info#index-spectrumnd
+ origin_href: sing.htm#index-spectrumnd
entry: spectrumnd
texi_entry: spectrumnd
- element_href: sing.info#spectrumnd
+ element_href: sing.htm#spectrumnd
element_text: spectrumnd
key: spectrum_lib
- origin_href: sing.info#index-spectrum_005flib
+ origin_href: sing.htm#index-spectrum_005flib
entry: spectrum_lib
texi_entry: spectrum_lib
- element_href: sing.info#spectrum_005flib
+ element_href: sing.htm#spectrum_005flib
element_text: spectrum_lib
key: spgamma
- origin_href: sing.info#index-spgamma
+ origin_href: sing.htm#index-spgamma
entry: spgamma
texi_entry: spgamma
- element_href: sing.info#spgamma
+ element_href: sing.htm#spgamma
element_text: spgamma
key: spgeomgenus
- origin_href: sing.info#index-spgeomgenus
+ origin_href: sing.htm#index-spgeomgenus
entry: spgeomgenus
texi_entry: spgeomgenus
- element_href: sing.info#spgeomgenus
+ element_href: sing.htm#spgeomgenus
element_text: spgeomgenus
key: spissemicont
- origin_href: sing.info#index-spissemicont
+ origin_href: sing.htm#index-spissemicont
entry: spissemicont
texi_entry: spissemicont
- element_href: sing.info#spissemicont
+ element_href: sing.htm#spissemicont
element_text: spissemicont
key: split
- origin_href: sing.info#index-split
+ origin_href: sing.htm#index-split
entry: split
texi_entry: split
- element_href: sing.info#split
+ element_href: sing.htm#split
element_text: split
key: splitring
- origin_href: sing.info#index-splitring
+ origin_href: sing.htm#index-splitring
entry: splitring
texi_entry: splitring
- element_href: sing.info#splitring
+ element_href: sing.htm#splitring
element_text: splitring
key: splitting
- origin_href: sing.info#index-splitting
+ origin_href: sing.htm#index-splitting
entry: splitting
texi_entry: splitting
- element_href: sing.info#splitting
+ element_href: sing.htm#splitting
element_text: splitting
key: spmilnor
- origin_href: sing.info#index-spmilnor
+ origin_href: sing.htm#index-spmilnor
entry: spmilnor
texi_entry: spmilnor
- element_href: sing.info#spmilnor
+ element_href: sing.htm#spmilnor
element_text: spmilnor
key: spmul
- origin_href: sing.info#index-spmul
+ origin_href: sing.htm#index-spmul
entry: spmul
texi_entry: spmul
- element_href: sing.info#spmul
+ element_href: sing.htm#spmul
element_text: spmul
key: spnf
- origin_href: sing.info#index-spnf
+ origin_href: sing.htm#index-spnf
entry: spnf
texi_entry: spnf
- element_href: sing.info#spnf
+ element_href: sing.htm#spnf
element_text: spnf
key: sppairs
- origin_href: sing.info#index-sppairs
+ origin_href: sing.htm#index-sppairs
entry: sppairs
texi_entry: sppairs
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: sppnf
- origin_href: sing.info#index-sppnf
+ origin_href: sing.htm#index-sppnf
entry: sppnf
texi_entry: sppnf
- element_href: sing.info#sppnf
+ element_href: sing.htm#sppnf
element_text: sppnf
key: sppprint
- origin_href: sing.info#index-sppprint
+ origin_href: sing.htm#index-sppprint
entry: sppprint
texi_entry: sppprint
- element_href: sing.info#sppprint
+ element_href: sing.htm#sppprint
element_text: sppprint
key: spprint
- origin_href: sing.info#index-spprint
+ origin_href: sing.htm#index-spprint
entry: spprint
texi_entry: spprint
- element_href: sing.info#spprint
+ element_href: sing.htm#spprint
element_text: spprint
key: sprintf
- origin_href: sing.info#index-sprintf
+ origin_href: sing.htm#index-sprintf
entry: sprintf
texi_entry: sprintf
- element_href: sing.info#sprintf
+ element_href: sing.htm#sprintf
element_text: sprintf
key: spsemicont
- origin_href: sing.info#index-spsemicont
+ origin_href: sing.htm#index-spsemicont
entry: spsemicont
texi_entry: spsemicont
- element_href: sing.info#spsemicont
+ element_href: sing.htm#spsemicont
element_text: spsemicont
key: spsub
- origin_href: sing.info#index-spsub
+ origin_href: sing.htm#index-spsub
entry: spsub
texi_entry: spsub
- element_href: sing.info#spsub
+ element_href: sing.htm#spsub
element_text: spsub
key: SQFRNorm
- origin_href: sing.info#index-SQFRNorm
+ origin_href: sing.htm#index-SQFRNorm
entry: SQFRNorm
texi_entry: SQFRNorm
- element_href: sing.info#SQFRNorm
+ element_href: sing.htm#SQFRNorm
element_text: SQFRNorm
key: SQFRNormMain
- origin_href: sing.info#index-SQFRNormMain
+ origin_href: sing.htm#index-SQFRNormMain
entry: SQFRNormMain
texi_entry: SQFRNormMain
- element_href: sing.info#SQFRNormMain
+ element_href: sing.htm#SQFRNormMain
element_text: SQFRNormMain
key: squarefree
- origin_href: sing.info#index-squarefree
+ origin_href: sing.htm#index-squarefree
entry: squarefree
texi_entry: squarefree
- element_href: sing.info#squarefree
+ element_href: sing.htm#squarefree
element_text: squarefree
key: sres
- origin_href: sing.info#index-sres
+ origin_href: sing.htm#index-sres
entry: sres
texi_entry: sres
- element_href: sing.info#sres
+ element_href: sing.htm#sres
element_text: sres
key: StabEqn
- origin_href: sing.info#index-StabEqn
+ origin_href: sing.htm#index-StabEqn
entry: StabEqn
texi_entry: StabEqn
- element_href: sing.info#StabEqn
+ element_href: sing.htm#StabEqn
element_text: StabEqn
key: StabEqnId
- origin_href: sing.info#index-StabEqnId
+ origin_href: sing.htm#index-StabEqnId
entry: StabEqnId
texi_entry: StabEqnId
- element_href: sing.info#StabEqnId
+ element_href: sing.htm#StabEqnId
element_text: StabEqnId
key: StabOrder
- origin_href: sing.info#index-StabOrder
+ origin_href: sing.htm#index-StabOrder
entry: StabOrder
texi_entry: StabOrder
- element_href: sing.info#StabOrder
+ element_href: sing.htm#StabOrder
element_text: StabOrder
key: staircase
- origin_href: sing.info#index-staircase
+ origin_href: sing.htm#index-staircase
entry: staircase
texi_entry: staircase
- element_href: sing.info#staircase
+ element_href: sing.htm#staircase
element_text: staircase
key: Standard bases
- origin_href: sing.info#index-Standard-bases
+ origin_href: sing.htm#index-Standard-bases
entry: Standard bases
texi_entry: Standard bases
- element_href: sing.info#Standard-bases
+ element_href: sing.htm#Standard-bases
element_text: Standard bases
key: standard.lib
- origin_href: sing.info#index-standard_002elib
+ origin_href: sing.htm#index-standard_002elib
entry: standard.lib
texi_entry: standard.lib
- element_href: sing.info#standard_005flib
+ element_href: sing.htm#standard_005flib
element_text: standard_lib
key: standard_lib
- origin_href: sing.info#index-standard_005flib
+ origin_href: sing.htm#index-standard_005flib
entry: standard_lib
texi_entry: standard_lib
- element_href: sing.info#standard_005flib
+ element_href: sing.htm#standard_005flib
element_text: standard_lib
key: Startup sequence
- origin_href: sing.info#index-Startup-sequence
+ origin_href: sing.htm#index-Startup-sequence
entry: Startup sequence
texi_entry: Startup sequence
- element_href: sing.info#Startup-sequence
+ element_href: sing.htm#Startup-sequence
element_text: Startup sequence
key: static procedures
- origin_href: sing.info#index-static-procedures
+ origin_href: sing.htm#index-static-procedures
entry: static procedures
texi_entry: static procedures
- element_href: sing.info#Procedure-definition
+ element_href: sing.htm#Procedure-definition
element_text: Procedure definition
key: status
- origin_href: sing.info#index-status
+ origin_href: sing.htm#index-status
entry: status
texi_entry: status
- element_href: sing.info#status
+ element_href: sing.htm#status
element_text: status
key: std
- origin_href: sing.info#index-std
+ origin_href: sing.htm#index-std
entry: std
texi_entry: std
- element_href: sing.info#std
+ element_href: sing.htm#std
element_text: std
key: stdfglm
- origin_href: sing.info#index-stdfglm
+ origin_href: sing.htm#index-stdfglm
entry: stdfglm
texi_entry: stdfglm
- element_href: sing.info#stdfglm
+ element_href: sing.htm#stdfglm
element_text: stdfglm
key: stdhilb
- origin_href: sing.info#index-stdhilb
+ origin_href: sing.htm#index-stdhilb
entry: stdhilb
texi_entry: stdhilb
- element_href: sing.info#stdhilb
+ element_href: sing.htm#stdhilb
element_text: stdhilb
key: stdModulesEqual
- origin_href: sing.info#index-stdModulesEqual
+ origin_href: sing.htm#index-stdModulesEqual
entry: stdModulesEqual
texi_entry: stdModulesEqual
- element_href: sing.info#stdModulesEqual
+ element_href: sing.htm#stdModulesEqual
element_text: stdModulesEqual
key: Stobbe, Ru"diger
- origin_href: sing.info#index-Stobbe_002c-Rudiger
+ origin_href: sing.htm#index-Stobbe_002c-Rudiger
entry: Stobbe, Ru"diger
texi_entry: Stobbe, R@"udiger
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: stratify
- origin_href: sing.info#index-stratify
+ origin_href: sing.htm#index-stratify
entry: stratify
texi_entry: stratify
- element_href: sing.info#stratify
+ element_href: sing.htm#stratify
element_text: stratify
key: stratify.lib
- origin_href: sing.info#index-stratify_002elib
+ origin_href: sing.htm#index-stratify_002elib
entry: stratify.lib
texi_entry: stratify.lib
- element_href: sing.info#stratify_005flib
+ element_href: sing.htm#stratify_005flib
element_text: stratify_lib
key: stratify_lib
- origin_href: sing.info#index-stratify_005flib
+ origin_href: sing.htm#index-stratify_005flib
entry: stratify_lib
texi_entry: stratify_lib
- element_href: sing.info#stratify_005flib
+ element_href: sing.htm#stratify_005flib
element_text: stratify_lib
key: string
- origin_href: sing.info#index-string
+ origin_href: sing.htm#index-string
entry: string
texi_entry: string
- element_href: sing.info#string
+ element_href: sing.htm#string
element_text: string
key: string
- origin_href: sing.info#index-string-1
+ origin_href: sing.htm#index-string-1
entry: string
texi_entry: string
- element_href: sing.info#Miscellaneous-oddities
+ element_href: sing.htm#Miscellaneous-oddities
element_text: Miscellaneous oddities
key: string declarations
- origin_href: sing.info#index-string-declarations
+ origin_href: sing.htm#index-string-declarations
entry: string declarations
texi_entry: string declarations
- element_href: sing.info#string-declarations
+ element_href: sing.htm#string-declarations
element_text: string declarations
key: string expressions
- origin_href: sing.info#index-string-expressions
+ origin_href: sing.htm#index-string-expressions
entry: string expressions
texi_entry: string expressions
- element_href: sing.info#string-expressions
+ element_href: sing.htm#string-expressions
element_text: string expressions
key: string operations
- origin_href: sing.info#index-string-operations
+ origin_href: sing.htm#index-string-operations
entry: string operations
texi_entry: string operations
- element_href: sing.info#string-operations
+ element_href: sing.htm#string-operations
element_text: string operations
key: string related functions
- origin_href: sing.info#index-string-related-functions
+ origin_href: sing.htm#index-string-related-functions
entry: string related functions
texi_entry: string related functions
- element_href: sing.info#string-related-functions
+ element_href: sing.htm#string-related-functions
element_text: string related functions
key: string type cast
- origin_href: sing.info#index-string-type-cast
+ origin_href: sing.htm#index-string-type-cast
entry: string type cast
texi_entry: string type cast
- element_href: sing.info#string-type-cast
+ element_href: sing.htm#string-type-cast
element_text: string type cast
key: stripHNE
- origin_href: sing.info#index-stripHNE
+ origin_href: sing.htm#index-stripHNE
entry: stripHNE
texi_entry: stripHNE
- element_href: sing.info#stripHNE
+ element_href: sing.htm#stripHNE
element_text: stripHNE
key: submat
- origin_href: sing.info#index-submat
+ origin_href: sing.htm#index-submat
entry: submat
texi_entry: submat
- element_href: sing.info#submat
+ element_href: sing.htm#submat
element_text: submat
key: subrInterred
- origin_href: sing.info#index-subrInterred
+ origin_href: sing.htm#index-subrInterred
entry: subrInterred
texi_entry: subrInterred
- element_href: sing.info#subrInterred
+ element_href: sing.htm#subrInterred
element_text: subrInterred
key: subst
- origin_href: sing.info#index-subst
+ origin_href: sing.htm#index-subst
entry: subst
texi_entry: subst
- element_href: sing.info#subst
+ element_href: sing.htm#subst
element_text: subst
key: substitute
- origin_href: sing.info#index-substitute
+ origin_href: sing.htm#index-substitute
entry: substitute
texi_entry: substitute
- element_href: sing.info#substitute
+ element_href: sing.htm#substitute
element_text: substitute
key: sugarCrit, option
- origin_href: sing.info#index-sugarCrit_002c-option
+ origin_href: sing.htm#index-sugarCrit_002c-option
entry: sugarCrit, option
texi_entry: sugarCrit, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: sum
- origin_href: sing.info#index-sum
+ origin_href: sing.htm#index-sum
entry: sum
texi_entry: sum
- element_href: sing.info#sum
+ element_href: sing.htm#sum
element_text: sum
key: surf.lib
- origin_href: sing.info#index-surf_002elib
+ origin_href: sing.htm#index-surf_002elib
entry: surf.lib
texi_entry: surf.lib
- element_href: sing.info#surf_005flib
+ element_href: sing.htm#surf_005flib
element_text: surf_lib
key: surf_lib
- origin_href: sing.info#index-surf_005flib
+ origin_href: sing.htm#index-surf_005flib
entry: surf_lib
texi_entry: surf_lib
- element_href: sing.info#surf_005flib
+ element_href: sing.htm#surf_005flib
element_text: surf_lib
key: SuSE, ESingular bug
- origin_href: sing.info#index-SuSE_002c-ESingular-bug
+ origin_href: sing.htm#index-SuSE_002c-ESingular-bug
entry: SuSE, ESingular bug
texi_entry: SuSE, ESingular bug
- element_href: sing.info#Troubleshooting
+ element_href: sing.htm#Troubleshooting
element_text: Troubleshooting
key: suspend
- origin_href: sing.info#index-suspend
+ origin_href: sing.htm#index-suspend
entry: suspend
texi_entry: suspend
- element_href: sing.info#status
+ element_href: sing.htm#status
element_text: status
key: SV-decoding algorithm
- origin_href: sing.info#index-SV_002ddecoding-algorithm
+ origin_href: sing.htm#index-SV_002ddecoding-algorithm
entry: SV-decoding algorithm
texi_entry: SV-decoding algorithm
- element_href: sing.info#decodeSV
+ element_href: sing.htm#decodeSV
element_text: decodeSV
key: SV-decoding algorithm, preprocessing
- origin_href: sing.info#index-SV_002ddecoding-algorithm_002c-preprocessing
+ origin_href: sing.htm#index-SV_002ddecoding-algorithm_002c-preprocessing
entry: SV-decoding algorithm, preprocessing
texi_entry: SV-decoding algorithm, preprocessing
- element_href: sing.info#prepSV
+ element_href: sing.htm#prepSV
element_text: prepSV
key: swap
- origin_href: sing.info#index-swap
+ origin_href: sing.htm#index-swap
entry: swap
texi_entry: swap
- element_href: sing.info#swap
+ element_href: sing.htm#swap
element_text: swap
key: switch
- origin_href: sing.info#index-switch
+ origin_href: sing.htm#index-switch
entry: switch
texi_entry: switch
- element_href: sing.info#No-case-or-switch-statement
+ element_href: sing.htm#No-case-or-switch-statement
element_text: No case or switch statement
key: Symbolic-numerical solving
- origin_href: sing.info#index-Symbolic_002dnumerical-solving
+ origin_href: sing.htm#index-Symbolic_002dnumerical-solving
entry: Symbolic-numerical solving
texi_entry: Symbolic-numerical solving
- element_href: sing.info#Symbolic_002dnumerical-solving
+ element_href: sing.htm#Symbolic_002dnumerical-solving
element_text: Symbolic-numerical solving
key: symmat
- origin_href: sing.info#index-symmat
+ origin_href: sing.htm#index-symmat
entry: symmat
texi_entry: symmat
- element_href: sing.info#symmat
+ element_href: sing.htm#symmat
element_text: symmat
key: sym_gauss
- origin_href: sing.info#index-sym_005fgauss
+ origin_href: sing.htm#index-sym_005fgauss
entry: sym_gauss
texi_entry: sym_gauss
- element_href: sing.info#sym_005fgauss
+ element_href: sing.htm#sym_005fgauss
element_text: sym_gauss
key: system
- origin_href: sing.info#index-system
+ origin_href: sing.htm#index-system
entry: system
texi_entry: system
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: System variables
- origin_href: sing.info#index-System-variables
+ origin_href: sing.htm#index-System-variables
entry: System variables
texi_entry: System variables
- element_href: sing.info#System-variables
+ element_href: sing.htm#System-variables
element_text: System variables
key: system, -
- origin_href: sing.info#index-system_002c-_002d_002d
+ origin_href: sing.htm#index-system_002c-_002d_002d
entry: system, -
texi_entry: system, --
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, -long_option_name
- origin_href: sing.info#index-system_002c-_002d_002dlong_005foption_005fname
+ origin_href: sing.htm#index-system_002c-_002d_002dlong_005foption_005fname
entry: system, -long_option_name
texi_entry: system, --long_option_name
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, -long_option_name=value
- origin_href:
sing.info#index-system_002c-_002d_002dlong_005foption_005fname_003dvalue
+ origin_href:
sing.htm#index-system_002c-_002d_002dlong_005foption_005fname_003dvalue
entry: system, -long_option_name=value
texi_entry: system, --long_option_name=value
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, browsers
- origin_href: sing.info#index-system_002c-browsers
+ origin_href: sing.htm#index-system_002c-browsers
entry: system, browsers
texi_entry: system, browsers
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, contributors
- origin_href: sing.info#index-system_002c-contributors
+ origin_href: sing.htm#index-system_002c-contributors
entry: system, contributors
texi_entry: system, contributors
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, gen
- origin_href: sing.info#index-system_002c-gen
+ origin_href: sing.htm#index-system_002c-gen
entry: system, gen
texi_entry: system, gen
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, getenv
- origin_href: sing.info#index-system_002c-getenv
+ origin_href: sing.htm#index-system_002c-getenv
entry: system, getenv
texi_entry: system, getenv
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, nblocks
- origin_href: sing.info#index-system_002c-nblocks
+ origin_href: sing.htm#index-system_002c-nblocks
entry: system, nblocks
texi_entry: system, nblocks
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, pid
- origin_href: sing.info#index-system_002c-pid
+ origin_href: sing.htm#index-system_002c-pid
entry: system, pid
texi_entry: system, pid
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, setenv
- origin_href: sing.info#index-system_002c-setenv
+ origin_href: sing.htm#index-system_002c-setenv
entry: system, setenv
texi_entry: system, setenv
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, sh
- origin_href: sing.info#index-system_002c-sh
+ origin_href: sing.htm#index-system_002c-sh
entry: system, sh
texi_entry: system, sh
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, Singular
- origin_href: sing.info#index-system_002c-Singular
+ origin_href: sing.htm#index-system_002c-Singular
entry: system, Singular
texi_entry: system, Singular
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, tty
- origin_href: sing.info#index-system_002c-tty
+ origin_href: sing.htm#index-system_002c-tty
entry: system, tty
texi_entry: system, tty
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, uname
- origin_href: sing.info#index-system_002c-uname
+ origin_href: sing.htm#index-system_002c-uname
entry: system, uname
texi_entry: system, uname
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: system, version
- origin_href: sing.info#index-system_002c-version
+ origin_href: sing.htm#index-system_002c-version
entry: system, version
texi_entry: system, version
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: sys_code
- origin_href: sing.info#index-sys_005fcode
+ origin_href: sing.htm#index-sys_005fcode
entry: sys_code
texi_entry: sys_code
- element_href: sing.info#sys_005fcode
+ element_href: sing.htm#sys_005fcode
element_text: sys_code
key: syz
- origin_href: sing.info#index-syz
+ origin_href: sing.htm#index-syz
entry: syz
texi_entry: syz
- element_href: sing.info#syz
+ element_href: sing.htm#syz
element_text: syz
key: Syzygies and resolutions
- origin_href: sing.info#index-Syzygies-and-resolutions
+ origin_href: sing.htm#index-Syzygies-and-resolutions
entry: Syzygies and resolutions
texi_entry: Syzygies and resolutions
- element_href: sing.info#Syzygies-and-resolutions
+ element_href: sing.htm#Syzygies-and-resolutions
element_text: Syzygies and resolutions
key: T1
- origin_href: sing.info#index-T1
+ origin_href: sing.htm#index-T1
entry: T1
texi_entry: T1
- element_href: sing.info#T1-and-T2
+ element_href: sing.htm#T1-and-T2
element_text: T1 and T2
key: T2
- origin_href: sing.info#index-T2
+ origin_href: sing.htm#index-T2
entry: T2
texi_entry: T2
- element_href: sing.info#T1-and-T2
+ element_href: sing.htm#T1-and-T2
element_text: T1 and T2
key: tab
- origin_href: sing.info#index-tab
+ origin_href: sing.htm#index-tab
entry: tab
texi_entry: tab
- element_href: sing.info#tab
+ element_href: sing.htm#tab
element_text: tab
key: Table
- origin_href: sing.info#index-Table
+ origin_href: sing.htm#index-Table
entry: Table
texi_entry: Table
- element_href: sing.info#Table
+ element_href: sing.htm#Table
element_text: Table
key: tangentcone
- origin_href: sing.info#index-tangentcone
+ origin_href: sing.htm#index-tangentcone
entry: tangentcone
texi_entry: tangentcone
- element_href: sing.info#tangentcone
+ element_href: sing.htm#tangentcone
element_text: tangentcone
key: tau_es
- origin_href: sing.info#index-tau_005fes
+ origin_href: sing.htm#index-tau_005fes
entry: tau_es
texi_entry: tau_es
- element_href: sing.info#tau_005fes
+ element_href: sing.htm#tau_005fes
element_text: tau_es
key: Template for writing a library
- origin_href: sing.info#index-Template-for-writing-a-library
+ origin_href: sing.htm#index-Template-for-writing-a-library
entry: Template for writing a library
texi_entry: Template for writing a library
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: template.lib
- origin_href: sing.info#index-template_002elib
+ origin_href: sing.htm#index-template_002elib
entry: template.lib
texi_entry: template.lib
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: template.lib
- origin_href: sing.info#index-template_002elib-1
+ origin_href: sing.htm#index-template_002elib-1
entry: template.lib
texi_entry: template.lib
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: template_lib
- origin_href: sing.info#index-template_005flib
+ origin_href: sing.htm#index-template_005flib
entry: template_lib
texi_entry: template_lib
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: template_lib
- origin_href: sing.info#index-template_005flib-1
+ origin_href: sing.htm#index-template_005flib-1
entry: template_lib
texi_entry: template_lib
- element_href: sing.info#template_005flib
+ element_href: sing.htm#template_005flib
element_text: template_lib
key: tensor
- origin_href: sing.info#index-tensor
+ origin_href: sing.htm#index-tensor
entry: tensor
texi_entry: tensor
- element_href: sing.info#tensor
+ element_href: sing.htm#tensor
element_text: tensor
key: tensorMod
- origin_href: sing.info#index-tensorMod
+ origin_href: sing.htm#index-tensorMod
entry: tensorMod
texi_entry: tensorMod
- element_href: sing.info#tensorMod
+ element_href: sing.htm#tensorMod
element_text: tensorMod
key: term orderings
- origin_href: sing.info#index-term-orderings
+ origin_href: sing.htm#index-term-orderings
entry: term orderings
texi_entry: term orderings
- element_href: sing.info#General-definitions-for-orderings
+ element_href: sing.htm#General-definitions-for-orderings
element_text: General definitions for orderings
key: term orderings introduction
- origin_href: sing.info#index-term-orderings-introduction
+ origin_href: sing.htm#index-term-orderings-introduction
entry: term orderings introduction
texi_entry: term orderings introduction
- element_href: sing.info#Introduction-to-orderings
+ element_href: sing.htm#Introduction-to-orderings
element_text: Introduction to orderings
key: testPrimary
- origin_href: sing.info#index-testPrimary
+ origin_href: sing.htm#index-testPrimary
entry: testPrimary
texi_entry: testPrimary
- element_href: sing.info#testPrimary
+ element_href: sing.htm#testPrimary
element_text: testPrimary
key: tex
- origin_href: sing.info#index-tex
+ origin_href: sing.htm#index-tex
entry: tex
texi_entry: tex
- element_href: sing.info#tex
+ element_href: sing.htm#tex
element_text: tex
key: texdemo
- origin_href: sing.info#index-texdemo
+ origin_href: sing.htm#index-texdemo
entry: texdemo
texi_entry: texdemo
- element_href: sing.info#texdemo
+ element_href: sing.htm#texdemo
element_text: texdemo
key: texfactorize
- origin_href: sing.info#index-texfactorize
+ origin_href: sing.htm#index-texfactorize
entry: texfactorize
texi_entry: texfactorize
- element_href: sing.info#texfactorize
+ element_href: sing.htm#texfactorize
element_text: texfactorize
key: texmap
- origin_href: sing.info#index-texmap
+ origin_href: sing.htm#index-texmap
entry: texmap
texi_entry: texmap
- element_href: sing.info#texmap
+ element_href: sing.htm#texmap
element_text: texmap
key: texname
- origin_href: sing.info#index-texname
+ origin_href: sing.htm#index-texname
entry: texname
texi_entry: texname
- element_href: sing.info#texname
+ element_href: sing.htm#texname
element_text: texname
key: texobj
- origin_href: sing.info#index-texobj
+ origin_href: sing.htm#index-texobj
entry: texobj
texi_entry: texobj
- element_href: sing.info#texobj
+ element_href: sing.htm#texobj
element_text: texobj
key: texpoly
- origin_href: sing.info#index-texpoly
+ origin_href: sing.htm#index-texpoly
entry: texpoly
texi_entry: texpoly
- element_href: sing.info#texpoly
+ element_href: sing.htm#texpoly
element_text: texpoly
key: texproc
- origin_href: sing.info#index-texproc
+ origin_href: sing.htm#index-texproc
entry: texproc
texi_entry: texproc
- element_href: sing.info#texproc
+ element_href: sing.htm#texproc
element_text: texproc
key: texring
- origin_href: sing.info#index-texring
+ origin_href: sing.htm#index-texring
entry: texring
texi_entry: texring
- element_href: sing.info#texring
+ element_href: sing.htm#texring
element_text: texring
key: The online help system
- origin_href: sing.info#index-The-online-help-system
+ origin_href: sing.htm#index-The-online-help-system
entry: The online help system
texi_entry: The online help system
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: The SINGULAR language
- origin_href: sing.info#index-The-SINGULAR-language
+ origin_href: sing.htm#index-The-SINGULAR-language
entry: The SINGULAR language
texi_entry: The SINGULAR language
- element_href: sing.info#The-SINGULAR-language
+ element_href: sing.htm#The-SINGULAR-language
element_text: The SINGULAR language
key: time limit on computations
- origin_href: sing.info#index-time-limit-on-computations
+ origin_href: sing.htm#index-time-limit-on-computations
entry: time limit on computations
texi_entry: time limit on computations
- element_href: sing.info#groebner
+ element_href: sing.htm#groebner
element_text: groebner
key: timeFactorize
- origin_href: sing.info#index-timeFactorize
+ origin_href: sing.htm#index-timeFactorize
entry: timeFactorize
texi_entry: timeFactorize
- element_href: sing.info#timeFactorize
+ element_href: sing.htm#timeFactorize
element_text: timeFactorize
key: timer
- origin_href: sing.info#index-timer
+ origin_href: sing.htm#index-timer
entry: timer
texi_entry: timer
- element_href: sing.info#timer
+ element_href: sing.htm#timer
element_text: timer
key: timer
- origin_href: sing.info#index-timer-1
+ origin_href: sing.htm#index-timer-1
entry: timer
texi_entry: timer
- element_href: sing.info#rtimer
+ element_href: sing.htm#rtimer
element_text: rtimer
key: timer resolution, setting the
- origin_href: sing.info#index-timer-resolution_002c-setting-the
+ origin_href: sing.htm#index-timer-resolution_002c-setting-the
entry: timer resolution, setting the
texi_entry: timer resolution, setting the
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: timeStd
- origin_href: sing.info#index-timeStd
+ origin_href: sing.htm#index-timeStd
entry: timeStd
texi_entry: timeStd
- element_href: sing.info#timeStd
+ element_href: sing.htm#timeStd
element_text: timeStd
key: Tjurina
- origin_href: sing.info#index-Tjurina
+ origin_href: sing.htm#index-Tjurina
entry: Tjurina
texi_entry: Tjurina
- element_href: sing.info#Milnor-and-Tjurina
+ element_href: sing.htm#Milnor-and-Tjurina
element_text: Milnor and Tjurina
key: Tjurina
- origin_href: sing.info#index-Tjurina-1
+ origin_href: sing.htm#index-Tjurina-1
entry: Tjurina
texi_entry: Tjurina
- element_href: sing.info#Tjurina
+ element_href: sing.htm#Tjurina
element_text: Tjurina
key: tjurina
- origin_href: sing.info#index-tjurina
+ origin_href: sing.htm#index-tjurina
entry: tjurina
texi_entry: tjurina
- element_href: sing.info#tjurina
+ element_href: sing.htm#tjurina
element_text: tjurina
key: Tjurina number
- origin_href: sing.info#index-Tjurina-number
+ origin_href: sing.htm#index-Tjurina-number
entry: Tjurina number
texi_entry: Tjurina number
- element_href: sing.info#deltaLoc
+ element_href: sing.htm#deltaLoc
element_text: deltaLoc
key: tkinfo
- origin_href: sing.info#index-tkinfo
+ origin_href: sing.htm#index-tkinfo
entry: tkinfo
texi_entry: tkinfo
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: tmatrix
- origin_href: sing.info#index-tmatrix
+ origin_href: sing.htm#index-tmatrix
entry: tmatrix
texi_entry: tmatrix
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: tolessvars
- origin_href: sing.info#index-tolessvars
+ origin_href: sing.htm#index-tolessvars
entry: tolessvars
texi_entry: tolessvars
- element_href: sing.info#tolessvars
+ element_href: sing.htm#tolessvars
element_text: tolessvars
key: Top 20 Emacs commands
- origin_href: sing.info#index-Top-20-Emacs-commands
+ origin_href: sing.htm#index-Top-20-Emacs-commands
entry: Top 20 Emacs commands
texi_entry: Top 20 Emacs commands
- element_href: sing.info#Top-20-Emacs-commands
+ element_href: sing.htm#Top-20-Emacs-commands
element_text: Top 20 Emacs commands
key: Tor
- origin_href: sing.info#index-Tor
+ origin_href: sing.htm#index-Tor
entry: Tor
texi_entry: Tor
- element_href: sing.info#Tor
+ element_href: sing.htm#Tor
element_text: Tor
key: toric ideals
- origin_href: sing.info#index-toric-ideals
+ origin_href: sing.htm#index-toric-ideals
entry: toric ideals
texi_entry: toric ideals
- element_href: sing.info#Toric-ideals
+ element_href: sing.htm#Toric-ideals
element_text: Toric ideals
key: Toric ideals and integer programming
- origin_href: sing.info#index-Toric-ideals-and-integer-programming
+ origin_href: sing.htm#index-Toric-ideals-and-integer-programming
entry: Toric ideals and integer programming
texi_entry: Toric ideals and integer programming
- element_href: sing.info#Toric-ideals-and-integer-programming
+ element_href: sing.htm#Toric-ideals-and-integer-programming
element_text: Toric ideals and integer programming
key: toric.lib
- origin_href: sing.info#index-toric_002elib
+ origin_href: sing.htm#index-toric_002elib
entry: toric.lib
texi_entry: toric.lib
- element_href: sing.info#toric_005flib
+ element_href: sing.htm#toric_005flib
element_text: toric_lib
key: toric_ideal
- origin_href: sing.info#index-toric_005fideal
+ origin_href: sing.htm#index-toric_005fideal
entry: toric_ideal
texi_entry: toric_ideal
- element_href: sing.info#toric_005fideal
+ element_href: sing.htm#toric_005fideal
element_text: toric_ideal
key: toric_lib
- origin_href: sing.info#index-toric_005flib
+ origin_href: sing.htm#index-toric_005flib
entry: toric_lib
texi_entry: toric_lib
- element_href: sing.info#toric_005flib
+ element_href: sing.htm#toric_005flib
element_text: toric_lib
key: toric_std
- origin_href: sing.info#index-toric_005fstd
+ origin_href: sing.htm#index-toric_005fstd
entry: toric_std
texi_entry: toric_std
- element_href: sing.info#toric_005fstd
+ element_href: sing.htm#toric_005fstd
element_text: toric_std
key: trace
- origin_href: sing.info#index-trace
+ origin_href: sing.htm#index-trace
entry: trace
texi_entry: trace
- element_href: sing.info#trace
+ element_href: sing.htm#trace
element_text: trace
key: TRACE
- origin_href: sing.info#index-TRACE
+ origin_href: sing.htm#index-TRACE
entry: TRACE
texi_entry: TRACE
- element_href: sing.info#TRACE-var
+ element_href: sing.htm#TRACE-var
element_text: TRACE var
key: TransferIdeal
- origin_href: sing.info#index-TransferIdeal
+ origin_href: sing.htm#index-TransferIdeal
entry: TransferIdeal
texi_entry: TransferIdeal
- element_href: sing.info#TransferIdeal
+ element_href: sing.htm#TransferIdeal
element_text: TransferIdeal
key: transpose
- origin_href: sing.info#index-transpose
+ origin_href: sing.htm#index-transpose
entry: transpose
texi_entry: transpose
- element_href: sing.info#transpose
+ element_href: sing.htm#transpose
element_text: transpose
key: triagmatrix
- origin_href: sing.info#index-triagmatrix
+ origin_href: sing.htm#index-triagmatrix
entry: triagmatrix
texi_entry: triagmatrix
- element_href: sing.info#triagmatrix
+ element_href: sing.htm#triagmatrix
element_text: triagmatrix
key: triang.lib
- origin_href: sing.info#index-triang_002elib
+ origin_href: sing.htm#index-triang_002elib
entry: triang.lib
texi_entry: triang.lib
- element_href: sing.info#triang_005flib
+ element_href: sing.htm#triang_005flib
element_text: triang_lib
key: triangL
- origin_href: sing.info#index-triangL
+ origin_href: sing.htm#index-triangL
entry: triangL
texi_entry: triangL
- element_href: sing.info#triangL
+ element_href: sing.htm#triangL
element_text: triangL
key: triangLfak
- origin_href: sing.info#index-triangLfak
+ origin_href: sing.htm#index-triangLfak
entry: triangLfak
texi_entry: triangLfak
- element_href: sing.info#triangLfak
+ element_href: sing.htm#triangLfak
element_text: triangLfak
key: triangLf_solve
- origin_href: sing.info#index-triangLf_005fsolve
+ origin_href: sing.htm#index-triangLf_005fsolve
entry: triangLf_solve
texi_entry: triangLf_solve
- element_href: sing.info#triangLf_005fsolve
+ element_href: sing.htm#triangLf_005fsolve
element_text: triangLf_solve
key: triangL_solve
- origin_href: sing.info#index-triangL_005fsolve
+ origin_href: sing.htm#index-triangL_005fsolve
entry: triangL_solve
texi_entry: triangL_solve
- element_href: sing.info#triangL_005fsolve
+ element_href: sing.htm#triangL_005fsolve
element_text: triangL_solve
key: triangM
- origin_href: sing.info#index-triangM
+ origin_href: sing.htm#index-triangM
entry: triangM
texi_entry: triangM
- element_href: sing.info#triangM
+ element_href: sing.htm#triangM
element_text: triangM
key: triangMH
- origin_href: sing.info#index-triangMH
+ origin_href: sing.htm#index-triangMH
entry: triangMH
texi_entry: triangMH
- element_href: sing.info#triangMH
+ element_href: sing.htm#triangMH
element_text: triangMH
key: triangM_solve
- origin_href: sing.info#index-triangM_005fsolve
+ origin_href: sing.htm#index-triangM_005fsolve
entry: triangM_solve
texi_entry: triangM_solve
- element_href: sing.info#triangM_005fsolve
+ element_href: sing.htm#triangM_005fsolve
element_text: triangM_solve
key: triang_lib
- origin_href: sing.info#index-triang_005flib
+ origin_href: sing.htm#index-triang_005flib
entry: triang_lib
texi_entry: triang_lib
- element_href: sing.info#triang_005flib
+ element_href: sing.htm#triang_005flib
element_text: triang_lib
key: triang_solve
- origin_href: sing.info#index-triang_005fsolve
+ origin_href: sing.htm#index-triang_005fsolve
entry: triang_solve
texi_entry: triang_solve
- element_href: sing.info#triang_005fsolve
+ element_href: sing.htm#triang_005fsolve
element_text: triang_solve
key: Tricks and pitfalls
- origin_href: sing.info#index-Tricks-and-pitfalls
+ origin_href: sing.htm#index-Tricks-and-pitfalls
entry: Tricks and pitfalls
texi_entry: Tricks and pitfalls
- element_href: sing.info#Tricks-and-pitfalls
+ element_href: sing.htm#Tricks-and-pitfalls
element_text: Tricks and pitfalls
key: triMNewton
- origin_href: sing.info#index-triMNewton
+ origin_href: sing.htm#index-triMNewton
entry: triMNewton
texi_entry: triMNewton
- element_href: sing.info#triMNewton
+ element_href: sing.htm#triMNewton
element_text: triMNewton
key: tty
- origin_href: sing.info#index-tty
+ origin_href: sing.htm#index-tty
entry: tty
texi_entry: tty
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: type
- origin_href: sing.info#index-type
+ origin_href: sing.htm#index-type
entry: type
texi_entry: type
- element_href: sing.info#type
+ element_href: sing.htm#type
element_text: type
key: Type casting
- origin_href: sing.info#index-Type-casting
+ origin_href: sing.htm#index-Type-casting
entry: Type casting
texi_entry: Type casting
- element_href: sing.info#Type-casting
+ element_href: sing.htm#Type-casting
element_text: Type casting
key: Type conversion
- origin_href: sing.info#index-Type-conversion
+ origin_href: sing.htm#index-Type-conversion
entry: Type conversion
texi_entry: Type conversion
- element_href: sing.info#Type-conversion
+ element_href: sing.htm#Type-conversion
element_text: Type conversion
key: typeof
- origin_href: sing.info#index-typeof
+ origin_href: sing.htm#index-typeof
entry: typeof
texi_entry: typeof
- element_href: sing.info#typeof
+ element_href: sing.htm#typeof
element_text: typeof
key: Typesetting of help strings
- origin_href: sing.info#index-Typesetting-of-help-strings
+ origin_href: sing.htm#index-Typesetting-of-help-strings
entry: Typesetting of help strings
texi_entry: Typesetting of help strings
- element_href: sing.info#Typesetting-of-help-strings
+ element_href: sing.htm#Typesetting-of-help-strings
element_text: Typesetting of help strings
key: T_1
- origin_href: sing.info#index-T_005f1
+ origin_href: sing.htm#index-T_005f1
entry: T_1
texi_entry: T_1
- element_href: sing.info#T_005f1
+ element_href: sing.htm#T_005f1
element_text: T_1
key: T_12
- origin_href: sing.info#index-T_005f12
+ origin_href: sing.htm#index-T_005f12
entry: T_12
texi_entry: T_12
- element_href: sing.info#T_005f12
+ element_href: sing.htm#T_005f12
element_text: T_12
key: T_2
- origin_href: sing.info#index-T_005f2
+ origin_href: sing.htm#index-T_005f2
entry: T_2
texi_entry: T_2
- element_href: sing.info#T_005f2
+ element_href: sing.htm#T_005f2
element_text: T_2
key: uname
- origin_href: sing.info#index-uname
+ origin_href: sing.htm#index-uname
entry: uname
texi_entry: uname
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: unitmat
- origin_href: sing.info#index-unitmat
+ origin_href: sing.htm#index-unitmat
entry: unitmat
texi_entry: unitmat
- element_href: sing.info#unitmat
+ element_href: sing.htm#unitmat
element_text: unitmat
key: Unix installation
- origin_href: sing.info#index-Unix-installation
+ origin_href: sing.htm#index-Unix-installation
entry: Unix installation
texi_entry: Unix installation
- element_href: sing.info#Unix-installation-instructions
+ element_href: sing.htm#Unix-installation-instructions
element_text: Unix installation instructions
key: untyped definitions
- origin_href: sing.info#index-untyped-definitions
+ origin_href: sing.htm#index-untyped-definitions
entry: untyped definitions
texi_entry: untyped definitions
- element_href: sing.info#def
+ element_href: sing.htm#def
element_text: def
key: UpperMonomials
- origin_href: sing.info#index-UpperMonomials
+ origin_href: sing.htm#index-UpperMonomials
entry: UpperMonomials
texi_entry: UpperMonomials
- element_href: sing.info#UpperMonomials
+ element_href: sing.htm#UpperMonomials
element_text: UpperMonomials
key: uressolve
- origin_href: sing.info#index-uressolve
+ origin_href: sing.htm#index-uressolve
entry: uressolve
texi_entry: uressolve
- element_href: sing.info#uressolve
+ element_href: sing.htm#uressolve
element_text: uressolve
key: ures_solve
- origin_href: sing.info#index-ures_005fsolve
+ origin_href: sing.htm#index-ures_005fsolve
entry: ures_solve
texi_entry: ures_solve
- element_href: sing.info#ures_005fsolve
+ element_href: sing.htm#ures_005fsolve
element_text: ures_solve
key: usage, option
- origin_href: sing.info#index-usage_002c-option
+ origin_href: sing.htm#index-usage_002c-option
entry: usage, option
texi_entry: usage, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: user interface, Emacs
- origin_href: sing.info#index-user-interface_002c-Emacs
+ origin_href: sing.htm#index-user-interface_002c-Emacs
entry: user interface, Emacs
texi_entry: user interface, Emacs
- element_href: sing.info#Emacs-user-interface
+ element_href: sing.htm#Emacs-user-interface
element_text: Emacs user interface
key: U_D_O
- origin_href: sing.info#index-U_005fD_005fO
+ origin_href: sing.htm#index-U_005fD_005fO
entry: U_D_O
texi_entry: U_D_O
- element_href: sing.info#U_005fD_005fO
+ element_href: sing.htm#U_005fD_005fO
element_text: U_D_O
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration
+ origin_href: sing.htm#index-V_002dfiltration
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-1
+ origin_href: sing.htm#index-V_002dfiltration-1
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#spectrum
+ element_href: sing.htm#spectrum
element_text: spectrum
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-2
+ origin_href: sing.htm#index-V_002dfiltration-2
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-3
+ origin_href: sing.htm#index-V_002dfiltration-3
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-4
+ origin_href: sing.htm#index-V_002dfiltration-4
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-5
+ origin_href: sing.htm#index-V_002dfiltration-5
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#tmatrix
+ element_href: sing.htm#tmatrix
element_text: tmatrix
key: V-filtration
- origin_href: sing.info#index-V_002dfiltration-6
+ origin_href: sing.htm#index-V_002dfiltration-6
entry: V-filtration
texi_entry: V-filtration
- element_href: sing.info#endvfilt
+ element_href: sing.htm#endvfilt
element_text: endvfilt
key: valvars
- origin_href: sing.info#index-valvars
+ origin_href: sing.htm#index-valvars
entry: valvars
texi_entry: valvars
- element_href: sing.info#valvars
+ element_href: sing.htm#valvars
element_text: valvars
key: vandermonde
- origin_href: sing.info#index-vandermonde
+ origin_href: sing.htm#index-vandermonde
entry: vandermonde
texi_entry: vandermonde
- element_href: sing.info#vandermonde
+ element_href: sing.htm#vandermonde
element_text: vandermonde
key: var
- origin_href: sing.info#index-var
+ origin_href: sing.htm#index-var
entry: var
texi_entry: var
- element_href: sing.info#var
+ element_href: sing.htm#var
element_text: var
key: varstr
- origin_href: sing.info#index-varstr
+ origin_href: sing.htm#index-varstr
entry: varstr
texi_entry: varstr
- element_href: sing.info#varstr
+ element_href: sing.htm#varstr
element_text: varstr
key: vdim
- origin_href: sing.info#index-vdim
+ origin_href: sing.htm#index-vdim
entry: vdim
texi_entry: vdim
- element_href: sing.info#vdim
+ element_href: sing.htm#vdim
element_text: vdim
key: vector
- origin_href: sing.info#index-vector
+ origin_href: sing.htm#index-vector
entry: vector
texi_entry: vector
- element_href: sing.info#vector
+ element_href: sing.htm#vector
element_text: vector
key: vector declarations
- origin_href: sing.info#index-vector-declarations
+ origin_href: sing.htm#index-vector-declarations
entry: vector declarations
texi_entry: vector declarations
- element_href: sing.info#vector-declarations
+ element_href: sing.htm#vector-declarations
element_text: vector declarations
key: vector expressions
- origin_href: sing.info#index-vector-expressions
+ origin_href: sing.htm#index-vector-expressions
entry: vector expressions
texi_entry: vector expressions
- element_href: sing.info#vector-expressions
+ element_href: sing.htm#vector-expressions
element_text: vector expressions
key: vector operations
- origin_href: sing.info#index-vector-operations
+ origin_href: sing.htm#index-vector-operations
entry: vector operations
texi_entry: vector operations
- element_href: sing.info#vector-operations
+ element_href: sing.htm#vector-operations
element_text: vector operations
key: vector related functions
- origin_href: sing.info#index-vector-related-functions
+ origin_href: sing.htm#index-vector-related-functions
entry: vector related functions
texi_entry: vector related functions
- element_href: sing.info#vector-related-functions
+ element_href: sing.htm#vector-related-functions
element_text: vector related functions
key: versal
- origin_href: sing.info#index-versal
+ origin_href: sing.htm#index-versal
entry: versal
texi_entry: versal
- element_href: sing.info#versal
+ element_href: sing.htm#versal
element_text: versal
key: version
- origin_href: sing.info#index-version
+ origin_href: sing.htm#index-version
entry: version
texi_entry: version
- element_href: sing.info#system
+ element_href: sing.htm#system
element_text: system
key: version in a library
- origin_href: sing.info#index-version-in-a-library
+ origin_href: sing.htm#index-version-in-a-library
entry: version in a library
texi_entry: version in a library
- element_href: sing.info#Format-of-a-library
+ element_href: sing.htm#Format-of-a-library
element_text: Format of a library
key: vfilt
- origin_href: sing.info#index-vfilt
+ origin_href: sing.htm#index-vfilt
entry: vfilt
texi_entry: vfilt
- element_href: sing.info#vfilt
+ element_href: sing.htm#vfilt
element_text: vfilt
key: Visualization
- origin_href: sing.info#index-Visualization
+ origin_href: sing.htm#index-Visualization
entry: Visualization
texi_entry: Visualization
- element_href: sing.info#Visualization
+ element_href: sing.htm#Visualization
element_text: Visualization
key: voice
- origin_href: sing.info#index-voice
+ origin_href: sing.htm#index-voice
entry: voice
texi_entry: voice
- element_href: sing.info#voice
+ element_href: sing.htm#voice
element_text: voice
key: vwfilt
- origin_href: sing.info#index-vwfilt
+ origin_href: sing.htm#index-vwfilt
entry: vwfilt
texi_entry: vwfilt
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: watchdog
- origin_href: sing.info#index-watchdog
+ origin_href: sing.htm#index-watchdog
entry: watchdog
texi_entry: watchdog
- element_href: sing.info#watchdog
+ element_href: sing.htm#watchdog
element_text: watchdog
key: wedge
- origin_href: sing.info#index-wedge
+ origin_href: sing.htm#index-wedge
entry: wedge
texi_entry: wedge
- element_href: sing.info#wedge
+ element_href: sing.htm#wedge
element_text: wedge
key: Weierstrass
- origin_href: sing.info#index-Weierstrass
+ origin_href: sing.htm#index-Weierstrass
entry: Weierstrass
texi_entry: Weierstrass
- element_href: sing.info#Weierstrass
+ element_href: sing.htm#Weierstrass
element_text: Weierstrass
key: Weierstrass semigroup
- origin_href: sing.info#index-Weierstrass-semigroup
+ origin_href: sing.htm#index-Weierstrass-semigroup
entry: Weierstrass semigroup
texi_entry: Weierstrass semigroup
- element_href: sing.info#brnoeth_005flib
+ element_href: sing.htm#brnoeth_005flib
element_text: brnoeth_lib
key: weight
- origin_href: sing.info#index-weight
+ origin_href: sing.htm#index-weight
entry: weight
texi_entry: weight
- element_href: sing.info#weight
+ element_href: sing.htm#weight
element_text: weight
key: weight filtration
- origin_href: sing.info#index-weight-filtration
+ origin_href: sing.htm#index-weight-filtration
entry: weight filtration
texi_entry: weight filtration
- element_href: sing.info#gaussman_005flib
+ element_href: sing.htm#gaussman_005flib
element_text: gaussman_lib
key: weight filtration
- origin_href: sing.info#index-weight-filtration-1
+ origin_href: sing.htm#index-weight-filtration-1
entry: weight filtration
texi_entry: weight filtration
- element_href: sing.info#sppairs
+ element_href: sing.htm#sppairs
element_text: sppairs
key: weight filtration
- origin_href: sing.info#index-weight-filtration-2
+ origin_href: sing.htm#index-weight-filtration-2
entry: weight filtration
texi_entry: weight filtration
- element_href: sing.info#vwfilt
+ element_href: sing.htm#vwfilt
element_text: vwfilt
key: weighted lexicographical ordering
- origin_href: sing.info#index-weighted-lexicographical-ordering
+ origin_href: sing.htm#index-weighted-lexicographical-ordering
entry: weighted lexicographical ordering
texi_entry: weighted lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: weighted reverse lexicographical ordering
- origin_href: sing.info#index-weighted-reverse-lexicographical-ordering
+ origin_href: sing.htm#index-weighted-reverse-lexicographical-ordering
entry: weighted reverse lexicographical ordering
texi_entry: weighted reverse lexicographical ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: weightM, option
- origin_href: sing.info#index-weightM_002c-option
+ origin_href: sing.htm#index-weightM_002c-option
entry: weightM, option
texi_entry: weightM, option
- element_href: sing.info#option
+ element_href: sing.htm#option
element_text: option
key: Westenberger, Eric
- origin_href: sing.info#index-Westenberger_002c-Eric
+ origin_href: sing.htm#index-Westenberger_002c-Eric
entry: Westenberger, Eric
texi_entry: Westenberger, Eric
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: which
- origin_href: sing.info#index-which
+ origin_href: sing.htm#index-which
entry: which
texi_entry: which
- element_href: sing.info#which
+ element_href: sing.htm#which
element_text: which
key: while
- origin_href: sing.info#index-while
+ origin_href: sing.htm#index-while
entry: while
texi_entry: while
- element_href: sing.info#while
+ element_href: sing.htm#while
element_text: while
key: Wichmann, Tim
- origin_href: sing.info#index-Wichmann_002c-Tim
+ origin_href: sing.htm#index-Wichmann_002c-Tim
entry: Wichmann, Tim
texi_entry: Wichmann, Tim
- element_href: sing.info#Acknowledgements
+ element_href: sing.htm#Acknowledgements
element_text: Acknowledgements
key: Windows installation
- origin_href: sing.info#index-Windows-installation
+ origin_href: sing.htm#index-Windows-installation
entry: Windows installation
texi_entry: Windows installation
- element_href: sing.info#Windows-installation-instructions
+ element_href: sing.htm#Windows-installation-instructions
element_text: Windows installation instructions
key: Windows installation, components
- origin_href: sing.info#index-Windows-installation_002c-components
+ origin_href: sing.htm#index-Windows-installation_002c-components
entry: Windows installation, components
texi_entry: Windows installation, components
- element_href: sing.info#Installation-preliminaries
+ element_href: sing.htm#Installation-preliminaries
element_text: Installation preliminaries
key: wp, global ordering
- origin_href: sing.info#index-wp_002c-global-ordering
+ origin_href: sing.htm#index-wp_002c-global-ordering
entry: wp, global ordering
texi_entry: wp, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: WP, global ordering
- origin_href: sing.info#index-WP_002c-global-ordering
+ origin_href: sing.htm#index-WP_002c-global-ordering
entry: WP, global ordering
texi_entry: WP, global ordering
- element_href: sing.info#Global-orderings
+ element_href: sing.htm#Global-orderings
element_text: Global orderings
key: write
- origin_href: sing.info#index-write
+ origin_href: sing.htm#index-write
entry: write
texi_entry: write
- element_href: sing.info#write
+ element_href: sing.htm#write
element_text: write
key: writelist
- origin_href: sing.info#index-writelist
+ origin_href: sing.htm#index-writelist
entry: writelist
texi_entry: writelist
- element_href: sing.info#writelist
+ element_href: sing.htm#writelist
element_text: writelist
key: ws, local ordering
- origin_href: sing.info#index-ws_002c-local-ordering
+ origin_href: sing.htm#index-ws_002c-local-ordering
entry: ws, local ordering
texi_entry: ws, local ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: Ws, local ordering
- origin_href: sing.info#index-Ws_002c-local-ordering
+ origin_href: sing.htm#index-Ws_002c-local-ordering
entry: Ws, local ordering
texi_entry: Ws, local ordering
- element_href: sing.info#Local-orderings
+ element_href: sing.htm#Local-orderings
element_text: Local orderings
key: xdvi
- origin_href: sing.info#index-xdvi
+ origin_href: sing.htm#index-xdvi
entry: xdvi
texi_entry: xdvi
- element_href: sing.info#xdvi
+ element_href: sing.htm#xdvi
element_text: xdvi
key: xinfo
- origin_href: sing.info#index-xinfo
+ origin_href: sing.htm#index-xinfo
entry: xinfo
texi_entry: xinfo
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: XINFO environment variable
- origin_href: sing.info#index-XINFO-environment-variable
+ origin_href: sing.htm#index-XINFO-environment-variable
entry: XINFO environment variable
texi_entry: XINFO environment variable
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: XTERM environment variable
- origin_href: sing.info#index-XTERM-environment-variable
+ origin_href: sing.htm#index-XTERM-environment-variable
entry: XTERM environment variable
texi_entry: XTERM environment variable
- element_href: sing.info#The-online-help-system
+ element_href: sing.htm#The-online-help-system
element_text: The online help system
key: zerodec
- origin_href: sing.info#index-zerodec
+ origin_href: sing.htm#index-zerodec
entry: zerodec
texi_entry: zerodec
- element_href: sing.info#zerodec
+ element_href: sing.htm#zerodec
element_text: zerodec
key: zeroMod
- origin_href: sing.info#index-zeroMod
+ origin_href: sing.htm#index-zeroMod
entry: zeroMod
texi_entry: zeroMod
- element_href: sing.info#zeroMod
+ element_href: sing.htm#zeroMod
element_text: zeroMod
key: zeroOpt
- origin_href: sing.info#index-zeroOpt
+ origin_href: sing.htm#index-zeroOpt
entry: zeroOpt
texi_entry: zeroOpt
- element_href: sing.info#zeroOpt
+ element_href: sing.htm#zeroOpt
element_text: zeroOpt
key: ZeroSet
- origin_href: sing.info#index-ZeroSet
+ origin_href: sing.htm#index-ZeroSet
entry: ZeroSet
texi_entry: ZeroSet
- element_href: sing.info#ZeroSet
+ element_href: sing.htm#ZeroSet
element_text: ZeroSet
key: zeroset.lib
- origin_href: sing.info#index-zeroset_002elib
+ origin_href: sing.htm#index-zeroset_002elib
entry: zeroset.lib
texi_entry: zeroset.lib
- element_href: sing.info#zeroset_005flib
+ element_href: sing.htm#zeroset_005flib
element_text: zeroset_lib
key: zeroset_lib
- origin_href: sing.info#index-zeroset_005flib
+ origin_href: sing.htm#index-zeroset_005flib
entry: zeroset_lib
texi_entry: zeroset_lib
- element_href: sing.info#zeroset_005flib
+ element_href: sing.htm#zeroset_005flib
element_text: zeroset_lib
Index: test/singular_manual/res_info/singular_httex/singular.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/singular_manual/res_info/singular_httex/singular.2,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- test/singular_manual/res_info/singular_httex/singular.2 13 Jul 2010
12:03:47 -0000 1.8
+++ test/singular_manual/res_info/singular_httex/singular.2 14 Jul 2010
15:42:41 -0000 1.9
@@ -1,6 +1,3 @@
-Unknown option: short-ext
-Unknown option: prefix
-Unknown option: top-file
warning: Ignoring splitting for format info
template_lib.tex:29: Multiple @menu
normal_lib.tex:26: Multiple @menu
Index: test/xemacs_manual/tests.txt
===================================================================
RCS file: /sources/texinfo/texinfo/texi2html/test/xemacs_manual/tests.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- test/xemacs_manual/tests.txt 4 Aug 2009 07:58:59 -0000 1.2
+++ test/xemacs_manual/tests.txt 14 Jul 2010 15:42:41 -0000 1.3
@@ -1,3 +1,3 @@
texi xemacs.texi --ifinfo
xemacs xemacs.texi --split chapter --ifinfo
-xemacs_frame xemacs.texi --split chapter --frames --ifinfo
+xemacs_frame xemacs.texi --split chapter --set-init-var 'FRAMES 1' --ifinfo
Index: test/xemacs_manual/res_info/xemacs_frame/xemacs.2
===================================================================
RCS file:
/sources/texinfo/texinfo/texi2html/test/xemacs_manual/res_info/xemacs_frame/xemacs.2,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/xemacs_manual/res_info/xemacs_frame/xemacs.2 13 Jul 2010 12:03:48
-0000 1.5
+++ test/xemacs_manual/res_info/xemacs_frame/xemacs.2 14 Jul 2010 15:42:41
-0000 1.6
@@ -1,3 +1,2 @@
-Unknown option: frames
warning: Ignoring splitting for format info
custom.texi:2095: warning: Node following `X Resources' in menu `Examining'
and in sectioning `Quitting' differ
Index: test/formatting/res_info/simplest_test_prefix/truc.info
===================================================================
RCS file: test/formatting/res_info/simplest_test_prefix/truc.info
diff -N test/formatting/res_info/simplest_test_prefix/truc.info
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/simplest_test_prefix/truc.info 14 Jul 2010
15:42:36 -0000 1.1
@@ -0,0 +1,14 @@
+This is truc.info, produced by makeinfo version 4.13 from simplest.texi.
+
+
+
+File: truc.info, Node: Top, Up: (dir)
+
+This is a very simple texi manual <>.
+
+
+
+Tag Table:
+Node: Top75
+
+End Tag Table
Index: test/formatting/res_info/simplest_test_prefix_info/truc.info
===================================================================
RCS file: test/formatting/res_info/simplest_test_prefix_info/truc.info
diff -N test/formatting/res_info/simplest_test_prefix_info/truc.info
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/simplest_test_prefix_info/truc.info 14 Jul
2010 15:42:36 -0000 1.1
@@ -0,0 +1,14 @@
+This is truc.info, produced by makeinfo version 4.13 from simplest.texi.
+
+
+
+File: truc.info, Node: Top, Up: (dir)
+
+This is a very simple texi manual <>.
+
+
+
+Tag Table:
+Node: Top75
+
+End Tag Table
Index: test/formatting/res_info/tex_l2h_mediawiki/tex-l2h_cache.pm
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex-l2h_cache.pm
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex-l2h_cache.pm
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex-l2h_cache.pm 14 Jul 2010
15:42:36 -0000 1.1
@@ -0,0 +1,31 @@
+
+$l2h_cache_key = q/ some
+
+$$ \chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2 $$/;
+$l2h_cache{$l2h_cache_key} = q|
+some
+
+<br />
+
+<div class="mathdisplay" align="CENTER"><!-- MATH
+ \begin{displaymath}
+\chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2
+\end{displaymath}
+ -->[[Image:tex_1.png\|179px\|\begin{displaymath}\chi^2 = \sum_{i=1}^N
+\left(y_i - (a + b x_i)
+\over \sigma_i\right)^2 \end{displaymath}]]</div>
+
+<br clear="ALL" />|;
+
+$l2h_cache_key = q/ some
+
+tex \TeX/;
+$l2h_cache{$l2h_cache_key} = q|
+some
+
+tex <span class="logo-TeX">T<small>E</small>X</span>|;
+1;
\ No newline at end of file
Index: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.html
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.html
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.html
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.html 14 Jul 2010
15:42:36 -0000 1.1
@@ -0,0 +1,39 @@
+tex_l2h<!-- l2h_begin tex_l2h 1 -->
+
+some
+
+<br />
+
+<div class="mathdisplay" align="CENTER"><!-- MATH
+ \begin{displaymath}
+\chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2
+\end{displaymath}
+ -->[[Image:tex_1.png|179px|\begin{displaymath}\chi^2 = \sum_{i=1}^N
+\left(y_i - (a + b x_i)
+\over \sigma_i\right)^2 \end{displaymath}]]</div>
+
+<br clear="ALL" />
+
+<!-- l2h_end tex_l2h 1 -->
+
+intersticiae
+
+<!-- l2h_begin tex_l2h 2 -->
+
+some
+
+tex <span class="logo-TeX">T<small>E</small>X</span>
+<!-- l2h_end tex_l2h 2 -->
+
+intersticiae
+
+<br />
+
+----
+<!--Converted with LaTeX2HTML
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
Index: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.tex
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.tex
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.tex
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex_l2h.tex 14 Jul 2010
15:42:36 -0000 1.1
@@ -0,0 +1,30 @@
+% This document was automatically generated by the l2h extenstion of texi2html
+% DO NOT EDIT !!!
+\documentclass{article}
+\usepackage{html}
+\begin{document}
+\begin{rawhtml}
+
+<!-- l2h_begin tex_l2h 1 -->
+\end{rawhtml}
+ some
+
+$$ \chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2 $$
+\begin{rawhtml}
+<!-- l2h_end tex_l2h 1 -->
+
+\end{rawhtml}
+\begin{rawhtml}
+
+<!-- l2h_begin tex_l2h 2 -->
+\end{rawhtml}
+ some
+
+tex \TeX
+\begin{rawhtml}
+<!-- l2h_end tex_l2h 2 -->
+
+\end{rawhtml}
+\end{document}
Index: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.pl
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.pl
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.pl 14 Jul
2010 15:42:36 -0000 1.1
@@ -0,0 +1,14 @@
+# LaTeX2HTML
+# Associate images original text with physical files.
+
+
+$key =
q/{displaymath}chi^2=sum_{i=1}^Nleft(y_i-(a+bx_i)oversigma_iright)^2{displaymath};MSF=1.5;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="100" HEIGHT="50" BORDER="0"
+ SRC="|."$dir".q|tex_l2h_img1.png"
+ ALT="\begin{displaymath}\chi^2 = \sum_{i=1}^N
+\left(y_i - (a + b x_i)
+\over \sigma_i\right)^2 \end{displaymath}">|;
+
+1;
+
Index: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.tex
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.tex
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.tex
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_images.tex 14 Jul
2010 15:42:36 -0000 1.1
@@ -0,0 +1,147 @@
+\batchmode
+
+\documentclass{article}
+\RequirePackage{ifthen}
+
+
+\usepackage{html}
+
+
+\usepackage[dvips]{color}
+
+
+\pagecolor[gray]{.7}
+
+\usepackage[]{inputenc}
+
+
+
+\makeatletter
+
+\makeatletter
address@hidden \catcode`\_=8
+\newenvironment{tex2html_wrap}{}{}%
+\catcode`\<=12\catcode`\_=\count@
+\newcommand{\providedcommand}[1]{\expandafter\providecommand\csname
#1\endcsname}%
+\newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname
#1\endcsname{}%
+ \expandafter\renewcommand\csname #1\endcsname}%
+\newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}%
+\let\newedcommand\renewedcommand
+\let\renewedenvironment\newedenvironment
+\makeatother
+\let\mathon=$
+\let\mathoff=$
+\ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi
+\newbox\sizebox
+\setlength{\hoffset}{0pt}\setlength{\voffset}{0pt}
+\addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt}
+\addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt}
+\addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt}
+\addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt}
+\setlength{\textwidth}{451pt}
+\setlength{\textheight}{554pt}
+\newwrite\lthtmlwrite
+\makeatletter
+\let\realnormalsize=\normalsize
+\global\topskip=2sp
address@hidden@float address@hidden@float
address@hidden@address@hidden@float}
address@hidden@math\fi}
address@hidden@address@hidden@savefreelist}
address@hidden@dbflt address@hidden@float
address@hidden
address@hidden
address@hidden@address@hidden@dbflt}
+\def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize
+ \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}%
+ \def\phantompar{\csname par\endcsname}\normalsize}%
+\def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}%
+\newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em
}%
+\newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox
to\hsize\bgroup\hfill }%
+\newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup %
+ \let\ifinner=\iffalse \let\)address@hidden }%
address@hidden@address@hidden
+ \expandafter\box\next\egroup}%
+\newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}%
+\newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox
+ \ifdim\dimen0>.95\vsize
+ \lthtmltypeout{%
+*** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95
vsize ***}%
+ \ht\sizebox.95\vsize \dp\sizebox\z@ \fi
+ \lthtmltypeout{l2hSize %
+:\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}%
address@hidden@freelist
+ \lthtmlmathtype{#1}\lthtmlvboxmathA}%
+\newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}%
+\newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup
+ address@hidden@freelist \lthtmlhboxmathB}%
+\newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}%
+\newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox
+ address@hidden@savefreelist}%
+\newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}%
+\newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}%
+\newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}%
+ address@hidden
+\newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}%
+\newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB}
+\newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA
+ \vrule height1.5ex width0pt }%
+\newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}%
+\newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}%
+\newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
+ \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline}
+\newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt %
+ \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath}
+\newcommand\lthtmlindisplaymathZ{\egroup %
+ \centerinlinemath\lthtmllogmath\lthtmlsetmath}
+\def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{%
+ \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi
+ \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
+\def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{%
+ \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt%
+ \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt%
+ \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}}
+\def\centerinlinemath{%
+ \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi
+ \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1
+ \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax}
+
+\def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize
+ \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill
+ \else\expandafter\vss\fi}%
+\providecommand{\selectlanguage}[1]{}%
+\makeatletter \tracingstats = 1
+
+
+\begin{document}
+\pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}%
+\lthtmltypeout{latex2htmlLength
oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}%
+\makeatletter
address@hidden evensidemargin=\the\evensidemargin}%
+\else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi%
+\lthtmltypeout{}%
+\makeatother
+\setcounter{page}{1}
+\onecolumn
+
+% !!! IMAGES START HERE !!!
+
+{\newpage\clearpage
+\lthtmldisplayA{displaymath6}%
+\begin{displaymath} \chi^2 = \sum_{i=1}^N
+ \left(y_i - (a + b x_i)
+ \over \sigma_i\right)^2 \end{displaymath}%
+\lthtmldisplayZ
+\lthtmlcheckvsize\clearpage}
+
+
+\end{document}
Index: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_labels.pl
===================================================================
RCS file: test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_labels.pl
diff -N test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_labels.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/formatting/res_info/tex_l2h_mediawiki/tex_l2h_labels.pl 14 Jul
2010 15:42:37 -0000 1.1
@@ -0,0 +1,13 @@
+# LaTeX2HTML
+# Associate labels original text with physical files.
+
+
+1;
+
+
+# LaTeX2HTML
+# labels from external_latex_labels array.
+
+
+1;
+
Index: test/manuals/res_info/texinfo/texinfo_cp.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_cp.idx
diff -N test/manuals/res_info/texinfo/texinfo_cp.idx
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/manuals/res_info/texinfo/texinfo_cp.idx 14 Jul 2010 15:42:38
-0000 1.3
@@ -0,0 +1,4866 @@
+key: !
+ origin_href: texinfo#index-_00a1
+ entry: !
+ texi_entry: @exclamdown{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: $
+ origin_href: texinfo#index-_0024
+ entry: $
+ texi_entry: $
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: (dir) as Up node of Top node
+ origin_href: texinfo#index-_0028dir_0029-as-Up-node-of-Top-node
+ entry: (dir) as Up node of Top node
+ texi_entry: (dir) as Up node of Top node
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: -commands-in-node-names
+ origin_href: texinfo#index-_002d_002dcommands_002din_002dnode_002dnames
+ entry: `--commands-in-node-names'
+ texi_entry: @code{--commands-in-node-names}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -D DIR
+ origin_href: texinfo#index-_002dD-dir
+ entry: `-D DIR'
+ texi_entry: @code{-D @var{dir}}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -d NAME
+ origin_href: texinfo#index-_002dd-name
+ entry: `-d NAME'
+ texi_entry: @code{-d @var{name}}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -D VAR
+ origin_href: texinfo#index-_002dD-var
+ entry: `-D VAR'
+ texi_entry: @code{-D @var{var}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -delete
+ origin_href: texinfo#index-_002d_002ddelete
+ entry: `--delete'
+ texi_entry: @code{--delete}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -dir-file=NAME
+ origin_href: texinfo#index-_002d_002ddir_002dfile_003dname
+ entry: `--dir-file=NAME'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -docbook
+ origin_href: texinfo#index-_002d_002ddocbook
+ entry: `--docbook'
+ texi_entry: @code{--docbook}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -e LIMIT
+ origin_href: texinfo#index-_002de-limit
+ entry: `-e LIMIT'
+ texi_entry: @code{-e @var{limit}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -e TEXT
+ origin_href: texinfo#index-_002de-text
+ entry: `-e TEXT'
+ texi_entry: @code{-e @var{text}}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -entry=TEXT
+ origin_href: texinfo#index-_002d_002dentry_003dtext
+ entry: `--entry=TEXT'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -error-limit=LIMIT
+ origin_href: texinfo#index-_002d_002derror_002dlimit_003dlimit
+ entry: `--error-limit=LIMIT'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -F
+ origin_href: texinfo#index-_002dF
+ entry: `-F'
+ texi_entry: @code{-F}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -f WIDTH
+ origin_href: texinfo#index-_002df-width
+ entry: `-f WIDTH'
+ texi_entry: @code{-f @var{width}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -fill-column=WIDTH
+ origin_href: texinfo#index-_002d_002dfill_002dcolumn_003dwidth
+ entry: `--fill-column=WIDTH'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -footnote-style=STYLE
+ origin_href: texinfo#index-_002d_002dfootnote_002dstyle_003dstyle
+ entry: `--footnote-style=STYLE'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -force
+ origin_href: texinfo#index-_002d_002dforce
+ entry: `--force'
+ texi_entry: @code{--force}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -h
+ origin_href: texinfo#index-_002dh
+ entry: `-h'
+ texi_entry: @code{-h}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -h
+ origin_href: texinfo#index-_002dh-1
+ entry: `-h'
+ texi_entry: @code{-h}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -help
+ origin_href: texinfo#index-_002d_002dhelp
+ entry: `--help'
+ texi_entry: @code{--help}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -help
+ origin_href: texinfo#index-_002d_002dhelp-1
+ entry: `--help'
+ texi_entry: @code{--help}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -html
+ origin_href: texinfo#index-_002d_002dhtml
+ entry: `--html'
+ texi_entry: @code{--html}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -I DIR
+ origin_href: texinfo#index-_002dI-dir
+ entry: `-I DIR'
+ texi_entry: @code{-I @var{dir}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -i FILE
+ origin_href: texinfo#index-_002di-file
+ entry: `-i FILE'
+ texi_entry: @code{-i @var{file}}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -info-dir=DIR
+ origin_href: texinfo#index-_002d_002dinfo_002ddir_003ddir
+ entry: `--info-dir=DIR'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -info-file=FILE
+ origin_href: texinfo#index-_002d_002dinfo_002dfile_003dfile
+ entry: `--info-file=FILE'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -item=TEXT
+ origin_href: texinfo#index-_002d_002ditem_003dtext
+ entry: `--item=TEXT'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -no-headers
+ origin_href: texinfo#index-_002d_002dno_002dheaders
+ entry: `--no-headers'
+ texi_entry: @code{--no-headers}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -no-number-footnotes
+ origin_href: texinfo#index-_002d_002dno_002dnumber_002dfootnotes
+ entry: `--no-number-footnotes'
+ texi_entry: @code{--no-number-footnotes}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -no-pointer-validate
+ origin_href: texinfo#index-_002d_002dno_002dpointer_002dvalidate
+ entry: `--no-pointer-validate'
+ texi_entry: @code{--no-pointer-validate}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -no-split
+ origin_href: texinfo#index-_002d_002dno_002dsplit
+ entry: `--no-split'
+ texi_entry: @code{--no-split}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -no-validate
+ origin_href: texinfo#index-_002d_002dno_002dvalidate
+ entry: `--no-validate'
+ texi_entry: @code{--no-validate}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -no-warn
+ origin_href: texinfo#index-_002d_002dno_002dwarn
+ entry: `--no-warn'
+ texi_entry: @code{--no-warn}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -number-sections
+ origin_href: texinfo#index-_002d_002dnumber_002dsections
+ entry: `--number-sections'
+ texi_entry: @code{--number-sections}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -o FILE
+ origin_href: texinfo#index-_002do-file
+ entry: `-o FILE'
+ texi_entry: @code{-o @var{file}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -output=FILE
+ origin_href: texinfo#index-_002d_002doutput_003dfile
+ entry: `--output=FILE'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -P DIR
+ origin_href: texinfo#index-_002dP-dir
+ entry: `-P DIR'
+ texi_entry: @code{-P @var{dir}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -p INDENT
+ origin_href: texinfo#index-_002dp-indent
+ entry: `-p INDENT'
+ texi_entry: @code{-p @var{indent}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -paragraph-indent=INDENT
+ origin_href: texinfo#index-_002d_002dparagraph_002dindent_003dindent
+ entry: `--paragraph-indent=INDENT'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -quiet
+ origin_href: texinfo#index-_002d_002dquiet
+ entry: `--quiet'
+ texi_entry: @code{--quiet}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -r
+ origin_href: texinfo#index-_002dr
+ entry: `-r'
+ texi_entry: @code{-r}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -r LIMIT
+ origin_href: texinfo#index-_002dr-limit
+ entry: `-r LIMIT'
+ texi_entry: @code{-r @var{limit}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -reference-limit=LIMIT
+ origin_href: texinfo#index-_002d_002dreference_002dlimit_003dlimit
+ entry: `--reference-limit=LIMIT'
+ texi_entry: @address@hidden
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -remove
+ origin_href: texinfo#index-_002d_002dremove
+ entry: `--remove'
+ texi_entry: @code{--remove}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -s SEC
+ origin_href: texinfo#index-_002ds-sec
+ entry: `-s SEC'
+ texi_entry: @code{-s @var{sec}}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -s STYLE
+ origin_href: texinfo#index-_002ds-style
+ entry: `-s STYLE'
+ texi_entry: @code{-s @var{style}}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -section=SEC
+ origin_href: texinfo#index-_002d_002dsection_003dsec
+ entry: `--section=SEC'
+ texi_entry: @address@hidden
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -V
+ origin_href: texinfo#index-_002dV
+ entry: `-V'
+ texi_entry: @code{-V}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -V
+ origin_href: texinfo#index-_002dV-1
+ entry: `-V'
+ texi_entry: @code{-V}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -verbose
+ origin_href: texinfo#index-_002d_002dverbose
+ entry: `--verbose'
+ texi_entry: @code{--verbose}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -version
+ origin_href: texinfo#index-_002d_002dversion
+ entry: `--version'
+ texi_entry: @code{--version}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: -version
+ origin_href: texinfo#index-_002d_002dversion-1
+ entry: `--version'
+ texi_entry: @code{--version}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: -xml
+ origin_href: texinfo#index-_002d_002dxml
+ entry: `--xml'
+ texi_entry: @code{--xml}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: .cshrc initialization file
+ origin_href: texinfo#index-_002ecshrc-initialization-file
+ entry: .cshrc initialization file
+ texi_entry: @b{.cshrc} initialization file
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: .profile initialization file
+ origin_href: texinfo#index-_002eprofile-initialization-file
+ entry: .profile initialization file
+ texi_entry: @b{.profile} initialization file
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: <meta> HTML tag, and document description
+ origin_href:
texinfo#index-_003cmeta_003e-HTML-tag_002c-and-document-description
+ entry: <meta> HTML tag, and document description
+ texi_entry: <meta> HTML tag, and document description
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: <title> HTML tag
+ origin_href: texinfo#index-_003ctitle_003e-HTML-tag
+ entry: <title> HTML tag
+ texi_entry: <title> HTML tag
+ element_href: texinfo#settitle
+ element_text: settitle
+key: <URL convention, not used
+ origin_href: texinfo#index-_003cURL-convention_002c-not-used
+ entry: <URL convention, not used
+ texi_entry: <URL convention, not used
+ element_href: texinfo#uref
+ element_text: uref
+key: ?
+ origin_href: texinfo#index-_00bf
+ entry: ?
+ texi_entry: @questiondown{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: @-command list
+ origin_href: texinfo#index-_0040_002dcommand-list
+ entry: @-command list
+ texi_entry: @@-command list
+ element_href: texinfo#Command-List
+ element_text: Command List
+key: @-command syntax
+ origin_href: texinfo#index-_0040_002dcommand-syntax
+ entry: @-command syntax
+ texi_entry: @@-command syntax
+ element_href: texinfo#Command-Syntax
+ element_text: Command Syntax
+key: @-commands
+ origin_href: texinfo#index-_0040_002dcommands
+ entry: @-commands
+ texi_entry: @@-commands
+ element_href: texinfo#Formatting-Commands
+ element_text: Formatting Commands
+key: @-commands in @node, limited support
+ origin_href:
texinfo#index-_0040_002dcommands-in-_0040node_002c-limited-support
+ entry: @-commands in @node, limited support
+ texi_entry: @@-commands in @@node, limited support
+ element_href: texinfo#Pointer-Validation
+ element_text: Pointer Validation
+key: @-commands in nodename
+ origin_href: texinfo#index-_0040_002dcommands-in-nodename
+ entry: @-commands in nodename
+ texi_entry: @@-commands in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: @value in @node lines
+ origin_href: texinfo#index-_0040value-in-_0040node-lines
+ entry: @value in @node lines
+ texi_entry: @@value in @@node lines
+ element_href: texinfo#Pointer-Validation
+ element_text: Pointer Validation
+key: `dir' directory for Info installation
+ origin_href: texinfo#index-dir-directory-for-Info-installation
+ entry: `dir' directory for Info installation
+ texi_entry: @file{dir} directory for Info installation
+ element_href: texinfo#Installing-an-Info-File
+ element_text: Installing an Info File
+key: `dir' file listing
+ origin_href: texinfo#index-dir-file-listing
+ entry: `dir' file listing
+ texi_entry: @file{dir} file listing
+ element_href: texinfo#New-Info-File
+ element_text: New Info File
+key: `dir' file, creating your own
+ origin_href: texinfo#index-dir-file_002c-creating-your-own
+ entry: `dir' file, creating your own
+ texi_entry: @file{dir} file, creating your own
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: `dir' files and Info directories
+ origin_href: texinfo#index-dir-files-and-Info-directories
+ entry: `dir' files and Info directories
+ texi_entry: @file{dir} files and Info directories
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: `dir', created by `install-info'
+ origin_href: texinfo#index-dir_002c-created-by-install_002dinfo
+ entry: `dir', created by `install-info'
+ texi_entry: @file{dir}, created by @code{install-info}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: `End' node footnote style
+ origin_href: texinfo#index-End-node-footnote-style
+ entry: `End' node footnote style
+ texi_entry: @address@hidden node footnote style
+ element_href: texinfo#Footnote-Styles
+ element_text: Footnote Styles
+key: `hboxes', overfull
+ origin_href: texinfo#index-hboxes_002c-overfull
+ entry: `hboxes', overfull
+ texi_entry: @samp{hboxes}, overfull
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: `href', producing HTML
+ origin_href: texinfo#index-href_002c-producing-HTML
+ entry: `href', producing HTML
+ texi_entry: @code{href}, producing HTML
+ element_href: texinfo#uref
+ element_text: uref
+key: `include' file sample
+ origin_href: texinfo#index-_0040include-file-sample
+ entry: address@hidden' file sample
+ texi_entry: @code{@@include} file sample
+ element_href: texinfo#Sample-Include-File
+ element_text: Sample Include File
+key: `INSTALL' file, generating
+ origin_href: texinfo#index-INSTALL-file_002c-generating
+ entry: `INSTALL' file, generating
+ texi_entry: @file{INSTALL} file, generating
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: `makeinfo' inside Emacs
+ origin_href: texinfo#index-makeinfo-inside-Emacs
+ entry: `makeinfo' inside Emacs
+ texi_entry: @code{makeinfo} inside Emacs
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: `makeinfo' options
+ origin_href: texinfo#index-makeinfo-options
+ entry: `makeinfo' options
+ texi_entry: @code{makeinfo} options
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: `menu' parts
+ origin_href: texinfo#index-_0040menu-parts
+ entry: address@hidden' parts
+ texi_entry: @code{@@menu} parts
+ element_href: texinfo#Menu-Parts
+ element_text: Menu Parts
+key: `node' line writing
+ origin_href: texinfo#index-_0040node-line-writing
+ entry: address@hidden' line writing
+ texi_entry: @code{@@node} line writing
+ element_href: texinfo#Writing-a-Node
+ element_text: Writing a Node
+key: `Separate' footnote style
+ origin_href: texinfo#index-Separate-footnote-style
+ entry: `Separate' footnote style
+ texi_entry: @address@hidden footnote style
+ element_href: texinfo#Footnote-Styles
+ element_text: Footnote Styles
+key: `TEXINPUTS' environment variable
+ origin_href: texinfo#index-TEXINPUTS-environment-variable
+ entry: `TEXINPUTS' environment variable
+ texi_entry: @code{TEXINPUTS} environment variable
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: `Top' node naming for references
+ origin_href: texinfo#index-Top-node-naming-for-references
+ entry: `Top' node naming for references
+ texi_entry: @address@hidden node naming for references
+ element_href: texinfo#Top-Node-Naming
+ element_text: Top Node Naming
+key: `txi-CC.tex'
+ origin_href: texinfo#index-txi_002dcc_002etex
+ entry: `txi-CC.tex'
+ texi_entry: @address@hidden
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: `w', for blank items
+ origin_href: texinfo#index-_0040w_002c-for-blank-items
+ entry: address@hidden', for blank items
+ texi_entry: @code{@@w}, for blank items
+ element_href: texinfo#itemize
+ element_text: itemize
+key: `\input' source line ignored
+ origin_href: texinfo#index-_005cinput-source-line-ignored
+ entry: `\input' source line ignored
+ texi_entry: @samp{\input} source line ignored
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: A4 paper, printing on
+ origin_href: texinfo#index-A4-paper_002c-printing-on
+ entry: A4 paper, printing on
+ texi_entry: A4 paper, printing on
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: A5 paper, printing on
+ origin_href: texinfo#index-A5-paper_002c-printing-on
+ entry: A5 paper, printing on
+ texi_entry: A5 paper, printing on
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: aa
+ origin_href: texinfo#index-aa-1
+ entry: aa
+ texi_entry: @aa{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: AA
+ origin_href: texinfo#index-AA-1
+ entry: AA
+ texi_entry: @AA{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Abbreviations for keys
+ origin_href: texinfo#index-Abbreviations-for-keys
+ entry: Abbreviations for keys
+ texi_entry: Abbreviations for keys
+ element_href: texinfo#key
+ element_text: key
+key: Abbreviations, tagging
+ origin_href: texinfo#index-Abbreviations_002c-tagging
+ entry: Abbreviations, tagging
+ texi_entry: Abbreviations, tagging
+ element_href: texinfo#acronym
+ element_text: acronym
+key: Abstract of document
+ origin_href: texinfo#index-Abstract-of-document
+ entry: Abstract of document
+ texi_entry: Abstract of document
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: Accents, inserting
+ origin_href: texinfo#index-Accents_002c-inserting
+ entry: Accents, inserting
+ texi_entry: Accents, inserting
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Acronyms, tagging
+ origin_href: texinfo#index-Acronyms_002c-tagging
+ entry: Acronyms, tagging
+ texi_entry: Acronyms, tagging
+ element_href: texinfo#acronym
+ element_text: acronym
+key: Acute accent
+ origin_href: texinfo#index-Acute-accent
+ entry: Acute accent
+ texi_entry: Acute accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Adding a new Info file
+ origin_href: texinfo#index-Adding-a-new-Info-file
+ entry: Adding a new Info file
+ texi_entry: Adding a new Info file
+ element_href: texinfo#New-Info-File
+ element_text: New Info File
+key: ae
+ origin_href: texinfo#index-ae-1
+ entry: ae
+ texi_entry: @ae{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: AE
+ origin_href: texinfo#index-AE-1
+ entry: AE
+ texi_entry: @AE{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Aliases, command
+ origin_href: texinfo#index-Aliases_002c-command
+ entry: Aliases, command
+ texi_entry: Aliases, command
+ element_href: texinfo#alias
+ element_text: alias
+key: Alphabetical @-command list
+ origin_href: texinfo#index-Alphabetical-_0040_002dcommand-list
+ entry: Alphabetical @-command list
+ texi_entry: Alphabetical @@-command list
+ element_href: texinfo#Command-List
+ element_text: Command List
+key: alt attribute for images
+ origin_href: texinfo#index-alt-attribute-for-images
+ entry: alt attribute for images
+ texi_entry: alt attribute for images
+ element_href: texinfo#Images
+ element_text: Images
+key: alternate text for images
+ origin_href: texinfo#index-alternate-text-for-images
+ entry: alternate text for images
+ texi_entry: alternate text for images
+ element_href: texinfo#Images
+ element_text: Images
+key: Anchors
+ origin_href: texinfo#index-Anchors
+ entry: Anchors
+ texi_entry: Anchors
+ element_href: texinfo#anchor
+ element_text: anchor
+key: Another Info directory
+ origin_href: texinfo#index-Another-Info-directory
+ entry: Another Info directory
+ texi_entry: Another Info directory
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Apostrophe in nodename
+ origin_href: texinfo#index-Apostrophe-in-nodename
+ entry: Apostrophe in nodename
+ texi_entry: Apostrophe in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Arguments, repeated and optional
+ origin_href: texinfo#index-Arguments_002c-repeated-and-optional
+ entry: Arguments, repeated and optional
+ texi_entry: Arguments, repeated and optional
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: ASCII text output
+ origin_href: texinfo#index-ASCII-text-output
+ entry: ASCII text output
+ texi_entry: ASCII text output
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Aspect ratio of images
+ origin_href: texinfo#index-Aspect-ratio-of-images
+ entry: Aspect ratio of images
+ texi_entry: Aspect ratio of images
+ element_href: texinfo#Images
+ element_text: Images
+key: autoexec.bat
+ origin_href: texinfo#index-autoexec_002ebat
+ entry: `autoexec.bat'
+ texi_entry: @code{autoexec.bat}
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: automake, and version info
+ origin_href: texinfo#index-automake_002c-and-version-info
+ entry: `automake, and version info'
+ texi_entry: @address@hidden, and version info}}
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Automatic pointer creation with `makeinfo'
+ origin_href: texinfo#index-Automatic-pointer-creation-with-makeinfo
+ entry: Automatic pointer creation with `makeinfo'
+ texi_entry: Automatic pointer creation with @code{makeinfo}
+ element_href: texinfo#makeinfo-Pointer-Creation
+ element_text: makeinfo Pointer Creation
+key: Automatically insert nodes, menus
+ origin_href: texinfo#index-Automatically-insert-nodes_002c-menus
+ entry: Automatically insert nodes, menus
+ texi_entry: Automatically insert nodes, menus
+ element_href: texinfo#Updating-Nodes-and-Menus
+ element_text: Updating Nodes and Menus
+key: Auxiliary files, avoiding
+ origin_href: texinfo#index-Auxiliary-files_002c-avoiding
+ entry: Auxiliary files, avoiding
+ texi_entry: Auxiliary files, avoiding
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: B5 paper, printing on
+ origin_href: texinfo#index-B5-paper_002c-printing-on
+ entry: B5 paper, printing on
+ texi_entry: B5 paper, printing on
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Backslash in macros
+ origin_href: texinfo#index-Backslash-in-macros
+ entry: Backslash in macros
+ texi_entry: Backslash in macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Backslash, and macros
+ origin_href: texinfo#index-Backslash_002c-and-macros
+ entry: Backslash, and macros
+ texi_entry: Backslash, and macros
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Badly referenced nodes
+ origin_href: texinfo#index-Badly-referenced-nodes
+ entry: Badly referenced nodes
+ texi_entry: Badly referenced nodes
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: Bastard title page
+ origin_href: texinfo#index-Bastard-title-page
+ entry: Bastard title page
+ texi_entry: Bastard title page
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: Batch formatting for Info
+ origin_href: texinfo#index-Batch-formatting-for-Info
+ entry: Batch formatting for Info
+ texi_entry: Batch formatting for Info
+ element_href: texinfo#Batch-Formatting
+ element_text: Batch Formatting
+key: Beginning a Texinfo file
+ origin_href: texinfo#index-Beginning-a-Texinfo-file
+ entry: Beginning a Texinfo file
+ texi_entry: Beginning a Texinfo file
+ element_href: texinfo#Beginning-a-File
+ element_text: Beginning a File
+key: Beginning line of a Texinfo file
+ origin_href: texinfo#index-Beginning-line-of-a-Texinfo-file
+ entry: Beginning line of a Texinfo file
+ texi_entry: Beginning line of a Texinfo file
+ element_href: texinfo#First-Line
+ element_text: First Line
+key: Berry, Karl
+ origin_href: texinfo#index-Berry_002c-Karl
+ entry: Berry, Karl
+ texi_entry: Berry, Karl
+ element_href: texinfo#History
+ element_text: History
+key: Big points
+ origin_href: texinfo#index-Big-points
+ entry: Big points
+ texi_entry: Big points
+ element_href: texinfo#Images
+ element_text: Images
+key: Black rectangle in hardcopy
+ origin_href: texinfo#index-Black-rectangle-in-hardcopy
+ entry: Black rectangle in hardcopy
+ texi_entry: Black rectangle in hardcopy
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Blank lines
+ origin_href: texinfo#index-Blank-lines
+ entry: Blank lines
+ texi_entry: Blank lines
+ element_href: texinfo#sp
+ element_text: sp
+key: Body of a macro
+ origin_href: texinfo#index-Body-of-a-macro
+ entry: Body of a macro
+ texi_entry: Body of a macro
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Bolio
+ origin_href: texinfo#index-Bolio
+ entry: Bolio
+ texi_entry: Bolio
+ element_href: texinfo#History
+ element_text: History
+key: Book characteristics, printed
+ origin_href: texinfo#index-Book-characteristics_002c-printed
+ entry: Book characteristics, printed
+ texi_entry: Book characteristics, printed
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: Book, printing small
+ origin_href: texinfo#index-Book_002c-printing-small
+ entry: Book, printing small
+ texi_entry: Book, printing small
+ element_href: texinfo#smallbook
+ element_text: smallbook
+key: BoTeX
+ origin_href: texinfo#index-BoTeX
+ entry: BoTeX
+ texi_entry: address@hidden
+ element_href: texinfo#History
+ element_text: History
+key: Box with rounded corners
+ origin_href: texinfo#index-Box-with-rounded-corners
+ entry: Box with rounded corners
+ texi_entry: Box with rounded corners
+ element_href: texinfo#cartouche
+ element_text: cartouche
+key: Box, ugly black in hardcopy
+ origin_href: texinfo#index-Box_002c-ugly-black-in-hardcopy
+ entry: Box, ugly black in hardcopy
+ texi_entry: Box, ugly black in hardcopy
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Braces and argument syntax
+ origin_href: texinfo#index-Braces-and-argument-syntax
+ entry: Braces and argument syntax
+ texi_entry: Braces and argument syntax
+ element_href: texinfo#Command-Syntax
+ element_text: Command Syntax
+key: Braces, in macro arguments
+ origin_href: texinfo#index-Braces_002c-in-macro-arguments
+ entry: Braces, in macro arguments
+ texi_entry: Braces, in macro arguments
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Braces, inserting
+ origin_href: texinfo#index-Braces_002c-inserting
+ entry: Braces, inserting
+ texi_entry: Braces, inserting
+ element_href: texinfo#Braces-Atsigns
+ element_text: Braces Atsigns
+key: Braces, when to use
+ origin_href: texinfo#index-Braces_002c-when-to-use
+ entry: Braces, when to use
+ texi_entry: Braces, when to use
+ element_href: texinfo#Formatting-Commands
+ element_text: Formatting Commands
+key: Breaks in a line
+ origin_href: texinfo#index-Breaks-in-a-line
+ entry: Breaks in a line
+ texi_entry: Breaks in a line
+ element_href: texinfo#Line-Breaks
+ element_text: Line Breaks
+key: Breve accent
+ origin_href: texinfo#index-Breve-accent
+ entry: Breve accent
+ texi_entry: Breve accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Buffer formatting and printing
+ origin_href: texinfo#index-Buffer-formatting-and-printing
+ entry: Buffer formatting and printing
+ texi_entry: Buffer formatting and printing
+ element_href: texinfo#Printing
+ element_text: Printing
+key: Bugs, reporting
+ origin_href: texinfo#index-Bugs_002c-reporting
+ entry: Bugs, reporting
+ texi_entry: Bugs, reporting
+ element_href: texinfo#Reporting-Bugs
+ element_text: Reporting Bugs
+key: Bullets, inserting
+ origin_href: texinfo#index-Bullets_002c-inserting
+ entry: Bullets, inserting
+ texi_entry: Bullets, inserting
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Case in node name
+ origin_href: texinfo#index-Case-in-node-name
+ entry: Case in node name
+ texi_entry: Case in node name
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Case, not altering in `code'
+ origin_href: texinfo#index-Case_002c-not-altering-in-_0040code
+ entry: Case, not altering in address@hidden'
+ texi_entry: Case, not altering in @code{@@code}
+ element_href: texinfo#code
+ element_text: code
+key: Catching errors with Info formatting
+ origin_href: texinfo#index-Catching-errors-with-Info-formatting
+ entry: Catching errors with Info formatting
+ texi_entry: Catching errors with Info formatting
+ element_href: texinfo#Debugging-with-Info
+ element_text: Debugging with Info
+key: Catching errors with TeX formatting
+ origin_href: texinfo#index-Catching-errors-with-TeX-formatting
+ entry: Catching errors with TeX formatting
+ texi_entry: Catching errors with @TeX{} formatting
+ element_href: texinfo#Debugging-with-TeX
+ element_text: Debugging with TeX
+key: Catching mistakes
+ origin_href: texinfo#index-Catching-mistakes
+ entry: Catching mistakes
+ texi_entry: Catching mistakes
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Cedilla accent
+ origin_href: texinfo#index-Cedilla-accent
+ entry: Cedilla accent
+ texi_entry: Cedilla accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Centimeters
+ origin_href: texinfo#index-Centimeters
+ entry: Centimeters
+ texi_entry: Centimeters
+ element_href: texinfo#Images
+ element_text: Images
+key: Chapter structuring
+ origin_href: texinfo#index-Chapter-structuring
+ entry: Chapter structuring
+ texi_entry: Chapter structuring
+ element_href: texinfo#Structuring
+ element_text: Structuring
+key: Chapters, formatting one at a time
+ origin_href: texinfo#index-Chapters_002c-formatting-one-at-a-time
+ entry: Chapters, formatting one at a time
+ texi_entry: Chapters, formatting one at a time
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Characteristics, printed books or manuals
+ origin_href: texinfo#index-Characteristics_002c-printed-books-or-manuals
+ entry: Characteristics, printed books or manuals
+ texi_entry: Characteristics, printed books or manuals
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: Characters, invalid in node name
+ origin_href: texinfo#index-Characters_002c-invalid-in-node-name
+ entry: Characters, invalid in node name
+ texi_entry: Characters, invalid in node name
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Chassell, Robert J.
+ origin_href: texinfo#index-Chassell_002c-Robert-J_002e
+ entry: Chassell, Robert J.
+ texi_entry: Chassell, Robert J.
+ element_href: texinfo#History
+ element_text: History
+key: Check accent
+ origin_href: texinfo#index-Check-accent
+ entry: Check accent
+ texi_entry: Check accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Checking for badly referenced nodes
+ origin_href: texinfo#index-Checking-for-badly-referenced-nodes
+ entry: Checking for badly referenced nodes
+ texi_entry: Checking for badly referenced nodes
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: Checklist for bug reports
+ origin_href: texinfo#index-Checklist-for-bug-reports
+ entry: Checklist for bug reports
+ texi_entry: Checklist for bug reports
+ element_href: texinfo#Reporting-Bugs
+ element_text: Reporting Bugs
+key: Ciceros
+ origin_href: texinfo#index-Ciceros
+ entry: Ciceros
+ texi_entry: Ciceros
+ element_href: texinfo#Images
+ element_text: Images
+key: Circumflex accent
+ origin_href: texinfo#index-Circumflex-accent
+ entry: Circumflex accent
+ texi_entry: Circumflex accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: code, arg to kbdinputstyle
+ origin_href: texinfo#index-code_002c-arg-to-_0040kbdinputstyle
+ entry: `code, arg to @kbdinputstyle'
+ texi_entry: @address@hidden, arg to @@kbdinputstyle}}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: Colon in nodename
+ origin_href: texinfo#index-Colon-in-nodename
+ entry: Colon in nodename
+ texi_entry: Colon in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: colon, last in `INFOPATH'
+ origin_href: texinfo#index-colon_002c-last-in-INFOPATH
+ entry: colon, last in `INFOPATH'
+ texi_entry: colon, last in @env{INFOPATH}
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Column widths, defining for multitables
+ origin_href: texinfo#index-Column-widths_002c-defining-for-multitables
+ entry: Column widths, defining for multitables
+ texi_entry: Column widths, defining for multitables
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: Combining indices
+ origin_href: texinfo#index-Combining-indices
+ entry: Combining indices
+ texi_entry: Combining indices
+ element_href: texinfo#Combining-Indices
+ element_text: Combining Indices
+key: Comma in nodename
+ origin_href: texinfo#index-Comma-in-nodename
+ entry: Comma in nodename
+ texi_entry: Comma in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Comma, in macro arguments
+ origin_href: texinfo#index-Comma_002c-in-macro-arguments
+ entry: Comma, in macro arguments
+ texi_entry: Comma, in macro arguments
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Command aliases
+ origin_href: texinfo#index-Command-aliases
+ entry: Command aliases
+ texi_entry: Command aliases
+ element_href: texinfo#alias
+ element_text: alias
+key: Command definitions
+ origin_href: texinfo#index-Command-definitions
+ entry: Command definitions
+ texi_entry: Command definitions
+ element_href: texinfo#Sample-Function-Definition
+ element_text: Sample Function Definition
+key: Command names, indicating
+ origin_href: texinfo#index-Command-names_002c-indicating
+ entry: Command names, indicating
+ texi_entry: Command names, indicating
+ element_href: texinfo#command
+ element_text: command
+key: Command syntax
+ origin_href: texinfo#index-Command-syntax
+ entry: Command syntax
+ texi_entry: Command syntax
+ element_href: texinfo#Command-Syntax
+ element_text: Command Syntax
+key: Commands to insert special characters
+ origin_href: texinfo#index-Commands-to-insert-special-characters
+ entry: Commands to insert special characters
+ texi_entry: Commands to insert special characters
+ element_href: texinfo#Braces-Atsigns
+ element_text: Braces Atsigns
+key: Commands using raw HTML
+ origin_href: texinfo#index-Commands-using-raw-HTML
+ entry: Commands using raw HTML
+ texi_entry: Commands using raw HTML
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Commands using raw TeX
+ origin_href: texinfo#index-Commands-using-raw-TeX
+ entry: Commands using raw TeX
+ texi_entry: Commands using raw @TeX{}
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Commands, inserting them
+ origin_href: texinfo#index-Commands_002c-inserting-them
+ entry: Commands, inserting them
+ texi_entry: Commands, inserting them
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: Comments
+ origin_href: texinfo#index-Comments
+ entry: Comments
+ texi_entry: Comments
+ element_href: texinfo#Comments
+ element_text: Comments
+key: Compile command for formatting
+ origin_href: texinfo#index-Compile-command-for-formatting
+ entry: Compile command for formatting
+ texi_entry: Compile command for formatting
+ element_href: texinfo#Compile_002dCommand
+ element_text: Compile-Command
+key: Compressed files, reading
+ origin_href: texinfo#index-Compressed-files_002c-reading
+ entry: Compressed files, reading
+ texi_entry: Compressed files, reading
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: Conditionally visible text
+ origin_href: texinfo#index-Conditionally-visible-text
+ entry: Conditionally visible text
+ texi_entry: Conditionally visible text
+ element_href: texinfo#Conditionals
+ element_text: Conditionals
+key: Conditions for copying Texinfo
+ origin_href: texinfo#index-Conditions-for-copying-Texinfo
+ entry: Conditions for copying Texinfo
+ texi_entry: Conditions for copying Texinfo
+ element_href: texinfo#Copying-Conditions
+ element_text: Copying Conditions
+key: Contents, after title page
+ origin_href: texinfo#index-Contents_002c-after-title-page
+ entry: Contents, after title page
+ texi_entry: Contents, after title page
+ element_href: texinfo#Contents
+ element_text: Contents
+key: Contents, Table of
+ origin_href: texinfo#index-Contents_002c-Table-of
+ entry: Contents, Table of
+ texi_entry: Contents, Table of
+ element_href: texinfo#Contents
+ element_text: Contents
+key: Contents-like outline of file structure
+ origin_href: texinfo#index-Contents_002dlike-outline-of-file-structure
+ entry: Contents-like outline of file structure
+ texi_entry: Contents-like outline of file structure
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Conventions for writing definitions
+ origin_href: texinfo#index-Conventions-for-writing-definitions
+ entry: Conventions for writing definitions
+ texi_entry: Conventions for writing definitions
+ element_href: texinfo#Def-Cmd-Conventions
+ element_text: Def Cmd Conventions
+key: Conventions, syntactic
+ origin_href: texinfo#index-Conventions_002c-syntactic
+ entry: Conventions, syntactic
+ texi_entry: Conventions, syntactic
+ element_href: texinfo#Conventions
+ element_text: Conventions
+key: Conversion, from Docbook to Texinfo
+ origin_href: texinfo#index-Conversion_002c-from-Docbook-to-Texinfo
+ entry: Conversion, from Docbook to Texinfo
+ texi_entry: Conversion, from Docbook to Texinfo
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Copying conditions
+ origin_href: texinfo#index-Copying-conditions
+ entry: Copying conditions
+ texi_entry: Copying conditions
+ element_href: texinfo#Copying-Conditions
+ element_text: Copying Conditions
+key: Copying Permissions
+ origin_href: texinfo#index-Copying-Permissions
+ entry: Copying Permissions
+ texi_entry: Copying Permissions
+ element_href: texinfo#Document-Permissions
+ element_text: Document Permissions
+key: Copying software
+ origin_href: texinfo#index-Copying-software
+ entry: Copying software
+ texi_entry: Copying software
+ element_href: texinfo#Software-Copying-Permissions
+ element_text: Software Copying Permissions
+key: Copying text, including
+ origin_href: texinfo#index-Copying-text_002c-including
+ entry: Copying text, including
+ texi_entry: Copying text, including
+ element_href: texinfo#insertcopying
+ element_text: insertcopying
+key: Copyright owner for FSF works
+ origin_href: texinfo#index-Copyright-owner-for-FSF-works
+ entry: Copyright owner for FSF works
+ texi_entry: Copyright owner for FSF works
+ element_href: texinfo#copying
+ element_text: copying
+key: Copyright page
+ origin_href: texinfo#index-Copyright-page
+ entry: Copyright page
+ texi_entry: Copyright page
+ element_href: texinfo#Copyright
+ element_text: Copyright
+key: Copyright page, for plain text
+ origin_href: texinfo#index-Copyright-page_002c-for-plain-text
+ entry: Copyright page, for plain text
+ texi_entry: Copyright page, for plain text
+ element_href: texinfo#Titlepage-_0026-Copyright-Page
+ element_text: Titlepage & Copyright Page
+key: Copyright word, always in English
+ origin_href: texinfo#index-Copyright-word_002c-always-in-English
+ entry: Copyright word, always in English
+ texi_entry: Copyright word, always in English
+ element_href: texinfo#copying
+ element_text: copying
+key: Correcting mistakes
+ origin_href: texinfo#index-Correcting-mistakes
+ entry: Correcting mistakes
+ texi_entry: Correcting mistakes
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Create nodes, menus automatically
+ origin_href: texinfo#index-Create-nodes_002c-menus-automatically
+ entry: Create nodes, menus automatically
+ texi_entry: Create nodes, menus automatically
+ element_href: texinfo#Updating-Nodes-and-Menus
+ element_text: Updating Nodes and Menus
+key: Creating an Info file
+ origin_href: texinfo#index-Creating-an-Info-file
+ entry: Creating an Info file
+ texi_entry: Creating an Info file
+ element_href: texinfo#Creating-an-Info-File
+ element_text: Creating an Info File
+key: Creating an unsplit file
+ origin_href: texinfo#index-Creating-an-unsplit-file
+ entry: Creating an unsplit file
+ texi_entry: Creating an unsplit file
+ element_href: texinfo#Unsplit
+ element_text: Unsplit
+key: Creating index entries
+ origin_href: texinfo#index-Creating-index-entries
+ entry: Creating index entries
+ texi_entry: Creating index entries
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Creating pointers with `makeinfo'
+ origin_href: texinfo#index-Creating-pointers-with-makeinfo
+ entry: Creating pointers with `makeinfo'
+ texi_entry: Creating pointers with @code{makeinfo}
+ element_href: texinfo#makeinfo-Pointer-Creation
+ element_text: makeinfo Pointer Creation
+key: Cropmarks for printing
+ origin_href: texinfo#index-Cropmarks-for-printing
+ entry: Cropmarks for printing
+ texi_entry: Cropmarks for printing
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: Cross reference parts
+ origin_href: texinfo#index-Cross-reference-parts
+ entry: Cross reference parts
+ texi_entry: Cross reference parts
+ element_href: texinfo#Cross-Reference-Parts
+ element_text: Cross Reference Parts
+key: Cross references
+ origin_href: texinfo#index-Cross-references
+ entry: Cross references
+ texi_entry: Cross references
+ element_href: texinfo#Cross-References
+ element_text: Cross References
+key: Cross references using `inforef'
+ origin_href: texinfo#index-Cross-references-using-_0040inforef
+ entry: Cross references using address@hidden'
+ texi_entry: Cross references using @code{@@inforef}
+ element_href: texinfo#inforef
+ element_text: inforef
+key: Cross references using `pxref'
+ origin_href: texinfo#index-Cross-references-using-_0040pxref
+ entry: Cross references using address@hidden'
+ texi_entry: Cross references using @code{@@pxref}
+ element_href: texinfo#pxref
+ element_text: pxref
+key: Cross references using `ref'
+ origin_href: texinfo#index-Cross-references-using-_0040ref
+ entry: Cross references using address@hidden'
+ texi_entry: Cross references using @code{@@ref}
+ element_href: texinfo#ref
+ element_text: ref
+key: Cross references using `xref'
+ origin_href: texinfo#index-Cross-references-using-_0040xref
+ entry: Cross references using address@hidden'
+ texi_entry: Cross references using @code{@@xref}
+ element_href: texinfo#xref
+ element_text: xref
+key: Cross-reference targets, arbitrary
+ origin_href: texinfo#index-Cross_002dreference-targets_002c-arbitrary
+ entry: Cross-reference targets, arbitrary
+ texi_entry: Cross-reference targets, arbitrary
+ element_href: texinfo#anchor
+ element_text: anchor
+key: Custom page sizes
+ origin_href: texinfo#index-Custom-page-sizes
+ entry: Custom page sizes
+ texi_entry: Custom page sizes
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Customize Emacs package (Development/Docs/Texinfo)
+ origin_href:
texinfo#index-Customize-Emacs-package-_0028Development_002fDocs_002fTexinfo_0029
+ entry: Customize Emacs package (Development/Docs/Texinfo)
+ texi_entry: Customize Emacs package (@t{Development/Docs/Texinfo})
+ element_href: texinfo#Texinfo-Mode-Printing
+ element_text: Texinfo Mode Printing
+key: Customized highlighting
+ origin_href: texinfo#index-Customized-highlighting
+ entry: Customized highlighting
+ texi_entry: Customized highlighting
+ element_href: texinfo#definfoenclose
+ element_text: definfoenclose
+key: Customizing of TeX for Texinfo
+ origin_href: texinfo#index-Customizing-of-TeX-for-Texinfo
+ entry: Customizing of TeX for Texinfo
+ texi_entry: Customizing of @TeX{} for Texinfo
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: CVS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in Texinfo
+ origin_href:
texinfo#index-CVS-Id_003a-texinfo_002etxi_002cv-1_002e2-2003_002f02_002f24-18_003a17_003a06-pertusus-Exp-_0024_002c-in-Texinfo
+ entry: CVS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in
Texinfo
+ texi_entry: CVS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in
Texinfo
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Debugging the Texinfo structure
+ origin_href: texinfo#index-Debugging-the-Texinfo-structure
+ entry: Debugging the Texinfo structure
+ texi_entry: Debugging the Texinfo structure
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Debugging with Info formatting
+ origin_href: texinfo#index-Debugging-with-Info-formatting
+ entry: Debugging with Info formatting
+ texi_entry: Debugging with Info formatting
+ element_href: texinfo#Debugging-with-Info
+ element_text: Debugging with Info
+key: Debugging with TeX formatting
+ origin_href: texinfo#index-Debugging-with-TeX-formatting
+ entry: Debugging with TeX formatting
+ texi_entry: Debugging with @TeX{} formatting
+ element_href: texinfo#Debugging-with-TeX
+ element_text: Debugging with TeX
+key: Defining indexing entries
+ origin_href: texinfo#index-Defining-indexing-entries
+ entry: Defining indexing entries
+ texi_entry: Defining indexing entries
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Defining macros
+ origin_href: texinfo#index-Defining-macros
+ entry: Defining macros
+ texi_entry: Defining macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Defining new indices
+ origin_href: texinfo#index-Defining-new-indices
+ entry: Defining new indices
+ texi_entry: Defining new indices
+ element_href: texinfo#New-Indices
+ element_text: New Indices
+key: Defining new Texinfo commands
+ origin_href: texinfo#index-Defining-new-Texinfo-commands
+ entry: Defining new Texinfo commands
+ texi_entry: Defining new Texinfo commands
+ element_href: texinfo#Defining-New-Texinfo-Commands
+ element_text: Defining New Texinfo Commands
+key: Definition commands
+ origin_href: texinfo#index-Definition-commands
+ entry: Definition commands
+ texi_entry: Definition commands
+ element_href: texinfo#Definition-Commands
+ element_text: Definition Commands
+key: Definition conventions
+ origin_href: texinfo#index-Definition-conventions
+ entry: Definition conventions
+ texi_entry: Definition conventions
+ element_href: texinfo#Def-Cmd-Conventions
+ element_text: Def Cmd Conventions
+key: Definition template
+ origin_href: texinfo#index-Definition-template
+ entry: Definition template
+ texi_entry: Definition template
+ element_href: texinfo#Def-Cmd-Template
+ element_text: Def Cmd Template
+key: Definitions grouped together
+ origin_href: texinfo#index-Definitions-grouped-together
+ entry: Definitions grouped together
+ texi_entry: Definitions grouped together
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: Delimiter character, for verbatim
+ origin_href: texinfo#index-Delimiter-character_002c-for-verbatim
+ entry: Delimiter character, for verbatim
+ texi_entry: Delimiter character, for verbatim
+ element_href: texinfo#verb
+ element_text: verb
+key: Depth of text area
+ origin_href: texinfo#index-Depth-of-text-area
+ entry: Depth of text area
+ texi_entry: Depth of text area
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Description for menu, start
+ origin_href: texinfo#index-Description-for-menu_002c-start
+ entry: Description for menu, start
+ texi_entry: Description for menu, start
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: Description of document
+ origin_href: texinfo#index-Description-of-document
+ entry: Description of document
+ texi_entry: Description of document
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: Details of macro usage
+ origin_href: texinfo#index-Details-of-macro-usage
+ entry: Details of macro usage
+ texi_entry: Details of macro usage
+ element_href: texinfo#Macro-Details
+ element_text: Macro Details
+key: Dido^t points
+ origin_href: texinfo#index-Didot-points
+ entry: Dido^t points
+ texi_entry: address@hidden points
+ element_href: texinfo#Images
+ element_text: Images
+key: Different cross reference commands
+ origin_href: texinfo#index-Different-cross-reference-commands
+ entry: Different cross reference commands
+ texi_entry: Different cross reference commands
+ element_href: texinfo#Cross-Reference-Commands
+ element_text: Cross Reference Commands
+key: Dimension formatting
+ origin_href: texinfo#index-Dimension-formatting
+ entry: Dimension formatting
+ texi_entry: Dimension formatting
+ element_href: texinfo#dmn
+ element_text: dmn
+key: Dimensions and image sizes
+ origin_href: texinfo#index-Dimensions-and-image-sizes
+ entry: Dimensions and image sizes
+ texi_entry: Dimensions and image sizes
+ element_href: texinfo#Images
+ element_text: Images
+key: Dir files, compressed
+ origin_href: texinfo#index-Dir-files_002c-compressed
+ entry: Dir files, compressed
+ texi_entry: Dir files, compressed
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: Display formatting
+ origin_href: texinfo#index-Display-formatting
+ entry: Display formatting
+ texi_entry: Display formatting
+ element_href: texinfo#display
+ element_text: display
+key: Displayed equations
+ origin_href: texinfo#index-Displayed-equations
+ entry: Displayed equations
+ texi_entry: Displayed equations
+ element_href: texinfo#math
+ element_text: math
+key: distinct, arg to kbdinputstyle
+ origin_href: texinfo#index-distinct_002c-arg-to-_0040kbdinputstyle
+ entry: `distinct, arg to @kbdinputstyle'
+ texi_entry: @address@hidden, arg to @@kbdinputstyle}}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: Distorting images
+ origin_href: texinfo#index-Distorting-images
+ entry: Distorting images
+ texi_entry: Distorting images
+ element_href: texinfo#Images
+ element_text: Images
+key: Distribution
+ origin_href: texinfo#index-Distribution
+ entry: Distribution
+ texi_entry: Distribution
+ element_href: texinfo#Software-Copying-Permissions
+ element_text: Software Copying Permissions
+key: Docbook, converting to Texinfo
+ origin_href: texinfo#index-Docbook_002c-converting-to-Texinfo
+ entry: Docbook, converting to Texinfo
+ texi_entry: Docbook, converting to Texinfo
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Document description
+ origin_href: texinfo#index-Document-description
+ entry: Document description
+ texi_entry: Document description
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: Document input encoding
+ origin_href: texinfo#index-Document-input-encoding
+ entry: Document input encoding
+ texi_entry: Document input encoding
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: Document language, declaring
+ origin_href: texinfo#index-Document-language_002c-declaring
+ entry: Document language, declaring
+ texi_entry: Document language, declaring
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: Document Permissions
+ origin_href: texinfo#index-Document-Permissions
+ entry: Document Permissions
+ texi_entry: Document Permissions
+ element_href: texinfo#Document-Permissions
+ element_text: Document Permissions
+key: Dot accent
+ origin_href: texinfo#index-Dot-accent
+ entry: Dot accent
+ texi_entry: Dot accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Dotless i, j
+ origin_href: texinfo#index-Dotless-i_002c-j
+ entry: Dotless i, j
+ texi_entry: Dotless i, j
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Dots, inserting
+ origin_href: texinfo#index-Dots_002c-inserting
+ entry: Dots, inserting
+ texi_entry: Dots, inserting
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Dots, inserting
+ origin_href: texinfo#index-Dots_002c-inserting-1
+ entry: Dots, inserting
+ texi_entry: Dots, inserting
+ element_href: texinfo#dots
+ element_text: dots
+key: Double-colon menu entries
+ origin_href: texinfo#index-Double_002dcolon-menu-entries
+ entry: Double-colon menu entries
+ texi_entry: Double-colon menu entries
+ element_href: texinfo#Less-Cluttered-Menu-Entry
+ element_text: Less Cluttered Menu Entry
+key: Dumping a .fmt file
+ origin_href: texinfo#index-Dumping-a-_002efmt-file
+ entry: Dumping a .fmt file
+ texi_entry: Dumping a .fmt file
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: DVI file
+ origin_href: texinfo#index-DVI-file
+ entry: DVI file
+ texi_entry: DVI file
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Ellipsis, inserting
+ origin_href: texinfo#index-Ellipsis_002c-inserting
+ entry: Ellipsis, inserting
+ texi_entry: Ellipsis, inserting
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: em-dash
+ origin_href: texinfo#index-em_002ddash
+ entry: em-dash
+ texi_entry: em-dash
+ element_href: texinfo#minus
+ element_text: minus
+key: Emacs
+ origin_href: texinfo#index-Emacs
+ entry: Emacs
+ texi_entry: Emacs
+ element_href: texinfo#Texinfo-Mode
+ element_text: Texinfo Mode
+key: Emacs shell, format, print from
+ origin_href: texinfo#index-Emacs-shell_002c-format_002c-print-from
+ entry: Emacs shell, format, print from
+ texi_entry: Emacs shell, format, print from
+ element_href: texinfo#Within-Emacs
+ element_text: Within Emacs
+key: Emphasizing text
+ origin_href: texinfo#index-Emphasizing-text
+ entry: Emphasizing text
+ texi_entry: Emphasizing text
+ element_href: texinfo#Emphasis
+ element_text: Emphasis
+key: Emphasizing text, font for
+ origin_href: texinfo#index-Emphasizing-text_002c-font-for
+ entry: Emphasizing text, font for
+ texi_entry: Emphasizing text, font for
+ element_href: texinfo#emph-_0026-strong
+ element_text: emph & strong
+key: Encoding, declaring
+ origin_href: texinfo#index-Encoding_002c-declaring
+ entry: Encoding, declaring
+ texi_entry: Encoding, declaring
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: End of header line
+ origin_href: texinfo#index-End-of-header-line
+ entry: End of header line
+ texi_entry: End of header line
+ element_href: texinfo#End-of-Header
+ element_text: End of Header
+key: End titlepage starts headings
+ origin_href: texinfo#index-End-titlepage-starts-headings
+ entry: End titlepage starts headings
+ texi_entry: End titlepage starts headings
+ element_href: texinfo#end-titlepage
+ element_text: end titlepage
+key: Ending a Sentence
+ origin_href: texinfo#index-Ending-a-Sentence
+ entry: Ending a Sentence
+ texi_entry: Ending a Sentence
+ element_href: texinfo#Ending-a-Sentence
+ element_text: Ending a Sentence
+key: Ending a Texinfo file
+ origin_href: texinfo#index-Ending-a-Texinfo-file
+ entry: Ending a Texinfo file
+ texi_entry: Ending a Texinfo file
+ element_href: texinfo#Ending-a-File
+ element_text: Ending a File
+key: Entries for an index
+ origin_href: texinfo#index-Entries-for-an-index
+ entry: Entries for an index
+ texi_entry: Entries for an index
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Entries, making index
+ origin_href: texinfo#index-Entries_002c-making-index
+ entry: Entries, making index
+ texi_entry: Entries, making index
+ element_href: texinfo#Index-Entries
+ element_text: Index Entries
+key: Enumeration
+ origin_href: texinfo#index-Enumeration
+ entry: Enumeration
+ texi_entry: Enumeration
+ element_href: texinfo#enumerate
+ element_text: enumerate
+key: Environment indentation
+ origin_href: texinfo#index-Environment-indentation
+ entry: Environment indentation
+ texi_entry: Environment indentation
+ element_href: texinfo#exampleindent
+ element_text: exampleindent
+key: epsf.tex
+ origin_href: texinfo#index-epsf_002etex
+ entry: `epsf.tex'
+ texi_entry: @code{epsf.tex}
+ element_href: texinfo#Images
+ element_text: Images
+key: epsf.tex, installing
+ origin_href: texinfo#index-epsf_002etex_002c-installing
+ entry: `epsf.tex, installing'
+ texi_entry: @address@hidden, installing}}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Equations, displayed
+ origin_href: texinfo#index-Equations_002c-displayed
+ entry: Equations, displayed
+ texi_entry: Equations, displayed
+ element_href: texinfo#math
+ element_text: math
+key: Equivalence, indicating it
+ origin_href: texinfo#index-Equivalence_002c-indicating-it
+ entry: Equivalence, indicating it
+ texi_entry: Equivalence, indicating it
+ element_href: texinfo#Equivalence
+ element_text: Equivalence
+key: Error message, indicating it
+ origin_href: texinfo#index-Error-message_002c-indicating-it
+ entry: Error message, indicating it
+ texi_entry: Error message, indicating it
+ element_href: texinfo#Error-Glyph
+ element_text: Error Glyph
+key: Errors, parsing
+ origin_href: texinfo#index-Errors_002c-parsing
+ entry: Errors, parsing
+ texi_entry: Errors, parsing
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: Es-zet
+ origin_href: texinfo#index-Es_002dzet
+ entry: Es-zet
+ texi_entry: Es-zet
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: European A4 paper
+ origin_href: texinfo#index-European-A4-paper
+ entry: European A4 paper
+ texi_entry: European A4 paper
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: Evaluation glyph
+ origin_href: texinfo#index-Evaluation-glyph
+ entry: Evaluation glyph
+ texi_entry: Evaluation glyph
+ element_href: texinfo#result
+ element_text: result
+key: Example beginning of Texinfo file
+ origin_href: texinfo#index-Example-beginning-of-Texinfo-file
+ entry: Example beginning of Texinfo file
+ texi_entry: Example beginning of Texinfo file
+ element_href: texinfo#Sample-Beginning
+ element_text: Sample Beginning
+key: Example indentation
+ origin_href: texinfo#index-Example-indentation
+ entry: Example indentation
+ texi_entry: Example indentation
+ element_href: texinfo#exampleindent
+ element_text: exampleindent
+key: Example menu
+ origin_href: texinfo#index-Example-menu
+ entry: Example menu
+ texi_entry: Example menu
+ element_href: texinfo#Menu-Example
+ element_text: Menu Example
+key: example, arg to kbdinputstyle
+ origin_href: texinfo#index-example_002c-arg-to-_0040kbdinputstyle
+ entry: `example, arg to @kbdinputstyle'
+ texi_entry: @address@hidden, arg to @@kbdinputstyle}}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: Examples in smaller fonts
+ origin_href: texinfo#index-Examples-in-smaller-fonts
+ entry: Examples in smaller fonts
+ texi_entry: Examples in smaller fonts
+ element_href: texinfo#small
+ element_text: small
+key: Examples, formatting them
+ origin_href: texinfo#index-Examples_002c-formatting-them
+ entry: Examples, formatting them
+ texi_entry: Examples, formatting them
+ element_href: texinfo#example
+ element_text: example
+key: Examples, glyphs for
+ origin_href: texinfo#index-Examples_002c-glyphs-for
+ entry: Examples, glyphs for
+ texi_entry: Examples, glyphs for
+ element_href: texinfo#Glyphs
+ element_text: Glyphs
+key: Expanding macros
+ origin_href: texinfo#index-Expanding-macros
+ entry: Expanding macros
+ texi_entry: Expanding macros
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Expansion, indicating it
+ origin_href: texinfo#index-Expansion_002c-indicating-it
+ entry: Expansion, indicating it
+ texi_entry: Expansion, indicating it
+ element_href: texinfo#expansion
+ element_text: expansion
+key: Expressions in a program, indicating
+ origin_href: texinfo#index-Expressions-in-a-program_002c-indicating
+ entry: Expressions in a program, indicating
+ texi_entry: Expressions in a program, indicating
+ element_href: texinfo#code
+ element_text: code
+key: F.B.I., as acronym
+ origin_href: texinfo#index-F_002eB_002eI_002e_002c-as-acronym
+ entry: F.B.I., as acronym
+ texi_entry: F.B.I., as acronym
+ element_href: texinfo#acronym
+ element_text: acronym
+key: FDL, GNU Free Documentation License
+ origin_href: texinfo#index-FDL_002c-GNU-Free-Documentation-License
+ entry: FDL, GNU Free Documentation License
+ texi_entry: FDL, GNU Free Documentation License
+ element_href: texinfo#GNU-Free-Documentation-License
+ element_text: GNU Free Documentation License
+key: File beginning
+ origin_href: texinfo#index-File-beginning
+ entry: File beginning
+ texi_entry: File beginning
+ element_href: texinfo#Beginning-a-File
+ element_text: Beginning a File
+key: File ending
+ origin_href: texinfo#index-File-ending
+ entry: File ending
+ texi_entry: File ending
+ element_href: texinfo#Ending-a-File
+ element_text: Ending a File
+key: File name collision
+ origin_href: texinfo#index-File-name-collision
+ entry: File name collision
+ texi_entry: File name collision
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: File section structure, showing it
+ origin_href: texinfo#index-File-section-structure_002c-showing-it
+ entry: File section structure, showing it
+ texi_entry: File section structure, showing it
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Filling paragraphs
+ origin_href: texinfo#index-Filling-paragraphs
+ entry: Filling paragraphs
+ texi_entry: Filling paragraphs
+ element_href: texinfo#Refilling-Paragraphs
+ element_text: Refilling Paragraphs
+key: Final output
+ origin_href: texinfo#index-Final-output
+ entry: Final output
+ texi_entry: Final output
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Finding badly referenced nodes
+ origin_href: texinfo#index-Finding-badly-referenced-nodes
+ entry: Finding badly referenced nodes
+ texi_entry: Finding badly referenced nodes
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: Fine-tuning, and hyphenation
+ origin_href: texinfo#index-Fine_002dtuning_002c-and-hyphenation
+ entry: Fine-tuning, and hyphenation
+ texi_entry: Fine-tuning, and hyphenation
+ element_href: texinfo#g_t_002d-and-hyphenation
+ element_text: - and hyphenation
+key: First line of a Texinfo file
+ origin_href: texinfo#index-First-line-of-a-Texinfo-file
+ entry: First line of a Texinfo file
+ texi_entry: First line of a Texinfo file
+ element_href: texinfo#First-Line
+ element_text: First Line
+key: First node
+ origin_href: texinfo#index-First-node
+ entry: First node
+ texi_entry: First node
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: Floating accents, inserting
+ origin_href: texinfo#index-Floating-accents_002c-inserting
+ entry: Floating accents, inserting
+ texi_entry: Floating accents, inserting
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Flooding
+ origin_href: texinfo#index-Flooding
+ entry: Flooding
+ texi_entry: Flooding
+ element_href: texinfo#pxref
+ element_text: pxref
+key: Fonts for indices
+ origin_href: texinfo#index-Fonts-for-indices
+ entry: Fonts for indices
+ texi_entry: Fonts for indices
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: Fonts for printing, not for Info
+ origin_href: texinfo#index-Fonts-for-printing_002c-not-for-Info
+ entry: Fonts for printing, not for Info
+ texi_entry: Fonts for printing, not for Info
+ element_href: texinfo#Fonts
+ element_text: Fonts
+key: Footings
+ origin_href: texinfo#index-Footings
+ entry: Footings
+ texi_entry: Footings
+ element_href: texinfo#Headings
+ element_text: Headings
+key: Footnotes
+ origin_href: texinfo#index-Footnotes
+ entry: Footnotes
+ texi_entry: Footnotes
+ element_href: texinfo#Footnotes
+ element_text: Footnotes
+key: Format a dimension
+ origin_href: texinfo#index-Format-a-dimension
+ entry: Format a dimension
+ texi_entry: Format a dimension
+ element_href: texinfo#dmn
+ element_text: dmn
+key: Format and print hardcopy
+ origin_href: texinfo#index-Format-and-print-hardcopy
+ entry: Format and print hardcopy
+ texi_entry: Format and print hardcopy
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Format and print in Texinfo mode
+ origin_href: texinfo#index-Format-and-print-in-Texinfo-mode
+ entry: Format and print in Texinfo mode
+ texi_entry: Format and print in Texinfo mode
+ element_href: texinfo#Texinfo-Mode-Printing
+ element_text: Texinfo Mode Printing
+key: Format file, dumping
+ origin_href: texinfo#index-Format-file_002c-dumping
+ entry: Format file, dumping
+ texi_entry: Format file, dumping
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Format with the compile command
+ origin_href: texinfo#index-Format-with-the-compile-command
+ entry: Format with the compile command
+ texi_entry: Format with the compile command
+ element_href: texinfo#Compile_002dCommand
+ element_text: Compile-Command
+key: Format, print from Emacs shell
+ origin_href: texinfo#index-Format_002c-print-from-Emacs-shell
+ entry: Format, print from Emacs shell
+ texi_entry: Format, print from Emacs shell
+ element_href: texinfo#Within-Emacs
+ element_text: Within Emacs
+key: Formats for images
+ origin_href: texinfo#index-Formats-for-images
+ entry: Formats for images
+ texi_entry: Formats for images
+ element_href: texinfo#Images
+ element_text: Images
+key: Formatting a file for Info
+ origin_href: texinfo#index-Formatting-a-file-for-Info
+ entry: Formatting a file for Info
+ texi_entry: Formatting a file for Info
+ element_href: texinfo#Creating-an-Info-File
+ element_text: Creating an Info File
+key: Formatting commands
+ origin_href: texinfo#index-Formatting-commands
+ entry: Formatting commands
+ texi_entry: Formatting commands
+ element_href: texinfo#Formatting-Commands
+ element_text: Formatting Commands
+key: Formatting examples
+ origin_href: texinfo#index-Formatting-examples
+ entry: Formatting examples
+ texi_entry: Formatting examples
+ element_href: texinfo#example
+ element_text: example
+key: Formatting for Info
+ origin_href: texinfo#index-Formatting-for-Info
+ entry: Formatting for Info
+ texi_entry: Formatting for Info
+ element_href: texinfo#Info-Formatting
+ element_text: Info Formatting
+key: Formatting for printing
+ origin_href: texinfo#index-Formatting-for-printing
+ entry: Formatting for printing
+ texi_entry: Formatting for printing
+ element_href: texinfo#Printing
+ element_text: Printing
+key: Formatting headings and footings
+ origin_href: texinfo#index-Formatting-headings-and-footings
+ entry: Formatting headings and footings
+ texi_entry: Formatting headings and footings
+ element_href: texinfo#Headings
+ element_text: Headings
+key: Formatting requirements
+ origin_href: texinfo#index-Formatting-requirements
+ entry: Formatting requirements
+ texi_entry: Formatting requirements
+ element_href: texinfo#Requirements-Summary
+ element_text: Requirements Summary
+key: Formatting with `tex' and `texindex'
+ origin_href: texinfo#index-Formatting-with-tex-and-texindex
+ entry: Formatting with `tex' and `texindex'
+ texi_entry: Formatting with @code{tex} and @code{texindex}
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Formulas, mathematical
+ origin_href: texinfo#index-Formulas_002c-mathematical
+ entry: Formulas, mathematical
+ texi_entry: Formulas, mathematical
+ element_href: texinfo#math
+ element_text: math
+key: Fox, Brian
+ origin_href: texinfo#index-Fox_002c-Brian
+ entry: Fox, Brian
+ texi_entry: Fox, Brian
+ element_href: texinfo#History
+ element_text: History
+key: Frequently used commands, inserting
+ origin_href: texinfo#index-Frequently-used-commands_002c-inserting
+ entry: Frequently used commands, inserting
+ texi_entry: Frequently used commands, inserting
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: Full texts, GNU
+ origin_href: texinfo#index-Full-texts_002c-GNU
+ entry: Full texts, GNU
+ texi_entry: Full texts, GNU
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Function definitions
+ origin_href: texinfo#index-Function-definitions
+ entry: Function definitions
+ texi_entry: Function definitions
+ element_href: texinfo#Sample-Function-Definition
+ element_text: Sample Function Definition
+key: General syntactic conventions
+ origin_href: texinfo#index-General-syntactic-conventions
+ entry: General syntactic conventions
+ texi_entry: General syntactic conventions
+ element_href: texinfo#Conventions
+ element_text: Conventions
+key: Generating menus with indices
+ origin_href: texinfo#index-Generating-menus-with-indices
+ entry: Generating menus with indices
+ texi_entry: Generating menus with indices
+ element_href: texinfo#Printing-Indices-_0026-Menus
+ element_text: Printing Indices & Menus
+key: Generating plain text files
+ origin_href: texinfo#index-Generating-plain-text-files
+ entry: Generating plain text files
+ texi_entry: Generating plain text files
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: German S
+ origin_href: texinfo#index-German-S
+ entry: German S
+ texi_entry: German S
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: GIF, unsupported due to patents
+ origin_href: texinfo#index-GIF_002c-unsupported-due-to-patents
+ entry: GIF, unsupported due to patents
+ texi_entry: GIF, unsupported due to patents
+ element_href: texinfo#Images
+ element_text: Images
+key: Global Document Commands
+ origin_href: texinfo#index-Global-Document-Commands
+ entry: Global Document Commands
+ texi_entry: Global Document Commands
+ element_href: texinfo#Global-Document-Commands
+ element_text: Global Document Commands
+key: Globbing
+ origin_href: texinfo#index-Globbing
+ entry: Globbing
+ texi_entry: Globbing
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Glyphs
+ origin_href: texinfo#index-Glyphs
+ entry: Glyphs
+ texi_entry: Glyphs
+ element_href: texinfo#Glyphs
+ element_text: Glyphs
+key: GNU Emacs
+ origin_href: texinfo#index-GNU-Emacs
+ entry: GNU Emacs
+ texi_entry: GNU Emacs
+ element_href: texinfo#Texinfo-Mode
+ element_text: Texinfo Mode
+key: GNU Emacs shell, format, print from
+ origin_href: texinfo#index-GNU-Emacs-shell_002c-format_002c-print-from
+ entry: GNU Emacs shell, format, print from
+ texi_entry: GNU Emacs shell, format, print from
+ element_href: texinfo#Within-Emacs
+ element_text: Within Emacs
+key: GNU sample texts
+ origin_href: texinfo#index-GNU-sample-texts
+ entry: GNU sample texts
+ texi_entry: GNU sample texts
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Going to other Info files' nodes
+ origin_href: texinfo#index-Going-to-other-Info-files_0027-nodes
+ entry: Going to other Info files' nodes
+ texi_entry: Going to other Info files' nodes
+ element_href: texinfo#Other-Info-Files
+ element_text: Other Info Files
+key: Grave accent
+ origin_href: texinfo#index-Grave-accent
+ entry: Grave accent
+ texi_entry: Grave accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Group (hold text together vertically)
+ origin_href: texinfo#index-Group-_0028hold-text-together-vertically_0029
+ entry: Group (hold text together vertically)
+ texi_entry: Group (hold text together vertically)
+ element_href: texinfo#group
+ element_text: group
+key: Grouping two definitions together
+ origin_href: texinfo#index-Grouping-two-definitions-together
+ entry: Grouping two definitions together
+ texi_entry: Grouping two definitions together
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: Hardcopy, printing it
+ origin_href: texinfo#index-Hardcopy_002c-printing-it
+ entry: Hardcopy, printing it
+ texi_entry: Hardcopy, printing it
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Header for Texinfo files
+ origin_href: texinfo#index-Header-for-Texinfo-files
+ entry: Header for Texinfo files
+ texi_entry: Header for Texinfo files
+ element_href: texinfo#Texinfo-File-Header
+ element_text: Texinfo File Header
+key: Header of a Texinfo file
+ origin_href: texinfo#index-Header-of-a-Texinfo-file
+ entry: Header of a Texinfo file
+ texi_entry: Header of a Texinfo file
+ element_href: texinfo#First-Line
+ element_text: First Line
+key: Headings
+ origin_href: texinfo#index-Headings
+ entry: Headings
+ texi_entry: Headings
+ element_href: texinfo#Headings
+ element_text: Headings
+key: Headings, page, begin to appear
+ origin_href: texinfo#index-Headings_002c-page_002c-begin-to-appear
+ entry: Headings, page, begin to appear
+ texi_entry: Headings, page, begin to appear
+ element_href: texinfo#end-titlepage
+ element_text: end titlepage
+key: Height of images
+ origin_href: texinfo#index-Height-of-images
+ entry: Height of images
+ texi_entry: Height of images
+ element_href: texinfo#Images
+ element_text: Images
+key: Height of text area
+ origin_href: texinfo#index-Height-of-text-area
+ entry: Height of text area
+ texi_entry: Height of text area
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: help2man
+ origin_href: texinfo#index-help2man
+ entry: `help2man'
+ texi_entry: @code{help2man}
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Highlighting text
+ origin_href: texinfo#index-Highlighting-text
+ entry: Highlighting text
+ texi_entry: Highlighting text
+ element_href: texinfo#Indicating
+ element_text: Indicating
+key: Highlighting, customized
+ origin_href: texinfo#index-Highlighting_002c-customized
+ entry: Highlighting, customized
+ texi_entry: Highlighting, customized
+ element_href: texinfo#definfoenclose
+ element_text: definfoenclose
+key: Hints
+ origin_href: texinfo#index-Hints
+ entry: Hints
+ texi_entry: Hints
+ element_href: texinfo#Tips
+ element_text: Tips
+key: History of Texinfo
+ origin_href: texinfo#index-History-of-Texinfo
+ entry: History of Texinfo
+ texi_entry: History of Texinfo
+ element_href: texinfo#History
+ element_text: History
+key: Holding text together vertically
+ origin_href: texinfo#index-Holding-text-together-vertically
+ entry: Holding text together vertically
+ texi_entry: Holding text together vertically
+ element_href: texinfo#group
+ element_text: group
+key: HTML
+ origin_href: texinfo#index-HTML
+ entry: HTML
+ texi_entry: HTML
+ element_href: texinfo#makeinfo-html
+ element_text: makeinfo html
+key: HTML commands, using ordinary
+ origin_href: texinfo#index-HTML-commands_002c-using-ordinary
+ entry: HTML commands, using ordinary
+ texi_entry: HTML commands, using ordinary
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: http-equiv, and charset
+ origin_href: texinfo#index-http_002dequiv_002c-and-charset
+ entry: http-equiv, and charset
+ texi_entry: http-equiv, and charset
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: Hungarian umlaut accent
+ origin_href: texinfo#index-Hungarian-umlaut-accent
+ entry: Hungarian umlaut accent
+ texi_entry: Hungarian umlaut accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Hurricanes
+ origin_href: texinfo#index-Hurricanes
+ entry: Hurricanes
+ texi_entry: Hurricanes
+ element_href: texinfo#ref
+ element_text: ref
+key: hyphen
+ origin_href: texinfo#index-hyphen
+ entry: hyphen
+ texi_entry: hyphen
+ element_href: texinfo#minus
+ element_text: minus
+key: Hyphenation patterns, language-dependent
+ origin_href: texinfo#index-Hyphenation-patterns_002c-language_002ddependent
+ entry: Hyphenation patterns, language-dependent
+ texi_entry: Hyphenation patterns, language-dependent
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: Hyphenation, helping TeX do
+ origin_href: texinfo#index-Hyphenation_002c-helping-TeX-do
+ entry: Hyphenation, helping TeX do
+ texi_entry: Hyphenation, helping @TeX{} do
+ element_href: texinfo#g_t_002d-and-hyphenation
+ element_text: - and hyphenation
+key: Hyphenation, preventing
+ origin_href: texinfo#index-Hyphenation_002c-preventing
+ entry: Hyphenation, preventing
+ texi_entry: Hyphenation, preventing
+ element_href: texinfo#w
+ element_text: w
+key: i
+ origin_href: texinfo#index-i
+ entry: i
+ texi_entry: @dotless{i}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: If text conditionally visible
+ origin_href: texinfo#index-If-text-conditionally-visible
+ entry: If text conditionally visible
+ texi_entry: If text conditionally visible
+ element_href: texinfo#Conditionals
+ element_text: Conditionals
+key: Ignored before `setfilename'
+ origin_href: texinfo#index-Ignored-before-_0040setfilename
+ entry: Ignored before address@hidden'
+ texi_entry: Ignored before @code{@@setfilename}
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: Ignored text
+ origin_href: texinfo#index-Ignored-text
+ entry: Ignored text
+ texi_entry: Ignored text
+ element_href: texinfo#Comments
+ element_text: Comments
+key: Image formats
+ origin_href: texinfo#index-Image-formats
+ entry: Image formats
+ texi_entry: Image formats
+ element_href: texinfo#Images
+ element_text: Images
+key: Images, inserting
+ origin_href: texinfo#index-Images_002c-inserting
+ entry: Images, inserting
+ texi_entry: Images, inserting
+ element_href: texinfo#Images
+ element_text: Images
+key: Inches
+ origin_href: texinfo#index-Inches
+ entry: Inches
+ texi_entry: Inches
+ element_href: texinfo#Images
+ element_text: Images
+key: Include file requirements
+ origin_href: texinfo#index-Include-file-requirements
+ entry: Include file requirements
+ texi_entry: Include file requirements
+ element_href: texinfo#Include-File-Requirements
+ element_text: Include File Requirements
+key: Include file sample
+ origin_href: texinfo#index-Include-file-sample
+ entry: Include file sample
+ texi_entry: Include file sample
+ element_href: texinfo#Sample-Include-File
+ element_text: Sample Include File
+key: Include files
+ origin_href: texinfo#index-Include-files
+ entry: Include files
+ texi_entry: Include files
+ element_href: texinfo#Include-Files
+ element_text: Include Files
+key: Include files, and section levels
+ origin_href: texinfo#index-Include-files_002c-and-section-levels
+ entry: Include files, and section levels
+ texi_entry: Include files, and section levels
+ element_href: texinfo#Raise_002flower-sections
+ element_text: Raise/lower sections
+key: Including a file verbatim
+ origin_href: texinfo#index-Including-a-file-verbatim
+ entry: Including a file verbatim
+ texi_entry: Including a file verbatim
+ element_href: texinfo#verbatiminclude
+ element_text: verbatiminclude
+key: Including permissions text
+ origin_href: texinfo#index-Including-permissions-text
+ entry: Including permissions text
+ texi_entry: Including permissions text
+ element_href: texinfo#insertcopying
+ element_text: insertcopying
+key: Indentation undoing
+ origin_href: texinfo#index-Indentation-undoing
+ entry: Indentation undoing
+ texi_entry: Indentation undoing
+ element_href: texinfo#exdent
+ element_text: exdent
+key: Indenting environments
+ origin_href: texinfo#index-Indenting-environments
+ entry: Indenting environments
+ texi_entry: Indenting environments
+ element_href: texinfo#exampleindent
+ element_text: exampleindent
+key: Indenting paragraphs, control of
+ origin_href: texinfo#index-Indenting-paragraphs_002c-control-of
+ entry: Indenting paragraphs, control of
+ texi_entry: Indenting paragraphs, control of
+ element_href: texinfo#paragraphindent
+ element_text: paragraphindent
+key: Index entries
+ origin_href: texinfo#index-Index-entries
+ entry: Index entries
+ texi_entry: Index entries
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Index entries, making
+ origin_href: texinfo#index-Index-entries_002c-making
+ entry: Index entries, making
+ texi_entry: Index entries, making
+ element_href: texinfo#Index-Entries
+ element_text: Index Entries
+key: Index entry writing
+ origin_href: texinfo#index-Index-entry-writing
+ entry: Index entry writing
+ texi_entry: Index entry writing
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Index file names
+ origin_href: texinfo#index-Index-file-names
+ entry: Index file names
+ texi_entry: Index file names
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Index font types
+ origin_href: texinfo#index-Index-font-types
+ entry: Index font types
+ texi_entry: Index font types
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Indexing commands, predefined
+ origin_href: texinfo#index-Indexing-commands_002c-predefined
+ entry: Indexing commands, predefined
+ texi_entry: Indexing commands, predefined
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Indexing table entries automatically
+ origin_href: texinfo#index-Indexing-table-entries-automatically
+ entry: Indexing table entries automatically
+ texi_entry: Indexing table entries automatically
+ element_href: texinfo#ftable-vtable
+ element_text: ftable vtable
+key: Indicating commands, definitions, etc.
+ origin_href: texinfo#index-Indicating-commands_002c-definitions_002c-etc_002e
+ entry: Indicating commands, definitions, etc.
+ texi_entry: Indicating commands, definitions, etc.
+ element_href: texinfo#Indicating
+ element_text: Indicating
+key: Indicating evaluation
+ origin_href: texinfo#index-Indicating-evaluation
+ entry: Indicating evaluation
+ texi_entry: Indicating evaluation
+ element_href: texinfo#result
+ element_text: result
+key: Indices
+ origin_href: texinfo#index-Indices
+ entry: Indices
+ texi_entry: Indices
+ element_href: texinfo#Indices
+ element_text: Indices
+key: Indices, combining them
+ origin_href: texinfo#index-Indices_002c-combining-them
+ entry: Indices, combining them
+ texi_entry: Indices, combining them
+ element_href: texinfo#Combining-Indices
+ element_text: Combining Indices
+key: Indices, defining new
+ origin_href: texinfo#index-Indices_002c-defining-new
+ entry: Indices, defining new
+ texi_entry: Indices, defining new
+ element_href: texinfo#New-Indices
+ element_text: New Indices
+key: Indices, printing and menus
+ origin_href: texinfo#index-Indices_002c-printing-and-menus
+ entry: Indices, printing and menus
+ texi_entry: Indices, printing and menus
+ element_href: texinfo#Printing-Indices-_0026-Menus
+ element_text: Printing Indices & Menus
+key: Indices, sorting
+ origin_href: texinfo#index-Indices_002c-sorting
+ entry: Indices, sorting
+ texi_entry: Indices, sorting
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Indices, two letter names
+ origin_href: texinfo#index-Indices_002c-two-letter-names
+ entry: Indices, two letter names
+ texi_entry: Indices, two letter names
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: Indirect subfiles
+ origin_href: texinfo#index-Indirect-subfiles
+ entry: Indirect subfiles
+ texi_entry: Indirect subfiles
+ element_href: texinfo#Tag-and-Split-Files
+ element_text: Tag and Split Files
+key: Info batch formatting
+ origin_href: texinfo#index-Info-batch-formatting
+ entry: Info batch formatting
+ texi_entry: Info batch formatting
+ element_href: texinfo#Batch-Formatting
+ element_text: Batch Formatting
+key: Info file installation
+ origin_href: texinfo#index-Info-file-installation
+ entry: Info file installation
+ texi_entry: Info file installation
+ element_href: texinfo#Installing-an-Info-File
+ element_text: Installing an Info File
+key: Info file name, choosing
+ origin_href: texinfo#index-Info-file-name_002c-choosing
+ entry: Info file name, choosing
+ texi_entry: Info file name, choosing
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: Info file, listing a new
+ origin_href: texinfo#index-Info-file_002c-listing-a-new
+ entry: Info file, listing a new
+ texi_entry: Info file, listing a new
+ element_href: texinfo#New-Info-File
+ element_text: New Info File
+key: Info file, splitting manually
+ origin_href: texinfo#index-Info-file_002c-splitting-manually
+ entry: Info file, splitting manually
+ texi_entry: Info file, splitting manually
+ element_href: texinfo#Splitting
+ element_text: Splitting
+key: Info files
+ origin_href: texinfo#index-Info-files
+ entry: Info files
+ texi_entry: Info files
+ element_href: texinfo#Info-Files
+ element_text: Info Files
+key: Info formatting
+ origin_href: texinfo#index-Info-formatting
+ entry: Info formatting
+ texi_entry: Info formatting
+ element_href: texinfo#Info-Formatting
+ element_text: Info Formatting
+key: Info installed in another directory
+ origin_href: texinfo#index-Info-installed-in-another-directory
+ entry: Info installed in another directory
+ texi_entry: Info installed in another directory
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Info validating a large file
+ origin_href: texinfo#index-Info-validating-a-large-file
+ entry: Info validating a large file
+ texi_entry: Info validating a large file
+ element_href: texinfo#Using-Info_002dvalidate
+ element_text: Using Info-validate
+key: Info, creating an online file
+ origin_href: texinfo#index-Info_002c-creating-an-online-file
+ entry: Info, creating an online file
+ texi_entry: Info, creating an online file
+ element_href: texinfo#Creating-an-Info-File
+ element_text: Creating an Info File
+key: Info-directory-list
+ origin_href: texinfo#index-Info_002ddirectory_002dlist
+ entry: `Info-directory-list'
+ texi_entry: @code{Info-directory-list}
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Info; other files' nodes
+ origin_href: texinfo#index-Info_003b-other-files_0027-nodes
+ entry: Info; other files' nodes
+ texi_entry: Info; other files' nodes
+ element_href: texinfo#Other-Info-Files
+ element_text: Other Info Files
+key: INFOPATH
+ origin_href: texinfo#index-INFOPATH
+ entry: `INFOPATH'
+ texi_entry: @code{INFOPATH}
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Initialization file for TeX input
+ origin_href: texinfo#index-Initialization-file-for-TeX-input
+ entry: Initialization file for TeX input
+ texi_entry: Initialization file for @TeX{} input
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Input encoding, declaring
+ origin_href: texinfo#index-Input-encoding_002c-declaring
+ entry: Input encoding, declaring
+ texi_entry: Input encoding, declaring
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: Insert nodes, menus automatically
+ origin_href: texinfo#index-Insert-nodes_002c-menus-automatically
+ entry: Insert nodes, menus automatically
+ texi_entry: Insert nodes, menus automatically
+ element_href: texinfo#Updating-Nodes-and-Menus
+ element_text: Updating Nodes and Menus
+key: Inserting @, braces
+ origin_href: texinfo#index-Inserting-_0040_002c-braces
+ entry: Inserting @, braces
+ texi_entry: Inserting @@, braces
+ element_href: texinfo#Braces-Atsigns
+ element_text: Braces Atsigns
+key: Inserting accents
+ origin_href: texinfo#index-Inserting-accents
+ entry: Inserting accents
+ texi_entry: Inserting accents
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Inserting dots
+ origin_href: texinfo#index-Inserting-dots
+ entry: Inserting dots
+ texi_entry: Inserting dots
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Inserting dots
+ origin_href: texinfo#index-Inserting-dots-1
+ entry: Inserting dots
+ texi_entry: Inserting dots
+ element_href: texinfo#dots
+ element_text: dots
+key: Inserting ellipsis
+ origin_href: texinfo#index-Inserting-ellipsis
+ entry: Inserting ellipsis
+ texi_entry: Inserting ellipsis
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Inserting frequently used commands
+ origin_href: texinfo#index-Inserting-frequently-used-commands
+ entry: Inserting frequently used commands
+ texi_entry: Inserting frequently used commands
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: Inserting space
+ origin_href: texinfo#index-Inserting-space
+ entry: Inserting space
+ texi_entry: Inserting space
+ element_href: texinfo#Inserting-Space
+ element_text: Inserting Space
+key: Inserting special characters and symbols
+ origin_href: texinfo#index-Inserting-special-characters-and-symbols
+ entry: Inserting special characters and symbols
+ texi_entry: Inserting special characters and symbols
+ element_href: texinfo#Insertions
+ element_text: Insertions
+key: install-info
+ origin_href: texinfo#index-install_002dinfo
+ entry: `install-info'
+ texi_entry: @code{install-info}
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: Installing an Info file
+ origin_href: texinfo#index-Installing-an-Info-file
+ entry: Installing an Info file
+ texi_entry: Installing an Info file
+ element_href: texinfo#Installing-an-Info-File
+ element_text: Installing an Info File
+key: Installing Info in another directory
+ origin_href: texinfo#index-Installing-Info-in-another-directory
+ entry: Installing Info in another directory
+ texi_entry: Installing Info in another directory
+ element_href: texinfo#Other-Info-Directories
+ element_text: Other Info Directories
+key: Internationalization
+ origin_href: texinfo#index-Internationalization
+ entry: Internationalization
+ texi_entry: Internationalization
+ element_href: texinfo#Internationalization
+ element_text: Internationalization
+key: Introduction to Texinfo
+ origin_href: texinfo#index-Introduction-to-Texinfo
+ entry: Introduction to Texinfo
+ texi_entry: Introduction to Texinfo
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Introduction, as part of file
+ origin_href: texinfo#index-Introduction_002c-as-part-of-file
+ entry: Introduction, as part of file
+ texi_entry: Introduction, as part of file
+ element_href: texinfo#Software-Copying-Permissions
+ element_text: Software Copying Permissions
+key: Invalid characters in node names
+ origin_href: texinfo#index-Invalid-characters-in-node-names
+ entry: Invalid characters in node names
+ texi_entry: Invalid characters in node names
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Invoking macros
+ origin_href: texinfo#index-Invoking-macros
+ entry: Invoking macros
+ texi_entry: Invoking macros
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: ISO 639 codes
+ origin_href: texinfo#index-ISO-639-codes
+ entry: ISO 639 codes
+ texi_entry: ISO 639 codes
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: Itemization
+ origin_href: texinfo#index-Itemization
+ entry: Itemization
+ texi_entry: Itemization
+ element_href: texinfo#itemize
+ element_text: itemize
+key: j
+ origin_href: texinfo#index-j
+ entry: j
+ texi_entry: @dotless{j}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: JPG image format
+ origin_href: texinfo#index-JPG-image-format
+ entry: JPG image format
+ texi_entry: JPG image format
+ element_href: texinfo#Images
+ element_text: Images
+key: Keyboard input
+ origin_href: texinfo#index-Keyboard-input
+ entry: Keyboard input
+ texi_entry: Keyboard input
+ element_href: texinfo#kbd
+ element_text: kbd
+key: Keys, recommended names
+ origin_href: texinfo#index-Keys_002c-recommended-names
+ entry: Keys, recommended names
+ texi_entry: Keys, recommended names
+ element_href: texinfo#key
+ element_text: key
+key: Keywords, indicating
+ origin_href: texinfo#index-Keywords_002c-indicating
+ entry: Keywords, indicating
+ texi_entry: Keywords, indicating
+ element_href: texinfo#code
+ element_text: code
+key: Knuth, Donald
+ origin_href: texinfo#index-Knuth_002c-Donald
+ entry: Knuth, Donald
+ texi_entry: Knuth, Donald
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: l
+ origin_href: texinfo#index-l-1
+ entry: /l
+ texi_entry: @l{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: L
+ origin_href: texinfo#index-L-1
+ entry: /L
+ texi_entry: @L{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Language codes
+ origin_href: texinfo#index-Language-codes
+ entry: Language codes
+ texi_entry: Language codes
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: Language, declaring
+ origin_href: texinfo#index-Language_002c-declaring
+ entry: Language, declaring
+ texi_entry: Language, declaring
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: Larger or smaller pages
+ origin_href: texinfo#index-Larger-or-smaller-pages
+ entry: Larger or smaller pages
+ texi_entry: Larger or smaller pages
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: Legal paper, printing on
+ origin_href: texinfo#index-Legal-paper_002c-printing-on
+ entry: Legal paper, printing on
+ texi_entry: Legal paper, printing on
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Length of file names
+ origin_href: texinfo#index-Length-of-file-names
+ entry: Length of file names
+ texi_entry: Length of file names
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: Less cluttered menu entry
+ origin_href: texinfo#index-Less-cluttered-menu-entry
+ entry: Less cluttered menu entry
+ texi_entry: Less cluttered menu entry
+ element_href: texinfo#Less-Cluttered-Menu-Entry
+ element_text: Less Cluttered Menu Entry
+key: License agreement
+ origin_href: texinfo#index-License-agreement
+ entry: License agreement
+ texi_entry: License agreement
+ element_href: texinfo#Software-Copying-Permissions
+ element_text: Software Copying Permissions
+key: Line breaks
+ origin_href: texinfo#index-Line-breaks
+ entry: Line breaks
+ texi_entry: Line breaks
+ element_href: texinfo#Breaks
+ element_text: Breaks
+key: Line breaks
+ origin_href: texinfo#index-Line-breaks-1
+ entry: Line breaks
+ texi_entry: Line breaks
+ element_href: texinfo#Line-Breaks
+ element_text: Line Breaks
+key: Line breaks, preventing
+ origin_href: texinfo#index-Line-breaks_002c-preventing
+ entry: Line breaks, preventing
+ texi_entry: Line breaks, preventing
+ element_href: texinfo#w
+ element_text: w
+key: Line length, column widths as fraction of
+ origin_href: texinfo#index-Line-length_002c-column-widths-as-fraction-of
+ entry: Line length, column widths as fraction of
+ texi_entry: Line length, column widths as fraction of
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: Line spacing
+ origin_href: texinfo#index-Line-spacing
+ entry: Line spacing
+ texi_entry: Line spacing
+ element_href: texinfo#sp
+ element_text: sp
+key: Lisp example
+ origin_href: texinfo#index-Lisp-example
+ entry: Lisp example
+ texi_entry: Lisp example
+ element_href: texinfo#lisp
+ element_text: lisp
+key: Lisp examples in smaller fonts
+ origin_href: texinfo#index-Lisp-examples-in-smaller-fonts
+ entry: Lisp examples in smaller fonts
+ texi_entry: Lisp examples in smaller fonts
+ element_href: texinfo#small
+ element_text: small
+key: List of @-commands
+ origin_href: texinfo#index-List-of--_0040_002dcommands
+ entry: List of @-commands
+ texi_entry: List of @@-commands
+ element_href: texinfo#Command-List
+ element_text: Command List
+key: Listing a new Info file
+ origin_href: texinfo#index-Listing-a-new-Info-file
+ entry: Listing a new Info file
+ texi_entry: Listing a new Info file
+ element_href: texinfo#New-Info-File
+ element_text: New Info File
+key: Lists and tables, making
+ origin_href: texinfo#index-Lists-and-tables_002c-making
+ entry: Lists and tables, making
+ texi_entry: Lists and tables, making
+ element_href: texinfo#Lists-and-Tables
+ element_text: Lists and Tables
+key: Local variables
+ origin_href: texinfo#index-Local-variables
+ entry: Local variables
+ texi_entry: Local variables
+ element_href: texinfo#Compile_002dCommand
+ element_text: Compile-Command
+key: Location of menus
+ origin_href: texinfo#index-Location-of-menus
+ entry: Location of menus
+ texi_entry: Location of menus
+ element_href: texinfo#Menus-Need-Short-Nodes
+ element_text: Menus Need Short Nodes
+key: Looking for badly referenced nodes
+ origin_href: texinfo#index-Looking-for-badly-referenced-nodes
+ entry: Looking for badly referenced nodes
+ texi_entry: Looking for badly referenced nodes
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: lpr (DVI print command)
+ origin_href: texinfo#index-lpr-_0028DVI-print-command_0029
+ entry: `lpr (DVI print command)'
+ texi_entry: @code{lpr @r{(DVI print command)}}
+ element_href: texinfo#Print-with-lpr
+ element_text: Print with lpr
+key: lpr-d, replacements on MS-DOS/MS-Windows
+ origin_href:
texinfo#index-lpr_002dd_002c-replacements-on-MS_002dDOS_002fMS_002dWindows
+ entry: `lpr-d, replacements on MS-DOS/MS-Windows'
+ texi_entry: @address@hidden, replacements on MS-DOS/MS-Windows}}
+ element_href: texinfo#Print-with-lpr
+ element_text: Print with lpr
+key: Macro definitions
+ origin_href: texinfo#index-Macro-definitions
+ entry: Macro definitions
+ texi_entry: Macro definitions
+ element_href: texinfo#Sample-Function-Definition
+ element_text: Sample Function Definition
+key: Macro definitions
+ origin_href: texinfo#index-Macro-definitions-1
+ entry: Macro definitions
+ texi_entry: Macro definitions
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Macro details
+ origin_href: texinfo#index-Macro-details
+ entry: Macro details
+ texi_entry: Macro details
+ element_href: texinfo#Macro-Details
+ element_text: Macro Details
+key: Macro invocation
+ origin_href: texinfo#index-Macro-invocation
+ entry: Macro invocation
+ texi_entry: Macro invocation
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Macron accent
+ origin_href: texinfo#index-Macron-accent
+ entry: Macron accent
+ texi_entry: Macron accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Macros
+ origin_href: texinfo#index-Macros
+ entry: Macros
+ texi_entry: Macros
+ element_href: texinfo#Defining-New-Texinfo-Commands
+ element_text: Defining New Texinfo Commands
+key: Macros in definition commands
+ origin_href: texinfo#index-Macros-in-definition-commands
+ entry: Macros in definition commands
+ texi_entry: Macros in definition commands
+ element_href: texinfo#Def-Cmd-Template
+ element_text: Def Cmd Template
+key: Macros, undefining
+ origin_href: texinfo#index-Macros_002c-undefining
+ entry: Macros, undefining
+ texi_entry: Macros, undefining
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Magnified printing
+ origin_href: texinfo#index-Magnified-printing
+ entry: Magnified printing
+ texi_entry: Magnified printing
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: mailto link
+ origin_href: texinfo#index-mailto-link
+ entry: mailto link
+ texi_entry: mailto link
+ element_href: texinfo#email
+ element_text: email
+key: makeinfo
+ origin_href: texinfo#index-makeinfo
+ entry: `makeinfo'
+ texi_entry: @code{makeinfo}
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Making a printed manual
+ origin_href: texinfo#index-Making-a-printed-manual
+ entry: Making a printed manual
+ texi_entry: Making a printed manual
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Making a tag table automatically
+ origin_href: texinfo#index-Making-a-tag-table-automatically
+ entry: Making a tag table automatically
+ texi_entry: Making a tag table automatically
+ element_href: texinfo#Tag-and-Split-Files
+ element_text: Tag and Split Files
+key: Making a tag table manually
+ origin_href: texinfo#index-Making-a-tag-table-manually
+ entry: Making a tag table manually
+ texi_entry: Making a tag table manually
+ element_href: texinfo#Unsplit
+ element_text: Unsplit
+key: Making cross references
+ origin_href: texinfo#index-Making-cross-references
+ entry: Making cross references
+ texi_entry: Making cross references
+ element_href: texinfo#Cross-References
+ element_text: Cross References
+key: Making line and page breaks
+ origin_href: texinfo#index-Making-line-and-page-breaks
+ entry: Making line and page breaks
+ texi_entry: Making line and page breaks
+ element_href: texinfo#Breaks
+ element_text: Breaks
+key: Making lists and tables
+ origin_href: texinfo#index-Making-lists-and-tables
+ entry: Making lists and tables
+ texi_entry: Making lists and tables
+ element_href: texinfo#Lists-and-Tables
+ element_text: Lists and Tables
+key: Man page output, not supported
+ origin_href: texinfo#index-Man-page-output_002c-not-supported
+ entry: Man page output, not supported
+ texi_entry: Man page output, not supported
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Man page, reference to
+ origin_href: texinfo#index-Man-page_002c-reference-to
+ entry: Man page, reference to
+ texi_entry: Man page, reference to
+ element_href: texinfo#uref
+ element_text: uref
+key: Manual characteristics, printed
+ origin_href: texinfo#index-Manual-characteristics_002c-printed
+ entry: Manual characteristics, printed
+ texi_entry: Manual characteristics, printed
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: Margins on page, not controllable
+ origin_href: texinfo#index-Margins-on-page_002c-not-controllable
+ entry: Margins on page, not controllable
+ texi_entry: Margins on page, not controllable
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Marking text within a paragraph
+ origin_href: texinfo#index-Marking-text-within-a-paragraph
+ entry: Marking text within a paragraph
+ texi_entry: Marking text within a paragraph
+ element_href: texinfo#Marking-Text
+ element_text: Marking Text
+key: Marking words and phrases
+ origin_href: texinfo#index-Marking-words-and-phrases
+ entry: Marking words and phrases
+ texi_entry: Marking words and phrases
+ element_href: texinfo#Marking-Text
+ element_text: Marking Text
+key: Master menu
+ origin_href: texinfo#index-Master-menu
+ entry: Master menu
+ texi_entry: Master menu
+ element_href: texinfo#Master-Menu-Parts
+ element_text: Master Menu Parts
+key: Mathematical expressions
+ origin_href: texinfo#index-Mathematical-expressions
+ entry: Mathematical expressions
+ texi_entry: Mathematical expressions
+ element_href: texinfo#math
+ element_text: math
+key: Mathematical expressions
+ origin_href: texinfo#index-Mathematical-expressions-1
+ entry: Mathematical expressions
+ texi_entry: Mathematical expressions
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Menu description, start
+ origin_href: texinfo#index-Menu-description_002c-start
+ entry: Menu description, start
+ texi_entry: Menu description, start
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: Menu entries with two colons
+ origin_href: texinfo#index-Menu-entries-with-two-colons
+ entry: Menu entries with two colons
+ texi_entry: Menu entries with two colons
+ element_href: texinfo#Less-Cluttered-Menu-Entry
+ element_text: Less Cluttered Menu Entry
+key: Menu example
+ origin_href: texinfo#index-Menu-example
+ entry: Menu example
+ texi_entry: Menu example
+ element_href: texinfo#Menu-Example
+ element_text: Menu Example
+key: Menu location
+ origin_href: texinfo#index-Menu-location
+ entry: Menu location
+ texi_entry: Menu location
+ element_href: texinfo#Menus-Need-Short-Nodes
+ element_text: Menus Need Short Nodes
+key: Menu parts
+ origin_href: texinfo#index-Menu-parts
+ entry: Menu parts
+ texi_entry: Menu parts
+ element_href: texinfo#Menu-Parts
+ element_text: Menu Parts
+key: Menu writing
+ origin_href: texinfo#index-Menu-writing
+ entry: Menu writing
+ texi_entry: Menu writing
+ element_href: texinfo#Writing-a-Menu
+ element_text: Writing a Menu
+key: Menu, master
+ origin_href: texinfo#index-Menu_002c-master
+ entry: Menu, master
+ texi_entry: Menu, master
+ element_href: texinfo#Master-Menu-Parts
+ element_text: Master Menu Parts
+key: Menus
+ origin_href: texinfo#index-Menus
+ entry: Menus
+ texi_entry: Menus
+ element_href: texinfo#Menus
+ element_text: Menus
+key: Menus generated with indices
+ origin_href: texinfo#index-Menus-generated-with-indices
+ entry: Menus generated with indices
+ texi_entry: Menus generated with indices
+ element_href: texinfo#Printing-Indices-_0026-Menus
+ element_text: Printing Indices & Menus
+key: Menus, omitting
+ origin_href: texinfo#index-Menus_002c-omitting
+ entry: Menus, omitting
+ texi_entry: Menus, omitting
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: meta HTML tag, and charset
+ origin_href: texinfo#index-meta-HTML-tag_002c-and-charset
+ entry: meta HTML tag, and charset
+ texi_entry: meta HTML tag, and charset
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: META key
+ origin_href: texinfo#index-META-key
+ entry: META key
+ texi_entry: META key
+ element_href: texinfo#key
+ element_text: key
+key: Meta-syntactic chars for arguments
+ origin_href: texinfo#index-Meta_002dsyntactic-chars-for-arguments
+ entry: Meta-syntactic chars for arguments
+ texi_entry: Meta-syntactic chars for arguments
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: Millimeters
+ origin_href: texinfo#index-Millimeters
+ entry: Millimeters
+ texi_entry: Millimeters
+ element_href: texinfo#Images
+ element_text: Images
+key: Minimal requirements for formatting
+ origin_href: texinfo#index-Minimal-requirements-for-formatting
+ entry: Minimal requirements for formatting
+ texi_entry: Minimal requirements for formatting
+ element_href: texinfo#Requirements-Summary
+ element_text: Requirements Summary
+key: Minimal Texinfo file (requirements)
+ origin_href: texinfo#index-Minimal-Texinfo-file-_0028requirements_0029
+ entry: Minimal Texinfo file (requirements)
+ texi_entry: Minimal Texinfo file (requirements)
+ element_href: texinfo#Minimum
+ element_text: Minimum
+key: Mistakes, catching
+ origin_href: texinfo#index-Mistakes_002c-catching
+ entry: Mistakes, catching
+ texi_entry: Mistakes, catching
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Mode, using Texinfo
+ origin_href: texinfo#index-Mode_002c-using-Texinfo
+ entry: Mode, using Texinfo
+ texi_entry: Mode, using Texinfo
+ element_href: texinfo#Texinfo-Mode
+ element_text: Texinfo Mode
+key: Multiple spaces
+ origin_href: texinfo#index-Multiple-spaces
+ entry: Multiple spaces
+ texi_entry: Multiple spaces
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: Multitable column widths
+ origin_href: texinfo#index-Multitable-column-widths
+ entry: Multitable column widths
+ texi_entry: Multitable column widths
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: Multitable rows
+ origin_href: texinfo#index-Multitable-rows
+ entry: Multitable rows
+ texi_entry: Multitable rows
+ element_href: texinfo#Multitable-Rows
+ element_text: Multitable Rows
+key: Must have in Texinfo file
+ origin_href: texinfo#index-Must-have-in-Texinfo-file
+ entry: Must have in Texinfo file
+ texi_entry: Must have in Texinfo file
+ element_href: texinfo#Minimum
+ element_text: Minimum
+key: Mutually recursive macros
+ origin_href: texinfo#index-Mutually-recursive-macros
+ entry: Mutually recursive macros
+ texi_entry: Mutually recursive macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Names for indices
+ origin_href: texinfo#index-Names-for-indices
+ entry: Names for indices
+ texi_entry: Names for indices
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: Names of index files
+ origin_href: texinfo#index-Names-of-index-files
+ entry: Names of index files
+ texi_entry: Names of index files
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Names recommended for keys
+ origin_href: texinfo#index-Names-recommended-for-keys
+ entry: Names recommended for keys
+ texi_entry: Names recommended for keys
+ element_href: texinfo#key
+ element_text: key
+key: Naming a `Top' Node in references
+ origin_href: texinfo#index-Naming-a-_0060Top_0027-Node-in-references
+ entry: Naming a `Top' Node in references
+ texi_entry: Naming a `Top' Node in references
+ element_href: texinfo#Top-Node-Naming
+ element_text: Top Node Naming
+key: NASA, as acronym
+ origin_href: texinfo#index-NASA_002c-as-acronym
+ entry: NASA, as acronym
+ texi_entry: NASA, as acronym
+ element_href: texinfo#acronym
+ element_text: acronym
+key: Navigation links, omitting
+ origin_href: texinfo#index-Navigation-links_002c-omitting
+ entry: Navigation links, omitting
+ texi_entry: Navigation links, omitting
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Need space at page bottom
+ origin_href: texinfo#index-Need-space-at-page-bottom
+ entry: Need space at page bottom
+ texi_entry: Need space at page bottom
+ element_href: texinfo#need
+ element_text: need
+key: New index defining
+ origin_href: texinfo#index-New-index-defining
+ entry: New index defining
+ texi_entry: New index defining
+ element_href: texinfo#New-Indices
+ element_text: New Indices
+key: New Info file, listing it in `dir' file
+ origin_href: texinfo#index-New-Info-file_002c-listing-it-in-dir-file
+ entry: New Info file, listing it in `dir' file
+ texi_entry: New Info file, listing it in @file{dir} file
+ element_href: texinfo#New-Info-File
+ element_text: New Info File
+key: New Texinfo commands, defining
+ origin_href: texinfo#index-New-Texinfo-commands_002c-defining
+ entry: New Texinfo commands, defining
+ texi_entry: New Texinfo commands, defining
+ element_href: texinfo#Defining-New-Texinfo-Commands
+ element_text: Defining New Texinfo Commands
+key: Next node of Top node
+ origin_href: texinfo#index-Next-node-of-Top-node
+ entry: Next node of Top node
+ texi_entry: Next node of Top node
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: Node line requirements
+ origin_href: texinfo#index-Node-line-requirements
+ entry: Node line requirements
+ texi_entry: Node line requirements
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Node line writing
+ origin_href: texinfo#index-Node-line-writing
+ entry: Node line writing
+ texi_entry: Node line writing
+ element_href: texinfo#Writing-a-Node
+ element_text: Writing a Node
+key: Node name must be unique
+ origin_href: texinfo#index-Node-name-must-be-unique
+ entry: Node name must be unique
+ texi_entry: Node name must be unique
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Node name, should not contain @-commands
+ origin_href:
texinfo#index-Node-name_002c-should-not-contain-_0040_002dcommands
+ entry: Node name, should not contain @-commands
+ texi_entry: Node name, should not contain @@-commands
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Node names, choosing
+ origin_href: texinfo#index-Node-names_002c-choosing
+ entry: Node names, choosing
+ texi_entry: Node names, choosing
+ element_href: texinfo#Node-Names
+ element_text: Node Names
+key: Node separators, omitting
+ origin_href: texinfo#index-Node-separators_002c-omitting
+ entry: Node separators, omitting
+ texi_entry: Node separators, omitting
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Node, defined
+ origin_href: texinfo#index-Node_002c-defined
+ entry: Node, defined
+ texi_entry: Node, defined
+ element_href: texinfo#node
+ element_text: node
+key: Node, `Top'
+ origin_href: texinfo#index-Node_002c-_0060Top_0027
+ entry: Node, `Top'
+ texi_entry: Node, `Top'
+ element_href: texinfo#The-Top-Node
+ element_text: The Top Node
+key: Nodes for menus are short
+ origin_href: texinfo#index-Nodes-for-menus-are-short
+ entry: Nodes for menus are short
+ texi_entry: Nodes for menus are short
+ element_href: texinfo#Menus-Need-Short-Nodes
+ element_text: Menus Need Short Nodes
+key: Nodes in other Info files
+ origin_href: texinfo#index-Nodes-in-other-Info-files
+ entry: Nodes in other Info files
+ texi_entry: Nodes in other Info files
+ element_href: texinfo#Other-Info-Files
+ element_text: Other Info Files
+key: Nodes, catching mistakes
+ origin_href: texinfo#index-Nodes_002c-catching-mistakes
+ entry: Nodes, catching mistakes
+ texi_entry: Nodes, catching mistakes
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Nodes, checking for badly referenced
+ origin_href: texinfo#index-Nodes_002c-checking-for-badly-referenced
+ entry: Nodes, checking for badly referenced
+ texi_entry: Nodes, checking for badly referenced
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: Non-breakable space
+ origin_href: texinfo#index-Non_002dbreakable-space
+ entry: Non-breakable space
+ texi_entry: Non-breakable space
+ element_href: texinfo#w
+ element_text: w
+key: Not ending a sentence
+ origin_href: texinfo#index-Not-ending-a-sentence
+ entry: Not ending a sentence
+ texi_entry: Not ending a sentence
+ element_href: texinfo#Not-Ending-a-Sentence
+ element_text: Not Ending a Sentence
+key: o
+ origin_href: texinfo#index-o-1
+ entry: /o
+ texi_entry: @o{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: O
+ origin_href: texinfo#index-O-1
+ entry: /O
+ texi_entry: @O{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: O'Dea, Brendan
+ origin_href: texinfo#index-O_0027Dea_002c-Brendan
+ entry: O'Dea, Brendan
+ texi_entry: O'Dea, Brendan
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Obtaining TeX
+ origin_href: texinfo#index-Obtaining-TeX
+ entry: Obtaining TeX
+ texi_entry: Obtaining @TeX{}
+ element_href: texinfo#Obtaining-TeX
+ element_text: Obtaining TeX
+key: Occurrences, listing with `occur'
+ origin_href: texinfo#index-Occurrences_002c-listing-with-_0040occur
+ entry: Occurrences, listing with address@hidden'
+ texi_entry: Occurrences, listing with @code{@@occur}
+ element_href: texinfo#Using-occur
+ element_text: Using occur
+key: oe
+ origin_href: texinfo#index-oe-1
+ entry: oe
+ texi_entry: @oe{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: OE
+ origin_href: texinfo#index-OE-1
+ entry: OE
+ texi_entry: @OE{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Optional and repeated arguments
+ origin_href: texinfo#index-Optional-and-repeated-arguments
+ entry: Optional and repeated arguments
+ texi_entry: Optional and repeated arguments
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: Options for `makeinfo'
+ origin_href: texinfo#index-Options-for-makeinfo
+ entry: Options for `makeinfo'
+ texi_entry: Options for @code{makeinfo}
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Ordinary HTML commands, using
+ origin_href: texinfo#index-Ordinary-HTML-commands_002c-using
+ entry: Ordinary HTML commands, using
+ texi_entry: Ordinary HTML commands, using
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Ordinary TeX commands, using
+ origin_href: texinfo#index-Ordinary-TeX-commands_002c-using
+ entry: Ordinary TeX commands, using
+ texi_entry: Ordinary @TeX{} commands, using
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Other Info files' nodes
+ origin_href: texinfo#index-Other-Info-files_0027-nodes
+ entry: Other Info files' nodes
+ texi_entry: Other Info files' nodes
+ element_href: texinfo#Other-Info-Files
+ element_text: Other Info Files
+key: Outline of file structure, showing it
+ origin_href: texinfo#index-Outline-of-file-structure_002c-showing-it
+ entry: Outline of file structure, showing it
+ texi_entry: Outline of file structure, showing it
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Output file splitting
+ origin_href: texinfo#index-Output-file-splitting
+ entry: Output file splitting
+ texi_entry: Output file splitting
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Output formats, supporting more
+ origin_href: texinfo#index-Output-formats_002c-supporting-more
+ entry: Output formats, supporting more
+ texi_entry: Output formats, supporting more
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Overfull `hboxes'
+ origin_href: texinfo#index-Overfull-hboxes
+ entry: Overfull `hboxes'
+ texi_entry: Overfull @samp{hboxes}
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Overview of Texinfo
+ origin_href: texinfo#index-Overview-of-Texinfo
+ entry: Overview of Texinfo
+ texi_entry: Overview of Texinfo
+ element_href: texinfo#Overview
+ element_text: Overview
+key: Page breaks
+ origin_href: texinfo#index-Page-breaks
+ entry: Page breaks
+ texi_entry: Page breaks
+ element_href: texinfo#Breaks
+ element_text: Breaks
+key: Page breaks
+ origin_href: texinfo#index-Page-breaks-1
+ entry: Page breaks
+ texi_entry: Page breaks
+ element_href: texinfo#page
+ element_text: page
+key: Page delimiter in Texinfo mode
+ origin_href: texinfo#index-Page-delimiter-in-Texinfo-mode
+ entry: Page delimiter in Texinfo mode
+ texi_entry: Page delimiter in Texinfo mode
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Page headings
+ origin_href: texinfo#index-Page-headings
+ entry: Page headings
+ texi_entry: Page headings
+ element_href: texinfo#Headings
+ element_text: Headings
+key: Page numbering
+ origin_href: texinfo#index-Page-numbering
+ entry: Page numbering
+ texi_entry: Page numbering
+ element_href: texinfo#Headings
+ element_text: Headings
+key: Page sizes for books
+ origin_href: texinfo#index-Page-sizes-for-books
+ entry: Page sizes for books
+ texi_entry: Page sizes for books
+ element_href: texinfo#smallbook
+ element_text: smallbook
+key: Page sizes, customized
+ origin_href: texinfo#index-Page-sizes_002c-customized
+ entry: Page sizes, customized
+ texi_entry: Page sizes, customized
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: page-delimiter
+ origin_href: texinfo#index-page_002ddelimiter
+ entry: `page-delimiter'
+ texi_entry: @code{page-delimiter}
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Pages, starting odd
+ origin_href: texinfo#index-Pages_002c-starting-odd
+ entry: Pages, starting odd
+ texi_entry: Pages, starting odd
+ element_href: texinfo#setchapternewpage
+ element_text: setchapternewpage
+key: Paper size, A4
+ origin_href: texinfo#index-Paper-size_002c-A4
+ entry: Paper size, A4
+ texi_entry: Paper size, A4
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: Paragraph indentation control
+ origin_href: texinfo#index-Paragraph-indentation-control
+ entry: Paragraph indentation control
+ texi_entry: Paragraph indentation control
+ element_href: texinfo#paragraphindent
+ element_text: paragraphindent
+key: Paragraph, marking text within
+ origin_href: texinfo#index-Paragraph_002c-marking-text-within
+ entry: Paragraph, marking text within
+ texi_entry: Paragraph, marking text within
+ element_href: texinfo#Marking-Text
+ element_text: Marking Text
+key: Paragraphs, filling
+ origin_href: texinfo#index-Paragraphs_002c-filling
+ entry: Paragraphs, filling
+ texi_entry: Paragraphs, filling
+ element_href: texinfo#Refilling-Paragraphs
+ element_text: Refilling Paragraphs
+key: Parameters to macros
+ origin_href: texinfo#index-Parameters-to-macros
+ entry: Parameters to macros
+ texi_entry: Parameters to macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Parentheses in nodename
+ origin_href: texinfo#index-Parentheses-in-nodename
+ entry: Parentheses in nodename
+ texi_entry: Parentheses in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Parsing errors
+ origin_href: texinfo#index-Parsing-errors
+ entry: Parsing errors
+ texi_entry: Parsing errors
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: Part of file formatting and printing
+ origin_href: texinfo#index-Part-of-file-formatting-and-printing
+ entry: Part of file formatting and printing
+ texi_entry: Part of file formatting and printing
+ element_href: texinfo#Printing
+ element_text: Printing
+key: Parts of a cross reference
+ origin_href: texinfo#index-Parts-of-a-cross-reference
+ entry: Parts of a cross reference
+ texi_entry: Parts of a cross reference
+ element_href: texinfo#Cross-Reference-Parts
+ element_text: Cross Reference Parts
+key: Parts of a master menu
+ origin_href: texinfo#index-Parts-of-a-master-menu
+ entry: Parts of a master menu
+ texi_entry: Parts of a master menu
+ element_href: texinfo#Master-Menu-Parts
+ element_text: Master Menu Parts
+key: Parts of a menu
+ origin_href: texinfo#index-Parts-of-a-menu
+ entry: Parts of a menu
+ texi_entry: Parts of a menu
+ element_href: texinfo#Menu-Parts
+ element_text: Menu Parts
+key: Patches, contributing
+ origin_href: texinfo#index-Patches_002c-contributing
+ entry: Patches, contributing
+ texi_entry: Patches, contributing
+ element_href: texinfo#Reporting-Bugs
+ element_text: Reporting Bugs
+key: PDF output
+ origin_href: texinfo#index-PDF-output
+ entry: PDF output
+ texi_entry: PDF output
+ element_href: texinfo#PDF-Output
+ element_text: PDF Output
+key: pdfcolor.tex, installing
+ origin_href: texinfo#index-pdfcolor_002etex_002c-installing
+ entry: `pdfcolor.tex, installing'
+ texi_entry: @address@hidden, installing}}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: pdftex
+ origin_href: texinfo#index-pdftex
+ entry: `pdftex'
+ texi_entry: @code{pdftex}
+ element_href: texinfo#PDF-Output
+ element_text: PDF Output
+key: pdftex, and images
+ origin_href: texinfo#index-pdftex_002c-and-images
+ entry: `pdftex, and images'
+ texi_entry: @address@hidden, and images}}
+ element_href: texinfo#Images
+ element_text: Images
+key: Period in nodename
+ origin_href: texinfo#index-Period-in-nodename
+ entry: Period in nodename
+ texi_entry: Period in nodename
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Periods, inserting
+ origin_href: texinfo#index-Periods_002c-inserting
+ entry: Periods, inserting
+ texi_entry: Periods, inserting
+ element_href: texinfo#Not-Ending-a-Sentence
+ element_text: Not Ending a Sentence
+key: Permissions text, including
+ origin_href: texinfo#index-Permissions-text_002c-including
+ entry: Permissions text, including
+ texi_entry: Permissions text, including
+ element_href: texinfo#insertcopying
+ element_text: insertcopying
+key: Permissions, printed
+ origin_href: texinfo#index-Permissions_002c-printed
+ entry: Permissions, printed
+ texi_entry: Permissions, printed
+ element_href: texinfo#Copyright
+ element_text: Copyright
+key: Picas
+ origin_href: texinfo#index-Picas
+ entry: Picas
+ texi_entry: Picas
+ element_href: texinfo#Images
+ element_text: Images
+key: Pictures, inserting
+ origin_href: texinfo#index-Pictures_002c-inserting
+ entry: Pictures, inserting
+ texi_entry: Pictures, inserting
+ element_href: texinfo#Images
+ element_text: Images
+key: Pinard, Franc,ois
+ origin_href: texinfo#index-Pinard_002c-Francois
+ entry: Pinard, Franc,ois
+ texi_entry: Pinard, Fran@,{c}ois
+ element_href: texinfo#History
+ element_text: History
+key: plain TeX
+ origin_href: texinfo#index-plain-TeX
+ entry: plain TeX
+ texi_entry: plain @TeX{}
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: Plain text output
+ origin_href: texinfo#index-Plain-text-output
+ entry: Plain text output
+ texi_entry: Plain text output
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: PNG image format
+ origin_href: texinfo#index-PNG-image-format
+ entry: PNG image format
+ texi_entry: PNG image format
+ element_href: texinfo#Images
+ element_text: Images
+key: Point, indicating in a buffer
+ origin_href: texinfo#index-Point_002c-indicating-in-a-buffer
+ entry: Point, indicating in a buffer
+ texi_entry: Point, indicating in a buffer
+ element_href: texinfo#Point-Glyph
+ element_text: Point Glyph
+key: Pointer creation with `makeinfo'
+ origin_href: texinfo#index-Pointer-creation-with-makeinfo
+ entry: Pointer creation with `makeinfo'
+ texi_entry: Pointer creation with @code{makeinfo}
+ element_href: texinfo#makeinfo-Pointer-Creation
+ element_text: makeinfo Pointer Creation
+key: Pointer validation with `makeinfo'
+ origin_href: texinfo#index-Pointer-validation-with-makeinfo
+ entry: Pointer validation with `makeinfo'
+ texi_entry: Pointer validation with @code{makeinfo}
+ element_href: texinfo#Pointer-Validation
+ element_text: Pointer Validation
+key: Pointer validation, suppressing
+ origin_href: texinfo#index-Pointer-validation_002c-suppressing
+ entry: Pointer validation, suppressing
+ texi_entry: Pointer validation, suppressing
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Pointer validation, suppressing
+ origin_href: texinfo#index-Pointer-validation_002c-suppressing-1
+ entry: Pointer validation, suppressing
+ texi_entry: Pointer validation, suppressing
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: Points (dimension)
+ origin_href: texinfo#index-Points-_0028dimension_0029
+ entry: Points (dimension)
+ texi_entry: Points (dimension)
+ element_href: texinfo#Images
+ element_text: Images
+key: Predefined indexing commands
+ origin_href: texinfo#index-Predefined-indexing-commands
+ entry: Predefined indexing commands
+ texi_entry: Predefined indexing commands
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Predefined names for indices
+ origin_href: texinfo#index-Predefined-names-for-indices
+ entry: Predefined names for indices
+ texi_entry: Predefined names for indices
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: Preparing for TeX
+ origin_href: texinfo#index-Preparing-for-TeX
+ entry: Preparing for TeX
+ texi_entry: Preparing for @TeX{}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Preventing line and page breaks
+ origin_href: texinfo#index-Preventing-line-and-page-breaks
+ entry: Preventing line and page breaks
+ texi_entry: Preventing line and page breaks
+ element_href: texinfo#Breaks
+ element_text: Breaks
+key: Previous node of Top node
+ origin_href: texinfo#index-Previous-node-of-Top-node
+ entry: Previous node of Top node
+ texi_entry: Previous node of Top node
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: Print and format in Texinfo mode
+ origin_href: texinfo#index-Print-and-format-in-Texinfo-mode
+ entry: Print and format in Texinfo mode
+ texi_entry: Print and format in Texinfo mode
+ element_href: texinfo#Texinfo-Mode-Printing
+ element_text: Texinfo Mode Printing
+key: Print, format from Emacs shell
+ origin_href: texinfo#index-Print_002c-format-from-Emacs-shell
+ entry: Print, format from Emacs shell
+ texi_entry: Print, format from Emacs shell
+ element_href: texinfo#Within-Emacs
+ element_text: Within Emacs
+key: Printed book and manual characteristics
+ origin_href: texinfo#index-Printed-book-and-manual-characteristics
+ entry: Printed book and manual characteristics
+ texi_entry: Printed book and manual characteristics
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: Printed output, indicating it
+ origin_href: texinfo#index-Printed-output_002c-indicating-it
+ entry: Printed output, indicating it
+ texi_entry: Printed output, indicating it
+ element_href: texinfo#Print-Glyph
+ element_text: Print Glyph
+key: Printed permissions
+ origin_href: texinfo#index-Printed-permissions
+ entry: Printed permissions
+ texi_entry: Printed permissions
+ element_href: texinfo#Copyright
+ element_text: Copyright
+key: Printing a region or buffer
+ origin_href: texinfo#index-Printing-a-region-or-buffer
+ entry: Printing a region or buffer
+ texi_entry: Printing a region or buffer
+ element_href: texinfo#Printing
+ element_text: Printing
+key: Printing an index
+ origin_href: texinfo#index-Printing-an-index
+ entry: Printing an index
+ texi_entry: Printing an index
+ element_href: texinfo#Printing-Indices-_0026-Menus
+ element_text: Printing Indices & Menus
+key: Printing cropmarks
+ origin_href: texinfo#index-Printing-cropmarks
+ entry: Printing cropmarks
+ texi_entry: Printing cropmarks
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: Printing DVI files, on MS-DOS/MS-Windows
+ origin_href:
texinfo#index-Printing-DVI-files_002c-on-MS_002dDOS_002fMS_002dWindows
+ entry: Printing DVI files, on MS-DOS/MS-Windows
+ texi_entry: Printing DVI files, on MS-DOS/MS-Windows
+ element_href: texinfo#Print-with-lpr
+ element_text: Print with lpr
+key: Printing hardcopy
+ origin_href: texinfo#index-Printing-hardcopy
+ entry: Printing hardcopy
+ texi_entry: Printing hardcopy
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Problems, catching
+ origin_href: texinfo#index-Problems_002c-catching
+ entry: Problems, catching
+ texi_entry: Problems, catching
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Program names, indicating
+ origin_href: texinfo#index-Program-names_002c-indicating
+ entry: Program names, indicating
+ texi_entry: Program names, indicating
+ element_href: texinfo#command
+ element_text: command
+key: Prototype row, column widths defined by
+ origin_href: texinfo#index-Prototype-row_002c-column-widths-defined-by
+ entry: Prototype row, column widths defined by
+ texi_entry: Prototype row, column widths defined by
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: Quotations
+ origin_href: texinfo#index-Quotations
+ entry: Quotations
+ texi_entry: Quotations
+ element_href: texinfo#quotation
+ element_text: quotation
+key: ragged left
+ origin_href: texinfo#index-ragged-left
+ entry: ragged left
+ texi_entry: ragged left
+ element_href: texinfo#flushleft-_0026-flushright
+ element_text: flushleft & flushright
+key: ragged right
+ origin_href: texinfo#index-ragged-right
+ entry: ragged right
+ texi_entry: ragged right
+ element_href: texinfo#flushleft-_0026-flushright
+ element_text: flushleft & flushright
+key: Raising and lowering sections
+ origin_href: texinfo#index-Raising-and-lowering-sections
+ entry: Raising and lowering sections
+ texi_entry: Raising and lowering sections
+ element_href: texinfo#Raise_002flower-sections
+ element_text: Raise/lower sections
+key: Raw formatter commands
+ origin_href: texinfo#index-Raw-formatter-commands
+ entry: Raw formatter commands
+ texi_entry: Raw formatter commands
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: RCS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in Texinfo
+ origin_href:
texinfo#index-RCS-Id_003a-texinfo_002etxi_002cv-1_002e2-2003_002f02_002f24-18_003a17_003a06-pertusus-Exp-_0024_002c-in-Texinfo
+ entry: RCS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in
Texinfo
+ texi_entry: RCS Id: texinfo.txi,v 1.2 2003/02/24 18:17:06 pertusus Exp $, in
Texinfo
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Recommended names for keys
+ origin_href: texinfo#index-Recommended-names-for-keys
+ entry: Recommended names for keys
+ texi_entry: Recommended names for keys
+ element_href: texinfo#key
+ element_text: key
+key: Rectangle, black in hardcopy
+ origin_href: texinfo#index-Rectangle_002c-black-in-hardcopy
+ entry: Rectangle, black in hardcopy
+ texi_entry: Rectangle, black in hardcopy
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Recursion, mutual
+ origin_href: texinfo#index-Recursion_002c-mutual
+ entry: Recursion, mutual
+ texi_entry: Recursion, mutual
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Recursive macro invocations
+ origin_href: texinfo#index-Recursive-macro-invocations
+ entry: Recursive macro invocations
+ texi_entry: Recursive macro invocations
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Reference to @-commands
+ origin_href: texinfo#index-Reference-to-_0040_002dcommands
+ entry: Reference to @-commands
+ texi_entry: Reference to @@-commands
+ element_href: texinfo#Command-List
+ element_text: Command List
+key: References
+ origin_href: texinfo#index-References
+ entry: References
+ texi_entry: References
+ element_href: texinfo#Cross-References
+ element_text: Cross References
+key: References using `inforef'
+ origin_href: texinfo#index-References-using-_0040inforef
+ entry: References using address@hidden'
+ texi_entry: References using @code{@@inforef}
+ element_href: texinfo#inforef
+ element_text: inforef
+key: References using `pxref'
+ origin_href: texinfo#index-References-using-_0040pxref
+ entry: References using address@hidden'
+ texi_entry: References using @code{@@pxref}
+ element_href: texinfo#pxref
+ element_text: pxref
+key: References using `ref'
+ origin_href: texinfo#index-References-using-_0040ref
+ entry: References using address@hidden'
+ texi_entry: References using @code{@@ref}
+ element_href: texinfo#ref
+ element_text: ref
+key: References using `xref'
+ origin_href: texinfo#index-References-using-_0040xref
+ entry: References using address@hidden'
+ texi_entry: References using @code{@@xref}
+ element_href: texinfo#xref
+ element_text: xref
+key: Referring to other Info files
+ origin_href: texinfo#index-Referring-to-other-Info-files
+ entry: Referring to other Info files
+ texi_entry: Referring to other Info files
+ element_href: texinfo#Other-Info-Files
+ element_text: Other Info Files
+key: Refilling paragraphs
+ origin_href: texinfo#index-Refilling-paragraphs
+ entry: Refilling paragraphs
+ texi_entry: Refilling paragraphs
+ element_href: texinfo#Refilling-Paragraphs
+ element_text: Refilling Paragraphs
+key: Region formatting and printing
+ origin_href: texinfo#index-Region-formatting-and-printing
+ entry: Region formatting and printing
+ texi_entry: Region formatting and printing
+ element_href: texinfo#Printing
+ element_text: Printing
+key: Region printing in Texinfo mode
+ origin_href: texinfo#index-Region-printing-in-Texinfo-mode
+ entry: Region printing in Texinfo mode
+ texi_entry: Region printing in Texinfo mode
+ element_href: texinfo#Texinfo-Mode-Printing
+ element_text: Texinfo Mode Printing
+key: Reid, Brian
+ origin_href: texinfo#index-Reid_002c-Brian
+ entry: Reid, Brian
+ texi_entry: Reid, Brian
+ element_href: texinfo#History
+ element_text: History
+key: Repeated and optional arguments
+ origin_href: texinfo#index-Repeated-and-optional-arguments
+ entry: Repeated and optional arguments
+ texi_entry: Repeated and optional arguments
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: Reporting bugs
+ origin_href: texinfo#index-Reporting-bugs
+ entry: Reporting bugs
+ texi_entry: Reporting bugs
+ element_href: texinfo#Reporting-Bugs
+ element_text: Reporting Bugs
+key: Required in Texinfo file
+ origin_href: texinfo#index-Required-in-Texinfo-file
+ entry: Required in Texinfo file
+ texi_entry: Required in Texinfo file
+ element_href: texinfo#Minimum
+ element_text: Minimum
+key: Requirements for formatting
+ origin_href: texinfo#index-Requirements-for-formatting
+ entry: Requirements for formatting
+ texi_entry: Requirements for formatting
+ element_href: texinfo#Requirements-Summary
+ element_text: Requirements Summary
+key: Requirements for include files
+ origin_href: texinfo#index-Requirements-for-include-files
+ entry: Requirements for include files
+ texi_entry: Requirements for include files
+ element_href: texinfo#Include-File-Requirements
+ element_text: Include File Requirements
+key: Requirements for updating commands
+ origin_href: texinfo#index-Requirements-for-updating-commands
+ entry: Requirements for updating commands
+ texi_entry: Requirements for updating commands
+ element_href: texinfo#Updating-Requirements
+ element_text: Updating Requirements
+key: Reserved words, indicating
+ origin_href: texinfo#index-Reserved-words_002c-indicating
+ entry: Reserved words, indicating
+ texi_entry: Reserved words, indicating
+ element_href: texinfo#code
+ element_text: code
+key: Restrictions on node names
+ origin_href: texinfo#index-Restrictions-on-node-names
+ entry: Restrictions on node names
+ texi_entry: Restrictions on node names
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Result of an expression
+ origin_href: texinfo#index-Result-of-an-expression
+ entry: Result of an expression
+ texi_entry: Result of an expression
+ element_href: texinfo#result
+ element_text: result
+key: ridt.eps
+ origin_href: texinfo#index-ridt_002eeps
+ entry: `ridt.eps'
+ texi_entry: @code{ridt.eps}
+ element_href: texinfo#Images
+ element_text: Images
+key: Ring accent
+ origin_href: texinfo#index-Ring-accent
+ entry: Ring accent
+ texi_entry: Ring accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Rounded rectangles, around examples
+ origin_href: texinfo#index-Rounded-rectangles_002c-around-examples
+ entry: Rounded rectangles, around examples
+ texi_entry: Rounded rectangles, around examples
+ element_href: texinfo#cartouche
+ element_text: cartouche
+key: Rows, of a multitable
+ origin_href: texinfo#index-Rows_002c-of-a-multitable
+ entry: Rows, of a multitable
+ texi_entry: Rows, of a multitable
+ element_href: texinfo#Multitable-Rows
+ element_text: Multitable Rows
+key: Running an Info formatter
+ origin_href: texinfo#index-Running-an-Info-formatter
+ entry: Running an Info formatter
+ texi_entry: Running an Info formatter
+ element_href: texinfo#Info-Formatting
+ element_text: Info Formatting
+key: Running macros
+ origin_href: texinfo#index-Running-macros
+ entry: Running macros
+ texi_entry: Running macros
+ element_href: texinfo#Invoking-Macros
+ element_text: Invoking Macros
+key: Running `Info-validate'
+ origin_href: texinfo#index-Running-Info_002dvalidate
+ entry: Running `Info-validate'
+ texi_entry: Running @code{Info-validate}
+ element_href: texinfo#Using-Info_002dvalidate
+ element_text: Using Info-validate
+key: Running `makeinfo' in Emacs
+ origin_href: texinfo#index-Running-makeinfo-in-Emacs
+ entry: Running `makeinfo' in Emacs
+ texi_entry: Running @code{makeinfo} in Emacs
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: Sample function definition
+ origin_href: texinfo#index-Sample-function-definition
+ entry: Sample function definition
+ texi_entry: Sample function definition
+ element_href: texinfo#Sample-Function-Definition
+ element_text: Sample Function Definition
+key: Sample Texinfo file, no comments
+ origin_href: texinfo#index-Sample-Texinfo-file_002c-no-comments
+ entry: Sample Texinfo file, no comments
+ texi_entry: Sample Texinfo file, no comments
+ element_href: texinfo#Short-Sample-Texinfo-File
+ element_text: Short Sample Texinfo File
+key: Sample Texinfo file, with comments
+ origin_href: texinfo#index-Sample-Texinfo-file_002c-with-comments
+ entry: Sample Texinfo file, with comments
+ texi_entry: Sample Texinfo file, with comments
+ element_href: texinfo#Short-Sample
+ element_text: Short Sample
+key: Sample Texinfo files
+ origin_href: texinfo#index-Sample-Texinfo-files
+ entry: Sample Texinfo files
+ texi_entry: Sample Texinfo files
+ element_href: texinfo#Sample-Texinfo-Files
+ element_text: Sample Texinfo Files
+key: Sample texts, GNU
+ origin_href: texinfo#index-Sample-texts_002c-GNU
+ entry: Sample texts, GNU
+ texi_entry: Sample texts, GNU
+ element_href: texinfo#GNU-Sample-Texts
+ element_text: GNU Sample Texts
+key: Sample `include' file
+ origin_href: texinfo#index-Sample-_0040include-file
+ entry: Sample address@hidden' file
+ texi_entry: Sample @code{@@include} file
+ element_href: texinfo#Sample-Include-File
+ element_text: Sample Include File
+key: Scaled points
+ origin_href: texinfo#index-Scaled-points
+ entry: Scaled points
+ texi_entry: Scaled points
+ element_href: texinfo#Images
+ element_text: Images
+key: Schwab, Andreas
+ origin_href: texinfo#index-Schwab_002c-Andreas
+ entry: Schwab, Andreas
+ texi_entry: Schwab, Andreas
+ element_href: texinfo#History
+ element_text: History
+key: Scribe
+ origin_href: texinfo#index-Scribe
+ entry: Scribe
+ texi_entry: Scribe
+ element_href: texinfo#History
+ element_text: History
+key: Sea surges
+ origin_href: texinfo#index-Sea-surges
+ entry: Sea surges
+ texi_entry: Sea surges
+ element_href: texinfo#ref
+ element_text: ref
+key: Section structure of a file, showing it
+ origin_href: texinfo#index-Section-structure-of-a-file_002c-showing-it
+ entry: Section structure of a file, showing it
+ texi_entry: Section structure of a file, showing it
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Sections, raising and lowering
+ origin_href: texinfo#index-Sections_002c-raising-and-lowering
+ entry: Sections, raising and lowering
+ texi_entry: Sections, raising and lowering
+ element_href: texinfo#Raise_002flower-sections
+ element_text: Raise/lower sections
+key: Sentence ending punctuation
+ origin_href: texinfo#index-Sentence-ending-punctuation
+ entry: Sentence ending punctuation
+ texi_entry: Sentence ending punctuation
+ element_href: texinfo#Ending-a-Sentence
+ element_text: Ending a Sentence
+key: Sentence non-ending punctuation
+ origin_href: texinfo#index-Sentence-non_002dending-punctuation
+ entry: Sentence non-ending punctuation
+ texi_entry: Sentence non-ending punctuation
+ element_href: texinfo#Not-Ending-a-Sentence
+ element_text: Not Ending a Sentence
+key: SGML-tools output format
+ origin_href: texinfo#index-SGML_002dtools-output-format
+ entry: SGML-tools output format
+ texi_entry: SGML-tools output format
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Sharp S
+ origin_href: texinfo#index-Sharp-S
+ entry: Sharp S
+ texi_entry: Sharp S
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Shell formatting with `tex' and `texindex'
+ origin_href: texinfo#index-Shell-formatting-with-tex-and-texindex
+ entry: Shell formatting with `tex' and `texindex'
+ texi_entry: Shell formatting with @code{tex} and @code{texindex}
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Shell printing, on MS-DOS/MS-Windows
+ origin_href:
texinfo#index-Shell-printing_002c-on-MS_002dDOS_002fMS_002dWindows
+ entry: Shell printing, on MS-DOS/MS-Windows
+ texi_entry: Shell printing, on MS-DOS/MS-Windows
+ element_href: texinfo#Print-with-lpr
+ element_text: Print with lpr
+key: Shell, format, print from
+ origin_href: texinfo#index-Shell_002c-format_002c-print-from
+ entry: Shell, format, print from
+ texi_entry: Shell, format, print from
+ element_href: texinfo#Within-Emacs
+ element_text: Within Emacs
+key: Shell, running `makeinfo' in
+ origin_href: texinfo#index-Shell_002c-running-makeinfo-in
+ entry: Shell, running `makeinfo' in
+ texi_entry: Shell, running @code{makeinfo} in
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: Short nodes for menus
+ origin_href: texinfo#index-Short-nodes-for-menus
+ entry: Short nodes for menus
+ texi_entry: Short nodes for menus
+ element_href: texinfo#Menus-Need-Short-Nodes
+ element_text: Menus Need Short Nodes
+key: Short table of contents
+ origin_href: texinfo#index-Short-table-of-contents
+ entry: Short table of contents
+ texi_entry: Short table of contents
+ element_href: texinfo#Contents
+ element_text: Contents
+key: Showing the section structure of a file
+ origin_href: texinfo#index-Showing-the-section-structure-of-a-file
+ entry: Showing the section structure of a file
+ texi_entry: Showing the section structure of a file
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Showing the structure of a file
+ origin_href: texinfo#index-Showing-the-structure-of-a-file
+ entry: Showing the structure of a file
+ texi_entry: Showing the structure of a file
+ element_href: texinfo#Using-texinfo_002dshow_002dstructure
+ element_text: Using texinfo-show-structure
+key: shrubbery
+ origin_href: texinfo#index-shrubbery
+ entry: shrubbery
+ texi_entry: shrubbery
+ element_href: texinfo#ifset-ifclear
+ element_text: ifset ifclear
+key: Site-wide Texinfo configuration file
+ origin_href: texinfo#index-Site_002dwide-Texinfo-configuration-file
+ entry: Site-wide Texinfo configuration file
+ texi_entry: Site-wide Texinfo configuration file
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Size of printed book
+ origin_href: texinfo#index-Size-of-printed-book
+ entry: Size of printed book
+ texi_entry: Size of printed book
+ element_href: texinfo#smallbook
+ element_text: smallbook
+key: slanted typewriter font, for `kbd'
+ origin_href: texinfo#index-slanted-typewriter-font_002c-for-_0040kbd
+ entry: slanted typewriter font, for address@hidden'
+ texi_entry: slanted typewriter font, for @code{@@kbd}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: Small book size
+ origin_href: texinfo#index-Small-book-size
+ entry: Small book size
+ texi_entry: Small book size
+ element_href: texinfo#smallbook
+ element_text: smallbook
+key: Small caps font
+ origin_href: texinfo#index-Small-caps-font
+ entry: Small caps font
+ texi_entry: Small caps font
+ element_href: texinfo#Smallcaps
+ element_text: Smallcaps
+key: Small examples
+ origin_href: texinfo#index-Small-examples
+ entry: Small examples
+ texi_entry: Small examples
+ element_href: texinfo#small
+ element_text: small
+key: Software copying permissions
+ origin_href: texinfo#index-Software-copying-permissions
+ entry: Software copying permissions
+ texi_entry: Software copying permissions
+ element_href: texinfo#Software-Copying-Permissions
+ element_text: Software Copying Permissions
+key: Sorting indices
+ origin_href: texinfo#index-Sorting-indices
+ entry: Sorting indices
+ texi_entry: Sorting indices
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: Source file
+ origin_href: texinfo#index-Source-file
+ entry: Source file
+ texi_entry: Source file
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Space, inserting horizontal
+ origin_href: texinfo#index-Space_002c-inserting-horizontal
+ entry: Space, inserting horizontal
+ texi_entry: Space, inserting horizontal
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: Space, inserting vertical
+ origin_href: texinfo#index-Space_002c-inserting-vertical
+ entry: Space, inserting vertical
+ texi_entry: Space, inserting vertical
+ element_href: texinfo#sp
+ element_text: sp
+key: Spaces in macros
+ origin_href: texinfo#index-Spaces-in-macros
+ entry: Spaces in macros
+ texi_entry: Spaces in macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Spaces, in menus
+ origin_href: texinfo#index-Spaces_002c-in-menus
+ entry: Spaces, in menus
+ texi_entry: Spaces, in menus
+ element_href: texinfo#Writing-a-Menu
+ element_text: Writing a Menu
+key: Spacing, inserting
+ origin_href: texinfo#index-Spacing_002c-inserting
+ entry: Spacing, inserting
+ texi_entry: Spacing, inserting
+ element_href: texinfo#Inserting-Space
+ element_text: Inserting Space
+key: Special characters, commands to insert
+ origin_href: texinfo#index-Special-characters_002c-commands-to-insert
+ entry: Special characters, commands to insert
+ texi_entry: Special characters, commands to insert
+ element_href: texinfo#Braces-Atsigns
+ element_text: Braces Atsigns
+key: Special insertions
+ origin_href: texinfo#index-Special-insertions
+ entry: Special insertions
+ texi_entry: Special insertions
+ element_href: texinfo#Insertions
+ element_text: Insertions
+key: Special typesetting commands
+ origin_href: texinfo#index-Special-typesetting-commands
+ entry: Special typesetting commands
+ texi_entry: Special typesetting commands
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Specifying index entries
+ origin_href: texinfo#index-Specifying-index-entries
+ entry: Specifying index entries
+ texi_entry: Specifying index entries
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: Splitting an Info file manually
+ origin_href: texinfo#index-Splitting-an-Info-file-manually
+ entry: Splitting an Info file manually
+ texi_entry: Splitting an Info file manually
+ element_href: texinfo#Splitting
+ element_text: Splitting
+key: Splitting of output files
+ origin_href: texinfo#index-Splitting-of-output-files
+ entry: Splitting of output files
+ texi_entry: Splitting of output files
+ element_href: texinfo#makeinfo-options
+ element_text: makeinfo options
+key: ss
+ origin_href: texinfo#index-ss-1
+ entry: ss
+ texi_entry: @ss{}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Stallman, Richard M.
+ origin_href: texinfo#index-Stallman_002c-Richard-M_002e
+ entry: Stallman, Richard M.
+ texi_entry: Stallman, Richard M.
+ element_href: texinfo#History
+ element_text: History
+key: Start of header line
+ origin_href: texinfo#index-Start-of-header-line
+ entry: Start of header line
+ texi_entry: Start of header line
+ element_href: texinfo#Start-of-Header
+ element_text: Start of Header
+key: Starting chapters
+ origin_href: texinfo#index-Starting-chapters
+ entry: Starting chapters
+ texi_entry: Starting chapters
+ element_href: texinfo#setchapternewpage
+ element_text: setchapternewpage
+key: Structure of a file, showing it
+ origin_href: texinfo#index-Structure-of-a-file_002c-showing-it
+ entry: Structure of a file, showing it
+ texi_entry: Structure of a file, showing it
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Structure, catching mistakes in
+ origin_href: texinfo#index-Structure_002c-catching-mistakes-in
+ entry: Structure, catching mistakes in
+ texi_entry: Structure, catching mistakes in
+ element_href: texinfo#Catching-Mistakes
+ element_text: Catching Mistakes
+key: Structuring of chapters
+ origin_href: texinfo#index-Structuring-of-chapters
+ entry: Structuring of chapters
+ texi_entry: Structuring of chapters
+ element_href: texinfo#Structuring
+ element_text: Structuring
+key: Subsection-like commands
+ origin_href: texinfo#index-Subsection_002dlike-commands
+ entry: Subsection-like commands
+ texi_entry: Subsection-like commands
+ element_href: texinfo#unnumberedsubsec-appendixsubsec-subheading
+ element_text: unnumberedsubsec appendixsubsec subheading
+key: Subsub commands
+ origin_href: texinfo#index-Subsub-commands
+ entry: Subsub commands
+ texi_entry: Subsub commands
+ element_href: texinfo#subsubsection
+ element_text: subsubsection
+key: Suggestions for Texinfo, making
+ origin_href: texinfo#index-Suggestions-for-Texinfo_002c-making
+ entry: Suggestions for Texinfo, making
+ texi_entry: Suggestions for Texinfo, making
+ element_href: texinfo#Reporting-Bugs
+ element_text: Reporting Bugs
+key: Summary of document
+ origin_href: texinfo#index-Summary-of-document
+ entry: Summary of document
+ texi_entry: Summary of document
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: Syntactic conventions
+ origin_href: texinfo#index-Syntactic-conventions
+ entry: Syntactic conventions
+ texi_entry: Syntactic conventions
+ element_href: texinfo#Conventions
+ element_text: Conventions
+key: Syntactic tokens, indicating
+ origin_href: texinfo#index-Syntactic-tokens_002c-indicating
+ entry: Syntactic tokens, indicating
+ texi_entry: Syntactic tokens, indicating
+ element_href: texinfo#code
+ element_text: code
+key: Syntax, of @-commands
+ origin_href: texinfo#index-Syntax_002c-of-_0040_002dcommands
+ entry: Syntax, of @-commands
+ texi_entry: Syntax, of @@-commands
+ element_href: texinfo#Command-Syntax
+ element_text: Command Syntax
+key: Syntax, optional & repeated arguments
+ origin_href: texinfo#index-Syntax_002c-optional-_0026-repeated-arguments
+ entry: Syntax, optional & repeated arguments
+ texi_entry: Syntax, optional & repeated arguments
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: Table of contents
+ origin_href: texinfo#index-Table-of-contents
+ entry: Table of contents
+ texi_entry: Table of contents
+ element_href: texinfo#Contents
+ element_text: Contents
+key: Table of contents, after title page
+ origin_href: texinfo#index-Table-of-contents_002c-after-title-page
+ entry: Table of contents, after title page
+ texi_entry: Table of contents, after title page
+ element_href: texinfo#Contents
+ element_text: Contents
+key: Tables and lists, making
+ origin_href: texinfo#index-Tables-and-lists_002c-making
+ entry: Tables and lists, making
+ texi_entry: Tables and lists, making
+ element_href: texinfo#Lists-and-Tables
+ element_text: Lists and Tables
+key: Tables with indexes
+ origin_href: texinfo#index-Tables-with-indexes
+ entry: Tables with indexes
+ texi_entry: Tables with indexes
+ element_href: texinfo#ftable-vtable
+ element_text: ftable vtable
+key: Tables, making multi-column
+ origin_href: texinfo#index-Tables_002c-making-multi_002dcolumn
+ entry: Tables, making multi-column
+ texi_entry: Tables, making multi-column
+ element_href: texinfo#Multi_002dcolumn-Tables
+ element_text: Multi-column Tables
+key: Tables, making two-column
+ origin_href: texinfo#index-Tables_002c-making-two_002dcolumn
+ entry: Tables, making two-column
+ texi_entry: Tables, making two-column
+ element_href: texinfo#Two_002dcolumn-Tables
+ element_text: Two-column Tables
+key: Tabs; don't use!
+ origin_href: texinfo#index-Tabs_003b-don_0027t-use_0021
+ entry: Tabs; don't use!
+ texi_entry: Tabs; don't use!
+ element_href: texinfo#Conventions
+ element_text: Conventions
+key: Tag table, making automatically
+ origin_href: texinfo#index-Tag-table_002c-making-automatically
+ entry: Tag table, making automatically
+ texi_entry: Tag table, making automatically
+ element_href: texinfo#Tag-and-Split-Files
+ element_text: Tag and Split Files
+key: Tag table, making manually
+ origin_href: texinfo#index-Tag-table_002c-making-manually
+ entry: Tag table, making manually
+ texi_entry: Tag table, making manually
+ element_href: texinfo#Unsplit
+ element_text: Unsplit
+key: Targets for cross-references, arbitrary
+ origin_href: texinfo#index-Targets-for-cross_002dreferences_002c-arbitrary
+ entry: Targets for cross-references, arbitrary
+ texi_entry: Targets for cross-references, arbitrary
+ element_href: texinfo#anchor
+ element_text: anchor
+key: Template for a definition
+ origin_href: texinfo#index-Template-for-a-definition
+ entry: Template for a definition
+ texi_entry: Template for a definition
+ element_href: texinfo#Def-Cmd-Template
+ element_text: Def Cmd Template
+key: TeX commands, using ordinary
+ origin_href: texinfo#index-TeX-commands_002c-using-ordinary
+ entry: TeX commands, using ordinary
+ texi_entry: @TeX{} commands, using ordinary
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: TeX index sorting
+ origin_href: texinfo#index-TeX-index-sorting
+ entry: TeX index sorting
+ texi_entry: @TeX{} index sorting
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: TeX input initialization
+ origin_href: texinfo#index-TeX-input-initialization
+ entry: TeX input initialization
+ texi_entry: @TeX{} input initialization
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: TeX, how to obtain
+ origin_href: texinfo#index-TeX_002c-how-to-obtain
+ entry: TeX, how to obtain
+ texi_entry: @TeX{}, how to obtain
+ element_href: texinfo#Obtaining-TeX
+ element_text: Obtaining TeX
+key: texi2dvi
+ origin_href: texinfo#index-texi2dvi
+ entry: `texi2dvi'
+ texi_entry: @code{texi2dvi}
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: texi2dvi (shell script)
+ origin_href: texinfo#index-texi2dvi-_0028shell-script_0029
+ entry: `texi2dvi (shell script)'
+ texi_entry: @code{texi2dvi @r{(shell script)}}
+ element_href: texinfo#Format-with-texi2dvi
+ element_text: Format with texi2dvi
+key: texi2roff, unsupported software
+ origin_href: texinfo#index-texi2roff_002c-unsupported-software
+ entry: `texi2roff, unsupported software'
+ texi_entry: @address@hidden, unsupported software}}
+ element_href: texinfo#SEC_Foot
+ element_text: Footnotes
+key: texindex
+ origin_href: texinfo#index-texindex
+ entry: `texindex'
+ texi_entry: @code{texindex}
+ element_href: texinfo#Hardcopy
+ element_text: Hardcopy
+key: texindex
+ origin_href: texinfo#index-texindex-1
+ entry: `texindex'
+ texi_entry: @code{texindex}
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Texinfo commands, defining new
+ origin_href: texinfo#index-Texinfo-commands_002c-defining-new
+ entry: Texinfo commands, defining new
+ texi_entry: Texinfo commands, defining new
+ element_href: texinfo#Defining-New-Texinfo-Commands
+ element_text: Defining New Texinfo Commands
+key: Texinfo file beginning
+ origin_href: texinfo#index-Texinfo-file-beginning
+ entry: Texinfo file beginning
+ texi_entry: Texinfo file beginning
+ element_href: texinfo#Beginning-a-File
+ element_text: Beginning a File
+key: Texinfo file ending
+ origin_href: texinfo#index-Texinfo-file-ending
+ entry: Texinfo file ending
+ texi_entry: Texinfo file ending
+ element_href: texinfo#Ending-a-File
+ element_text: Ending a File
+key: Texinfo file header
+ origin_href: texinfo#index-Texinfo-file-header
+ entry: Texinfo file header
+ texi_entry: Texinfo file header
+ element_href: texinfo#Texinfo-File-Header
+ element_text: Texinfo File Header
+key: Texinfo file minimum
+ origin_href: texinfo#index-Texinfo-file-minimum
+ entry: Texinfo file minimum
+ texi_entry: Texinfo file minimum
+ element_href: texinfo#Minimum
+ element_text: Minimum
+key: Texinfo file section structure, showing it
+ origin_href: texinfo#index-Texinfo-file-section-structure_002c-showing-it
+ entry: Texinfo file section structure, showing it
+ texi_entry: Texinfo file section structure, showing it
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: Texinfo history
+ origin_href: texinfo#index-Texinfo-history
+ entry: Texinfo history
+ texi_entry: Texinfo history
+ element_href: texinfo#History
+ element_text: History
+key: Texinfo mode
+ origin_href: texinfo#index-Texinfo-mode
+ entry: Texinfo mode
+ texi_entry: Texinfo mode
+ element_href: texinfo#Texinfo-Mode
+ element_text: Texinfo Mode
+key: Texinfo overview
+ origin_href: texinfo#index-Texinfo-overview
+ entry: Texinfo overview
+ texi_entry: Texinfo overview
+ element_href: texinfo#Overview
+ element_text: Overview
+key: Texinfo printed book characteristics
+ origin_href: texinfo#index-Texinfo-printed-book-characteristics
+ entry: Texinfo printed book characteristics
+ texi_entry: Texinfo printed book characteristics
+ element_href: texinfo#Printed-Books
+ element_text: Printed Books
+key: Texinfo requires `setfilename'
+ origin_href: texinfo#index-Texinfo-requires-_0040setfilename
+ entry: Texinfo requires address@hidden'
+ texi_entry: Texinfo requires @code{@@setfilename}
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: Texinfo, introduction to
+ origin_href: texinfo#index-Texinfo_002c-introduction-to
+ entry: Texinfo, introduction to
+ texi_entry: Texinfo, introduction to
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: texinfo.cnf
+ origin_href: texinfo#index-texinfo_002ecnf
+ entry: `texinfo.cnf'
+ texi_entry: @code{texinfo.cnf}
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: texinfo.cnf installation
+ origin_href: texinfo#index-texinfo_002ecnf-installation
+ entry: `texinfo.cnf installation'
+ texi_entry: @code{texinfo.cnf @r{installation}}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: texinfo.tex, installing
+ origin_href: texinfo#index-texinfo_002etex_002c-installing
+ entry: `texinfo.tex, installing'
+ texi_entry: @address@hidden, installing}}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: TEXINPUTS
+ origin_href: texinfo#index-TEXINPUTS
+ entry: `TEXINPUTS'
+ texi_entry: @code{TEXINPUTS}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: TEXINPUTS
+ origin_href: texinfo#index-TEXINPUTS-1
+ entry: `TEXINPUTS'
+ texi_entry: @code{TEXINPUTS}
+ element_href: texinfo#Preparing-for-TeX
+ element_text: Preparing for TeX
+key: Text width and height
+ origin_href: texinfo#index-Text-width-and-height
+ entry: Text width and height
+ texi_entry: Text width and height
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Text, conditionally visible
+ origin_href: texinfo#index-Text_002c-conditionally-visible
+ entry: Text, conditionally visible
+ texi_entry: Text, conditionally visible
+ element_href: texinfo#Conditionals
+ element_text: Conditionals
+key: Text, marking up
+ origin_href: texinfo#index-Text_002c-marking-up
+ entry: Text, marking up
+ texi_entry: Text, marking up
+ element_href: texinfo#Marking-Text
+ element_text: Marking Text
+key: Thin space between number, dimension
+ origin_href: texinfo#index-Thin-space-between-number_002c-dimension
+ entry: Thin space between number, dimension
+ texi_entry: Thin space between number, dimension
+ element_href: texinfo#dmn
+ element_text: dmn
+key: Tie-after accent
+ origin_href: texinfo#index-Tie_002dafter-accent
+ entry: Tie-after accent
+ texi_entry: Tie-after accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Tied space
+ origin_href: texinfo#index-Tied-space
+ entry: Tied space
+ texi_entry: Tied space
+ element_href: texinfo#w
+ element_text: w
+key: Tilde accent
+ origin_href: texinfo#index-Tilde-accent
+ entry: Tilde accent
+ texi_entry: Tilde accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Tips
+ origin_href: texinfo#index-Tips
+ entry: Tips
+ texi_entry: Tips
+ element_href: texinfo#Tips
+ element_text: Tips
+key: Title page
+ origin_href: texinfo#index-Title-page
+ entry: Title page
+ texi_entry: Title page
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: Title page, bastard
+ origin_href: texinfo#index-Title-page_002c-bastard
+ entry: Title page, bastard
+ texi_entry: Title page, bastard
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: Title page, for plain text
+ origin_href: texinfo#index-Title-page_002c-for-plain-text
+ entry: Title page, for plain text
+ texi_entry: Title page, for plain text
+ element_href: texinfo#Titlepage-_0026-Copyright-Page
+ element_text: Titlepage & Copyright Page
+key: Titlepage end starts headings
+ origin_href: texinfo#index-Titlepage-end-starts-headings
+ entry: Titlepage end starts headings
+ texi_entry: Titlepage end starts headings
+ element_href: texinfo#end-titlepage
+ element_text: end titlepage
+key: Top node
+ origin_href: texinfo#index-Top-node
+ entry: Top node
+ texi_entry: Top node
+ element_href: texinfo#The-Top-Node
+ element_text: The Top Node
+key: Top node example
+ origin_href: texinfo#index-Top-node-example
+ entry: Top node example
+ texi_entry: Top node example
+ element_href: texinfo#Top-Node-Example
+ element_text: Top Node Example
+key: Top node is first
+ origin_href: texinfo#index-Top-node-is-first
+ entry: Top node is first
+ texi_entry: Top node is first
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: Tree structuring
+ origin_href: texinfo#index-Tree-structuring
+ entry: Tree structuring
+ texi_entry: Tree structuring
+ element_href: texinfo#Tree-Structuring
+ element_text: Tree Structuring
+key: Two letter names for indices
+ origin_href: texinfo#index-Two-letter-names-for-indices
+ entry: Two letter names for indices
+ texi_entry: Two letter names for indices
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: Two named items for `table'
+ origin_href: texinfo#index-Two-named-items-for-_0040table
+ entry: Two named items for address@hidden'
+ texi_entry: Two named items for @code{@@table}
+ element_href: texinfo#itemx
+ element_text: itemx
+key: Two part menu entry
+ origin_href: texinfo#index-Two-part-menu-entry
+ entry: Two part menu entry
+ texi_entry: Two part menu entry
+ element_href: texinfo#Less-Cluttered-Menu-Entry
+ element_text: Less Cluttered Menu Entry
+key: Two `First' Lines for `deffn'
+ origin_href: texinfo#index-Two-_0060First_0027-Lines-for-_0040deffn
+ entry: Two `First' Lines for address@hidden'
+ texi_entry: Two `First' Lines for @code{@@deffn}
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: Typesetting commands for dots, etc.
+ origin_href: texinfo#index-Typesetting-commands-for-dots_002c-etc_002e
+ entry: Typesetting commands for dots, etc.
+ texi_entry: Typesetting commands for dots, etc.
+ element_href: texinfo#Dots-Bullets
+ element_text: Dots Bullets
+key: Ugly black rectangles in hardcopy
+ origin_href: texinfo#index-Ugly-black-rectangles-in-hardcopy
+ entry: Ugly black rectangles in hardcopy
+ texi_entry: Ugly black rectangles in hardcopy
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: Umlaut accent
+ origin_href: texinfo#index-Umlaut-accent
+ entry: Umlaut accent
+ texi_entry: Umlaut accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Unbreakable space
+ origin_href: texinfo#index-Unbreakable-space
+ entry: Unbreakable space
+ texi_entry: Unbreakable space
+ element_href: texinfo#w
+ element_text: w
+key: Uncluttered menu entry
+ origin_href: texinfo#index-Uncluttered-menu-entry
+ entry: Uncluttered menu entry
+ texi_entry: Uncluttered menu entry
+ element_href: texinfo#Less-Cluttered-Menu-Entry
+ element_text: Less Cluttered Menu Entry
+key: Undefining macros
+ origin_href: texinfo#index-Undefining-macros
+ entry: Undefining macros
+ texi_entry: Undefining macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Underbar accent
+ origin_href: texinfo#index-Underbar-accent
+ entry: Underbar accent
+ texi_entry: Underbar accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Underdot accent
+ origin_href: texinfo#index-Underdot-accent
+ entry: Underdot accent
+ texi_entry: Underdot accent
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: Uniform resource locator, indicating
+ origin_href: texinfo#index-Uniform-resource-locator_002c-indicating
+ entry: Uniform resource locator, indicating
+ texi_entry: Uniform resource locator, indicating
+ element_href: texinfo#url
+ element_text: url
+key: Uniform resource locator, referring to
+ origin_href: texinfo#index-Uniform-resource-locator_002c-referring-to
+ entry: Uniform resource locator, referring to
+ texi_entry: Uniform resource locator, referring to
+ element_href: texinfo#uref
+ element_text: uref
+key: Unique nodename requirement
+ origin_href: texinfo#index-Unique-nodename-requirement
+ entry: Unique nodename requirement
+ texi_entry: Unique nodename requirement
+ element_href: texinfo#Node-Line-Requirements
+ element_text: Node Line Requirements
+key: Unprocessed text
+ origin_href: texinfo#index-Unprocessed-text
+ entry: Unprocessed text
+ texi_entry: Unprocessed text
+ element_href: texinfo#Comments
+ element_text: Comments
+key: Unsplit file creation
+ origin_href: texinfo#index-Unsplit-file-creation
+ entry: Unsplit file creation
+ texi_entry: Unsplit file creation
+ element_href: texinfo#Unsplit
+ element_text: Unsplit
+key: Up node of Top node
+ origin_href: texinfo#index-Up-node-of-Top-node
+ entry: Up node of Top node
+ texi_entry: Up node of Top node
+ element_href: texinfo#First-Node
+ element_text: First Node
+key: Updating nodes and menus
+ origin_href: texinfo#index-Updating-nodes-and-menus
+ entry: Updating nodes and menus
+ texi_entry: Updating nodes and menus
+ element_href: texinfo#Updating-Nodes-and-Menus
+ element_text: Updating Nodes and Menus
+key: Updating requirements
+ origin_href: texinfo#index-Updating-requirements
+ entry: Updating requirements
+ texi_entry: Updating requirements
+ element_href: texinfo#Updating-Requirements
+ element_text: Updating Requirements
+key: URI syntax for Info
+ origin_href: texinfo#index-URI-syntax-for-Info
+ entry: URI syntax for Info
+ texi_entry: URI syntax for Info
+ element_href: texinfo#Info-Files
+ element_text: Info Files
+key: URL, indicating
+ origin_href: texinfo#index-URL_002c-indicating
+ entry: URL, indicating
+ texi_entry: URL, indicating
+ element_href: texinfo#url
+ element_text: url
+key: URL, referring to
+ origin_href: texinfo#index-URL_002c-referring-to
+ entry: URL, referring to
+ texi_entry: URL, referring to
+ element_href: texinfo#uref
+ element_text: uref
+key: Usage tips
+ origin_href: texinfo#index-Usage-tips
+ entry: Usage tips
+ texi_entry: Usage tips
+ element_href: texinfo#Tips
+ element_text: Tips
+key: user input
+ origin_href: texinfo#index-user-input
+ entry: user input
+ texi_entry: user input
+ element_href: texinfo#kbd
+ element_text: kbd
+key: User options, marking
+ origin_href: texinfo#index-User-options_002c-marking
+ entry: User options, marking
+ texi_entry: User options, marking
+ element_href: texinfo#Variables-Commands
+ element_text: Variables Commands
+key: User-defined Texinfo commands
+ origin_href: texinfo#index-User_002ddefined-Texinfo-commands
+ entry: User-defined Texinfo commands
+ texi_entry: User-defined Texinfo commands
+ element_href: texinfo#Defining-New-Texinfo-Commands
+ element_text: Defining New Texinfo Commands
+key: Using Texinfo in general
+ origin_href: texinfo#index-Using-Texinfo-in-general
+ entry: Using Texinfo in general
+ texi_entry: Using Texinfo in general
+ element_href: texinfo#Using-Texinfo
+ element_text: Using Texinfo
+key: Validating a large file
+ origin_href: texinfo#index-Validating-a-large-file
+ entry: Validating a large file
+ texi_entry: Validating a large file
+ element_href: texinfo#Using-Info_002dvalidate
+ element_text: Using Info-validate
+key: Validation of pointers
+ origin_href: texinfo#index-Validation-of-pointers
+ entry: Validation of pointers
+ texi_entry: Validation of pointers
+ element_href: texinfo#Pointer-Validation
+ element_text: Pointer Validation
+key: Value of an expression, indicating
+ origin_href: texinfo#index-Value-of-an-expression_002c-indicating
+ entry: Value of an expression, indicating
+ texi_entry: Value of an expression, indicating
+ element_href: texinfo#result
+ element_text: result
+key: Verbatim environment
+ origin_href: texinfo#index-Verbatim-environment
+ entry: Verbatim environment
+ texi_entry: Verbatim environment
+ element_href: texinfo#verbatim
+ element_text: verbatim
+key: Verbatim in-line text
+ origin_href: texinfo#index-Verbatim-in_002dline-text
+ entry: Verbatim in-line text
+ texi_entry: Verbatim in-line text
+ element_href: texinfo#verb
+ element_text: verb
+key: Verbatim, include file
+ origin_href: texinfo#index-Verbatim_002c-include-file
+ entry: Verbatim, include file
+ texi_entry: Verbatim, include file
+ element_href: texinfo#verbatiminclude
+ element_text: verbatiminclude
+key: version number, finding
+ origin_href: texinfo#index-version-number_002c-finding
+ entry: version number, finding
+ texi_entry: version number, finding
+ element_href: texinfo#Invoking-install_002dinfo
+ element_text: Invoking install-info
+key: Vertically holding text together
+ origin_href: texinfo#index-Vertically-holding-text-together
+ entry: Vertically holding text together
+ texi_entry: Vertically holding text together
+ element_href: texinfo#group
+ element_text: group
+key: Visibility of conditional text
+ origin_href: texinfo#index-Visibility-of-conditional-text
+ entry: Visibility of conditional text
+ texi_entry: Visibility of conditional text
+ element_href: texinfo#Conditionals
+ element_text: Conditionals
+key: Weinberg, Zack
+ origin_href: texinfo#index-Weinberg_002c-Zack
+ entry: Weinberg, Zack
+ texi_entry: Weinberg, Zack
+ element_href: texinfo#History
+ element_text: History
+key: Weisshaus, Melissa
+ origin_href: texinfo#index-Weisshaus_002c-Melissa
+ entry: Weisshaus, Melissa
+ texi_entry: Weisshaus, Melissa
+ element_href: texinfo#History
+ element_text: History
+key: White space, excessive
+ origin_href: texinfo#index-White-space_002c-excessive
+ entry: White space, excessive
+ texi_entry: White space, excessive
+ element_href: texinfo#Breaks
+ element_text: Breaks
+key: Whitespace in macros
+ origin_href: texinfo#index-Whitespace-in-macros
+ entry: Whitespace in macros
+ texi_entry: Whitespace in macros
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: Whitespace, inserting
+ origin_href: texinfo#index-Whitespace_002c-inserting
+ entry: Whitespace, inserting
+ texi_entry: Whitespace, inserting
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: Width of images
+ origin_href: texinfo#index-Width-of-images
+ entry: Width of images
+ texi_entry: Width of images
+ element_href: texinfo#Images
+ element_text: Images
+key: Width of text area
+ origin_href: texinfo#index-Width-of-text-area
+ entry: Width of text area
+ texi_entry: Width of text area
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: Widths, defining multitable column
+ origin_href: texinfo#index-Widths_002c-defining-multitable-column
+ entry: Widths, defining multitable column
+ texi_entry: Widths, defining multitable column
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: Wildcards
+ origin_href: texinfo#index-Wildcards
+ entry: Wildcards
+ texi_entry: Wildcards
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: Words and phrases, marking them
+ origin_href: texinfo#index-Words-and-phrases_002c-marking-them
+ entry: Words and phrases, marking them
+ texi_entry: Words and phrases, marking them
+ element_href: texinfo#Marking-Text
+ element_text: Marking Text
+key: Writing a menu
+ origin_href: texinfo#index-Writing-a-menu
+ entry: Writing a menu
+ texi_entry: Writing a menu
+ element_href: texinfo#Writing-a-Menu
+ element_text: Writing a Menu
+key: Writing an `node' line
+ origin_href: texinfo#index-Writing-an-_0040node-line
+ entry: Writing an address@hidden' line
+ texi_entry: Writing an @code{@@node} line
+ element_href: texinfo#Writing-a-Node
+ element_text: Writing a Node
+key: Writing index entries
+ origin_href: texinfo#index-Writing-index-entries
+ entry: Writing index entries
+ texi_entry: Writing index entries
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: XPM image format
+ origin_href: texinfo#index-XPM-image-format
+ entry: `XPM image format'
+ texi_entry: @code{XPM image format}
+ element_href: texinfo#Images
+ element_text: Images
+key: Years, in copyright line
+ origin_href: texinfo#index-Years_002c-in-copyright-line
+ entry: Years, in copyright line
+ texi_entry: Years, in copyright line
+ element_href: texinfo#copying
+ element_text: copying
+key: Zaretskii, Eli
+ origin_href: texinfo#index-Zaretskii_002c-Eli
+ entry: Zaretskii, Eli
+ texi_entry: Zaretskii, Eli
+ element_href: texinfo#History
+ element_text: History
+key: Zuhn, David D.
+ origin_href: texinfo#index-Zuhn_002c-David-D_002e
+ entry: Zuhn, David D.
+ texi_entry: Zuhn, David D.
+ element_href: texinfo#History
+ element_text: History
Index: test/manuals/res_info/texinfo/texinfo_fn.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_fn.idx
diff -N test/manuals/res_info/texinfo/texinfo_fn.idx
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/manuals/res_info/texinfo/texinfo_fn.idx 14 Jul 2010 15:42:38
-0000 1.3
@@ -0,0 +1,1902 @@
+key: ! (end of sentence)
+ origin_href: texinfo#index-_0021-_0028end-of-sentence_0029
+ entry: `! (end of sentence)'
+ texi_entry: @code{! @r{(end of sentence)}}
+ element_href: texinfo#Ending-a-Sentence
+ element_text: Ending a Sentence
+key: " (umlaut accent)
+ origin_href: texinfo#index-_0022-_0028umlaut-accent_0029
+ entry: `" (umlaut accent)'
+ texi_entry: @code{" @r{(umlaut accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: ' (umlaut accent)
+ origin_href: texinfo#index-_0027-_0028umlaut-accent_0029
+ entry: `' (umlaut accent)'
+ texi_entry: @code{' @r{(umlaut accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: (newline)
+ origin_href: texinfo#index-_0028newline_0029
+ entry: `(newline)'
+ texi_entry: @code{(newline)}
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: (space)
+ origin_href: texinfo#index-_0028space_0029
+ entry: `(space)'
+ texi_entry: @code{(space)}
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: (tab)
+ origin_href: texinfo#index-_0028tab_0029
+ entry: `(tab)'
+ texi_entry: @code{(tab)}
+ element_href: texinfo#Multiple-Spaces
+ element_text: Multiple Spaces
+key: * (force line break)
+ origin_href: texinfo#index-_002a-_0028force-line-break_0029
+ entry: `* (force line break)'
+ texi_entry: @code{* @r{(force line break)}}
+ element_href: texinfo#Line-Breaks
+ element_text: Line Breaks
+key: , (cedilla accent)
+ origin_href: texinfo#index-_002c-_0028cedilla-accent_0029
+ entry: `, (cedilla accent)'
+ texi_entry: @code{, @r{(cedilla accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: - (discretionary hyphen)
+ origin_href: texinfo#index-_002d-_0028discretionary-hyphen_0029
+ entry: `- (discretionary hyphen)'
+ texi_entry: @code{- @r{(discretionary hyphen)}}
+ element_href: texinfo#g_t_002d-and-hyphenation
+ element_text: - and hyphenation
+key: . (end of sentence)
+ origin_href: texinfo#index-_002e--_0028end-of-sentence_0029
+ entry: `. (end of sentence)'
+ texi_entry: @code{. @r{(end of sentence)}}
+ element_href: texinfo#Ending-a-Sentence
+ element_text: Ending a Sentence
+key: <colon> (suppress widening)
+ origin_href: texinfo#index-_003ccolon_003e-_0028suppress-widening_0029
+ entry: `<colon> (suppress widening)'
+ texi_entry: @code{<colon> @r{(suppress widening)}}
+ element_href: texinfo#Not-Ending-a-Sentence
+ element_text: Not Ending a Sentence
+key: = (macron accent)
+ origin_href: texinfo#index-_003d-_0028macron-accent_0029
+ entry: `= (macron accent)'
+ texi_entry: @code{= @r{(macron accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: ? (end of sentence)
+ origin_href: texinfo#index-_003f-_0028end-of-sentence_0029
+ entry: `? (end of sentence)'
+ texi_entry: @code{? @r{(end of sentence)}}
+ element_href: texinfo#Ending-a-Sentence
+ element_text: Ending a Sentence
+key: @ (literal `')
+ origin_href: texinfo#index-_0040-_0028literal-_0040_0029
+ entry: `@ (literal `@')'
+ texi_entry: @code{@@ @r{(literal @samp{@@})}}
+ element_href: texinfo#Inserting-An-Atsign
+ element_text: Inserting An Atsign
+key: \ (literal \ in `math')
+ origin_href: texinfo#index-_005c-_0028literal-_005c-in-_0040math_0029
+ entry: `\ (literal \ in address@hidden')'
+ texi_entry: @code{\ @r{(literal \ in @code{@@math})}}
+ element_href: texinfo#math
+ element_text: math
+key: \emergencystretch
+ origin_href: texinfo#index-_005cemergencystretch
+ entry: `\emergencystretch'
+ texi_entry: @code{\emergencystretch}
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: \input (raw startup)
+ origin_href: texinfo#index-_005cinput-_0028raw-TeX-startup_0029
+ entry: `\input (raw TeX startup)'
+ texi_entry: @code{\input @r{(raw @TeX{} startup)}}
+ element_href: texinfo#Minimum
+ element_text: Minimum
+key: \mag (raw magnification)
+ origin_href: texinfo#index-_005cmag-_0028raw-TeX-magnification_0029
+ entry: `\mag (raw TeX magnification)'
+ texi_entry: @code{\mag @r{(raw @TeX{} magnification)}}
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: ^ (circumflex accent)
+ origin_href: texinfo#index-_005e-_0028circumflex-accent_0029
+ entry: `^ (circumflex accent)'
+ texi_entry: @code{^ @r{(circumflex accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: ` (grave accent)
+ origin_href: texinfo#index-_0060-_0028grave-accent_0029
+ entry: `` (grave accent)'
+ texi_entry: @code{` @r{(grave accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: { (literal `')
+ origin_href: texinfo#index-_007b-_0028literal-_007b_0029
+ entry: `{ (literal `{')'
+ texi_entry: @address@hidden @r{(literal @address@hidden)}}
+ element_href: texinfo#Inserting-Braces
+ element_text: Inserting Braces
+key: } (literal `')
+ origin_href: texinfo#index-_007d-_0028literal-_007d_0029
+ entry: `} (literal `}')'
+ texi_entry: @address@hidden @r{(literal @address@hidden)}}
+ element_href: texinfo#Inserting-Braces
+ element_text: Inserting Braces
+key: ~ (tilde accent)
+ origin_href: texinfo#index-_007e-_0028tilde-accent_0029
+ entry: `~ (tilde accent)'
+ texi_entry: @code{~ @r{(tilde accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: aa
+ origin_href: texinfo#index-aa
+ entry: `aa'
+ texi_entry: @code{aa}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: AA
+ origin_href: texinfo#index-AA
+ entry: `AA'
+ texi_entry: @code{AA}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: acronym
+ origin_href: texinfo#index-acronym
+ entry: `acronym'
+ texi_entry: @code{acronym}
+ element_href: texinfo#acronym
+ element_text: acronym
+key: ae
+ origin_href: texinfo#index-ae
+ entry: `ae'
+ texi_entry: @code{ae}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: AE
+ origin_href: texinfo#index-AE
+ entry: `AE'
+ texi_entry: @code{AE}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: afourlatex
+ origin_href: texinfo#index-afourlatex
+ entry: `afourlatex'
+ texi_entry: @code{afourlatex}
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: afourpaper
+ origin_href: texinfo#index-afourpaper
+ entry: `afourpaper'
+ texi_entry: @code{afourpaper}
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: afourwide
+ origin_href: texinfo#index-afourwide
+ entry: `afourwide'
+ texi_entry: @code{afourwide}
+ element_href: texinfo#A4-Paper
+ element_text: A4 Paper
+key: alias
+ origin_href: texinfo#index-alias
+ entry: `alias'
+ texi_entry: @code{alias}
+ element_href: texinfo#alias
+ element_text: alias
+key: anchor
+ origin_href: texinfo#index-anchor
+ entry: `anchor'
+ texi_entry: @code{anchor}
+ element_href: texinfo#anchor
+ element_text: anchor
+key: appendix
+ origin_href: texinfo#index-appendix
+ entry: `appendix'
+ texi_entry: @code{appendix}
+ element_href: texinfo#unnumbered-_0026-appendix
+ element_text: unnumbered & appendix
+key: appendixsec
+ origin_href: texinfo#index-appendixsec
+ entry: `appendixsec'
+ texi_entry: @code{appendixsec}
+ element_href: texinfo#unnumberedsec-appendixsec-heading
+ element_text: unnumberedsec appendixsec heading
+key: appendixsection
+ origin_href: texinfo#index-appendixsection
+ entry: `appendixsection'
+ texi_entry: @code{appendixsection}
+ element_href: texinfo#unnumberedsec-appendixsec-heading
+ element_text: unnumberedsec appendixsec heading
+key: appendixsubsec
+ origin_href: texinfo#index-appendixsubsec
+ entry: `appendixsubsec'
+ texi_entry: @code{appendixsubsec}
+ element_href: texinfo#unnumberedsubsec-appendixsubsec-subheading
+ element_text: unnumberedsubsec appendixsubsec subheading
+key: appendixsubsubsec
+ origin_href: texinfo#index-appendixsubsubsec
+ entry: `appendixsubsubsec'
+ texi_entry: @code{appendixsubsubsec}
+ element_href: texinfo#subsubsection
+ element_text: subsubsection
+key: apply
+ origin_href: texinfo#index-apply
+ entry: `apply'
+ texi_entry: @code{apply}
+ element_href: texinfo#Sample-Function-Definition
+ element_text: Sample Function Definition
+key: asis
+ origin_href: texinfo#index-asis
+ entry: `asis'
+ texi_entry: @code{asis}
+ element_href: texinfo#Using-the-_0040table-Command
+ element_text: Using the address@hidden' Command
+key: author
+ origin_href: texinfo#index-author
+ entry: `author'
+ texi_entry: @code{author}
+ element_href: texinfo#title-subtitle-author
+ element_text: title subtitle author
+key: b (bold font)
+ origin_href: texinfo#index-b-_0028bold-font_0029
+ entry: `b (bold font)'
+ texi_entry: @code{b @r{(bold font)}}
+ element_href: texinfo#Fonts
+ element_text: Fonts
+key: buffer-end
+ origin_href: texinfo#index-buffer_002dend
+ entry: `buffer-end'
+ texi_entry: @code{buffer-end}
+ element_href: texinfo#Def-Cmd-Template
+ element_text: Def Cmd Template
+key: bullet
+ origin_href: texinfo#index-bullet
+ entry: `bullet'
+ texi_entry: @code{bullet}
+ element_href: texinfo#bullet
+ element_text: bullet
+key: bye
+ origin_href: texinfo#index-bye
+ entry: `bye'
+ texi_entry: @code{bye}
+ element_href: texinfo#Ending-a-File
+ element_text: Ending a File
+key: bye
+ origin_href: texinfo#index-bye-1
+ entry: `bye'
+ texi_entry: @code{bye}
+ element_href: texinfo#File-End
+ element_text: File End
+key: c (comment)
+ origin_href: texinfo#index-c-_0028comment_0029
+ entry: `c (comment)'
+ texi_entry: @code{c @r{(comment)}}
+ element_href: texinfo#Comments
+ element_text: Comments
+key: cartouche
+ origin_href: texinfo#index-cartouche
+ entry: `cartouche'
+ texi_entry: @code{cartouche}
+ element_href: texinfo#cartouche
+ element_text: cartouche
+key: center
+ origin_href: texinfo#index-center
+ entry: `center'
+ texi_entry: @code{center}
+ element_href: texinfo#titlefont-center-sp
+ element_text: titlefont center sp
+key: centerchap
+ origin_href: texinfo#index-centerchap
+ entry: `centerchap'
+ texi_entry: @code{centerchap}
+ element_href: texinfo#chapter
+ element_text: chapter
+key: chapheading
+ origin_href: texinfo#index-chapheading
+ entry: `chapheading'
+ texi_entry: @code{chapheading}
+ element_href: texinfo#majorheading-_0026-chapheading
+ element_text: majorheading & chapheading
+key: chapter
+ origin_href: texinfo#index-chapter
+ entry: `chapter'
+ texi_entry: @code{chapter}
+ element_href: texinfo#chapter
+ element_text: chapter
+key: cindex
+ origin_href: texinfo#index-cindex
+ entry: `cindex'
+ texi_entry: @code{cindex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: cite
+ origin_href: texinfo#index-cite
+ entry: `cite'
+ texi_entry: @code{cite}
+ element_href: texinfo#cite
+ element_text: cite
+key: code
+ origin_href: texinfo#index-code
+ entry: `code'
+ texi_entry: @code{code}
+ element_href: texinfo#code
+ element_text: code
+key: columnfractions
+ origin_href: texinfo#index-columnfractions
+ entry: `columnfractions'
+ texi_entry: @code{columnfractions}
+ element_href: texinfo#Multitable-Column-Widths
+ element_text: Multitable Column Widths
+key: command
+ origin_href: texinfo#index-command
+ entry: `command'
+ texi_entry: @code{command}
+ element_href: texinfo#command
+ element_text: command
+key: comment
+ origin_href: texinfo#index-comment
+ entry: `comment'
+ texi_entry: @code{comment}
+ element_href: texinfo#Comments
+ element_text: Comments
+key: contents
+ origin_href: texinfo#index-contents
+ entry: `contents'
+ texi_entry: @code{contents}
+ element_href: texinfo#Contents
+ element_text: Contents
+key: copying
+ origin_href: texinfo#index-copying
+ entry: `copying'
+ texi_entry: @code{copying}
+ element_href: texinfo#copying
+ element_text: copying
+key: copyright
+ origin_href: texinfo#index-copyright
+ entry: `copyright'
+ texi_entry: @code{copyright}
+ element_href: texinfo#copying
+ element_text: copying
+key: copyright
+ origin_href: texinfo#index-copyright-1
+ entry: `copyright'
+ texi_entry: @code{copyright}
+ element_href: texinfo#copyright-symbol
+ element_text: copyright symbol
+key: cropmarks
+ origin_href: texinfo#index-cropmarks
+ entry: `cropmarks'
+ texi_entry: @code{cropmarks}
+ element_href: texinfo#Cropmarks-and-Magnification
+ element_text: Cropmarks and Magnification
+key: defcodeindex
+ origin_href: texinfo#index-defcodeindex
+ entry: `defcodeindex'
+ texi_entry: @code{defcodeindex}
+ element_href: texinfo#New-Indices
+ element_text: New Indices
+key: defcv
+ origin_href: texinfo#index-defcv
+ entry: `defcv'
+ texi_entry: @code{defcv}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: deffn
+ origin_href: texinfo#index-deffn
+ entry: `deffn'
+ texi_entry: @code{deffn}
+ element_href: texinfo#Functions-Commands
+ element_text: Functions Commands
+key: deffnx
+ origin_href: texinfo#index-deffnx
+ entry: `deffnx'
+ texi_entry: @code{deffnx}
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: defindex
+ origin_href: texinfo#index-defindex
+ entry: `defindex'
+ texi_entry: @code{defindex}
+ element_href: texinfo#New-Indices
+ element_text: New Indices
+key: definfoenclose
+ origin_href: texinfo#index-definfoenclose
+ entry: `definfoenclose'
+ texi_entry: @code{definfoenclose}
+ element_href: texinfo#definfoenclose
+ element_text: definfoenclose
+key: defivar
+ origin_href: texinfo#index-defivar
+ entry: `defivar'
+ texi_entry: @code{defivar}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: defmac
+ origin_href: texinfo#index-defmac
+ entry: `defmac'
+ texi_entry: @code{defmac}
+ element_href: texinfo#Functions-Commands
+ element_text: Functions Commands
+key: defmethod
+ origin_href: texinfo#index-defmethod
+ entry: `defmethod'
+ texi_entry: @code{defmethod}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: defmethod
+ origin_href: texinfo#index-defmethod-1
+ entry: `defmethod'
+ texi_entry: @code{defmethod}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: defop
+ origin_href: texinfo#index-defop
+ entry: `defop'
+ texi_entry: @code{defop}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: defopt
+ origin_href: texinfo#index-defopt
+ entry: `defopt'
+ texi_entry: @code{defopt}
+ element_href: texinfo#Variables-Commands
+ element_text: Variables Commands
+key: defspec
+ origin_href: texinfo#index-defspec
+ entry: `defspec'
+ texi_entry: @code{defspec}
+ element_href: texinfo#Functions-Commands
+ element_text: Functions Commands
+key: deftp
+ origin_href: texinfo#index-deftp
+ entry: `deftp'
+ texi_entry: @code{deftp}
+ element_href: texinfo#Data-Types
+ element_text: Data Types
+key: deftypefn
+ origin_href: texinfo#index-deftypefn
+ entry: `deftypefn'
+ texi_entry: @code{deftypefn}
+ element_href: texinfo#Typed-Functions
+ element_text: Typed Functions
+key: deftypefun
+ origin_href: texinfo#index-deftypefun
+ entry: `deftypefun'
+ texi_entry: @code{deftypefun}
+ element_href: texinfo#Typed-Functions
+ element_text: Typed Functions
+key: deftypeivar
+ origin_href: texinfo#index-deftypeivar
+ entry: `deftypeivar'
+ texi_entry: @code{deftypeivar}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: deftypeop
+ origin_href: texinfo#index-deftypeop
+ entry: `deftypeop'
+ texi_entry: @code{deftypeop}
+ element_href: texinfo#Abstract-Objects
+ element_text: Abstract Objects
+key: deftypevar
+ origin_href: texinfo#index-deftypevar
+ entry: `deftypevar'
+ texi_entry: @code{deftypevar}
+ element_href: texinfo#Typed-Variables
+ element_text: Typed Variables
+key: deftypevr
+ origin_href: texinfo#index-deftypevr
+ entry: `deftypevr'
+ texi_entry: @code{deftypevr}
+ element_href: texinfo#Typed-Variables
+ element_text: Typed Variables
+key: defun
+ origin_href: texinfo#index-defun
+ entry: `defun'
+ texi_entry: @code{defun}
+ element_href: texinfo#Functions-Commands
+ element_text: Functions Commands
+key: defvar
+ origin_href: texinfo#index-defvar
+ entry: `defvar'
+ texi_entry: @code{defvar}
+ element_href: texinfo#Variables-Commands
+ element_text: Variables Commands
+key: defvr
+ origin_href: texinfo#index-defvr
+ entry: `defvr'
+ texi_entry: @code{defvr}
+ element_href: texinfo#Variables-Commands
+ element_text: Variables Commands
+key: dfn
+ origin_href: texinfo#index-dfn
+ entry: `dfn'
+ texi_entry: @code{dfn}
+ element_href: texinfo#dfn
+ element_text: dfn
+key: dircategory
+ origin_href: texinfo#index-dircategory
+ entry: `dircategory'
+ texi_entry: @code{dircategory}
+ element_href: texinfo#Installing-Dir-Entries
+ element_text: Installing Dir Entries
+key: direntry
+ origin_href: texinfo#index-direntry
+ entry: `direntry'
+ texi_entry: @code{direntry}
+ element_href: texinfo#Installing-Dir-Entries
+ element_text: Installing Dir Entries
+key: display
+ origin_href: texinfo#index-display
+ entry: `display'
+ texi_entry: @code{display}
+ element_href: texinfo#display
+ element_text: display
+key: dmn
+ origin_href: texinfo#index-dmn
+ entry: `dmn'
+ texi_entry: @code{dmn}
+ element_href: texinfo#dmn
+ element_text: dmn
+key: documentdescription
+ origin_href: texinfo#index-documentdescription
+ entry: `documentdescription'
+ texi_entry: @code{documentdescription}
+ element_href: texinfo#documentdescription
+ element_text: documentdescription
+key: documentencoding
+ origin_href: texinfo#index-documentencoding
+ entry: `documentencoding'
+ texi_entry: @code{documentencoding}
+ element_href: texinfo#documentencoding
+ element_text: documentencoding
+key: documentlanguage
+ origin_href: texinfo#index-documentlanguage
+ entry: `documentlanguage'
+ texi_entry: @code{documentlanguage}
+ element_href: texinfo#documentlanguage
+ element_text: documentlanguage
+key: dotaccent
+ origin_href: texinfo#index-dotaccent
+ entry: `dotaccent'
+ texi_entry: @code{dotaccent}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: dotless
+ origin_href: texinfo#index-dotless
+ entry: `dotless'
+ texi_entry: @code{dotless}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: dots
+ origin_href: texinfo#index-dots
+ entry: `dots'
+ texi_entry: @code{dots}
+ element_href: texinfo#dots
+ element_text: dots
+key: email
+ origin_href: texinfo#index-email
+ entry: `email'
+ texi_entry: @code{email}
+ element_href: texinfo#email
+ element_text: email
+key: emph
+ origin_href: texinfo#index-emph
+ entry: `emph'
+ texi_entry: @code{emph}
+ element_href: texinfo#emph-_0026-strong
+ element_text: emph & strong
+key: end
+ origin_href: texinfo#index-end
+ entry: `end'
+ texi_entry: @code{end}
+ element_href: texinfo#Quotations-and-Examples
+ element_text: Quotations and Examples
+key: end
+ origin_href: texinfo#index-end-1
+ entry: `end'
+ texi_entry: @code{end}
+ element_href: texinfo#Introducing-Lists-1
+ element_text: Introducing Lists
+key: end titlepage
+ origin_href: texinfo#index-end-titlepage
+ entry: `end titlepage'
+ texi_entry: @code{end titlepage}
+ element_href: texinfo#end-titlepage
+ element_text: end titlepage
+key: enddots
+ origin_href: texinfo#index-enddots
+ entry: `enddots'
+ texi_entry: @code{enddots}
+ element_href: texinfo#dots
+ element_text: dots
+key: enumerate
+ origin_href: texinfo#index-enumerate
+ entry: `enumerate'
+ texi_entry: @code{enumerate}
+ element_href: texinfo#enumerate
+ element_text: enumerate
+key: env
+ origin_href: texinfo#index-env
+ entry: `env'
+ texi_entry: @code{env}
+ element_href: texinfo#env
+ element_text: env
+key: equiv
+ origin_href: texinfo#index-equiv
+ entry: `equiv'
+ texi_entry: @code{equiv}
+ element_href: texinfo#Equivalence
+ element_text: Equivalence
+key: error
+ origin_href: texinfo#index-error
+ entry: `error'
+ texi_entry: @code{error}
+ element_href: texinfo#Error-Glyph
+ element_text: Error Glyph
+key: evenfooting
+ origin_href: texinfo#index-evenfooting
+ entry: `evenfooting'
+ texi_entry: @code{evenfooting}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: evenheading
+ origin_href: texinfo#index-evenheading
+ entry: `evenheading'
+ texi_entry: @code{evenheading}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: everyfooting
+ origin_href: texinfo#index-everyfooting
+ entry: `everyfooting'
+ texi_entry: @code{everyfooting}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: everyheading
+ origin_href: texinfo#index-everyheading
+ entry: `everyheading'
+ texi_entry: @code{everyheading}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: example
+ origin_href: texinfo#index-example
+ entry: `example'
+ texi_entry: @code{example}
+ element_href: texinfo#example
+ element_text: example
+key: exampleindent
+ origin_href: texinfo#index-exampleindent
+ entry: `exampleindent'
+ texi_entry: @code{exampleindent}
+ element_href: texinfo#exampleindent
+ element_text: exampleindent
+key: exclamdown
+ origin_href: texinfo#index-exclamdown
+ entry: `exclamdown'
+ texi_entry: @code{exclamdown}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: exdent
+ origin_href: texinfo#index-exdent
+ entry: `exdent'
+ texi_entry: @code{exdent}
+ element_href: texinfo#exdent
+ element_text: exdent
+key: expansion
+ origin_href: texinfo#index-expansion
+ entry: `expansion'
+ texi_entry: @code{expansion}
+ element_href: texinfo#expansion
+ element_text: expansion
+key: file
+ origin_href: texinfo#index-file
+ entry: `file'
+ texi_entry: @code{file}
+ element_href: texinfo#file
+ element_text: file
+key: filll dimension
+ origin_href: texinfo#index-filll-TeX-dimension
+ entry: `filll TeX dimension'
+ texi_entry: @code{filll @address@hidden dimension}}
+ element_href: texinfo#Copyright
+ element_text: Copyright
+key: finalout
+ origin_href: texinfo#index-finalout
+ entry: `finalout'
+ texi_entry: @code{finalout}
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: findex
+ origin_href: texinfo#index-findex
+ entry: `findex'
+ texi_entry: @code{findex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: flushleft
+ origin_href: texinfo#index-flushleft
+ entry: `flushleft'
+ texi_entry: @code{flushleft}
+ element_href: texinfo#flushleft-_0026-flushright
+ element_text: flushleft & flushright
+key: flushright
+ origin_href: texinfo#index-flushright
+ entry: `flushright'
+ texi_entry: @code{flushright}
+ element_href: texinfo#flushleft-_0026-flushright
+ element_text: flushleft & flushright
+key: foobar
+ origin_href: texinfo#index-foobar
+ entry: `foobar'
+ texi_entry: @code{foobar}
+ element_href: texinfo#Optional-Arguments
+ element_text: Optional Arguments
+key: footnote
+ origin_href: texinfo#index-footnote
+ entry: `footnote'
+ texi_entry: @code{footnote}
+ element_href: texinfo#Footnotes
+ element_text: Footnotes
+key: footnotestyle
+ origin_href: texinfo#index-footnotestyle
+ entry: `footnotestyle'
+ texi_entry: @code{footnotestyle}
+ element_href: texinfo#Footnote-Styles
+ element_text: Footnote Styles
+key: format
+ origin_href: texinfo#index-format
+ entry: `format'
+ texi_entry: @code{format}
+ element_href: texinfo#format
+ element_text: format
+key: forward-word
+ origin_href: texinfo#index-forward_002dword
+ entry: `forward-word'
+ texi_entry: @code{forward-word}
+ element_href: texinfo#Def-Cmd-Template
+ element_text: Def Cmd Template
+key: ftable
+ origin_href: texinfo#index-ftable
+ entry: `ftable'
+ texi_entry: @code{ftable}
+ element_href: texinfo#ftable-vtable
+ element_text: ftable vtable
+key: group
+ origin_href: texinfo#index-group
+ entry: `group'
+ texi_entry: @code{group}
+ element_href: texinfo#group
+ element_text: group
+key: H (Hungarian umlaut accent)
+ origin_href: texinfo#index-H-_0028Hungarian-umlaut-accent_0029
+ entry: `H (Hungarian umlaut accent)'
+ texi_entry: @code{H @r{(Hungarian umlaut accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: hbox
+ origin_href: texinfo#index-hbox
+ entry: `hbox'
+ texi_entry: @code{hbox}
+ element_href: texinfo#Overfull-hboxes
+ element_text: Overfull hboxes
+key: heading
+ origin_href: texinfo#index-heading
+ entry: `heading'
+ texi_entry: @code{heading}
+ element_href: texinfo#unnumberedsec-appendixsec-heading
+ element_text: unnumberedsec appendixsec heading
+key: headings
+ origin_href: texinfo#index-headings
+ entry: `headings'
+ texi_entry: @code{headings}
+ element_href: texinfo#headings-on-off
+ element_text: headings on off
+key: headword
+ origin_href: texinfo#index-headword
+ entry: `headword'
+ texi_entry: @code{headword}
+ element_href: texinfo#definfoenclose
+ element_text: definfoenclose
+key: html
+ origin_href: texinfo#index-html
+ entry: `html'
+ texi_entry: @code{html}
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: hyphenation
+ origin_href: texinfo#index-hyphenation
+ entry: `hyphenation'
+ texi_entry: @code{hyphenation}
+ element_href: texinfo#g_t_002d-and-hyphenation
+ element_text: - and hyphenation
+key: i (italic font)
+ origin_href: texinfo#index-i-_0028italic-font_0029
+ entry: `i (italic font)'
+ texi_entry: @code{i @r{(italic font)}}
+ element_href: texinfo#Fonts
+ element_text: Fonts
+key: ifclear
+ origin_href: texinfo#index-ifclear
+ entry: `ifclear'
+ texi_entry: @code{ifclear}
+ element_href: texinfo#ifset-ifclear
+ element_text: ifset ifclear
+key: ifhtml
+ origin_href: texinfo#index-ifhtml
+ entry: `ifhtml'
+ texi_entry: @code{ifhtml}
+ element_href: texinfo#Conditional-Commands
+ element_text: Conditional Commands
+key: ifhtml
+ origin_href: texinfo#index-ifhtml-1
+ entry: `ifhtml'
+ texi_entry: @code{ifhtml}
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: ifinfo
+ origin_href: texinfo#index-ifinfo
+ entry: `ifinfo'
+ texi_entry: @code{ifinfo}
+ element_href: texinfo#Conditional-Commands
+ element_text: Conditional Commands
+key: ifnothtml
+ origin_href: texinfo#index-ifnothtml
+ entry: `ifnothtml'
+ texi_entry: @code{ifnothtml}
+ element_href: texinfo#Conditional-Not-Commands
+ element_text: Conditional Not Commands
+key: ifnotinfo
+ origin_href: texinfo#index-ifnotinfo
+ entry: `ifnotinfo'
+ texi_entry: @code{ifnotinfo}
+ element_href: texinfo#Conditional-Not-Commands
+ element_text: Conditional Not Commands
+key: ifnotplaintext
+ origin_href: texinfo#index-ifnotplaintext
+ entry: `ifnotplaintext'
+ texi_entry: @code{ifnotplaintext}
+ element_href: texinfo#Conditional-Not-Commands
+ element_text: Conditional Not Commands
+key: ifnottex
+ origin_href: texinfo#index-ifnottex
+ entry: `ifnottex'
+ texi_entry: @code{ifnottex}
+ element_href: texinfo#Conditional-Not-Commands
+ element_text: Conditional Not Commands
+key: ifplaintext
+ origin_href: texinfo#index-ifplaintext
+ entry: `ifplaintext'
+ texi_entry: @code{ifplaintext}
+ element_href: texinfo#Conditional-Commands
+ element_text: Conditional Commands
+key: ifset
+ origin_href: texinfo#index-ifset
+ entry: `ifset'
+ texi_entry: @code{ifset}
+ element_href: texinfo#ifset-ifclear
+ element_text: ifset ifclear
+key: iftex
+ origin_href: texinfo#index-iftex
+ entry: `iftex'
+ texi_entry: @code{iftex}
+ element_href: texinfo#Conditional-Commands
+ element_text: Conditional Commands
+key: ignore
+ origin_href: texinfo#index-ignore
+ entry: `ignore'
+ texi_entry: @code{ignore}
+ element_href: texinfo#Comments
+ element_text: Comments
+key: image
+ origin_href: texinfo#index-image
+ entry: `image'
+ texi_entry: @code{image}
+ element_href: texinfo#Images
+ element_text: Images
+key: include
+ origin_href: texinfo#index-include
+ entry: `include'
+ texi_entry: @code{include}
+ element_href: texinfo#Using-Include-Files
+ element_text: Using Include Files
+key: Info-validate
+ origin_href: texinfo#index-Info_002dvalidate
+ entry: `Info-validate'
+ texi_entry: @code{Info-validate}
+ element_href: texinfo#Running-Info_002dValidate
+ element_text: Running Info-Validate
+key: inforef
+ origin_href: texinfo#index-inforef
+ entry: `inforef'
+ texi_entry: @code{inforef}
+ element_href: texinfo#inforef
+ element_text: inforef
+key: insertcopying
+ origin_href: texinfo#index-insertcopying
+ entry: `insertcopying'
+ texi_entry: @code{insertcopying}
+ element_href: texinfo#insertcopying
+ element_text: insertcopying
+key: isearch-backward
+ origin_href: texinfo#index-isearch_002dbackward
+ entry: `isearch-backward'
+ texi_entry: @code{isearch-backward}
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: isearch-forward
+ origin_href: texinfo#index-isearch_002dforward
+ entry: `isearch-forward'
+ texi_entry: @code{isearch-forward}
+ element_href: texinfo#deffnx
+ element_text: deffnx
+key: item
+ origin_href: texinfo#index-item
+ entry: `item'
+ texi_entry: @code{item}
+ element_href: texinfo#itemize
+ element_text: itemize
+key: item
+ origin_href: texinfo#index-item-1
+ entry: `item'
+ texi_entry: @code{item}
+ element_href: texinfo#Using-the-_0040table-Command
+ element_text: Using the address@hidden' Command
+key: item
+ origin_href: texinfo#index-item-2
+ entry: `item'
+ texi_entry: @code{item}
+ element_href: texinfo#Multitable-Rows
+ element_text: Multitable Rows
+key: itemize
+ origin_href: texinfo#index-itemize
+ entry: `itemize'
+ texi_entry: @code{itemize}
+ element_href: texinfo#itemize
+ element_text: itemize
+key: itemx
+ origin_href: texinfo#index-itemx
+ entry: `itemx'
+ texi_entry: @code{itemx}
+ element_href: texinfo#itemx
+ element_text: itemx
+key: kbd
+ origin_href: texinfo#index-kbd
+ entry: `kbd'
+ texi_entry: @code{kbd}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: kbdinputstyle
+ origin_href: texinfo#index-kbdinputstyle
+ entry: `kbdinputstyle'
+ texi_entry: @code{kbdinputstyle}
+ element_href: texinfo#kbd
+ element_text: kbd
+key: key
+ origin_href: texinfo#index-key
+ entry: `key'
+ texi_entry: @code{key}
+ element_href: texinfo#key
+ element_text: key
+key: kindex
+ origin_href: texinfo#index-kindex
+ entry: `kindex'
+ texi_entry: @code{kindex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: l
+ origin_href: texinfo#index-l
+ entry: `l'
+ texi_entry: @code{l}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: L
+ origin_href: texinfo#index-L
+ entry: `L'
+ texi_entry: @code{L}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: lisp
+ origin_href: texinfo#index-lisp
+ entry: `lisp'
+ texi_entry: @code{lisp}
+ element_href: texinfo#lisp
+ element_text: lisp
+key: lowersections
+ origin_href: texinfo#index-lowersections
+ entry: `lowersections'
+ texi_entry: @code{lowersections}
+ element_href: texinfo#Raise_002flower-sections
+ element_text: Raise/lower sections
+key: macro
+ origin_href: texinfo#index-macro
+ entry: `macro'
+ texi_entry: @code{macro}
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: majorheading
+ origin_href: texinfo#index-majorheading
+ entry: `majorheading'
+ texi_entry: @code{majorheading}
+ element_href: texinfo#majorheading-_0026-chapheading
+ element_text: majorheading & chapheading
+key: makeinfo-buffer
+ origin_href: texinfo#index-makeinfo_002dbuffer
+ entry: `makeinfo-buffer'
+ texi_entry: @code{makeinfo-buffer}
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: makeinfo-kill-job
+ origin_href: texinfo#index-makeinfo_002dkill_002djob
+ entry: `makeinfo-kill-job'
+ texi_entry: @code{makeinfo-kill-job}
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: makeinfo-recenter-output-buffer
+ origin_href: texinfo#index-makeinfo_002drecenter_002doutput_002dbuffer
+ entry: `makeinfo-recenter-output-buffer'
+ texi_entry: @code{makeinfo-recenter-output-buffer}
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: makeinfo-region
+ origin_href: texinfo#index-makeinfo_002dregion
+ entry: `makeinfo-region'
+ texi_entry: @code{makeinfo-region}
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: math
+ origin_href: texinfo#index-math
+ entry: `math'
+ texi_entry: @code{math}
+ element_href: texinfo#math
+ element_text: math
+key: menu
+ origin_href: texinfo#index-menu
+ entry: `menu'
+ texi_entry: @code{menu}
+ element_href: texinfo#Menus
+ element_text: Menus
+key: minus
+ origin_href: texinfo#index-minus
+ entry: `minus'
+ texi_entry: @code{minus}
+ element_href: texinfo#minus
+ element_text: minus
+key: multitable
+ origin_href: texinfo#index-multitable
+ entry: `multitable'
+ texi_entry: @code{multitable}
+ element_href: texinfo#Multi_002dcolumn-Tables
+ element_text: Multi-column Tables
+key: need
+ origin_href: texinfo#index-need
+ entry: `need'
+ texi_entry: @code{need}
+ element_href: texinfo#need
+ element_text: need
+key: next-error
+ origin_href: texinfo#index-next_002derror
+ entry: `next-error'
+ texi_entry: @code{next-error}
+ element_href: texinfo#makeinfo-in-Emacs
+ element_text: makeinfo in Emacs
+key: node
+ origin_href: texinfo#index-node
+ entry: `node'
+ texi_entry: @code{node}
+ element_href: texinfo#node
+ element_text: node
+key: noindent
+ origin_href: texinfo#index-noindent
+ entry: `noindent'
+ texi_entry: @code{noindent}
+ element_href: texinfo#noindent
+ element_text: noindent
+key: novalidate
+ origin_href: texinfo#index-novalidate
+ entry: `novalidate'
+ texi_entry: @code{novalidate}
+ element_href: texinfo#Format-with-tex_002ftexindex
+ element_text: Format with tex/texindex
+key: o
+ origin_href: texinfo#index-o
+ entry: `o'
+ texi_entry: @code{o}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: O
+ origin_href: texinfo#index-O
+ entry: `O'
+ texi_entry: @code{O}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: occur
+ origin_href: texinfo#index-occur
+ entry: `occur'
+ texi_entry: @code{occur}
+ element_href: texinfo#Using-occur
+ element_text: Using occur
+key: occur-mode-goto-occurrence
+ origin_href: texinfo#index-occur_002dmode_002dgoto_002doccurrence
+ entry: `occur-mode-goto-occurrence'
+ texi_entry: @code{occur-mode-goto-occurrence}
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: oddfooting
+ origin_href: texinfo#index-oddfooting
+ entry: `oddfooting'
+ texi_entry: @code{oddfooting}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: oddheading
+ origin_href: texinfo#index-oddheading
+ entry: `oddheading'
+ texi_entry: @code{oddheading}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: oe
+ origin_href: texinfo#index-oe
+ entry: `oe'
+ texi_entry: @code{oe}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: OE
+ origin_href: texinfo#index-OE
+ entry: `OE'
+ texi_entry: @code{OE}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: option
+ origin_href: texinfo#index-option
+ entry: `option'
+ texi_entry: @code{option}
+ element_href: texinfo#option
+ element_text: option
+key: page
+ origin_href: texinfo#index-page
+ entry: `page'
+ texi_entry: @code{page}
+ element_href: texinfo#page
+ element_text: page
+key: page, within `titlepage'
+ origin_href: texinfo#index-page_002c-within-_0040titlepage
+ entry: `page, within address@hidden''
+ texi_entry: @address@hidden, within @code{@@titlepage}}}
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: pagesizes
+ origin_href: texinfo#index-pagesizes
+ entry: `pagesizes'
+ texi_entry: @code{pagesizes}
+ element_href: texinfo#pagesizes
+ element_text: pagesizes
+key: paragraphindent
+ origin_href: texinfo#index-paragraphindent
+ entry: `paragraphindent'
+ texi_entry: @code{paragraphindent}
+ element_href: texinfo#paragraphindent
+ element_text: paragraphindent
+key: phoo
+ origin_href: texinfo#index-phoo
+ entry: `phoo'
+ texi_entry: @code{phoo}
+ element_href: texinfo#definfoenclose
+ element_text: definfoenclose
+key: pindex
+ origin_href: texinfo#index-pindex
+ entry: `pindex'
+ texi_entry: @code{pindex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: point
+ origin_href: texinfo#index-point
+ entry: `point'
+ texi_entry: @code{point}
+ element_href: texinfo#Point-Glyph
+ element_text: Point Glyph
+key: pounds
+ origin_href: texinfo#index-pounds
+ entry: `pounds'
+ texi_entry: @code{pounds}
+ element_href: texinfo#pounds
+ element_text: pounds
+key: print
+ origin_href: texinfo#index-print
+ entry: `print'
+ texi_entry: @code{print}
+ element_href: texinfo#Print-Glyph
+ element_text: Print Glyph
+key: printindex
+ origin_href: texinfo#index-printindex
+ entry: `printindex'
+ texi_entry: @code{printindex}
+ element_href: texinfo#Printing-Indices-_0026-Menus
+ element_text: Printing Indices & Menus
+key: pxref
+ origin_href: texinfo#index-pxref
+ entry: `pxref'
+ texi_entry: @code{pxref}
+ element_href: texinfo#pxref
+ element_text: pxref
+key: questiondown
+ origin_href: texinfo#index-questiondown
+ entry: `questiondown'
+ texi_entry: @code{questiondown}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: quotation
+ origin_href: texinfo#index-quotation
+ entry: `quotation'
+ texi_entry: @code{quotation}
+ element_href: texinfo#quotation
+ element_text: quotation
+key: r (Roman font)
+ origin_href: texinfo#index-r-_0028Roman-font_0029
+ entry: `r (Roman font)'
+ texi_entry: @code{r @r{(Roman font)}}
+ element_href: texinfo#Fonts
+ element_text: Fonts
+key: raisesections
+ origin_href: texinfo#index-raisesections
+ entry: `raisesections'
+ texi_entry: @code{raisesections}
+ element_href: texinfo#Raise_002flower-sections
+ element_text: Raise/lower sections
+key: ref
+ origin_href: texinfo#index-ref
+ entry: `ref'
+ texi_entry: @code{ref}
+ element_href: texinfo#ref
+ element_text: ref
+key: refill
+ origin_href: texinfo#index-refill
+ entry: `refill'
+ texi_entry: @code{refill}
+ element_href: texinfo#Refilling-Paragraphs
+ element_text: Refilling Paragraphs
+key: result
+ origin_href: texinfo#index-result
+ entry: `result'
+ texi_entry: @code{result}
+ element_href: texinfo#result
+ element_text: result
+key: ringaccent
+ origin_href: texinfo#index-ringaccent
+ entry: `ringaccent'
+ texi_entry: @code{ringaccent}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: rmacro
+ origin_href: texinfo#index-rmacro
+ entry: `rmacro'
+ texi_entry: @code{rmacro}
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: samp
+ origin_href: texinfo#index-samp
+ entry: `samp'
+ texi_entry: @code{samp}
+ element_href: texinfo#samp
+ element_text: samp
+key: sc (small caps font)
+ origin_href: texinfo#index-sc-_0028small-caps-font_0029
+ entry: `sc (small caps font)'
+ texi_entry: @code{sc @r{(small caps font)}}
+ element_href: texinfo#Smallcaps
+ element_text: Smallcaps
+key: section
+ origin_href: texinfo#index-section
+ entry: `section'
+ texi_entry: @code{section}
+ element_href: texinfo#section
+ element_text: section
+key: setchapternewpage
+ origin_href: texinfo#index-setchapternewpage
+ entry: `setchapternewpage'
+ texi_entry: @code{setchapternewpage}
+ element_href: texinfo#setchapternewpage
+ element_text: setchapternewpage
+key: setcontentsaftertitlepage
+ origin_href: texinfo#index-setcontentsaftertitlepage
+ entry: `setcontentsaftertitlepage'
+ texi_entry: @code{setcontentsaftertitlepage}
+ element_href: texinfo#Contents
+ element_text: Contents
+key: setfilename
+ origin_href: texinfo#index-setfilename
+ entry: `setfilename'
+ texi_entry: @code{setfilename}
+ element_href: texinfo#setfilename
+ element_text: setfilename
+key: setshortcontentsaftertitlepage
+ origin_href: texinfo#index-setshortcontentsaftertitlepage
+ entry: `setshortcontentsaftertitlepage'
+ texi_entry: @code{setshortcontentsaftertitlepage}
+ element_href: texinfo#Contents
+ element_text: Contents
+key: settitle
+ origin_href: texinfo#index-settitle
+ entry: `settitle'
+ texi_entry: @code{settitle}
+ element_href: texinfo#settitle
+ element_text: settitle
+key: shortcontents
+ origin_href: texinfo#index-shortcontents
+ entry: `shortcontents'
+ texi_entry: @code{shortcontents}
+ element_href: texinfo#Contents
+ element_text: Contents
+key: shorttitlepage
+ origin_href: texinfo#index-shorttitlepage
+ entry: `shorttitlepage'
+ texi_entry: @code{shorttitlepage}
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: smallbook
+ origin_href: texinfo#index-smallbook
+ entry: `smallbook'
+ texi_entry: @code{smallbook}
+ element_href: texinfo#smallbook
+ element_text: smallbook
+key: smalldisplay
+ origin_href: texinfo#index-smalldisplay
+ entry: `smalldisplay'
+ texi_entry: @code{smalldisplay}
+ element_href: texinfo#small
+ element_text: small
+key: smalldisplay
+ origin_href: texinfo#index-smalldisplay-1
+ entry: `smalldisplay'
+ texi_entry: @code{smalldisplay}
+ element_href: texinfo#display
+ element_text: display
+key: smallexample
+ origin_href: texinfo#index-smallexample
+ entry: `smallexample'
+ texi_entry: @code{smallexample}
+ element_href: texinfo#small
+ element_text: small
+key: smallformat
+ origin_href: texinfo#index-smallformat
+ entry: `smallformat'
+ texi_entry: @code{smallformat}
+ element_href: texinfo#small
+ element_text: small
+key: smallformat
+ origin_href: texinfo#index-smallformat-1
+ entry: `smallformat'
+ texi_entry: @code{smallformat}
+ element_href: texinfo#format
+ element_text: format
+key: smalllisp
+ origin_href: texinfo#index-smalllisp
+ entry: `smalllisp'
+ texi_entry: @code{smalllisp}
+ element_href: texinfo#small
+ element_text: small
+key: sp (line spacing)
+ origin_href: texinfo#index-sp-_0028line-spacing_0029
+ entry: `sp (line spacing)'
+ texi_entry: @code{sp @r{(line spacing)}}
+ element_href: texinfo#sp
+ element_text: sp
+key: sp (titlepage line spacing)
+ origin_href: texinfo#index-sp-_0028titlepage-line-spacing_0029
+ entry: `sp (titlepage line spacing)'
+ texi_entry: @code{sp @r{(titlepage line spacing)}}
+ element_href: texinfo#titlefont-center-sp
+ element_text: titlefont center sp
+key: ss
+ origin_href: texinfo#index-ss
+ entry: `ss'
+ texi_entry: @code{ss}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: strong
+ origin_href: texinfo#index-strong
+ entry: `strong'
+ texi_entry: @code{strong}
+ element_href: texinfo#emph-_0026-strong
+ element_text: emph & strong
+key: subheading
+ origin_href: texinfo#index-subheading
+ entry: `subheading'
+ texi_entry: @code{subheading}
+ element_href: texinfo#unnumberedsubsec-appendixsubsec-subheading
+ element_text: unnumberedsubsec appendixsubsec subheading
+key: subsection
+ origin_href: texinfo#index-subsection
+ entry: `subsection'
+ texi_entry: @code{subsection}
+ element_href: texinfo#subsection
+ element_text: subsection
+key: subsubheading
+ origin_href: texinfo#index-subsubheading
+ entry: `subsubheading'
+ texi_entry: @code{subsubheading}
+ element_href: texinfo#subsubsection
+ element_text: subsubsection
+key: subsubsection
+ origin_href: texinfo#index-subsubsection
+ entry: `subsubsection'
+ texi_entry: @code{subsubsection}
+ element_href: texinfo#subsubsection
+ element_text: subsubsection
+key: subtitle
+ origin_href: texinfo#index-subtitle
+ entry: `subtitle'
+ texi_entry: @code{subtitle}
+ element_href: texinfo#title-subtitle-author
+ element_text: title subtitle author
+key: summarycontents
+ origin_href: texinfo#index-summarycontents
+ entry: `summarycontents'
+ texi_entry: @code{summarycontents}
+ element_href: texinfo#Contents
+ element_text: Contents
+key: syncodeindex
+ origin_href: texinfo#index-syncodeindex
+ entry: `syncodeindex'
+ texi_entry: @code{syncodeindex}
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: syncodeindex
+ origin_href: texinfo#index-syncodeindex-1
+ entry: `syncodeindex'
+ texi_entry: @code{syncodeindex}
+ element_href: texinfo#syncodeindex
+ element_text: syncodeindex
+key: synindex
+ origin_href: texinfo#index-synindex
+ entry: `synindex'
+ texi_entry: @code{synindex}
+ element_href: texinfo#synindex
+ element_text: synindex
+key: t (typewriter font)
+ origin_href: texinfo#index-t-_0028typewriter-font_0029
+ entry: `t (typewriter font)'
+ texi_entry: @code{t @r{(typewriter font)}}
+ element_href: texinfo#Fonts
+ element_text: Fonts
+key: tab
+ origin_href: texinfo#index-tab
+ entry: `tab'
+ texi_entry: @code{tab}
+ element_href: texinfo#Multitable-Rows
+ element_text: Multitable Rows
+key: table
+ origin_href: texinfo#index-table
+ entry: `table'
+ texi_entry: @code{table}
+ element_href: texinfo#Two_002dcolumn-Tables
+ element_text: Two-column Tables
+key: tex
+ origin_href: texinfo#index-tex
+ entry: `tex'
+ texi_entry: @code{tex}
+ element_href: texinfo#Raw-Formatter-Commands
+ element_text: Raw Formatter Commands
+key: tex (command)
+ origin_href: texinfo#index-tex-_0028command_0029
+ entry: `tex (command)'
+ texi_entry: @code{tex (command)}
+ element_href: texinfo#tex
+ element_text: tex
+key: texinfo-all-menus-update
+ origin_href: texinfo#index-texinfo_002dall_002dmenus_002dupdate
+ entry: `texinfo-all-menus-update'
+ texi_entry: @code{texinfo-all-menus-update}
+ element_href: texinfo#The-Updating-Commands
+ element_text: The Updating Commands
+key: texinfo-every-node-update
+ origin_href: texinfo#index-texinfo_002devery_002dnode_002dupdate
+ entry: `texinfo-every-node-update'
+ texi_entry: @code{texinfo-every-node-update}
+ element_href: texinfo#The-Updating-Commands
+ element_text: The Updating Commands
+key: texinfo-format-buffer
+ origin_href: texinfo#index-texinfo_002dformat_002dbuffer
+ entry: `texinfo-format-buffer'
+ texi_entry: @code{texinfo-format-buffer}
+ element_href: texinfo#Info-Formatting
+ element_text: Info Formatting
+key: texinfo-format-buffer
+ origin_href: texinfo#index-texinfo_002dformat_002dbuffer-1
+ entry: `texinfo-format-buffer'
+ texi_entry: @code{texinfo-format-buffer}
+ element_href: texinfo#texinfo_002dformat-commands
+ element_text: texinfo-format commands
+key: texinfo-format-buffer
+ origin_href: texinfo#index-texinfo_002dformat_002dbuffer-2
+ entry: `texinfo-format-buffer'
+ texi_entry: @code{texinfo-format-buffer}
+ element_href: texinfo#texinfo_002dformat-commands
+ element_text: texinfo-format commands
+key: texinfo-format-region
+ origin_href: texinfo#index-texinfo_002dformat_002dregion
+ entry: `texinfo-format-region'
+ texi_entry: @code{texinfo-format-region}
+ element_href: texinfo#Info-Formatting
+ element_text: Info Formatting
+key: texinfo-format-region
+ origin_href: texinfo#index-texinfo_002dformat_002dregion-1
+ entry: `texinfo-format-region'
+ texi_entry: @code{texinfo-format-region}
+ element_href: texinfo#texinfo_002dformat-commands
+ element_text: texinfo-format commands
+key: texinfo-format-region
+ origin_href: texinfo#index-texinfo_002dformat_002dregion-2
+ entry: `texinfo-format-region'
+ texi_entry: @code{texinfo-format-region}
+ element_href: texinfo#texinfo_002dformat-commands
+ element_text: texinfo-format commands
+key: texinfo-indent-menu-description
+ origin_href: texinfo#index-texinfo_002dindent_002dmenu_002ddescription
+ entry: `texinfo-indent-menu-description'
+ texi_entry: @code{texinfo-indent-menu-description}
+ element_href: texinfo#Other-Updating-Commands
+ element_text: Other Updating Commands
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040code
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@code}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040dfn
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@dfn}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040end
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@end}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040example
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@example}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040item
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@item}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040kbd
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@kbd}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040node
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@node}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040noindent
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@noindent}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040samp
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@samp}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040table
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@table}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: address@hidden
+ origin_href: texinfo#index-texinfo_002dinsert_002d_0040var
+ entry: address@hidden'
+ texi_entry: @code{texinfo-insert-@@var}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: texinfo-insert-braces
+ origin_href: texinfo#index-texinfo_002dinsert_002dbraces
+ entry: `texinfo-insert-braces'
+ texi_entry: @code{texinfo-insert-braces}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: texinfo-insert-node-lines
+ origin_href: texinfo#index-texinfo_002dinsert_002dnode_002dlines
+ entry: `texinfo-insert-node-lines'
+ texi_entry: @code{texinfo-insert-node-lines}
+ element_href: texinfo#Other-Updating-Commands
+ element_text: Other Updating Commands
+key: texinfo-make-menu
+ origin_href: texinfo#index-texinfo_002dmake_002dmenu
+ entry: `texinfo-make-menu'
+ texi_entry: @code{texinfo-make-menu}
+ element_href: texinfo#The-Updating-Commands
+ element_text: The Updating Commands
+key: texinfo-master-menu
+ origin_href: texinfo#index-texinfo_002dmaster_002dmenu
+ entry: `texinfo-master-menu'
+ texi_entry: @code{texinfo-master-menu}
+ element_href: texinfo#The-Updating-Commands
+ element_text: The Updating Commands
+key: texinfo-multiple-files-update
+ origin_href: texinfo#index-texinfo_002dmultiple_002dfiles_002dupdate
+ entry: `texinfo-multiple-files-update'
+ texi_entry: @code{texinfo-multiple-files-update}
+ element_href: texinfo#texinfo_002dmultiple_002dfiles_002dupdate
+ element_text: texinfo-multiple-files-update
+key: texinfo-multiple-files-update (in brief)
+ origin_href:
texinfo#index-texinfo_002dmultiple_002dfiles_002dupdate-_0028in-brief_0029
+ entry: `texinfo-multiple-files-update (in brief)'
+ texi_entry: @code{texinfo-multiple-files-update @r{(in brief)}}
+ element_href: texinfo#Other-Updating-Commands
+ element_text: Other Updating Commands
+key: texinfo-sequential-node-update
+ origin_href: texinfo#index-texinfo_002dsequential_002dnode_002dupdate
+ entry: `texinfo-sequential-node-update'
+ texi_entry: @code{texinfo-sequential-node-update}
+ element_href: texinfo#Other-Updating-Commands
+ element_text: Other Updating Commands
+key: texinfo-show-structure
+ origin_href: texinfo#index-texinfo_002dshow_002dstructure
+ entry: `texinfo-show-structure'
+ texi_entry: @code{texinfo-show-structure}
+ element_href: texinfo#Showing-the-Structure
+ element_text: Showing the Structure
+key: texinfo-show-structure
+ origin_href: texinfo#index-texinfo_002dshow_002dstructure-1
+ entry: `texinfo-show-structure'
+ texi_entry: @code{texinfo-show-structure}
+ element_href: texinfo#Using-texinfo_002dshow_002dstructure
+ element_text: Using texinfo-show-structure
+key: texinfo-start-menu-description
+ origin_href: texinfo#index-texinfo_002dstart_002dmenu_002ddescription
+ entry: `texinfo-start-menu-description'
+ texi_entry: @code{texinfo-start-menu-description}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: texinfo-tex-buffer
+ origin_href: texinfo#index-texinfo_002dtex_002dbuffer
+ entry: `texinfo-tex-buffer'
+ texi_entry: @code{texinfo-tex-buffer}
+ element_href: texinfo#Printing
+ element_text: Printing
+key: texinfo-tex-print
+ origin_href: texinfo#index-texinfo_002dtex_002dprint
+ entry: `texinfo-tex-print'
+ texi_entry: @code{texinfo-tex-print}
+ element_href: texinfo#Printing
+ element_text: Printing
+key: texinfo-tex-region
+ origin_href: texinfo#index-texinfo_002dtex_002dregion
+ entry: `texinfo-tex-region'
+ texi_entry: @code{texinfo-tex-region}
+ element_href: texinfo#Printing
+ element_text: Printing
+key: texinfo-update-node
+ origin_href: texinfo#index-texinfo_002dupdate_002dnode
+ entry: `texinfo-update-node'
+ texi_entry: @code{texinfo-update-node}
+ element_href: texinfo#The-Updating-Commands
+ element_text: The Updating Commands
+key: thischapter
+ origin_href: texinfo#index-thischapter
+ entry: `thischapter'
+ texi_entry: @code{thischapter}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: thischaptername
+ origin_href: texinfo#index-thischaptername
+ entry: `thischaptername'
+ texi_entry: @code{thischaptername}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: thisfile
+ origin_href: texinfo#index-thisfile
+ entry: `thisfile'
+ texi_entry: @code{thisfile}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: thispage
+ origin_href: texinfo#index-thispage
+ entry: `thispage'
+ texi_entry: @code{thispage}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: thistitle
+ origin_href: texinfo#index-thistitle
+ entry: `thistitle'
+ texi_entry: @code{thistitle}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: tieaccent
+ origin_href: texinfo#index-tieaccent
+ entry: `tieaccent'
+ texi_entry: @code{tieaccent}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: tindex
+ origin_href: texinfo#index-tindex
+ entry: `tindex'
+ texi_entry: @code{tindex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: title
+ origin_href: texinfo#index-title
+ entry: `title'
+ texi_entry: @code{title}
+ element_href: texinfo#title-subtitle-author
+ element_text: title subtitle author
+key: titlefont
+ origin_href: texinfo#index-titlefont
+ entry: `titlefont'
+ texi_entry: @code{titlefont}
+ element_href: texinfo#titlefont-center-sp
+ element_text: titlefont center sp
+key: titlepage
+ origin_href: texinfo#index-titlepage
+ entry: `titlepage'
+ texi_entry: @code{titlepage}
+ element_href: texinfo#titlepage
+ element_text: titlepage
+key: today
+ origin_href: texinfo#index-today
+ entry: `today'
+ texi_entry: @code{today}
+ element_href: texinfo#Custom-Headings
+ element_text: Custom Headings
+key: top
+ origin_href: texinfo#index-top
+ entry: `top'
+ texi_entry: @code{top}
+ element_href: texinfo#The-Top-Node
+ element_text: The Top Node
+key: top (-command)
+ origin_href: texinfo#index-top-_0028_0040_002dcommand_0029
+ entry: `top (@-command)'
+ texi_entry: @code{top @r{(@@-command)}}
+ element_href: texinfo#makeinfo-top-command
+ element_text: makeinfo top command
+key: u (breve accent)
+ origin_href: texinfo#index-u-_0028breve-accent_0029
+ entry: `u (breve accent)'
+ texi_entry: @code{u @r{(breve accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: ubaraccent
+ origin_href: texinfo#index-ubaraccent
+ entry: `ubaraccent'
+ texi_entry: @code{ubaraccent}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: udotaccent
+ origin_href: texinfo#index-udotaccent
+ entry: `udotaccent'
+ texi_entry: @code{udotaccent}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: unmacro
+ origin_href: texinfo#index-unmacro
+ entry: `unmacro'
+ texi_entry: @code{unmacro}
+ element_href: texinfo#Defining-Macros
+ element_text: Defining Macros
+key: unnumbered
+ origin_href: texinfo#index-unnumbered
+ entry: `unnumbered'
+ texi_entry: @code{unnumbered}
+ element_href: texinfo#unnumbered-_0026-appendix
+ element_text: unnumbered & appendix
+key: unnumberedsec
+ origin_href: texinfo#index-unnumberedsec
+ entry: `unnumberedsec'
+ texi_entry: @code{unnumberedsec}
+ element_href: texinfo#unnumberedsec-appendixsec-heading
+ element_text: unnumberedsec appendixsec heading
+key: unnumberedsubsec
+ origin_href: texinfo#index-unnumberedsubsec
+ entry: `unnumberedsubsec'
+ texi_entry: @code{unnumberedsubsec}
+ element_href: texinfo#unnumberedsubsec-appendixsubsec-subheading
+ element_text: unnumberedsubsec appendixsubsec subheading
+key: unnumberedsubsubsec
+ origin_href: texinfo#index-unnumberedsubsubsec
+ entry: `unnumberedsubsubsec'
+ texi_entry: @code{unnumberedsubsubsec}
+ element_href: texinfo#subsubsection
+ element_text: subsubsection
+key: up-list
+ origin_href: texinfo#index-up_002dlist
+ entry: `up-list'
+ texi_entry: @code{up-list}
+ element_href: texinfo#Inserting
+ element_text: Inserting
+key: uref
+ origin_href: texinfo#index-uref
+ entry: `uref'
+ texi_entry: @code{uref}
+ element_href: texinfo#uref
+ element_text: uref
+key: url
+ origin_href: texinfo#index-url
+ entry: `url'
+ texi_entry: @code{url}
+ element_href: texinfo#url
+ element_text: url
+key: v (check accent)
+ origin_href: texinfo#index-v-_0028check-accent_0029
+ entry: `v (check accent)'
+ texi_entry: @code{v @r{(check accent)}}
+ element_href: texinfo#Inserting-Accents
+ element_text: Inserting Accents
+key: value
+ origin_href: texinfo#index-value
+ entry: `value'
+ texi_entry: @code{value}
+ element_href: texinfo#set-value
+ element_text: set value
+key: var
+ origin_href: texinfo#index-var
+ entry: `var'
+ texi_entry: @code{var}
+ element_href: texinfo#var
+ element_text: var
+key: verb
+ origin_href: texinfo#index-verb
+ entry: `verb'
+ texi_entry: @code{verb}
+ element_href: texinfo#verb
+ element_text: verb
+key: verbatim
+ origin_href: texinfo#index-verbatim
+ entry: `verbatim'
+ texi_entry: @code{verbatim}
+ element_href: texinfo#verbatim
+ element_text: verbatim
+key: verbatiminclude
+ origin_href: texinfo#index-verbatiminclude
+ entry: `verbatiminclude'
+ texi_entry: @code{verbatiminclude}
+ element_href: texinfo#verbatiminclude
+ element_text: verbatiminclude
+key: vindex
+ origin_href: texinfo#index-vindex
+ entry: `vindex'
+ texi_entry: @code{vindex}
+ element_href: texinfo#Indexing-Commands
+ element_text: Indexing Commands
+key: vskip vertical skip
+ origin_href: texinfo#index-vskip-TeX-vertical-skip
+ entry: `vskip TeX vertical skip'
+ texi_entry: @code{vskip @address@hidden vertical skip}}
+ element_href: texinfo#Copyright
+ element_text: Copyright
+key: vtable
+ origin_href: texinfo#index-vtable
+ entry: `vtable'
+ texi_entry: @code{vtable}
+ element_href: texinfo#ftable-vtable
+ element_text: ftable vtable
+key: w (prevent line break)
+ origin_href: texinfo#index-w-_0028prevent-line-break_0029
+ entry: `w (prevent line break)'
+ texi_entry: @code{w @r{(prevent line break)}}
+ element_href: texinfo#w
+ element_text: w
+key: xref
+ origin_href: texinfo#index-xref
+ entry: `xref'
+ texi_entry: @code{xref}
+ element_href: texinfo#xref
+ element_text: xref
Index: test/manuals/res_info/texinfo/texinfo_ky.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_ky.idx
diff -N test/manuals/res_info/texinfo/texinfo_ky.idx
Index: test/manuals/res_info/texinfo/texinfo_op.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_op.idx
diff -N test/manuals/res_info/texinfo/texinfo_op.idx
Index: test/manuals/res_info/texinfo/texinfo_pg.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_pg.idx
diff -N test/manuals/res_info/texinfo/texinfo_pg.idx
Index: test/manuals/res_info/texinfo/texinfo_tp.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_tp.idx
diff -N test/manuals/res_info/texinfo/texinfo_tp.idx
Index: test/manuals/res_info/texinfo/texinfo_vr.idx
===================================================================
RCS file: test/manuals/res_info/texinfo/texinfo_vr.idx
diff -N test/manuals/res_info/texinfo/texinfo_vr.idx
Index: test/singular_manual/res_all/singular/sing.txt
===================================================================
RCS file: test/singular_manual/res_all/singular/sing.txt
diff -N test/singular_manual/res_all/singular/sing.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_all/singular/sing.txt 14 Jul 2010 15:42:40
-0000 1.1
@@ -0,0 +1,59 @@
+Short Table of Contents
+***********************
+
+1 Preface
+2 Introduction
+3 General concepts
+4 Data types
+5 Functions and system variables
+6 Tricks and pitfalls
+Appendix A Examples
+Appendix B Polynomial data
+Appendix C Mathematical background
+Appendix D SINGULAR libraries
+E Release Notes
+F Index
+
+
+Top
+***
+
+
+<CENTER>
+<A HREF="http://www.singular.uni-kl.de">
+<IMG SRC="singular.jpg"></A><br>
+<h3> A Computer Algebra System for Polynomial Computations </h3>
+<p></p>
+<h4>HTML User Manual for Singular Version
+2-0-4, October 2002
+</h4>
+</center>
+<CENTER><A HREF="http://www.uni-kl.de/"><I>University of
Kaiserslautern</I></A></CENTER>
+<CENTER><A HREF="http://www.mathematik.uni-kl.de/"><I>Department of
Mathematics</I></A></CENTER>
+<CENTER><A HREF="http://www.mathematik.uni-kl.de/~zca/">
+<I>Centre for Computer Algebra</I></A></CENTER><p></p>
+
+* Preface::
+* Introduction::
+* General concepts::
+* Data types::
+* Functions and system variables::
+* Tricks and pitfalls::
+* Examples::
+* Polynomial data::
+* Mathematical background::
+* SINGULAR libraries::
+* Release Notes::
+* Index::
+
+<blockquote>
+Table of Contents
+<br>
+About this document</blockquote>
+<font size="-1">
+ User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
+generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
+</font>
+
+</body>
+</html>
Index: test/singular_manual/res_all/singular/sing_abt.txt
===================================================================
RCS file: test/singular_manual/res_all/singular/sing_abt.txt
diff -N test/singular_manual/res_all/singular/sing_abt.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_all/singular/sing_abt.txt 14 Jul 2010 15:42:40
-0000 1.1
@@ -0,0 +1,20 @@
+About This Document
+*******************
+
+This document is the user manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002.
+<br>
+
+For questions and comments about Singular, send email to <a
href="mailto:address@hidden">address@hidden</a>.
+
+<p></p>
+This document was generated by <a
href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>
+and <a
href="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/">LaTeX2<tt>HTML</tt></a>
+and is best viewed with a 16 or 18 point screen font.
+<p></p>
+<font size="-1">
+ User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
+generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
+</font>
+
+</body>
+</html>
Index: test/singular_manual/res_info/singular_httex/sing.htm
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.htm
diff -N test/singular_manual/res_info/singular_httex/sing.htm
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_info/singular_httex/sing.htm 14 Jul 2010
15:42:40 -0000 1.1
@@ -0,0 +1,9852 @@
+This is sing.htm, produced by makeinfo version 4.13 from singular.texi.
+
+This is the texinfo file describing Singular (version 2-0-4)
+
+
+File: sing.htm, Node: Top, Next: Preface, Prev: (dir), Up: (dir)
+
+<CENTER>
+<A HREF="http://www.singular.uni-kl.de">
+<IMG SRC="singular.jpg"></A><br>
+<h3> A Computer Algebra System for Polynomial Computations </h3>
+<p></p>
+<h4>HTML User Manual for Singular Version
+2-0-4, October 2002 </h4>
+</center>
+<CENTER><A HREF="http://www.uni-kl.de/"><I>University of
Kaiserslautern</I></A></CENTER>
+<CENTER><A HREF="http://www.mathematik.uni-kl.de/"><I>Department of
Mathematics</I></A></CENTER>
+<CENTER><A HREF="http://www.mathematik.uni-kl.de/~zca/">
+<I>Centre for Computer Algebra</I></A></CENTER><p></p>
+
+* Menu:
+
+* Preface::
+* Introduction::
+* General concepts::
+* Data types::
+* Functions and system variables::
+* Tricks and pitfalls::
+* Examples::
+* Polynomial data::
+* Mathematical background::
+* SINGULAR libraries::
+* Release Notes::
+* Index::
+
+<blockquote>
+Table of Contents
+<br>
+About this document</blockquote>
+
+File: sing.htm, Node: Preface, Next: Introduction, Prev: Top, Up: Top
+
+1 Preface
+*********
+
+ SINGULAR version 2-0-4
+ University of Kaiserslautern
+ Department of Mathematics and Centre for Computer Algebra
+ Authors: G.-M. Greuel, G. Pfister, H. Schoenemann
+
+ Copyright (C) 1986-2003
+
+
+ *NOTICE*
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation ( version 2 of the License ); with the
+following additional restrictions (which override any conflicting
+restrictions in the GPL):
+
+The following software used with SINGULAR have their own copyright: the
+omalloc library, the readline library, the Gnu Multiple Precision
+Library (GMP), NTL: A Library for doing Number Theory (NTL), the Multi
+Protocol library (MP), the Singular-Factory library, the Singular-libfac
+library, and, for the Windows distributions the Cygwin DLL and the
+Cygwin tools (Cygwin), and the XEmacs editor (XEmacs).
+
+Their copyrights and licenses can be found in the accompanying files
+which are distributed along with these packages.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (see GPL)
+
+Please send any comments or bug reports to
+<address@hidden>.
+
+Please register yourself as a SINGULAR user by using the registration
+form on the SINGULAR homepage
+`http://www.singular.uni-kl.de'. If for some reason you cannot access
+the registration form, you can also register by sending an email to
+<address@hidden> with subject line `register' and body
+containing the following data: your name, email address,
+organisation, country and platform(s).
+
+If you use Singular or parts thereof in a project and/or publish results
+that were partly obtained using SINGULAR, we ask you to cite SINGULAR
+and inform us thereof - see
+`http://www.singular.uni-kl.de/how_to_cite.html', for information on how
+to cite Singular.
+
+Availability
+============
+
+The latest information about SINGULAR is always available from
+`http://www.singular.uni-kl.de'. The program SINGULAR and the above
+mentioned parts are available via anonymous ftp through the following
+addresses:
+GMP, libreadline
+ (C) Free Software Foundation
+ `ftp://ftp.gnu.ai.mit.edu' or its mirrors
+
+MP
+ (C) Gray/Kajler/Wang, Kent State University
+ `http://www.symbolicnet.org/areas/protocols/mp.html'
+
+NTL
+ (C) Victor Shoup
+ `ftp://www.shoup.net'
+
+Singular-Factory
+ (C) Greuel/Stobbe, University of Kaiserslautern:
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Factory'
+
+Singular-libfac
+ (C) Messollen, University of Saarbru"cken:
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Libfac'
+
+SINGULAR binaries and sources
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/' or via a WWW
+ browser from
+ `http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/'
+
+Cygwin
+ `http://www.cygwin.com/'
+
+Xemacs
+ `http://www.xemacs.org'
+
+Acknowledgements
+================
+
+The development of SINGULAR is directed and coordinated by Gert-Martin
+Greuel, Gerhard Pfister, and Hans Scho"nemann.
+
+Currently, the SINGULAR team has the following members: Olaf Bachmann,
+Anne Fru"bis-Kru"ger, Thomas Keilen, Kai Kru"ger, Christoph Lossen,
+Viktor Levandovskyy, Wilfred Pohl, Mathias Schulze, Eric Westenberger,
+and Tim Wichmann.
+
+Past members of the SINGULAR team are: Hubert Grassmann, Wolfgang
+Neumann, Jens Schmidt, Ru"diger Stobbe.
+
+Further contributions to SINGULAR were made by: Thomas Bayer, Isabelle
+Bermejo, Stephan Endrass, Jose Ignacio Farran Martin, Wolfram Decker,
+Philippe Gimenez, Christian Gorzel, Agnes Heydtmann, Dietmar Hillebrand,
+Tobias Hirsch, Martin Lamm, Bernd Martin, Michael Messollen, Thomas
+Nu"ssler, Moritz Wenk.
+
+We should like to acknowledge the financial support given by the
+Volkswagen-Stiftung, the Deutsche Forschungsgemeinschaft and the
+Stiftung fu"r Innovation des Landes Rheinland-Pfalz to the SINGULAR
+project.
+
+
+File: sing.htm, Node: Introduction, Next: General concepts, Prev: Preface,
Up: Top
+
+2 Introduction
+**************
+
+* Menu:
+
+* Background::
+* How to use this manual::
+* Getting started::
+
+
+File: sing.htm, Node: Background, Next: How to use this manual, Prev:
Introduction, Up: Introduction
+
+2.1 Background
+==============
+
+SINGULAR is a Computer Algebra system for polynomial computations with
+emphasis on the special needs of commutative algebra, algebraic
+geometry, and singularity theory.
+
+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.
+
+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-resolution computations, and many more related
+functionalities.
+
+Based on an easy-to-use interactive shell and a C-like programming
+language, SINGULAR's internal functionality is augmented and
+user-extendible by libraries written in the SINGULAR programming
+language. A general and efficient implementation of communication links
+allows SINGULAR to make its functionality available to other programs.
+
+SINGULAR's development started in 1984 with an implementation of Mora's
+Tangent Cone algorithm in Modula-2 on an Atari computer (K.P.
+Neuendorf, G. Pfister, H. Schoenemann; Humboldt-Universitaet H.\ Sch\"onemann;
Humboldt-Universit\"at
+ 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 SINGULAR's "home-town" moved to Kaiserslautern, a
+general standard basis algorithm was implemented in C and SINGULAR was
+ported to Unix, MS-DOS, Windows NT, and MacOS.
+
+Continuous extensions (like polynomial factorization, gcd computations,
+links) and refinements led in 1997 to the release of 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.)
+
+For the highlights of the new SINGULAR version 2-0-4 see *note News and
+changes::.
+
+
+File: sing.htm, Node: How to use this manual, Next: Getting started, Prev:
Background, Up: Introduction
+
+2.2 How to use this manual
+==========================
+
+For the impatient user
+......................
+
+In *note Getting started::, some simple examples explain how to use
+SINGULAR in a step-by-step manner.
+
+*note Examples:: should come next for real learning-by-doing or to
+quickly solve some given mathematical problems without dwelling too
+deeply into SINGULAR. This chapter contains a lot of real-life examples
+and detailed instructions and explanations on how to solve mathematical
+problems using SINGULAR.
+
+For the systematic user
+.......................
+
+In *note General concepts::, all basic concepts which are important to
+use and to understand SINGULAR are developed. But even for users
+preferring the systematic approach it will be helpful to have a look at
+the examples in *note Getting started::, every now and then. The topics
+in the chapter are organized more or less in the order the novice user
+has to deal with them.
+
+ * In *note Interactive use::, and its subsections there are some
+ words on entering and exiting SINGULAR, followed by a number of
+ other aspects concerning the interactive user-interface.
+
+ * To do anything more than trivial integer computations, one needs to
+ define a basering in SINGULAR. This is explained in detail in
+ *note Rings and orderings::.
+
+ * An overview of the algorithms implemented in the kernel of SINGULAR
+ is given in *note Implemented algorithms::.
+
+ * In *note The SINGULAR language::, language specific concepts are
+ introduced such as the notions of names and objects, data types and
+ conversion between them, etc.
+
+ * In *note Input and output::, SINGULAR's mechanisms to store and
+ retrieve data are discussed.
+
+ * The more complex concepts of procedures and libraries as well as
+ tools to debug them are considered in the following sections: *note
+ Procedures::, *note Libraries::, and *note Debugging tools::.
+
+*note Data types::, is a complete treatment for SINGULAR's data types
+where each section corresponds to one data type, alphabetically sorted.
+For each data type, its purpose is explained, the syntax of its
+declaration is given, and related operations and functions are listed.
+Examples illustrate its usage.
+
+*note Functions and system variables::, is an alphabetically ordered
+reference list of all of SINGULAR's functions, control structures, and
+system variables. Each entry includes a description of the syntax and
+semantics of the item being explained as well as one or more examples on
+how to use it.
+
+Miscellaneous
+.............
+
+*note Tricks and pitfalls::, is a loose collection of limitations and
+features which may be unexpected by those who expect the SINGULAR
+language to be an exact copy of the C programming language or of some
+Computer Algebra system's languages. But some mathematical hints are
+collected there, as well.
+
+*note Mathematical background::, introduces some of the mathematical
+notions and definitions used throughout this manual. For example, if in
+doubt what exactly SINGULAR means by a "negative degree reverse
+lexicographical ordering" one should refer to this chapter.
+
+*note SINGULAR libraries::, lists the libraries which come with SINGULAR
+and the functions contained in them, respectively.
+
+Typographical conventions
+.........................
+
+Throughout this manual, the following typographical conventions are
+adopted:
+
+ * text in `typewriter' denotes SINGULAR input and output as well as
+ reserved names:
+
+ The basering can be set using the command `setring'.
+
+ * the arrow ==> denotes SINGULAR output:
+
+ `poly p=x+y+z;'
+
+ `p*p;'
+
+ `==> x2+2xy+y2+2xz+2yz+z2'
+
+ * square brackets are used to denote parts of syntax descriptions
+ which are optional:
+
+ [optional_text] required_text
+
+ * keys are denoted using typewriter, for example:
+
+ `N' (press the key `N' to get to the next node in help mode)
+
+ `RETURN' (press `RETURN' to finish an input line)
+
+ `CTRL-P' (press control key together with the key `P' to get the
+ previous input line)
+
+
+File: sing.htm, Node: Getting started, Prev: How to use this manual, Up:
Introduction
+
+2.3 Getting started
+===================
+
+SINGULAR is a special purpose system for polynomial computations. Hence,
+most of the powerful computations in SINGULAR require the prior
+definition of a ring. Most important rings are polynomial rings over a
+field, localizations hereof, or quotient rings of such rings modulo an
+ideal. However, some simple computations with integers (machine integers
+of limited size) and manipulations of strings are available without a
+ring.
+
+* Menu:
+
+* First steps::
+* Rings and standard bases::
+* Procedures and libraries::
+* Change of rings::
+* Modules and their annihilator::
+* Resolution::
+
+
+File: sing.htm, Node: First steps, Next: Rings and standard bases, Prev:
Getting started, Up: Getting started
+
+2.3.1 First steps
+-----------------
+
+Once SINGULAR is started, it awaits an input after the prompt `>'.
+Every statement has to be terminated by `;' .
+
+ 37+5;
+ ==> 42
+
+All objects have a type, e.g., integer variables are defined by the word
+`int'. An assignment is done by the symbol `=' .
+
+ int k = 2;
+
+Test for equality resp. inequality is done using `==' resp. `!=' (or
+`<>'), where `0' represents the boolean value FALSE, any other value
+represents TRUE.
+
+ k == 2;
+ ==> 1
+ k != 2;
+ ==> 0
+
+The value of an object is displayed by simply typing its name.
+
+ k;
+ ==> 2
+
+On the other hand the output is suppressed if an assignment is made.
+
+ int j;
+ j = k+1;
+
+The last displayed (!) result is always available with the special
+symbol `_' .
+
+ 2*_; // the value from k displayed above
+ ==> 4
+
+Text starting with `//' denotes a comment and is ignored in
+calculations, as seen in the previous example. Furthermore SINGULAR
+maintains a history of the previous lines of input, which may be
+accessed by `CTRL-P' (previous) and `CTRL-N' (next) or the arrows on the
+keyboard. Note that the history is not available on Macintosh systems.
+
+The whole manual is available online by typing the command `help;' .
+Explanation on single topics, e.g., on `intmat', which defines a matrix
+of integers, are obtained by
+
+ help intmat;
+
+This shows the text of *note intmat::, in the printed manual.
+
+Next, we define a $3 \times 3$
+3 x 3 matrix of integers and initialize it with some values, row by row
+from left to right:
+
+ intmat m[3][3] = 1,2,3,4,5,6,7,8,9;
+
+A single matrix entry may be selected and changed using square brackets
+`[' and `]'.
+
+ m[1,2]=0;
+ m;
+ ==> 1,0,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+
+To calculate the trace of this matrix, we use a `for' loop. The curly
+brackets `{' and `}' denote the beginning resp. end of a block. If you
+define a variable without giving an initial value, as the variable `tr'
+in the example below, SINGULAR assigns a default value for the specific
+type. In this case, the default value for integers is `0'. Note that the
+integer variable `j' has already been defined above.
+
+ int tr;
+ for ( j=1; j <= 3; j++ ) { tr=tr + m[j,j]; }
+ tr;
+ ==> 15
+
+Variables of type string can also be defined and used without a ring
+being active. Strings are delimited by `"' (double quotes). They may be
+used to comment the output of a computation or to give it a nice format.
+If a string contains valid SINGULAR commands, it can be executed using
+the function `execute'. The result is the same as if the commands would
+have been written on the command line. This feature is especially useful
+to define new rings inside procedures.
+
+ "example for strings:";
+ ==> example for strings:
+ string s="The element of m ";
+ s = s + "at position [2,3] is:"; // concatenation of strings by +
+ s , m[2,3] , ".";
+ ==> The element of m at position [2,3] is: 6 .
+ s="m[2,1]=0; m;";
+ execute(s);
+ ==> 1,0,3,
+ ==> 0,5,6,
+ ==> 7,8,9
+
+This example shows that expressions can be separated by `,' (comma)
+giving a list of expressions. SINGULAR evaluates each expression in this
+list and prints all results separated by spaces.
+
+
+File: sing.htm, Node: Rings and standard bases, Next: Procedures and
libraries, Prev: First steps, Up: Getting started
+
+2.3.2 Rings and standard bases
+------------------------------
+
+To calculate with objects as ideals, matrices, modules, and polynomial
+vectors, a ring has to be defined first.
+
+ ring r = 0,(x,y,z),dp;
+
+The definition of a ring consists of three parts: the first part
+determines the ground field, the second part determines the names of the
+ring variables, and the third part determines the monomial ordering to
+be used. So the example above declares a polynomial ring called `r' with
+a ground field of characteristic 0 $0$
+ (i.e., the rational numbers) and ring variables called `x', `y', and
+`z'. The `dp' at the end means that the degree reverse lexicographical
+ordering should be used.
+
+Other ring declarations:
+
+`ring r1=32003,(x,y,z),dp;'
+ characteristic 32003, variables `x', `y', and `z' and ordering
+ `dp'.
+
+`ring r2=32003,(a,b,c,d),lp;'
+ characteristic 32003, variable names `a', `b', `c', `d' and
+ lexicographical ordering.
+
+`ring r3=7,(x(1..10)),ds;'
+ characteristic 7, variable names `x(1)',...,`x(10)', negative
+ degree reverse lexicographical ordering (`ds').
+
+`ring r4=(0,a),(mu,nu),lp;'
+ transcendental extension of Q $Q$
+ by a $a$
+ , variable names `mu' and `nu'.
+
+`ring r5=real,(a,b),lp;'
+ floating point numbers (single machine precision), variable names
+ `a' and `b'.
+
+`ring r6=(real,50),(a,b),lp;'
+ floating point numbers with extended precision of 50 digits,
+ variable names `a' and `b'.
+
+`ring r7=(complex,50,i),(a,b),lp;'
+ complex floating point numbers with extended precision of 50 digits
+ and imaginary unit `i', variable names `a' and `b'.
+
+Typing the name of a ring prints its definition. The example below shows
+that the default ring in SINGULAR is Z/32003[x,y,z] $Z/32003[x,y,z]$
+
+with degree reverse lexicographical ordering:
+
+ ring r8;
+ r8;
+ ==> // characteristic : 32003
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+
+Defining a ring makes this ring the current active basering, so each
+ring definition above switches to a new basering. The concept of rings
+in SINGULAR is discussed in detail in *note Rings and orderings::.
+
+The basering is now `r8'. Since we want to calculate in the ring `r',
+which we defined first, we have to switch back to it. This can be done
+using the function `setring':
+
+ setring r;
+
+Once a ring is active, we can define polynomials. A monomial, say $x^3$
+x^3 may be entered in two ways: either using the power operator `^',
+saying `x^3', or in short-hand notation without operator, saying `x3'.
+Note that the short-hand notation is forbidden if the name of the ring
+variable consists of more than one character. Note, that SINGULAR always
+expands brackets and automatically sorts the terms with respect to the
+monomial ordering of the basering.
+
+ poly f = x3+y3+(x-y)*x2y2+z2;
+ f;
+ ==> x3y2-x2y3+x3+y3+z2
+
+The command `size' determines in general the number of "single entries"
+in an object. In particular, for polynomials, `size' determines the
+number of monomials.
+
+ size(f);
+ ==> 5
+
+A natural question is to ask if a point, e.g., `(x,y,z)=(1,2,0)', lies
+on the variety defined by the polynomials `f' and `g'. For this we
+define an ideal generated by both polynomials, substitute the
+coordinates of the point for the ring variables, and check if the result
+is zero:
+
+ poly g = f^2 *(2x-y);
+ ideal I = f,g;
+ ideal J = subst(I,var(1),1);
+ J = subst(J,var(2),2);
+ J = subst(J,var(3),0);
+ J;
+ ==> J[1]=5
+ ==> J[2]=0
+
+Since the result is not zero, the point `(1,2,0)' does not lie on the
+variety `V(f,g)'.
+
+Another question is to decide whether some function vanishes on a
+variety, or in algebraic terms if a polynomial is contained in a given
+ideal. For this we calculate a standard basis using the command
+`groebner' and afterwards reduce the polynomial with respect to this
+standard basis.
+
+ ideal sI = groebner(f);
+ reduce(g,sI);
+ ==> 0
+
+As the result is `0' the polynomial `g' belongs to the ideal defined by
+`f'.
+
+The function `groebner', like many other functions in SINGULAR, prints a
+protocol during calculations, if desired. The command `option(prot);'
+enables protocolling whereas `option(noprot);' turns it off. *note
+option::, explains the meaning of the different symbols printed during
+calculations.
+
+The command `kbase' calculates a basis of the polynomial ring modulo an
+ideal, if the quotient ring is finite dimensional. As an example we
+calculate the Milnor number of a hypersurface singularity in the global
+and local case. This is the vector space dimension of the polynomial
+ring modulo the Jacobian ideal in the global case resp. of the power
+series ring modulo the Jacobian ideal in the local case. *Note Critical
+points::, for a detailed explanation.
+
+The Jacobian ideal is obtained with the command `jacob'.
+
+ ideal J = jacob(f);
+ ==> // ** redefining J **
+ J;
+ ==> J[1]=3x2y2-2xy3+3x2
+ ==> J[2]=2x3y-3x2y2+3y2
+ ==> J[3]=2z
+
+SINGULAR prints the line `// ** redefining J **'. This indicates that we
+have previously defined a variable with name `J' of type ideal (see
+above).
+
+To obtain a representing set of the quotient vector space we first
+calculate a standard basis, then we apply the function `kbase' to this
+standard basis.
+
+ J = groebner(J);
+ ideal K = kbase(J);
+ K;
+ ==> K[1]=y4
+ ==> K[2]=xy3
+ ==> K[3]=y3
+ ==> K[4]=xy2
+ ==> K[5]=y2
+ ==> K[6]=x2y
+ ==> K[7]=xy
+ ==> K[8]=y
+ ==> K[9]=x3
+ ==> K[10]=x2
+ ==> K[11]=x
+ ==> K[12]=1
+
+Then
+
+ size(K);
+ ==> 12
+
+gives the desired vector space dimension $K[x,y,z]/\hbox{\rm jacob}(f)$.
+K[x,y,z]/jacob(f). As in SINGULAR the functions may take the input
+directly from earlier calculations, the whole sequence of commands may
+be written in one single statement.
+
+ size(kbase(groebner(jacob(f))));
+ ==> 12
+
+When we are not interested in a basis of the quotient vector space, but
+only in the resulting dimension we may even use the command `vdim' and
+write:
+
+ vdim(groebner(jacob(f)));
+ ==> 12
+
+
+File: sing.htm, Node: Procedures and libraries, Next: Change of rings,
Prev: Rings and standard bases, Up: Getting started
+
+2.3.3 Procedures and libraries
+------------------------------
+
+SINGULAR offers a comfortable programming language, with a syntax close
+to C. So it is possible to define procedures which collect several
+commands to a new one. Procedures are defined with the keyword `proc'
+followed by a name and an optional parameter list with specified types.
+Finally, a procedure may return values using the command `return'.
+
+Define the following procedure called `Milnor':
+
+ proc Milnor (poly h)
+ {
+ return(vdim(groebner(jacob(h))));
+ }
+
+Note: if you have entered the first line of the procedure and pressed
+`RETURN', SINGULAR prints the prompt `.' (dot) instead of the usual
+prompt `>' . This shows that the input is incomplete and SINGULAR
+expects more lines. After typing the closing curly bracket, SINGULAR
+prints the usual prompt indicating that the input is now complete.
+
+Then call the procedure:
+
+ Milnor(f);
+ ==> 12
+
+Note that the result may depend on the basering as we will see in the
+next chapter.
+
+The distribution of SINGULAR contains several libraries, each of which
+is a collection of useful procedures based on the kernel commands, which
+extend the functionality of SINGULAR. The command `help "all.lib";'
+lists all libraries together with a one-line explanation.
+
+One of these libraries is `sing.lib' which already contains a procedure
+called `milnor' to calculate the Milnor number not only for
+hypersurfaces but more generally for complete intersection
+singularities.
+
+Libraries are loaded with the command `LIB'. Some additional information
+during the process of loading is displayed on the screen, which we omit
+here.
+
+ LIB "sing.lib";
+
+As all input in SINGULAR is case sensitive, there is no conflict with
+the previously defined procedure `Milnor', but the result is the same.
+
+ milnor(f);
+ ==> 12
+
+The procedures in a library have a help part which is displayed by
+typing
+
+ help milnor;
+
+as well as some examples, which are executed by
+
+ example milnor;
+
+Likewise, the library itself has a help part, to show a list of all the
+functions available for the user which are contained in the library.
+
+ help sing.lib;
+
+The output of the help commands is omitted here.
+
+
+File: sing.htm, Node: Change of rings, Next: Modules and their annihilator,
Prev: Procedures and libraries, Up: Getting started
+
+2.3.4 Change of rings
+---------------------
+
+To calculate the local Milnor number we have to do the calculation with
+the same commands in a ring with local ordering. Define the
+localization of the polynomial ring at the origin (*note Polynomial
+data::, and *note Mathematical background::).
+
+ ring rl = 0,(x,y,z),ds;
+
+This ordering determines the standard basis which will be calculated.
+Fetch the polynomial defined in the ring `r' into this new ring, thus
+avoiding retyping the input.
+
+ poly f = fetch(r,f);
+ f;
+ ==> z2+x3+y3+x3y2-x2y3
+
+Instead of `fetch' we can use the function `imap' which is more general
+but less efficient. The most general way to fetch data from one ring to
+another is to use maps, this will be explained in *note map::.
+
+In this ring the terms are ordered by increasing exponents. The local
+Milnor number is now
+
+ Milnor(f);
+ ==> 4
+
+This shows that `f' has outside the origin in affine 3-space
+singularities with local Milnor number adding up to $12-4=8$.
+12-4=8. Using global and local orderings as above is a convenient way
+to check whether a variety has singularities outside the origin.
+
+The command `jacob' applied twice gives the Hessian of `f', a 3x3 -
+matrix.
+
+ matrix H = jacob(jacob(f));
+ H;
+ ==> H[1,1]=6x+6xy2-2y3
+ ==> H[1,2]=6x2y-6xy2
+ ==> H[1,3]=0
+ ==> H[2,1]=6x2y-6xy2
+ ==> H[2,2]=6y+2x3-6x2y
+ ==> H[2,3]=0
+ ==> H[3,1]=0
+ ==> H[3,2]=0
+ ==> H[3,3]=2
+
+The `print' command displays the matrix in a nicer form.
+
+ print(H);
+ ==> 6x+6xy2-2y3,6x2y-6xy2, 0,
+ ==> 6x2y-6xy2, 6y+2x3-6x2y,0,
+ ==> 0, 0, 2
+
+We may calculate the determinant and (the ideal generated by all) minors
+of a given size.
+
+ det(H);
+ ==> 72xy+24x4-72x3y+72xy3-24y4-48x4y2+64x3y3-48x2y4
+ minor(H,1); // the 1x1 - minors
+ ==> _[1]=2
+ ==> _[2]=6y+2x3-6x2y
+ ==> _[3]=6x2y-6xy2
+ ==> _[4]=6x2y-6xy2
+ ==> _[5]=6x+6xy2-2y3
+
+The algorithm of the standard basis computations may be affected by the
+command `option'. For example, a reduced standard basis of the ideal
+generated by the $1 \times 1$-minors
+1 x 1 - minors of H is obtained in the following way:
+ option(redSB);
+ groebner(minor(H,1));
+ ==> _[1]=1
+
+This shows that 1 is contained in the ideal of the $1 \times 1$-minors,
+1 x 1 - minors, hence the corresponding variety is empty.
+
+
+File: sing.htm, Node: Modules and their annihilator, Next: Resolution,
Prev: Change of rings, Up: Getting started
+
+2.3.5 Modules and their annihilator
+-----------------------------------
+
+Now we shall give three more advanced examples.
+
+SINGULAR is able to handle modules over all the rings, which can be
+defined as a basering. A free module of rank `n' is defined as follows:
+
+ ring rr;
+ int n = 4;
+ freemodule(4);
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=gen(3)
+ ==> _[4]=gen(4)
+ typeof(_);
+ ==> module
+ print(freemodule(4));
+ ==> 1,0,0,0,
+ ==> 0,1,0,0,
+ ==> 0,0,1,0,
+ ==> 0,0,0,1
+
+To define a module, we give a list of vectors generating a submodule of
+a free module. Then this set of vectors may be identified with the
+columns of a matrix. For that reason in SINGULAR matrices and modules
+may be interchanged. However, the representation is different (modules
+may be considered as sparse represented matrices).
+
+ ring r =0,(x,y,z),dp;
+ module MD = [x,0,x],[y,z,-y],[0,z,-2y];
+ matrix MM = MD;
+ print(MM);
+ ==> x,y,0,
+ ==> 0,z,z,
+ ==> x,-y,-2y
+
+However the submodule MD $MD$
+ may also be considered as the module of relations of the factor module
$r^3/MD$.
+r^3/MD. In this way, SINGULAR can treat arbitrary finitely generated
+modules over the basering (*note Representation of mathematical
+objects::).
+
+In order to get the module of relations of MD $MD$
+, we use the command `syz'.
+
+ syz(MD);
+ ==> _[1]=x*gen(3)-x*gen(2)+y*gen(1)
+
+We want to calculate, as an application, the annihilator of a given
+module. Let $M = r^3/U$,
+M = r^3/U, where U is our defining module of relations for the module $M$.
+M.
+
+ module U =
[z3,xy2,x3],[yz2,1,xy5z+z3],[y2z,0,x3],[xyz+x2,y2,0],[xyz,x2y,1];
+
+Then, by definition, the annihilator of M is the ideal $\hbox{ann}(M) = \{a
\mid aM = 0 \}$
+ann(M) = {a | aM = 0 } which is by the description of M the same as $\{ a \mid
ar^3 \in U \}$.
+{ a | ar^3 contained in U}. Hence we have to calculate the quotient $U \colon
r^3 $.
+U:r^3. The rank of the free module is determined by the choice of U and
+is the number of rows of the corresponding matrix. This may be
+determined by the function `nrows'. All we have to do now is the
+following:
+
+ quotient(U,freemodule(nrows(U)));
+
+The result is too big to be shown here.
+
+
+File: sing.htm, Node: Resolution, Prev: Modules and their annihilator, Up:
Getting started
+
+2.3.6 Resolution
+----------------
+
+There are several commands in SINGULAR for computing free resolutions.
+The most general command is `res(... ,n)' which determines heuristically
+what method to use for the given problem. It computes the free
+resolution up to the length n $n$
+, where n=0 $n=0$
+ corresponds to the full resolution.
+
+Here we use the possibility to inspect the calculation process using the
+option `prot'.
+
+ ring R; // the default ring in char 32003
+ R;
+ ==> // characteristic : 32003
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ideal I = x4+x3y+x2yz,x2y2+xy2z+y2z2,x2z2+2xz3,2x2z2+xyz2;
+ option(prot);
+ resolution rs = res(I,0);
+ ==> using lres
+ ==> 4(m0)4(m1).5(m1)g.g6(m1)...6(m2)..
+
+Disable this protocol with
+
+ option(noprot);
+
+When we enter the name of the calculated resolution, we get a pictorial
+description of the minimized resolution where the exponents denote the
+rank of the free modules. Note that the calculated resolution itself may
+not yet be minimal.
+
+ rs;
+ ==> 1 4 5 2 0
+ ==>R <-- R <-- R <-- R <-- R
+ ==>
+ ==>0 1 2 3 4
+ print(betti(rs),"betti");
+ ==> 0 1 2 3
+ ==> ------------------------------
+ ==> 0: 1 - - -
+ ==> 1: - - - -
+ ==> 2: - - - -
+ ==> 3: - 4 1 -
+ ==> 4: - - 1 -
+ ==> 5: - - 3 2
+ ==> ------------------------------
+ ==> total: 1 4 5 2
+
+In order to minimize the resolution, that is to calculate the maps of
+the minimal free resolution, we use the command `minres':
+
+ rs=minres(rs);
+
+A single module in this resolution is obtained (as usual) with the
+brackets `[' and `]'. The `print' command can be used to display a
+module in a more readable format:
+
+ print(rs[3]);
+ ==> z3, -xyz-y2z-4xz2+16z3,
+ ==> 0, -y2,
+ ==> -y+4z,48z,
+ ==> x+2z, 48z,
+ ==> 0, x+y-z
+
+In this case, the output is to be interpreted as follows: the 3rd syzygy
+module of R/I, `rs[3]', is the rank-2-submodule of $R^5$
+R^5 generated by the vectors $(z^3,0,-y+4z,x+2z,0)$ and
$(-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z)$.
+(z^3,0,-y+4z,x+2z,0) and (-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z).
+
+
+File: sing.htm, Node: General concepts, Next: Data types, Prev:
Introduction, Up: Top
+
+3 General concepts
+******************
+
+* Menu:
+
+* Interactive use::
+* Emacs user interface::
+* Rings and orderings::
+* Implemented algorithms::
+* The SINGULAR language::
+* Input and output::
+* Procedures::
+* Libraries::
+* Guidelines for writing a library::
+* Debugging tools::
+
+
+File: sing.htm, Node: Interactive use, Next: Emacs user interface, Prev:
General concepts, Up: General concepts
+
+3.1 Interactive use
+===================
+
+In this section, aspects of interactive use are discussed. This
+includes how to enter and exit SINGULAR, how to interpret its prompt,
+how to get the online help, and so on.
+
+There are a few important notes which one should not forget:
+ * every command has to be terminated by a `;' (semicolon) followed by
+ a <RETURN>
+
+ * the online help is accessible by means of the `help' function
+
+* Menu:
+
+* How to enter and exit::
+* The SINGULAR prompt::
+* The online help system::
+* Interrupting SINGULAR::
+* Editing input::
+* Command line options::
+* Startup sequence::
+
+
+File: sing.htm, Node: How to enter and exit, Next: The SINGULAR prompt,
Prev: Interactive use, Up: Interactive use
+
+3.1.1 How to enter and exit
+---------------------------
+
+SINGULAR can either be run in ASCII-terminal or within Emacs.
+
+To start SINGULAR in its ASCII-terminal user interface, enter
+`Singular' at the system prompt. The SINGULAR banner appears which,
+among others, reports the version and the compilation date.
+
+To start SINGULAR in its Emacs user interface, either enter `ESingular'
+at the system prompt, or type `M-x singular' within a running Emacs
+(provided you have loaded the file `singular.el' in your running Emacs,
+see *note Running SINGULAR under Emacs:: for details).
+
+Generally, we recommend to use SINGULAR in its Emacs interface, since
+this offers many more features and is more convenient to use than the
+ASCII-terminal interface (*note Emacs user interface::).
+
+To exit SINGULAR type `quit;', `exit;' or `$' (or, when running within
+Emacs preferably type `C-c $').
+
+SINGULAR and `ESingular' may also be started with command line options
+and with filenames as arguments. More generally, the synopsis of
+SINGULAR is
+ Singular [options] [file1 [file2 ...]]
+ ESingular [options] [file1 [file2 ...]]
+
+*Note Command line options::, *note Startup sequence::, *note Running
+SINGULAR under Emacs::.
+
+
+File: sing.htm, Node: The SINGULAR prompt, Next: The online help system,
Prev: How to enter and exit, Up: Interactive use
+
+3.1.2 The SINGULAR prompt
+-------------------------
+
+The SINGULAR prompt `>' (larger than) asks the user for input of
+commands. The "continuation" prompt `.' (period) asks the user for
+input of missing parts of a command (remember the semicolon at the end
+of every command).
+
+SINGULAR does not interpret the semicolon as the end of a command if it
+occurs inside a string. Also, SINGULAR waits for blocks (sequences of
+commands enclosed in curly brackets) to be closed before prompting with
+`>' for more commands. Thus, if SINGULAR does not respond with its
+regular prompt after typing a semicolon it may wait for a `"' or a `}'
+first.
+
+Additional semicolons will not harm SINGULAR since they are interpreted
+as empty statements.
+
+
+File: sing.htm, Node: The online help system, Next: Interrupting SINGULAR,
Prev: The SINGULAR prompt, Up: Interactive use
+
+3.1.3 The online help system
+----------------------------
+
+The online help system is invoked with the `help' command. `?' may be
+used as a synonym for `help'. Simply typing `help;' displays the "top"
+of the help system (i.e., the title page of the SINGULAR manual) which
+offers a short table of contents. Typing `help' topic`;' shows the
+available documentation on topic. Here, topic may be either a function
+name or, more generally, any index entry of the SINGULAR manual.
+Furthermore, topic may contain wildcard characters. *Note help::, for
+more information.
+
+Online help information can be displayed in various help browsers. The
+following table lists a summary of the supported browsers. See below for
+more details about particular browsers.
+
+*Browser* *Platform* *Description*
+
+html Windows displays html version of manual in your
+ default html browser
+
+winhlp Windows displays Windows help (.hlp) version of
+ manual
+
+netscape Unix, uses `netscape' to display html version
+ Windows of manual
+
+tkinfo Unix uses the `tkinfo' program to display
+ texinfo version of manual
+
+xinfo Unix, uses the `info' program to display
+ Windows texinfo version of manual in an extra
+ `xterm'
+
+info Unix, uses the `info' program to display
+ Windows texinfo version of manual
+
+builtin all simply outputs the help information in
+ plain ASCII format
+
+emacs Unix, when running SINGULAR within (X)emacs,
+ Windows display help in (X)emacs info buffer.
+
+dummy all displays error message about no available
+ help browser
+
+The browser which is used to display the help information, can be either
+set at startup time with the command line option (*note Command line
+options::)
+ --brower=<browser>
+or with the SINGULAR command (*note system::)
+ system("--browser", <browser>);
+The SINGULAR command
+ system("browsers");
+lists all available browsers and the command
+ system("--browser");
+returns the currently used browser.
+
+If no browser is explicitly set by the user, then the first (w.r.t. the
+order of the browsers in the table above) available browser is chosen.
+In other words, the default browser is `netscape' for Unix platforms,
+and `html' for Windows, unless your local set-up does not allow to run
+it.
+
+The `.singularrc' (*note Startup sequence::) file is a good place to set
+your default browser. Recall that if a file `$HOME/.singularrc' exists
+on your system, then the content of this file is executed before the
+first user input. Hence, putting
+ if (system("version") >= 1306) // keep backwards-compatibility
+ {
+ if (! system("--emacs")
+ {
+ // only set help browser if not running within emacs
+ system("--browser", "info");
+ }
+ // if help browser is later on set to netscape,
+ // allow it to fetch HTML pages from the net
+ system("--allow-net", 1);
+ }; // the last semicolon is important: otherwise no ">", but "." prompt
+in your file `$HOME/.singularrc' sets your default browser to `info',
+unless SINGULAR is run within emacs (in which case the default browser
+is set automatically to `emacs').
+
+Obviously, certain external files and programs are required for the
+SINGULAR help system to work correctly. If something is not available or
+goes wrong, here are some tips for troubleshooting the help system:
+
+ * Under Unix, the environment variable `DISPLAY' has to be set for
+ the browsers `netscape', `tkinfo', and `xinfo' to work.
+
+ * The help browsers `netscape', `tkinfo', `xinfo', and `info' are
+ only available if the respective programs are installed on your
+ system (for `xinfo', the programs `xterm' and `info' are
+ necessary). You can explicitly specify which program to use, by
+ setting appropriate environment variables (whose names are the
+ names of the respective programs in all up-case letters).
+ For example, to use the program `navigator' with a private colormap
+ as `netscape' help browser, set the environment variable `NETSCAPE'
+ to the value `"navigator -install"'.
+
+ * If the help browser `netscape' can not find the local html pages of
+ the SINGULAR manual (which it looks for at `$RootDir/html' - see
+ *note Loading of a library:: for more info on `$RootDir') _and_ the
+ (command-line) option `--allow-net' has _explicitly_ been set (see
+ *note Command line options:: and *note system:: for more info on
+ setting values of command-line options), then it dispatches the
+ html pages from `http://www.singular.uni-kl.de/Manual' (note that
+ the non-local net-access of HTML pages is disabled, by default).
+ An alternative location of a local directory where the html pages
+ reside can be specified by setting the environment variable
+ `SINGULAR_HTML_DIR'.
+
+ * The help browsers `tkinfo', `xinfo', `info', and `builtin' need the
+ (info) file `singular.hlp' which it looks for at
+ `$RootDir/info/singular.hlp' (see *note Loading of a library:: for
+ more info on `$RootDir'). An alternative location of the info file
+ of the manual can be specified by setting the environment variable
+ `SINGULAR_INFO_FILE'.
+
+* Menu:
+
+See also:
+* Command line options::
+* Loading of a library::
+* Startup sequence::
+* system::
+
+*See also:* *note Command line options::; *note Loading of a library::;
+*note Startup sequence::; *note system::.
+
+Info help browsers
+..................
+
+The help browsers `tkinfo', `xinfo' and `info' (so-called info help
+browsers) are based on the `info' program from the Gnu `texinfo'
+package. *Note An Introduction to Info: (info)Top, for more
+information.
+
+For info help browsers, the online manual is decomposed into "nodes" of
+information, closely related to the division of the printed manual into
+sections and subsections. A node contains text describing a specific
+topic at a specific level of detail. The top line of a node is its
+"header". The node's header tells the name of the current node
+(`Node:'), the name of the next node (`Next:'), the name of the previous
+node (`Prev:'), and the name of the upper node (`Up:').
+
+To move within info, type commands consisting of single characters. Do
+not type `RETURN'. Do not use cursor keys, either. Using some of the
+cursor keys by accident might pop to some totally different node. Type
+`l' to return to the original node. Some of the `info' commands read
+input from the command line at the bottom line. The `TAB' key may be
+used to complete partially entered input.
+
+The most important commands are:
+`q'
+ leaves the online help system
+
+`n'
+ goes to the next node
+
+`p'
+ goes to the previous node
+
+`u'
+ goes to the upper node
+
+`m'
+ picks a menu item specified by name
+
+`f'
+ follows a cross reference
+
+`l'
+ goes to the previously visited node
+
+`b'
+ goes to the beginning of the current node
+
+`e'
+ goes to the end of the current node
+
+`SPACE'
+ scrolls forward a page
+
+`DEL'
+ scrolls backward a page
+
+`h'
+ invokes info tutorial (use `l' to return to the manual or `CTRL-X
+ 0' to remove extra window)
+
+`CTRL-H'
+ shows a short overview on the online help system (use `l' to return
+ to the manual or `CTRL-X 0' to remove extra window)
+
+`s'
+ searches through the manual for a specified string, and selects the
+ node in which the next occurrence is found
+
+`1', ..., `9'
+ picks i-th subtopic from a menu
+
+
+File: sing.htm, Node: Interrupting SINGULAR, Next: Editing input, Prev: The
online help system, Up: Interactive use
+
+3.1.4 Interrupting SINGULAR
+---------------------------
+
+On Unix-like operating systems and on Windows NT, typing `CTRL-C' (or,
+alternatively `C-c C-c', when running within Emacs), interrupts
+SINGULAR. SINGULAR prints the current command and the current line and
+prompts for further action. The following choices are available:
+`a'
+ returns to the top level after finishing the current (kernel)
+ command. Notice that commands of the SINGULAR kernel (like `std')
+ can not be aborted, i.e. (`a')bort only happens whenever the
+ interpreter is active.
+
+`c'
+ continues
+
+`q'
+ quits SINGULAR
+
+
+File: sing.htm, Node: Editing input, Next: Command line options, Prev:
Interrupting SINGULAR, Up: Interactive use
+
+3.1.5 Editing input
+-------------------
+
+The following keys can be used for editing the input and retrieving
+previous input lines:
+`TAB'
+ provides command line completion for function names and file names
+
+`CTRL-B'
+ moves cursor left
+
+`CTRL-F'
+ moves cursor right
+
+`CTRL-A'
+ moves cursor to beginning of line
+
+`CTRL-E'
+ moves cursor to end of line
+
+`CTRL-D'
+ deletes character under cursor
+ Warning: on an empty line, `CTRL-D' is interpreted as the `EOF'
+ character which immediately terminates SINGULAR.
+
+`BACKSPACE'
+`DELETE'
+`CTRL-H'
+ deletes character before cursor
+
+`CTRL-K'
+ kills from cursor to end of line
+
+`CTRL-U'
+ kills from cursor to beginning of line
+
+`CTRL-N'
+ saves current line on history and gives next line
+
+`CTRL-P'
+ saves current line on history and gives previous line
+
+`RETURN'
+ saves the current line to the history and sends it to the SINGULAR
+ parser for interpretation
+
+When run under a Unix-like operating system and in its ASCII-terminal
+user interface, SINGULAR tries to dynamically link at runtime with the
+GNU Readline library. *Note GNU Readline Library: (readline)Command Line
+Editing, for more information. If a shared version of this library can
+be found on your machine, then additional command-line editing features
+like history completion are available. In particular, if SINGULAR is
+able to load that library and if the environment variable `SINGULARHIST'
+is set and has a name of a file as value, then the input history is
+stored across sessions using this file. Otherwise, i.e., if the
+environment variable `SINGULARHIST' is not set, then the history of the
+last inputs is only available for the commands of the current session.
+
+
+File: sing.htm, Node: Command line options, Next: Startup sequence, Prev:
Editing input, Up: Interactive use
+
+3.1.6 Command line options
+--------------------------
+
+The synopsis of SINGULAR is
+ Singular [options] [file1 [file2 ...]]
+ ESingular [options] [file1 [file2 ...]]
+Options can be given in both, their long and short format. The following
+options control the general behavior of SINGULAR:
+
+`-d', `--sdb'
+ Enable the use of the source code debugger. *Note Source code
+ debugger::.
+
+`-e', `--echo[=VAL]'
+ Set value of variable `echo' to `VAL' (integer in the range 0, ...,
+ 9). Without an argument, `echo' is set to 1, which echoes all input
+ coming from a file. By default, the value of `echo' is 0. *Note
+ echo::.
+
+`-h', `--help'
+ Print a one-line description of each command line option and exit.
+
+`--allow-net'
+ Allow the `netscape' and `html' help browser to fetch HTML manual
+ pages over the net from the WWW home-site of SINGULAR. *Note The
+ online help system::, for more info.
+
+`--browser=VAL'
+ Use `VAL' as browser for the SINGULAR online manual.
+ `VAL' may be one of `html' (Windows only), `netscape', `xinfo',
+ `tkinfo', `info', `builtin', or `emacs'. Depending on your platform
+ and local installation, only some browsers might be available. The
+ default browser is `html' for Windows and `netscape' for Unix
+ platforms. *Note The online help system::, for more info.
+
+`--no-rc'
+ Do not execute the `.singularrc' file on start-up. By default,
+ this file is executed on start-up. *Note Startup sequence::.
+
+`--no-stdlib'
+ Do not load the library `standard.lib' on start-up. By default,
+ this library is loaded on start-up. *Note Startup sequence::.
+
+`--no-warn'
+ Do not display warning messages.
+
+`--no-out'
+ Suppress display of all output.
+
+`-t', `--no-tty'
+ Do not redefine the terminal characteristics. This option should
+ be used for batch processes.
+
+`-q', `--quiet'
+ Do not print the start-up banner and messages when loading
+ libraries. Furthermore, redirect `stderr' (all error messages) to
+ `stdout' (normal output channel). This option should be used if
+ SINGULAR's output is redirected to a file.
+
+`-v', `--verbose'
+ Print extended information about the version and configuration of
+ SINGULAR (used optional parts, compilation date, start of random
+ generator etc.). This information should be included if a user
+ reports an error to the authors.
+
+The following command line options allow manipulations of the timer and
+the pseudo random generator and enable the passing of commands and
+strings to SINGULAR:
+
+`-c', `--execute=STRING'
+ Execute `STRING' as (a sequence of) SINGULAR commands on start-up
+ after the `.singularrc' file is executed, but prior to executing
+ the files given on the command line. E.g., `Singular -c "help
+ all.lib; quit;"' shows the help for the library `all.lib' and
+ exits.
+
+`-u', `--user-option=STRING'
+ Returns `STRING' on `system("--user-option")'. This is useful for
+ passing arbitrary arguments from the command line to the SINGULAR
+ interpreter. E.g.,
+ `Singular -u "xxx.dump" -c 'getdump(system("--user-option"))''
+ reads the file `xxx.dump' at start-up and allows the user to start
+ working with all the objects defined in a previous session.
+
+`-r', `--random=SEED'
+ Seed (i.e., set the initial value of) the pseudo random generator
+ with integer `SEED'. If this option is not given, then the random
+ generator is seeded with a time-based `SEED' (the number of seconds
+ since January, 1, 1970, on Unix-like operating systems, to be
+ precise).
+
+`--min-time=SECS'
+ If the `timer' (*note timer::), resp. `rtimer' (*note rtimer::) ,
+ variable is set, report only times larger than `SECS' seconds
+ (`SECS' needs to be a floating point number greater than 0). By
+ default, this value is set to 0.5 (i.e., half a second). E.g., the
+ option `--min-time=0.01' forces SINGULAR to report all times larger
+ than 1/100 of a second.
+
+`--ticks-per-sec=TICKS'
+ Set unit of timer to `TICKS' ticks per second (i.e., the value
+ reported by the `timer' and `rtimer' variable divided by `TICKS'
+ gives the time in seconds). By default, this value is 1.
+
+The next three options are of interest for the use with MP links:
+`-b', `--batch'
+ Run in MP batch mode. Opens a TCP/IP connection with host specified
+ by `--MPhost' at the port specified by `--MPport'. Input is read
+ from and output is written to this connection in the MP format.
+ *Note MPtcp links::.
+
+`--MPport=PORT'
+ Use `PORT' as default port number for MP connections (whenever not
+ further specified). This option is mandatory when the `--batch'
+ option is given. *Note MPtcp links::.
+
+`--MPhost=HOST'
+ Use `HOST' as default host for MP connections (whenever not further
+ specified). This option is mandatory when the `--batch' option is
+ given. *Note MPtcp links::.
+
+Finally, the following options are only available when running
+`ESingular' (see *note Running SINGULAR under Emacs:: for details).
+
+`--emacs=EMACS'
+ Use `EMACS' as Emacs program to run the SINGULAR Emacs interface,
+ where `EMACS' may e.g. be emacs ore xemacs.
+
+`--emacs-dir=DIR'
+ Set the singular-emacs-home-directory, which is the directory where
+ singular.el can be found, to `DIR'.
+
+`--emacs-load=FILE'
+ Load `FILE' on Emacs start-up, instead of the default load file.
+
+`--singular=PROG'
+ Start `PROG' as SINGULAR program within Emacs
+
+The value of options given to SINGULAR (resp. their default values, if
+an option was not given), can be checked with the command
+`system("--'long_option_name`")'. *Note system::.
+ system("--quiet"); // if ``quiet'' 1, otherwise 0
+ ==> 1
+ system("--min-time"); // minimal reported time
+ ==> 0.5
+ system("--random"); // seed of the random generator
+ ==> 12345678
+
+Furthermore, the value of options (e.g., `--browser') can be re-set
+while SINGULAR is running with the command
+`system("--'long_option_name_string `",'expression`)'. *Note system::.
+ system("--browser", "builtin"); // sets browser to 'builtin'
+ system("--ticks-per-sec", 100); // sets timer resolution to 100
+
+
+File: sing.htm, Node: Startup sequence, Prev: Command line options, Up:
Interactive use
+
+3.1.7 Startup sequence
+----------------------
+
+On start-up, SINGULAR
+ 1. loads the library `standard.lib' (provided the `--no-stdlib' option
+ was not given),
+
+ 2. searches the current directory and then the home directory of the
+ user, and then all directories contained in the library
+ `SearchPath' (see *note Loading of a library:: for more info on
+ `SearchPath') for a file named `.singularrc' and executes it, if
+ found (provided the `--no-rc' option was not given),
+
+ 3. executes the string specified with the `--execute' command line
+ option,
+
+ 4. executes the files `file1', `file2' ... (given on the command
+ line) in that order.
+
+*Note:* `.singularrc' file(s) are an appropriate place for setting some
+default values of (command-line) options.
+
+For example, a system administrator might remove the locally installed
+HTML version of the manual and put a `.singularrc' file with the
+following content
+ if (system("version") >= 1306) // assure backwards-compatibility
+ {
+ system("--allow-net", 1);
+ }; // the last semicolon is important: otherwise no ">", but "." prompt
+in the directory containing the SINGULAR libraries, thereby allowing to
+fetch the HTML on-line help from the WWW home-site of SINGULAR.
+
+On the other hand, a single user might put a `.singularrc' with the
+following content
+ if (system("version") >= 1306) // assure backwards-compatibility
+ {
+ if (! system("--emacs"))
+ {
+ // set default browser to info, unless we run within emacs
+ system("--browser", "info");
+ }
+ }; // the last semicolon is important: otherwise no ">", but "." prompt
+in his home directory, which sets the default help browser to `info'
+(unless SINGULAR is run within emacs) and thereby prevents the execution
+of the"global" `.singularrc' file installed by the system administrator
+(since the `.singularrc' file of the user is found before the "global"
+`.singularrc' file installed by the system administrator).
+
+
+File: sing.htm, Node: Emacs user interface, Next: Rings and orderings,
Prev: Interactive use, Up: General concepts
+
+3.2 Emacs user interface
+========================
+
+Besides running SINGULAR in an ASCII-terminal, SINGULAR might also be
+run within Emacs. Emacs (or, XEmacs which is very similar) is a powerful
+and freely available text editor, which, among others, provides a
+framework for the implementation of interactive user interfaces.
+Starting from version 1.3.6, SINGULAR provides such an implementation,
+the so-called SINGULAR Emacs mode, or Emacs user interface.
+
+Generally, we recommend to use the Emacs interface, instead of the
+ASCII-terminal interface: The Emacs interface does not only provide
+everything the ASCII-terminal interface provides, but offers much more.
+Among others, it offers
+ * color-highlighting
+
+ * truncation of long lines
+
+ * folding of input and output
+
+ * TAB-completion for help topics
+
+ * highlighting of matching parentheses
+
+ * key-bindings and interactive menus for most user interface commands
+ and for basic SINGULAR commands (such as loading of libraries and
+ files)
+
+ * a mode for running interactive SINGULAR demonstrations
+
+ * convenient ways to edit SINGULAR input files
+
+ * interactive customization of nearly all aspects of the
+ user-interface.
+
+To use the SINGULAR-Emacs interface you need to have Emacs version 20 or
+higher, or XEmacs version 20.3 or higher installed on your system. These
+editors can be downloaded for most hard- and software platforms
+(including Windows 95/98/NT, but excluding the Macintosh), from either
+`http://www.fsf.org/software/emacs/emacs.html' (Emacs), from
+`http://www.xemacs.org' (XEmacs), or from our ftp site at
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'. The
+differences between Emacs and XEmacs w.r.t. the SINGULAR-Emacs
+interface are marginal - which editor to use is mainly a matter of
+personal preferences.
+
+The simplest way to start-up SINGULAR in its Emacs interface is by
+running the program `ESingular' which is contained in the Singular
+distribution. Alternatively, SINGULAR can be started within an already
+running Emacs - see *note Running SINGULAR under Emacs:: for details.
+
+The next section gives a tutorial-like introduction to Emacs. This
+introductory section is followed by sections which explain the
+functionality of various aspects of the Emacs user interface in more
+detail: how to start/restart/kill SINGULAR within Emacs, how to run an
+interactive demonstration, how to customize the Emacs user interface,
+etc. Finally, the 20 most important commands of the Emacs interface
+together with their key bindings are listed.
+
+* Menu:
+
+* A quick guide to Emacs::
+* Running SINGULAR under Emacs::
+* Demo mode::
+* Customization of the Emacs interface::
+* Editing SINGULAR input files with Emacs::
+* Top 20 Emacs commands::
+
+
+File: sing.htm, Node: A quick guide to Emacs, Next: Running SINGULAR under
Emacs, Prev: Emacs user interface, Up: Emacs user interface
+
+3.2.1 A quick guide to Emacs
+----------------------------
+
+This section gives a tutorial-like introduction to Emacs. Especially to
+users who are not familiar with Emacs, we recommend that they go through
+this section and try out the described features.
+
+Emacs commands generally involve the `CONTROL' key (sometimes labeled
+`CTRL' or `CTL') or the `META' key. On some keyboards, the `META' key
+is labeled `ALT' or `EDIT' or something else (for example, on Sun
+keyboards, the diamond key to the left of the space-bar is `META'). If
+there is no `META' key, the `ESC' key can be used, instead. Rather than
+writing out `META' or `CONTROL' each time we want to prefix a character,
+we will use the following abbreviations:
+
+`C-<chr>' means hold the `CONTROL' key while typing the character
+ `<chr>'. Thus, `C-f' would be: hold the `CONTROL' key
+ and type `f'.
+`M-<chr>' means hold the `META' key down while typing `<chr>'. If
+ there is no `META' key, type <ESC>, release it, then
+ type the character `<chr>'.
+
+For user new to Emacs, we highly recommend that they go through the
+interactive Emacs tutorial: type `C-h t' to start it.
+
+For others, it is important to understand the following Emacs concepts:
+window
+ In Emacs terminology, a window refers to separate panes within the
+ same window of the window system, and not to overlapping, separate
+ windows. When using SINGULAR within Emacs, extra windows may appear
+ which display help or output from certain commands. The most
+ important window commands are:
+ `C-x 1'
`File->Un-Split' Un-Split window (i.e., kill other
+
windows)
+ `C-x o'
Goto other window, i.e. move
+
cursor into other window.
+
+cursor and point
+ The location of the cursor in the text is also called "point". To
+ paraphrase, the cursor shows on the screen where point is located
+ in the text. Here is a summary of simple cursor-moving operations:
+ `C-f' Move forward a character
+ `C-b' Move backward a character
+ `M-f' Move forward a word
+ `M-b' Move backward a word
+ `C-a' Move to the beginning of line
+ `C-e' Move to the end of line
+
+buffer
+ Any text you see in an Emacs window is always part of some buffer.
+ For example, each file you are editing with Emacs is stored inside
+ a buffer, but also SINGULAR is running inside an Emacs buffer. Each
+ buffer has a name: for example, the buffer of a file you edit
+ usually has the same name as the file, SINGULAR is running in a
+ buffer which has the name `*singular*' (or, `*singular<2>*',
+ `*singular<3>*', etc., if you have multiple SINGULAR sessions
+ within the same Emacs).
+
+ When you are asked for input to an Emacs command, the cursor moves
+ to the bottom line of Emacs, i.e., to a special buffer, called the
+ "minibuffer". Typing <RETURN> within the minibuffer, ends the
+ input, typing <SPACE> within the minibuffer, lists all possible
+ input values to the interactive Emacs command.
+
+ The most important buffer commands are
+ `C-x b' Switch buffer
+ `C-x k' Kill current buffer
+ Alternatively, you can switch to or kill buffers using the `Buffer'
+ menu.
+
+Executing commands
+ Emacs commands are executed by typing `M-x <command-name>'
+ (remember that <SPACE> completes partial command names). Important
+ and frequently used commands have short-cuts for their execution:
+ Key bindings or even menu entries. For example, a file can be
+ loaded with `M-x load-file', or `C-x C-f', or with the `File->Open'
+ menu.
+
+How to exit
+ To end the Emacs (and, SINGULAR) session, type `C-x C-c' (two
+ characters), or use the `File -> Exit' menu.
+
+When Emacs is hung
+ If Emacs stops responding to your commands, you can stop it safely
+ by typing `C-g', or, if this fails, by typing `C-]'.
+
+More help
+ Nearly all aspects of Emacs are very well documented: type `C-h'
+ and then a character saying what kind of help you want. For
+ example, typing `C-h i' enters the `Info' documentation browser.
+
+Using the mouse
+ Emacs is fully integrated with the mouse. In particular, clicking
+ the right mouse button brings up a pop-up menu which usually
+ contains a few commonly used commands.
+
+
+File: sing.htm, Node: Running SINGULAR under Emacs, Next: Demo mode, Prev:
A quick guide to Emacs, Up: Emacs user interface
+
+3.2.2 Running SINGULAR under Emacs
+----------------------------------
+
+There are two ways to start the SINGULAR Emacs interface: Typing
+`ESingular' instead of `Singular' on the command shell launches a new
+Emacs process, initializes the interface and runs SINGULAR within Emacs.
+The other way is to start the interface in an already running Emacs, by
+typing `M-x singular' inside Emacs. This initializes the interface and
+runs SINGULAR within Emacs. Both ways are described in more detail
+below.
+
+Note: To properly run the Emacs interface, several files are needed
+which usually reside in the `emacs' subdirectory of your SINGULAR
+distribution. This directory is called singular-emacs-home-directory in
+the following.
+
+Starting the interface using ESingular
+--------------------------------------
+
+As mentioned above, `ESingular' is an "out-of-the-box" solution: You
+don't have to add special things to your `.emacs' startup file to
+initialize the interface; everything is done for you in a special file
+called `.emacs-singular' (which comes along with the SINGULAR
+distribution and resides in the singular-emacs-home-directory) which is
+automatically loaded on Emacs startup (and the loading of the `.emacs'
+file is automatically suppressed).
+
+The customizable variables of the SINGULAR Emacs interface are set to
+defaults which give the novice user a very shell like feeling of the
+interface. Nevertheless, these default settings can be changed, see
+*note Customization of the Emacs interface::. Besides other Emacs
+initializations, such as fontification or blinking parentheses, a new
+menu item called `Singular' is added to the main menu, providing menu
+items for starting SINGULAR. On XEmacs, a button starting SINGULAR is
+added to the main toolbar.
+
+The SINGULAR interface is started automatically; once you see a buffer
+called `*singular*' and the SINGULAR prompt you are ready to start your
+SINGULAR session.
+
+`ESingular' inherits all `Singular' options. For a description off all
+these options, see *note Command line options::. Additionally there are
+the following options which are special to `ESingular':
+
+command-line option functionality
+/
+environment variable
+`--emacs=EMACS' Use `EMACS' as Emacs program to run the SINGULAR
+`ESINGULAR_EMACS' Emacs interface, where `EMACS' may e.g. be emacs
+ or xemacs.
+
+`--emacs-dir=DIR' Set the singular-emacs-home-directory, which is
+`ESINGULAR_EMACS_DIR' the directory where singular.el can be found,
+ to `DIR'.
+
+`--emacs-load=FILE' Load `FILE' on Emacs start-up, instead of the
+`ESINGULAR_EMACS_LOAD' default load file.
+
+`--singular=PROG' Start `PROG' as SINGULAR program within Emacs
+`ESINGULAR_SINGULAR'
+
+Notice that values of these options can also be given by setting the
+above mentioned environment variables (where values given as
+command-line arguments take priority over values given by environment
+variables).
+
+Starting the interface within a running Emacs
+---------------------------------------------
+
+If you are a more experienced Emacs user and you already have your own
+local `.emacs' startup file, you might want to start the interface out
+of your running Emacs without using `ESingular'. For this, you should
+add the following lisp code to your `.emacs' file:
+
+ (setq load-path (cons "<singular-emacs-home-directory>" load-path))
+ (autoload 'singular "singular"
+ "Start Singular using default values." t)
+ (autoload 'singular-other "singular"
+ "Ask for arguments and start Singular." t)
+
+Then typing `M-x singular' in a running Emacs session initializes the
+interface in a new buffer and launches a SINGULAR process. The SINGULAR
+prompt comes up and you are ready to start your SINGULAR session.
+
+It is a good idea to take a look at the (well documented) file
+`.emacs-singular' in the singular-emacs-home-directory, which comes
+along with the distribution. In it you find some useful initializations
+of the SINGULAR interface as well as some lisp code, which, for example,
+adds a button to the XEmacs toolbar. Some of this code might be useful
+for your `.emacs' file, too. And if you are a Emacs wizard, it is of
+course a good idea to take a look at `singular.el' in the
+singular-emacs-home-directory.
+
+Starting, interrupting and stopping SINGULAR
+--------------------------------------------
+
+There are the following commands to start and stop SINGULAR:
+
+ * `singular-other' (or menu `Singular', item `Start...')
+
+ Starts a SINGULAR process and asks for the following four
+ parameters in the minibuffer area:
+
+ 1. The Singular executable. This can either be a file name with
+ complete path, e.g., `/local/bin/Singular'. Then exactly this
+ executable is started. The path may contain the character `~'
+ denoting your home directory. Or it can be the name of a
+ command without path, e.g., `Singular'. Then the executable is
+ searched for in your `$PATH' environment variable.
+
+ 2. The default working directory. This is the path to an existing
+ directory, e.g., `~/work'. The current directory is set to
+ this directory before SINGULAR is started.
+
+ 3. Command line options. You can set any SINGULAR command line
+ option (see *note Command line options::).
+
+ 4. The buffer name. You can specify the name of the buffer the
+ interface is running in.
+
+ * `singular' (or menu `Singular', item `Start default')
+
+ Starts SINGULAR with default settings for the executable, the
+ working directory, command line switches, and the buffer name. You
+ can customize this default settings, see *note Customization of the
+ Emacs interface::.
+
+ * `singular-exit-singular' (bound to `C-c $' or menu `Singular', item
+ `Exit')
+
+ Kills the running SINGULAR process of the current buffer (but does
+ not kill the buffer). Once you have killed a SINGULAR process you
+ can start a new one in the same buffer with the command `singular'
+ (or select the item `Start default' of the `Singular' menu).
+
+ * `singular-restart' (bound to `C-c C-r' or menu `Singular', item
+ `Restart')
+
+ Kills the running SINGULAR process of the current buffer and starts
+ a new process in the same buffer with exactly the same command line
+ arguments as before.
+
+ * `singular-control-c' (bound to `C-c C-c' or menu `Singular', item
+ `Interrupt')
+
+ Interrupt the Singular process running in the current buffer. Asks
+ whether to (`a')bort the current SINGULAR command, (`q')uit or
+ (`r')estart the current SINGULAR process, or (`c')ontinue without
+ doing anything (default).
+
+Whenever a SINGULAR process is started within the Emacs interface, the
+contents of a special startup file (by default `~/.emacs-singularrc') is
+pasted as input to SINGULAR at the very end of the usual startup
+sequence (see *note Startup sequence::). The name of the startup file
+can be changed, see *note Customization of the Emacs interface::.
+
+
+File: sing.htm, Node: Demo mode, Next: Customization of the Emacs interface,
Prev: Running SINGULAR under Emacs, Up: Emacs user interface
+
+3.2.3 Demo mode
+---------------
+
+The Emacs interface can be used to run interactive SINGULAR
+demonstrations. A demonstration is started by loading a so-called
+SINGULAR demo file with the Emacs command `singular-demo-load', bound to
+`C-c C-d', or with the menu `Commands->Load Demo'.
+
+A SINGULAR demo file should consist of SINGULAR commands separated by
+blank lines. When running a demo, the input up to the next blank line is
+echoed to the screen. Hitting <RETURN> executes the echoed commands and
+shows their output. Hitting <RETURN> again, echos the next commands to
+the screen, and so on, until all commands of the demo file are executed.
+While running a demo, you can execute other commands on the SINGULAR
+prompt: the next input of from the demo file is then echoed again, if
+you hit <RETURN> on an empty input line.
+
+A SINGULAR demo can prematurely be exited by either starting another
+demo, or by executing the Emacs command `singular-demo-exit' (menu:
+`Commands->Exit Demo').
+
+Some aspects of running SINGULAR demos can be customized. *Note
+Customization of the Emacs interface::, for more info.
+
+
+File: sing.htm, Node: Customization of the Emacs interface, Next: Editing
SINGULAR input files with Emacs, Prev: Demo mode, Up: Emacs user interface
+
+3.2.4 Customization of the Emacs interface
+------------------------------------------
+
+Emacs provides a convenient interface to customize the behavior of Emacs
+and the SINGULAR Emacs interface for your own needs. You enter the
+customize environment by either calling `M-x customize' (on XEmacs you
+afterwards have to enter `emacs' in the minibuffer area) or by selecting
+the menu item `Options->Customize->Emacs...' for XEmacs, and the menu
+item `Help->Customize->Toplevel Customization Group' for Emacs, resp. A
+brief introduction to the customization mode comes up with the
+customization buffer. All customizable parameters are hierarchically
+grouped and you can browse through all these groups and change the
+values of the parameters using the mouse. At the end you can safe the
+settings to a special file making your changes permanent.
+
+To change the settings of the SINGULAR Emacs interface you can either
+select the item `Preferences' of the `Singular' menu, call `M-x
+customize-group' and give the argument `singular-interactive' in the
+minibuffer area, or browse from the top-level customization group
+through the path `External->Singular->Singular interactive'.
+
+The SINGULAR interface customization buffer is divided into four groups:
+
+ * Singular Faces
+
+ Here you can specify various faces used if font-lock-mode is
+ enabled (which it is, by default).
+
+ * Singular Sections And Foldings
+
+ Here you can specify special faces for SINGULAR input and output
+ and change the text used as replacement for folded sections.
+
+ For doing this, you also might find handy the function
+ `customize-face-at-point', which let's you customize the face at
+ the current position of point. This function is automatically
+ defined if you run `ESingular'). Otherwise, you should add its
+ definition (see below) to your personal `.emacs' file.
+
+ * Singular Interactive Miscellaneous
+
+ Here you can specify various different things such as the behavior
+ of the cursor keys, the name of the special SINGULAR startup file,
+ the appearance of the help window, or the default values for the
+ `singular' command.
+
+ * Singular Demo Mode
+
+ Here you can specify how chunks of the demo file are divided, or
+ specify a default directory for demo files.
+
+When you run `ESingular', the settings of customized variables are saved
+in the file `$HOME/.emacs-singular-cust'. Otherwise, the settings are
+appended to your `.emacs' file. Among others, this means that the
+customized settings of `ESingular' are not automatically taken over by
+a "normal" Emacs, and vice versa.
+
+
+File: sing.htm, Node: Editing SINGULAR input files with Emacs, Next: Top 20
Emacs commands, Prev: Customization of the Emacs interface, Up: Emacs user
interface
+
+3.2.5 Editing SINGULAR input files with Emacs
+---------------------------------------------
+
+Since SINGULAR's programming language is similar to C, you should use
+the Emacs C/C++-mode to edit SINGULAR input files and SINGULAR
+libraries. Among others, this Emacs mode provides automatic indentation,
+line-breaking and keyword highlighting.
+
+When running `ESingular', the C/C++-mode is automatically turned on
+whenever a file with the suffix `.sing', or `.lib' is loaded.
+
+For Emacs sessions which were not started by `ESingular', you should
+add the following to your `.emacs' file:
+ ;; turn on c++-mode for files ending in ".sing" and ".lib"
+ (setq auto-mode-alist (cons '("\\.sing\\'" . c++-mode) auto-mode-alist))
+ (setq auto-mode-alist (cons '("\\.lib\\'" . c++-mode) auto-mode-alist))
+ ;; turn-on fontification for c++-mode
+ (add-hook 'c++-mode-hook
+ (function (lambda () (font-lock-mode 1))))
+ ;; turn on aut-new line and hungry-delete
+ (add-hook 'c++-mode-hook
+ (function (lambda () (c-toggle-auto-hungry-state 1))))
+ ;; a handy function for customization
+ (defun customize-face-at-point ()
+ "Customize face which point is at."
+ (interactive)
+ (let ((face (get-text-property (point) 'face)))
+ (if face
+ (customize-face face)
+ (message "No face defined at point"))))
+
+Notice that you can change the default settings for source-code
+highlighting (colors, fonts, etc.) by customizing the respective faces
+using the `Customize' feature of Emacs. For doing this, you might find
+handy the above given function `customize-face-at-point', which lets you
+customize the face of the current position of point (this function is
+automatically defined if you run `ESingular').
+
+
+File: sing.htm, Node: Top 20 Emacs commands, Prev: Editing SINGULAR input
files with Emacs, Up: Emacs user interface
+
+3.2.6 Top 20 Emacs commands
+---------------------------
+
+Here is a list of the 20 probably most useful commands when using the
+SINGULAR Emacs interface.
+
+Starting and stopping of SINGULAR:
+
+ * `singular' (menu `Singular->Start Default...'): starts SINGULAR
+ using default arguments.
+
+ * `singular-other' (menu `Singular->Start'): starts SINGULAR asking
+ for several arguments in the minibuffer area.
+
+ * `singular-exit' (key `C-c $' or menu `Singular->Exit'): kills the
+ SINGULAR process running in the current buffer (but does not kill
+ the buffer).
+
+ * `singular-restart' (key `C-c C-r' or menu `Singular->Restart'):
+ kills the SINGULAR process running in the current buffer and starts
+ a new SINGULAR process with exactly the same arguments as before.
+
+Editing input and output:
+
+ * `singular-beginning-of-line' (key `C-a'): moves point to beginning
+ of line, then skip past the SINGULAR prompt, if any.
+
+ * `singular-toggle-truncate-lines' (key `C-c C-t' or menu
+ `Commands->Truncate lines'): toggles whether long lines should be
+ truncated or not. If lines are not truncated, the commands
+ `singular-scroll-left' and `singular-scroll-right' are useful to
+ scroll left and right, resp.
+
+ * `singular-dynamic-complete' (key `TAB'): performs context specific
+ completion. If point is inside a string, file name completion is
+ done. If point is at the end of a help command (i.e., `help' or
+ `?'), completion on SINGULAR help topics is done. If point is at
+ the end of an example command (i.e., `example'), completion is done
+ on SINGULAR examples. In all other cases, completion on SINGULAR
+ commands is done.
+
+ * `singular-folding-toggle-fold-latest-output' (key `C-c C-o' or menu
+ `Commands->Fold/ Unfold Latest Output'): toggles folding of the
+ latest output section. If your last SINGULAR command produced a
+ huge output, simply type `C-c C-o' and it will be replaced by a
+ single line.
+
+ * `singular-folding-toggle-fold-at-point' (key `C-c C-f' or menu
+ `Commands->Fold/Unfold At Point'): toggles folding of the section
+ the point currently is in.
+
+ * `singular-folding-fold-all-output' (menu `Commands->Fold All
+ Output'): folds all SINGULAR output, replacing each output section
+ by a single line.
+
+ * `singular-folding-unfold-all-output' (menu `Commands->Unfold All
+ Output'): unfolds all SINGULAR output sections showing their true
+ contents.
+
+Loading of files and SINGULAR demo mode:
+
+ * `singular-load-library' (key `C-c C-l' or menu
+ `Commands->Libraries->other...'): asks for a standard library name
+ or a library file in the minibuffer (hit `TAB' for completion) and
+ loads the library into SINGULAR. The submenu `Libraries' of the
+ `Commands' menu also provides a separate menu item for each
+ standard library.
+
+ * `singular-load-file' (key `C-c <' or menu `Commands->Load
+ File...'): asks for a file name in the minibuffer (which is
+ expanded using `expand-file-name' if given a prefix argument) and
+ loads the file into SINGULAR.
+
+ * `singular-demo-load' (key `C-c C-d' or menu `Commands->Load
+ Demo...'): asks for a file name of a SINGULAR demo file in the
+ minibuffer area (hit `SPACE' for completion) and enters the
+ SINGULAR demo mode showing the first chunk of the demo.
+
+ * `singular-demo-exit' (menu `Commands->Exit Demo'): exits from
+ SINGULAR demo mode and cleans up everything that is left from the
+ demo.
+
+Help and Customization:
+
+ * `singular-help' (key `C-h C-s' or menu `Singular->Singular Help'):
+ asks for a SINGULAR help topic in the minibuffer (hit `TAB' for
+ completion) and shows the help text in a separate buffer.
+
+ * `singular-example' (key `C-c C-e' or menu `Singular->Singular
+ Example'): asks for a SINGULAR command in the minibuffer (hit `TAB'
+ for completion) and executes the example of this command in the
+ current SINGULAR buffer.
+
+ * `customize-group' (menu `Singular->Preferences'): enters the
+ customization group of the SINGULAR Emacs interface. (If called via
+ `M-x customize-group' give argument `singular-interactive' in the
+ minibuffer area.)
+
+
+File: sing.htm, Node: Rings and orderings, Next: Implemented algorithms,
Prev: Emacs user interface, Up: General concepts
+
+3.3 Rings and orderings
+=======================
+
+All non-trivial algorithms in SINGULAR require the prior definition of a
+ring. Such a ring can be
+
+ 1. a polynomial ring over a field,
+
+ 2. a localization of a polynomial ring,
+
+ 3. a quotient ring by an ideal of one of 1. or 2.,
+
+ 4. a tensor product of one of 1. or 2.
+
+Except for quotient rings, all of these rings are realized by choosing a
+coefficient field, ring variables, and an appropriate global or local
+monomial ordering on the ring variables. *Note Term orderings::, *note
+Mathematical background::.
+
+The coefficient field of the rings may be
+
+ 1. the field of rational numbers Q $Q$
+ ,
+
+ 2. finite fields $Z/p$, $p$ a prime $\le 2147483629$,
+ finite fields Z/p, p a prime <= 2147483629,
+
+ 3. finite fields $\hbox{GF}(p^n)$ with $p^n$ elements, $p$ a prime, $p^n \le
2^{15}$,
+ finite fields GF(p^n) with p^n elements, p a prime, p^n <= 2^15,
+
+ 4. transcendental extension of Q $Q$
+ or Z/p $Z/p$
+ ,
+
+ 5. simple algebraic extension of Q $Q$
+ or Z/p $Z/p$
+ ,
+
+ 6. the field of real numbers represented by floating point numbers of
+ a user defined precision.
+
+ 7. the field of complex numbers represented by (pairs of) floating
+ point numbers of a user defined precision.
+
+Throughout this manual, the current active ring in SINGULAR is called
+basering. The reserved name `basering' in SINGULAR is an alias for the
+current active ring. The basering can be set by declaring a new ring as
+described in the following subsections or with the commands `setring'
+and `keepring'. *Note keepring::, *note setring::.
+
+Objects of ring dependent types are local to a ring. To access them
+after a change of the basering they have to be mapped using `map' or by
+the functions `imap' or `fetch'. *Note Objects::, *note fetch::, *note
+imap::, *note map::.
+
+All changes of the basering in a procedure are local to this procedure
+unless a `keepring' command is used as the last statement of the
+procedure. *Note Procedures::, *note keepring::.
+
+* Menu:
+
+* Examples of ring declarations::
+* General syntax of a ring declaration::
+* Term orderings::
+
+
+File: sing.htm, Node: Examples of ring declarations, Next: General syntax of
a ring declaration, Prev: Rings and orderings, Up: Rings and orderings
+
+3.3.1 Examples of ring declarations
+-----------------------------------
+
+The exact syntax of a ring declaration is given in the next two
+subsections; this subsection lists some examples first. Note that the
+ordering has to be chosen such that the unit-elements of the ring are
+precisely those elements with leading monomial 1. For more information,
+see *note Monomial orderings::.
+
+Every floating point number in a ring consists of two parts, which may
+be chosen from the user. The leading part represents the number and the
+rest is for the numerical stability. Two numbers with a difference only
+in the rest are equal.
+
+ * the ring Z/32003[x,y,z] $Z/32003[x,y,z]$
+ with degree reverse lexicographical ordering. The exact ring
+ declaration may be omitted in the first example since this is the
+ default ring:
+
+ ring r;
+ ring r = 32003,(x,y,z),dp;
+
+ * the ring Q[a,b,c,d] $Q[a,b,c,d]$
+ with lexicographical ordering:
+
+ ring r = 0,(a,b,c,d),lp;
+
+ * the ring Z/7[x,y,z] $Z/7[x,y,z]$
+ with local degree reverse lexicographical ordering. The non-prime
+ 10 is converted to the next lower prime in the second example:
+
+ ring r = 7,(x,y,z),ds;
+ ring r = 10,(x,y,z),ds;
+
+ * the ring $Z/7[x_1,\ldots,x_6]$
+ Z/7[x1,...,x6] with lexicographical ordering for $x_1,x_2,x_3$
+ x1,x2,x3 and degree reverse lexicographical ordering for $x_4,x_5,x_6$:
+ x4,x5,x6:
+
+ ring r = 7,(x(1..6)),(lp(3),dp);
+
+ * the localization of (Q[a,b,c])[x,y,z] $(Q[a,b,c])[x,y,z]$
+ at the maximal ideal
+
+ (x,y,z) $(x,y,z)$
+ :
+
+ ring r = 0,(x,y,z,a,b,c),(ds(3), dp(3));
+
+ * the ring Q[x,y,z] $Q[x,y,z]$
+ with weighted reverse lexicographical ordering. The variables x $x$
+ , y $y$
+ , and z $z$
+ have the weights 2, 1, and 3, respectively, and vectors are first
+ ordered by components (in descending order) and then by monomials:
+
+ ring r = 0,(x,y,z),(c,wp(2,1,3));
+
+ For ascending component order, the component ordering `C' has to be
+ used.
+
+ * the ring K[x,y,z] $K[x,y,z]$
+ , where K=Z/7(a,b,c) $K=Z/7(a,b,c)$
+ denotes the transcendental extension of Z/7 $Z/7$
+ by a $a$
+ , b $b$
+ and c $c$
+ with degree lexicographical ordering:
+
+ ring r = (7,a,b,c),(x,y,z),Dp;
+
+ * the ring K[x,y,z] $K[x,y,z]$
+ , where K=Z/7[a] $K=Z/7[a]$
+ denotes the algebraic extension of degree 2 of Z/7 $Z/7$
+ by a. $a.$
+ In other words, K $K$
+ is the finite field with 49 elements. In the first case, a $a$
+ denotes an algebraic element over Z/7 $Z/7$
+ with minimal polynomial $\mu_a=a^2+a+3$,
+ mu_a=a^2+a+3, in the second case, a $a$
+
+ refers to some generator of the cyclic group of units of K $K$
+ :
+
+ ring r = (7,a),(x,y,z),dp; minpoly = a^2+a+3;
+ ring r = (7^2,a),(x,y,z),dp;
+
+ * the ring R[x,y,z] $R[x,y,z]$
+ , where R $R$
+ denotes the field of real numbers represented by simple precision
+ floating point numbers. This is a special case:
+
+ ring r = real,(x,y,z),dp;
+
+ * the ring R[x,y,z] $R[x,y,z]$
+ , where R $R$
+ denotes the field of real numbers represented by floating point
+ numbers of 50 valid decimal digits and the same number of digits
+ for the rest:
+
+ ring r = (real,50),(x,y,z),dp;
+
+ * the ring R[x,y,z] $R[x,y,z]$
+ , where R $R$
+ denotes the field of real numbers represented by floating point
+ numbers of 10 valid decimal digits and with 50 digits for the rest:
+
+ ring r = (real,10,50),(x,y,z),dp;
+
+ * the ring R(j)[x,y,z] $R(j)[x,y,z]$
+ , where R $R$
+ denotes the field of real numbers represented by floating point
+ numbers of 30 valid decimal digits and the same number for the
+ rest. j $j$
+ denotes the imaginary unit.
+
+ ring r = (complex,30,j),(x,y,z),dp;
+
+ * the ring R(i)[x,y,z] $R(i)[x,y,z]$
+ , where R $R$
+ denotes the field of real numbers represented by floating point
+ numbers of 6 valid decimal digits and the same number for the rest.
+ i $i$
+ is the default for the imaginary unit.
+
+ ring r = complex,(x,y,z),dp;
+
+ * the quotient ring Z/7[x,y,z] $Z/7[x,y,z]$
+ modulo the square of the maximal ideal (x,y,z) $(x,y,z)$
+ :
+
+ ring R = 7,(x,y,z), dp;
+ qring r = std(maxideal(2));
+
+
+File: sing.htm, Node: General syntax of a ring declaration, Next: Term
orderings, Prev: Examples of ring declarations, Up: Rings and orderings
+
+3.3.2 General syntax of a ring declaration
+------------------------------------------
+
+Rings
+.....
+
+*Syntax:*
+ `ring' name `=' `('coefficient_field`),' `('
+ names_of_ring_variables `),' `(' ordering `);'
+
+*Default:*
+ `32003,(x,y,z),(dp,C);'
+
+*Purpose:*
+ declares a ring and sets it as the current basering.
+
+The coefficient_field is given by one of the following:
+ 1. a non-negative int_expression less or equal 32003.
+ The int_expression should either be 0, specifying the field of
+ rational numbers Q, or a prime number p, specifying the finite
+ field with p elements. If it is not a prime number, int_expression
+ is converted to the next lower prime number.
+
+ 2. an expression_list of an int_expression and one or more names.
+ The int_expression specifies the characteristic of the coefficient
+ field as described above. The names are used as parameters in
+ transcendental or algebraic extensions of the coefficient field.
+ Algebraic extensions are implemented for one parameter only. In
+ this case, a minimal polynomial has to be defined by assignment to
+ `minpoly'. *Note minpoly::.
+
+ 3. an expression_list of an int_expression and a name.
+ The int_expression has to be a prime number p to the power of a
+ positive integer n. This defines the Galois field $\hbox{GF}(p^n)$ with
$p^n$ elements, where $p^n$ has to be smaller or equal $2^{15}$.
+ GF(p^n) with p^n elements, where p^n has to be smaller or equal
+ 2^15. The given name refers to a primitive element of $\hbox{GF}(p^n)$
+ GF(p^n) generating the multiplicative group. Due to a different
+ internal representation, the arithmetic operations in these
+ coefficient fields are faster than arithmetic operations in
+ algebraic extensions as described above.
+
+ 4. an expression_list of the name `real' and two optional
+ int_expression giving the precision in decimal digits and the size
+ for the stabilizing rest. The default for the rest is the same size
+ as for the representation. An exception is the name `real' without
+ any integers. These numbers are implemented as machine floating
+ point numbers of single precision. Note that computations over all
+ these fields are not exact.
+
+ 5. an expression_list of the name `complex', two optional
+ int_expression and a name. This specifies the field of complex
+ numbers represented with floating point numbers with a precision
+ similar to `real'. An expression_list without int_expression
+ defines a precision and rest with length 6. The name of the
+ imaginary unit is given by the last parameter. Note that
+ computations over these fields are not exact.
+
+'names_of_ring_variables' is a list of names or indexed names.
+
+'ordering' is a list of block orderings where each block ordering is
+either
+
+ 1. `lp', `dp', `Dp', `ls', `ds', or `Ds' optionally followed by a size
+ parameter in parentheses.
+
+ 2. `wp', `Wp', `ws', `Ws', or `a' followed by a weight vector given as
+ an intvec_expression in parentheses.
+
+ 3. `M' followed by an intmat_expression in parentheses.
+
+ 4. `c' or `C'.
+
+For the definition of the orderings, see *note Monomial orderings::.
+
+If one of coefficient_field, names_of_ring_variables, and ordering
+consists of only one entry, the parentheses around this entry may be
+omitted.
+
+Quotient rings
+..............
+
+*Syntax:*
+ `qring' name `=' ideal_expression `;'
+
+*Default:*
+ none
+
+*Purpose:*
+ declares a quotient ring as the basering modulo ideal_expression.
+ Sets it as current basering.
+
+ideal_expression has to be represented by a standard basis.
+
+The most convenient way to map objects from a ring to its quotient ring
+and vice versa is to use the `fetch' function (*note fetch::).
+
+SINGULAR computes in a quotient ring as long as possible with the given
+representative of a polynomial, say, `f'. I.e., it usually does not
+reduce `f' w.r.t. the quotient ideal. This is only done when necessary
+during standard bases computations or by an explicit reduction using the
+command `reduce(f, std(0))' (*note reduce::).
+
+*Example:*
+ ring r=32003,(x,y),dp;
+ poly f=x3+yx2+3y+4;
+ qring q=std(maxideal(2));
+ basering;
+ ==> // characteristic : 32003
+ ==> // number of vars : 2
+ ==> // block 1 : ordering dp
+ ==> // : names x y
+ ==> // block 2 : ordering C
+ ==> // quotient ring from ideal
+ ==> _[1]=y2
+ ==> _[2]=xy
+ ==> _[3]=x2
+ poly g=fetch(r, f);
+ g;
+ ==> x3+x2y+3y+4
+ reduce(g,std(0));
+ ==> 3y+4
+
+
+File: sing.htm, Node: Term orderings, Prev: General syntax of a ring
declaration, Up: Rings and orderings
+
+3.3.3 Term orderings
+--------------------
+
+Any polynomial (resp. vector) in SINGULAR is ordered w.r.t. a term
+ordering (or, monomial ordering), which has to be specified together
+with the declaration of a ring. SINGULAR stores and displays a
+polynomial (resp. vector) w.r.t. this ordering, i.e., the greatest
+monomial (also called the leading monomial) is the first one appearing
+in the output polynomial, and the smallest monomial is the last one.
+
+*Remark:* The novice user should generally use the ordering `dp' for
+computations in the polynomial ring $K[x_1,\ldots,x_n]$,
+K[x1,...,xn], resp. `ds' for computations in the localization
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$.
+Loc_(x)K[x1,...,xn]). For more details, see *note Polynomial data::.
+
+In a ring declaration, SINGULAR offers the following orderings:
+ 1. Global orderings
+
+ `lp'
+ lexicographical ordering
+
+ `dp'
+ degree reverse lexicographical ordering
+
+ `Dp'
+ degree lexicographical ordering
+
+ `wp(' intvec_expression `)'
+ weighted reverse lexicographical ordering; the weight vector
+ may consist of positive integers only.
+
+ `Wp(' intvec_expression `)'
+ weighted lexicographical ordering; the weight vector may
+ consist of positive integers only.
+
+ Global orderings are well-orderings, i.e., 1 < x $1 < x$
+ for each ring variable x $x$
+ . They are denoted by a `p' as the second character in their name.
+
+ 2. Local orderings
+
+ `ls'
+ negative lexicographical ordering
+
+ `ds'
+ negative degree reverse lexicographical ordering
+
+ `Ds'
+ negative degree lexicographical ordering
+
+ `ws(' intvec_expression `)'
+ (general) weighted reverse lexicographical ordering; the first
+ element of the weight vector has to be non-zero.
+
+ `Ws(' intvec_expression `)'
+ (general) weighted lexicographical ordering; the first element
+ of the weight vector has to be non-zero.
+
+ Local orderings are not well-orderings. They are denoted by an `s'
+ as the second character in their name.
+
+ 3. Matrix orderings
+
+ `M(' intmat_expression `)'
+ intmat_expression has to be an invertible square matrix
+
+ Using matrix orderings, SINGULAR can compute standard bases w.r.t.
+ any monomial ordering that is compatible with the natural
+ semi-group structure on the monomials. In practice, the predefined
+ global and local orderings together with the block orderings should
+ be sufficient in most cases. These orderings are faster than their
+ corresponding matrix orderings since evaluation of a matrix
+ ordering is time consuming.
+
+ 4. Extra weight vector
+
+ `a(' intvec_expression `)'
+ an extra weight vector `a(' intvec_expression `)' may precede
+ any monomial ordering
+
+ 5. Product ordering
+
+ `(' ordering [ `(' int_expression `)' ]`,' ... `)'
+ any of the above orderings and the extra weight vector may be
+ combined to yield product or block orderings
+
+ The orderings `lp', `dp', `Dp', `ls', `ds', and `Ds' may be
+ followed by an int_expression in parentheses giving the size of the
+ block. For the last block the size is calculated automatically. For
+ the weighted orderings the size of the block is given by the size
+ of the weight vector. The same holds analogously for matrix
+ orderings.
+
+ 6. Module orderings
+
+ `(' ordering`,' ...`, C )'
+
+ `(' ordering`,' ...`, c )'
+ sort polynomial vectors by the monomial ordering first, then
+ by components
+
+ `( C,' ordering`,' ... `)'
+
+ `( c,' ordering`,' ... `)'
+ sort polynomial vectors by components first, then by the
+ monomial ordering
+
+ Here a capital `C' sorts generators in ascending order, i.e.,
+ `gen(1)' < `gen(2)' < ... A small `c' sorts in descending order,
+ i.e., `gen(1)' > `gen(2)' > ... It is not necessary to specify the
+ module ordering explicitly since `(' ordering`,' ...`, C )' is the
+ default.
+
+ In fact, `c' or `C' may be specified anywhere in a product ordering
+ specification, not only at its beginning or end. All monomial
+ block orderings preceding the component ordering have higher
+ precedence, all monomial block orderings following after it have
+ lower precedence.
+
+For a mathematical description of these orderings, see *note Polynomial
+data::.
+
+
+File: sing.htm, Node: Implemented algorithms, Next: The SINGULAR language,
Prev: Rings and orderings, Up: General concepts
+
+3.4 Implemented algorithms
+==========================
+
+The basic algorithm in SINGULAR is a general standard basis algorithm
+for any monomial ordering which is compatible with the natural
+semi-group structure of the exponents. This includes well-orderings
+(Buchberger algorithm to compute a Groebner basis) and tangent cone
+orderings (Mora algorithm) as special cases.
+
+Nonetheless, there are a lot of other important algorithms:
+
+ * Algorithms to compute the standard operations on ideals and
+ modules: intersection, ideal quotient, elimination, etc.
+
+ * Different Syzygy algorithms and algorithms to compute free
+ resolutions of modules.
+
+ * Combinatorial algorithms to compute dimensions, Hilbert series,
+ multiplicities, etc.
+
+ * Algorithms for univariate and multivariate polynomial
+ factorization, resultant and gcd computations.
+
+Commands to compute standard bases
+----------------------------------
+
+`facstd'
+ *note facstd::
+ computes a list of Groebner bases via the Factorizing Groebner
+ Basis Algorithm, i.e., their intersection has the same radical as
+ the original ideal. It need not be a Groebner basis of the given
+ ideal.
+
+ The intersection of the zero-sets is the zero-set of the given
+ ideal.
+
+`fglm'
+ *note fglm::
+ computes a Groebner basis provided that a reduced Groebner basis
+ w.r.t. another ordering is given.
+
+ Implements the so-called FGLM (Faugere, Gianni, Lazard, Mora)
+ algorithm. The given ideal must be zero-dimensional.
+
+`groebner'
+ *note groebner::
+ computes a standard resp. Groebner bases using a heuristically
+ chosen method.
+
+ This is the preferred method to compute a standard resp. Groebner
+ bases.
+
+`mstd'
+ *note mstd::
+ computes a standard basis and a minimal set of generators.
+
+`std'
+ *note std::
+ computes a standard resp. Groebner basis.
+
+`stdfglm'
+ *note stdfglm::
+ computes a Groebner basis in a ring with a "difficult" ordering
+ (e.g., lexicographical) via `std' w.r.t. a "simple" ordering and
+ `fglm'.
+
+ The given ideal must be zero-dimensional.
+
+`stdhilb'
+ *note stdhilb::
+ computes a Groebner basis in a ring with a "difficult" ordering
+ (e.g., lexicographical) via `std' w.r.t. a "simple" ordering and a
+ `std' computation guided by the Hilbert series.
+
+Further processing of standard bases
+------------------------------------
+
+The next commands require the input to be a standard basis.
+
+`degree'
+ *note degree::
+ computes the (Krull) dimension, codimension and the multiplicity.
+
+ The result is only displayed on the screen.
+
+`dim'
+ *note dim::
+ computes the dimension of the ideal resp. module.
+
+`highcorner'
+ *note highcorner::
+ computes the smallest monomial not contained in the ideal resp.
+ module. The ideal resp. module has to be finite dimensional as a
+ vector space over the ground field.
+
+`hilb'
+ *note hilb::
+ computes the first, and resp. or, second Hilbert series of an ideal
+ resp. module.
+
+`kbase'
+ *note kbase::
+ computes a vector space basis (consisting of monomials) of the
+ quotient of a ring by an ideal resp. of a free module by a
+ submodule.
+
+ The ideal resp. module has to be finite dimensional as a vector
+ space over the ground field and has to be represented by a standard
+ basis w.r.t. the ring ordering.
+
+`mult'
+ *note mult::
+ computes the degree of the monomial ideal resp. module generated by
+ the leading monomials of the input.
+
+`reduce'
+ *note reduce::
+ reduces a polynomial, vector, ideal or module to its normal form
+ with respect to an ideal or module represented by a standard basis.
+
+`vdim'
+ *note vdim::
+ computes the vector space dimension of a ring (resp. free module)
+ modulo an ideal (resp. module).
+
+Commands to compute resolutions
+-------------------------------
+
+`res'
+ *note res::
+ computes a free resolution of an ideal or module using a
+ heuristically chosen method. This is the preferred method to
+ compute free resolutions of ideals or modules.
+
+`lres'
+ *note lres::
+ computes a free resolution of an ideal or module with La Scala's
+ method. The input needs to be homogeneous.
+
+`mres'
+ *note mres::
+ computes a minimal free resolution of an ideal or module with the
+ Syzygy method.
+
+`sres'
+ *note sres::
+ computes a free resolution of an ideal or module with Schreyer's
+ method. The input has to be a standard basis.
+
+`nres'
+ *note nres::
+ computes a free resolution of an ideal or module with the standard
+ basis method.
+
+`syz'
+ *note syz::
+ computes the first Syzygy (i.e., the module of relations of the
+ given generators).
+
+Further processing of resolutions
+---------------------------------
+
+`betti'
+ *note betti::
+ computes the graded Betti numbers of a module from a free
+ resolution.
+
+`minres'
+ *note minres::
+ minimizes a free resolution of an ideal or module.
+
+`regularity'
+ *note regularity::
+ computes the regularity of a homogeneous ideal resp. module from a
+ given minimal free resolution.
+
+Processing of polynomials
+-------------------------
+
+`char_series'
+ *note char_series::
+ computes characteristic sets of polynomial ideals.
+
+`extgcd'
+ *note extgcd::
+ computes the extended gcd of two polynomials.
+
+ Implemented as extended Euclidean Algorithm. Applicable for
+ univariate polynomials only.
+
+`factorize'
+ *note factorize::
+ computes factorization of univariate and multivariate polynomials
+ into irreducible factors.
+
+ The most basic algorithm is univariate factorization in prime
+ characteristic. The Cantor-Zassenhaus Algorithm is used in this
+ case. For characteristic 0, a univariate Hensel-lifting is done to
+ lift from prime characteristic to characteristic 0. For
+ multivariate factorization in any characteristic, the problem is
+ reduced to the univariate case first, then a multivariate
+ Hensel-lifting is used to lift the univariate factorization.
+
+ Note that there is no factorization of polynomials over algebraic
+ extensions of Q.
+
+`gcd'
+ *note gcd::
+ computes greatest common divisors of univariate and multivariate
+ polynomials.
+
+ For prime characteristic, a subresultant gcd is used. In
+ characteristic 0, a modular algorithm is used for the univariate
+ case. For the multivariate case, the EZGCD is used.
+
+ Note that there is no gcd calculation for polynomials over
+ algebraic extensions of Q.
+
+`resultant'
+ *note resultant::
+ computes the resultant of two univariate polynomials using the
+ subresultant algorithm.
+
+ Multivariate polynomials are considered as univariate polynomials
+ in the main variable (which has to be specified by the user).
+
+`vandermonde'
+ *note vandermonde::
+ interpolates a polynomial from its values at several points
+
+Matrix computations
+-------------------
+
+`bareiss'
+ *note bareiss::
+ implements sparse Gauss-Bareiss method for elimination (matrix
+ triangularization) in arbitrary integral domains.
+
+`det'
+ *note det::
+ computes the determinant of a square matrix.
+
+ For matrices with integer entries a modular algorithm is used. For
+ other domains the Gauss-Bareiss method is used.
+
+`minor'
+ *note minor::
+ computes all minors (=subdeterminants) of a given size for a
+ matrix.
+
+Numeric computations
+--------------------
+
+`laguerre'
+ *note laguerre::
+ computes all (complex) roots of a univariate polynomial
+
+`uressolve'
+ *note uressolve::
+ find all roots of 0-dimensional ideal i with multivariate
+ resultants
+
+Controlling computations
+------------------------
+
+`option'
+ *note option::
+ allows setting of options for manipulating the behavior of
+ computations (such as reduction strategies) and for showing
+ protocol information indicating the progress of a computation.
+
+
+File: sing.htm, Node: The SINGULAR language, Next: Input and output, Prev:
Implemented algorithms, Up: General concepts
+
+3.5 The SINGULAR language
+=========================
+
+SINGULAR interprets commands given interactively on the command line as
+well as given in the context of user-defined procedures. In fact,
+SINGULAR makes no distinction between these two cases. Thus, SINGULAR
+offers a powerful programming language as well as an easy-to-use command
+line interface without differences in syntax or semantics.
+
+In the following, the basic language concepts such as commands,
+expressions, names, objects, etc., are discussed. *Note Procedures::,
+and *note Libraries::, for the concepts of procedures and libraries.
+
+In many aspects, the SINGULAR language is similar to the C programming
+language. For a description of some of the subtle differences, see
+*note Major differences to the C programming language::.
+
+Elements of the language
+........................
+
+The major building blocks of the SINGULAR language are expressions,
+commands, and control structures. The notion of expressions in the
+SINGULAR and the C programming language are identical, whereas the
+notion of commands and control structures only roughly corresponds to
+the C statements.
+
+ * An "expression" is a sequence of operators, functions, and operands
+ that specifies a computation. An expression always results in a
+ value of a specific type. *Note Data types::, and its subsections
+ (e.g., *note poly expressions::), for information on how to build
+ expressions.
+
+ * A "command" is either a declaration, an assignment, a call to a
+ function without return value, or a print command. For detailed
+ information, see *note General command syntax::.
+
+ * "Control structures" determine the execution sequence of commands.
+ SINGULAR provides control structures for conditional execution
+ (`if' ... `else') and iteration (`for' and `while'). Commands may
+ be grouped in pairs of `{' `}' (curly brackets) to form blocks.
+ *Note Control structures::, for more information.
+
+Other notational conventions
+............................
+
+For user-defined functions, the notion of "procedure" and "function" are
+synonymous.
+
+As already mentioned above, functions without return values are called
+commands. Furthermore, whenever convenient, the term "command" is used
+for a function, even if it does return a value.
+
+* Menu:
+
+* General command syntax::
+* Special characters::
+* Names::
+* Objects::
+* Type conversion and casting::
+* Flow control::
+
+
+File: sing.htm, Node: General command syntax, Next: Special characters,
Prev: The SINGULAR language, Up: The SINGULAR language
+
+3.5.1 General command syntax
+----------------------------
+
+In SINGULAR a command is either a declaration, an assignment, a call to
+a function without return value, or a print command. The general form of
+a command is described in the following subsections.
+
+Declaration
+...........
+
+ 1. type name `=' expression `;'
+ declares a variable with the given name of the given type and
+ assigns the expression as initial value to it. Expression is an
+ expression of the specified type or one that can be converted to
+ that type. *Note Type conversion and casting::.
+
+ 2. type name_list `=' expression_list `;'
+ declares variables with the given names and assigns successively
+ each expression of expression_list to the corresponding name of
+ name_list. Both lists must be of the same length. Each expression
+ in expression_list is an expression of the specified type or one
+ that can be converted to that type. *Note Type conversion and
+ casting::.
+
+ 3. type name `;'
+ declares a variable with the given name of the given type and
+ assigns the default value of the specific type to it.
+
+*Note Names::, for more information on declarations. *Note Data
+types::, for a description of all data types known to SINGULAR.
+
+ ring r; // the default ring
+ poly f,g = x^2+y^3,xy+z2; // the polynomials f=x^2+y^3 and g=x*y+z^2
+ ideal I = f,g; // the ideal generated by f and g
+ matrix m[3][3]; // a 3 x 3 zero matrix
+ int i=2; // the integer i=2
+
+Assignment
+..........
+
+ 4. name `=' expression `;'
+ assigns expression to name.
+
+ 5. name_list `=' expression_list `;'
+ assigns successively each expression of expression_list to the
+ corresponding name of name_list. Both lists must be of the same
+ length. This is not a simultaneous assignment. Thus, `f, g = g,
+ f;' does not swap the values of `f' and `g', but rather assigns `g'
+ to both `f' and `g'.
+
+There must be a type conversion of the type of expression to the type of
+name. *Note Type conversion and casting::.
+
+An assignment itself does not yield a value. Hence, compound assignments
+like `i = j = k;' are not allowed and result in an error.
+
+ f = x^2 + y^2 ; // overwrites the old value of f
+ I = jacob(f);
+ f,g = I[1],x^2+y^2 ; // overwrites the old values of f and g
+
+Function without return value
+.............................
+
+ 6. function_name [ `(' argument_list `)' ] `;'
+ calls function function_name with arguments argument_list.
+
+The function may have output (not to be confused with a return value of
+type string). *Note Functions::. Functions without a return value are
+specified there to have a return type 'none'.
+
+Some of these functions have to be called without parentheses, e.g.,
+`help', `LIB'.
+
+ ring r;
+ ideal i=x2+y2,x;
+ i=std(i);
+ degree(i); // degree has no return value but prints output
+ ==> 2
+
+Print command
+.............
+
+ 7. expression `;'
+ prints the value of an expression, for example, of a variable.
+
+Use the function `print' (or the procedure show from inout.lib) to get a
+pretty output of various data types, e.g., matrix or intmat. *Note
+print::.
+
+ int i=2;
+ i;
+ ==> 2
+ intmat m[2][2]=1,7,10,0;
+ print(m);
+ ==> 1 7
+ ==> 10 0
+
+
+File: sing.htm, Node: Special characters, Next: Names, Prev: General
command syntax, Up: The SINGULAR language
+
+3.5.2 Special characters
+------------------------
+
+The following characters and operators have special meaning:
+`='
+ assignment
+
+`(', `)'
+ in expressions, for indexed names and for argument lists
+
+`[', `]'
+ access operator for strings, integer vectors, ideals, matrices,
+ polynomials, resolutions, and lists. Used to build vectors of
+ polynomials. Example: `s[3]', `m[1,3]', `i[1..3]',
+ `[f,g+x,0,0,1]'.
+
+`+'
+ addition operator
+
+`-'
+ subtraction operator
+
+`*'
+ multiplication operator
+
+`/'
+ division operator. *Note Miscellaneous oddities::, for the
+ difference between the division operators `/' and `div'.
+
+`%'
+ modulo operator
+
+`^' or `**'
+ exponentiation operator
+
+`=='
+ comparison operator equal
+
+`!=' or `<>'
+ comparison operator not equal
+
+`>='
+ comparison operator bigger or equal
+
+`>'
+ comparison operator bigger
+
+`<='
+ comparison operator smaller or equal
+
+`<'
+ comparison operator smaller. Also used for file input. *Note
+ filecmd::.
+
+`!'
+ boolean operator not
+
+`&&'
+ boolean operator and
+
+`||'
+ boolean operator or
+
+`"'
+ delimiter for string constants
+
+``'
+ delimiter for name substitution
+
+`?'
+ synonym for `help'
+
+`//'
+ comment delimiter. Comment extends to end of line.
+
+`/*'
+ comment delimiter. Starts a comment which ends with `*/'.
+
+`*/'
+ comment delimiter. Ends a comment which starts with `/*'.
+
+`;'
+ statement separator
+
+`,'
+ separator for expression lists and function arguments
+
+`\'
+ escape character for `"' and `\' within strings
+
+`..'
+ interval specifier returning intvec. E.g., `1..3' which is
+ equivalent to the intvec `1, 2, 3'.
+
+`_'
+ value of expression last displayed
+
+`~'
+ breakpoint in procedures
+
+`#'
+ list of parameters in procedures without explicit parameter list
+
+`$'
+ terminates SINGULAR
+
+
+File: sing.htm, Node: Names, Next: Objects, Prev: Special characters, Up:
The SINGULAR language
+
+3.5.3 Names
+-----------
+
+SINGULAR is a strongly typed language. This means that all names (=
+identifiers) have to be declared prior to their use. For the general
+syntax of a declaration, see the description of declaration commands
+(*note General command syntax::).
+
+*Note Data types::, for a description of SINGULAR's data types. *Note
+typeof::, for a short overview of possible types. To get information on
+a name and the object named by it, the `type' command may be used (*note
+type::).
+
+It is possible to redefine an already existing name if doing so does not
+change its type. A redefinition first sets the variable to the default
+value and then computes the expression. The difference between
+redefining and overwriting a variable is shown in the following example:
+
+ int i=3;
+ i=i+1; // overwriting
+ i;
+ ==> 4
+ int i=i+1; // redefinition
+ ==> // ** redefining i **
+ i;
+ ==> 1
+
+User defined names should start with a letter and consist of letters and
+digits only. As an exception to this rule, the characters `@', and `_'
+may be used as part of a name, too. Capital and small letters are
+distinguished. Indexed names are built as a name followed by an
+int_expression in parentheses. A list of indexed names can be built as
+a name followed by an intvec_expression in parentheses.
+
+ ring R;
+ int n=3;
+ ideal j(3);
+ ideal j(n); // is equivalent to the above
+ ==> // ** redefining j(3) **
+ ideal j(2)=x;
+ j(2..3);
+ ==> j(2)[1]=x j(3)[1]=0
+
+Names may not coincide with reserved names (keywords). Type
+`reservedName();' to get a list of the reserved names. *Note
+reservedName::. Names should not interfere with names of ring variables
+or, more generally, with monomials. *Note Identifier resolution::.
+The command `listvar' provides a list of the names in use (*note
+listvar::).
+
+The most recently printed expression is available under the special name
+`_', e.g.,
+ ring r;
+ ideal i=x2+y3,y3+z4;
+ std(i);
+ ==> _[1]=y3+x2
+ ==> _[2]=z4-x2
+ ideal k=_;
+ k*k+x;
+ ==> _[1]=y6+2x2y3+x4
+ ==> _[2]=y3z4+x2z4-x2y3-x4
+ ==> _[3]=z8-2x2z4+x4
+ ==> _[4]=x
+ size(_[3]);
+ ==> 3
+
+A string_expression enclosed in ``'...``' (back ticks) evaluates to the
+value of the variable named by the string_expression. This feature is
+referred to as name substitution.
+
+ int foo(1)=42;
+ string bar="foo";
+ `bar+"(1)"`;
+ ==> 42
+
+
+File: sing.htm, Node: Objects, Next: Type conversion and casting, Prev:
Names, Up: The SINGULAR language
+
+3.5.4 Objects
+-------------
+
+Every object in SINGULAR has a type and a value. In most cases it has
+also a name and in some cases an attribute list. The value of an object
+may be examined simply by printing it with a print command: object`;'.
+The type of an object may be determined by means of the `typeof'
+function, the attributes by means of the `attrib' function (*note
+typeof::, *note attrib::):
+
+ ring r=0,x,dp;
+ typeof(10);
+ ==> int
+ typeof(10000000000000000);
+ ==> number
+ typeof(r);
+ ==> ring
+ attrib(x);
+ ==> no attributes
+ attrib(std(ideal(x)));
+ ==> attr:isSB, type int
+
+Each object of type `poly', `ideal', `vector', `module', `map',
+`matrix', `number', or `resolution' belongs to a specific ring. Also
+`list', if at least one of the objects contained in the list belongs to
+a ring. These objects are local to the ring. Their names can be used
+for other objects in other rings. Objects from one ring can be mapped
+to another ring using maps or with the commands `fetch' or `imap'.
+*Note map::, *note fetch::, *note imap::.
+
+All other types do not belong to a ring and can be accessed within every
+ring and across rings. They can be declared even if there is no active
+basering.
+
+
+File: sing.htm, Node: Type conversion and casting, Next: Flow control,
Prev: Objects, Up: The SINGULAR language
+
+3.5.5 Type conversion and casting
+---------------------------------
+
+Type conversion
+...............
+
+Assignments convert the type of the right-hand side to the type of the
+left-hand side of the assignment, if possible. Operators and functions
+which require certain types of operands can also implicitly convert the
+type of an expression. It is, for example, possible to multiply a
+polynomial by an integer because the integer is automatically converted
+to a polynomial. Type conversions do not act transitively. Possible
+conversions are:
+
+1. `int' ==> `ideal'
+2. `poly' ==> `ideal'
+3. `intvec' ==> `intmat'
+4. `int' ==> `intvec'
+5. `int' ==> `intmat'
+6. `string' ==> `link'
+7. `resolution' ==> `list'
+8. `ideal' ==> `matrix'
+9. `int' ==> `matrix'
+10. `intmat' ==> `matrix'
+11. `intvec' ==> `matrix'
+12. `module' ==> `matrix'
+13. `number' ==> `matrix'
+14. `poly' ==> `matrix'
+15. `vector' ==> `matrix'
+16. `ideal' ==> `module'
+17. `matrix' ==> `module'
+18. `vector' ==> `module'
+19. `int' ==> `number'
+20. `int' ==> `poly'
+21. `number' ==> `poly'
+22. `string' ==> `proc'
+23. `list' ==> `resolution'
+24. `int' ==> `vector' (i ==> i*`gen(1)')
+25. `poly' ==> `vector' (p ==> p*`gen(1)')
+
+Type casting
+............
+
+An expression can be casted to another type by using a type cast
+expression:
+type `(' expression `)'.
+
+Possible type casts are:
+
+ to from
+ `ideal' expression lists of `int', `number', `poly'
+ `ideal' `int', `matrix', `module', `number', `poly', `vector'
+ `int' `number', `poly'
+ `intvec' expression lists of `int', `intmat'
+ `intmat' `intvec' (*note intmat type cast::)
+ `list' expression lists of any type
+ `matrix' `module', `ideal', `vector', `matrix'.
+ There are two forms to convert something to a matrix: if
+ `matrix(' expression `)' is used then the size of the
+ matrix is determined by the size of expression.
+ But `matrix(' expression `,' m `,' n `)' may also be used
+ - the result is a $ m \times n $
+ m x n matrix (*note matrix type cast::)
+ `module' expression lists of `int', `number', `poly', `vector'
+ `module' `ideal', `matrix', `vector'
+ `number' `poly'
+ `poly' `int', `number'
+ `string' any type (*note string type cast::)
+
+*Example:*
+ ring r=0,x,(c,dp);
+ number(3x);
+ ==> 0
+ number(poly(3));
+ ==> 3
+ ideal i=1,2,3,4,5,6;
+ print(matrix(i));
+ ==> 1,2,3,4,5,6
+ print(matrix(i,3,2));
+ ==> 1,2,
+ ==> 3,4,
+ ==> 5,6
+ vector v=[1,2];
+ print(matrix(v));
+ ==> 1,
+ ==> 2
+ module(matrix(i,3,2));
+ ==> _[1]=[1,3,5]
+ ==> _[2]=[2,4,6]
+
+
+File: sing.htm, Node: Flow control, Prev: Type conversion and casting, Up:
The SINGULAR language
+
+3.5.6 Flow control
+------------------
+
+A block is a sequence of commands surrounded by { and }.
+ {
+ command;
+ ...
+ }
+Blocks are used whenever SINGULAR is used as a structured programming
+language. The `if' and `else' structures allow conditional execution of
+blocks (see *note if::, *note else::). `for' and `while' loops are
+available for repeated execution of blocks (see *note for::, *note
+while::). In procedure definitions the main part and the example
+section are blocks as well(see *note proc::).
+
+* Menu:
+
+* break::
+* quit::
+* keepring::
+* export::
+* if::
+* else::
+* for::
+* while::
+* proc::
+* return::
+* continue::
+
+
+File: sing.htm, Node: Input and output, Next: Procedures, Prev: The
SINGULAR language, Up: General concepts
+
+3.6 Input and output
+====================
+
+SINGULAR's input and output (short, I/O) is realized using links. Links
+are the communication channels of SINGULAR, i.e., something SINGULAR can
+write to and read from. In this section, a short overview of the usage
+of links and of the different link types is given.
+
+For loading of libraries, see *note LIB::. For executing program
+scripts, see *note filecmd::.
+
+Monitoring
+----------
+
+A special form of I/O is monitoring. When monitoring is enabled,
+SINGULAR makes a typescript of everything printed on your terminal to a
+file. This is useful to create a protocol of a SINGULAR session. The
+`monitor' command enables and disables this feature (*note monitor::).
+
+How to use links
+----------------
+
+Recall that links are the communication channels of SINGULAR, i.e.,
+something SINGULAR can write to and read from using the functions
+`write' and `read'. There are furthermore the functions `dump' and
+`getdump' which store resp. retrieve the content of an entire SINGULAR
+session to, resp. from, a link. The `dump' and `getdump' commands are
+not available for DBM links.
+
+For more information, see *note write::, *note read::, *note dump::,
+*note getdump::.
+
+*Example:*
+ ring r; poly p = x+y;
+ dump("MPfile:w test.mp"); // dump the session to the file test.mp
+ kill r; // kill the basering
+ listvar();
+ ==> // LIB [0] string standard.lib
+ getdump("MPfile:r test.mp");// read the dump from the file
+ listvar();
+ ==> // r [0] *ring
+ ==> // p [0] poly
+ ==> // LIB [0] string standard.lib
+
+Specifying a link can be as easy as specifying a filename as a string.
+Except for MPtcp links, links even do not need to be explicitly opened
+or closed before, resp. after, they are used. To explicitly open or
+close a link, the `open', resp. `close', commands may be used (see *note
+open::, *note close::).
+
+Links have various properties which can be queried using the `status'
+function (*note status::).
+
+*Example:*
+ link l = "MPtcp:fork";
+ l;
+ ==> // type : MPtcp
+ ==> // mode : fork
+ ==> // name :
+ ==> // open : no
+ ==> // read : not ready
+ ==> // write: not ready
+ open(l);
+ status(l, "open");
+ ==> yes
+ close(l);
+ status(l, "open");
+ ==> no
+
+ASCII links
+-----------
+
+Data that can be converted to a string that can be written into files
+for storage or communication with other programs. The data are written
+in plain ASCII format. Reading from an ASCII link returns a string --
+conversion into other data is up to the user. This can be done, for
+example, using the command `execute' (*note execute::).
+
+ASCII links should primarily be used for storing small amounts of data,
+especially if it might become necessary to manually inspect or
+manipulate the data.
+
+*Note ASCII links::, for more information.
+
+*Example:*
+ // (over)write file test.ascii, link is specified as string
+ write(":w test.ascii", "int i =", 3, ";");
+ // reading simply returns the string
+ read("test.ascii");
+ ==> int i =
+ ==> 3
+ ==> ;
+ ==>
+ // but now test.ascii is "executed"
+ execute(read("test.ascii"));
+ i;
+ ==> 3
+
+MPfile links
+------------
+
+Data is stored in the binary MP format. Read and write access is very
+fast compared to ASCII links. All data (including such data that cannot
+be converted to a string) can be written to an MPfile link. Reading
+from an MPfile link returns the written expressions (i.e., not a string,
+in general).
+
+MPfile links should primarily be used for storing large amounts of data
+(like dumps of the content of an entire SINGULAR session), and if the
+data to be stored cannot be easily converted from or to a string (like
+rings, or maps).
+
+MPfile links are implemented on Unix-like operating systems only.
+
+*Note MPfile links::, for more information.
+
+*Example:*
+ ring r;
+ // (over)write MPfile test.mp, link is specified as string
+ write("MPfile:w test.mp", x+y);
+ kill r;
+ def p = read("MPfile:r test.mp");
+ typeof(p); p;
+ ==> poly
+ ==> x+y
+
+MPtcp links
+-----------
+
+Data is communicated with other processes (e.g., SINGULAR processes)
+which may run on the same computer or on different ones. Data exchange
+is accomplished using TCP/IP links in the binary MP format. Reading
+from an MPtcp link returns the written expressions (i.e., not a string,
+in general).
+
+MPtcp links should primarily be used for communications with other
+programs or for parallel computations (see, for example, *note
+Parallelization with MPtcp links::).
+
+MPtcp links are implemented on Unix-like operating systems only.
+
+*Note MPtcp links::, for more information.
+
+*Example:*
+ ring r;
+ link l = "MPtcp:launch"; // declare a link explicitly
+ open(l); // needs an open, launches another SINGULAR as a server
+ write(l, x+y);
+ kill r;
+ def p = read(l);
+ typeof(p); p;
+ ==> poly
+ ==> x+y
+ close(l); // shuts down SINGULAR server
+
+DBM links
+---------
+
+Data is stored in and accessed from a data base. Writing is
+accomplished by a key and a value and associates the value with the key
+in the specified data base. Reading is accomplished w.r.t. a key, the
+value associated to it is returned. Both the key and the value have to
+be specified as strings. Hence, DBM links may be used only for data
+which may be converted to or from strings.
+
+DBM links should primarily be used when data needs to be accessed not in
+a sequential way (like with files) but in an associative way (like with
+data bases).
+
+*Note DBM links::, for more information.
+
+*Example:*
+ ring r;
+ // associate "x+y" with "mykey"
+ write("DBM:w test.dbm", "mykey", string(x+y));
+ // get from data base what is stored under "mykey"
+ execute(read("DBM: test.dbm", "mykey"));
+ ==> x+y
+
+
+File: sing.htm, Node: Procedures, Next: Libraries, Prev: Input and output,
Up: General concepts
+
+3.7 Procedures
+==============
+
+Procedures contain sequences of commands of the SINGULAR language. They
+are used to extend the set of commands with user defined commands.
+Procedures are defined by either typing them on the command line or by
+loading them from a so-called library file with the LIB command, see
+*note LIB::. Procedures are invoked like normal built-in commands,
+i.e., by typing their name followed by the list of arguments in
+parentheses. The invocation then executes the sequence of commands
+stored in the specified procedure. All defined procedures can be
+displayed by the command `listvar(proc);'.
+
+* Menu:
+
+* Procedure definition::
+* Names in procedures::
+* Parameter list::
+* Procedure commands::
+
+
+File: sing.htm, Node: Procedure definition, Next: Names in procedures,
Prev: Procedures, Up: Procedures
+
+3.7.1 Procedure definition
+--------------------------
+
+*Syntax:*
+ [`static'] `proc' proc_name [parameter_list]
+ ["help_text"]
+ `{'
+\quad
+ procedure_body
+ `}'
+ [`example'
+ `{'
+\quad
+ sequence_of_commands;
+ `}']
+
+*Purpose:*
+ defines a new function, the `proc' proc_name, with the additional
+ information help_text, which is copied to the screen by `help
+ proc_name;' and the `example' section which is executed by `example
+ proc_name;'.
+ The help_text, the parameter_list, and the example section are
+ optional. The default for a parameter_list is `(list #)', see
+ *note Parameter list::. The help and example sections are ignored
+ if the procedure is defined interactively, i.e., if it was not
+ loaded from a file by a LIB command (*note LIB::).
+ Specifying `static' in front of the proc-definition (in a library
+ file) makes this procedure local to the library, i.e., accessible
+ only for the other procedures in the same library, but not for the
+ users. So there is no reason anymore to define a procedure within
+ another one (it just makes debugging harder).
+
+Example of an interactive procedure definition
+..............................................
+
+ proc milnor_number (poly p)
+ {
+ ideal i= std(jacob(p));
+ int m_nr=vdim(i);
+ if (m_nr<0)
+ {
+ "// not an isolated singularity";
+ }
+ return(m_nr); // the value of m_nr is returned
+ }
+ ring r1=0,(x,y,z),ds;
+ poly p=x^2+y^2+z^5;
+ milnor_number(p);
+ ==> 4
+
+Example of a procedure definition in a library
+..............................................
+
+First, the library definition:
+ // Example of a user accessible procedure
+ proc tab (int n)
+ "USAGE: tab(n); (n integer)
+ RETURNS: string of n space tabs
+ EXAMPLE: example tab; shows an example"
+ { return(internal_tab(n)); }
+ example
+ {
+ "EXAMPLE:"; echo=2;
+ for(int n=0; n<=4; n=n+1)
+ { tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
+ }
+
+ // Example of a static procedure
+ static proc internal_tab (int n)
+ { return(" "[1,n]); }
+
+Now, we load the library and execute the procedures defined there:
+ LIB "sample.lib"; // load the library sample.lib
+ example tab; // show an example
+ ==> // proc tab from lib sample.lib
+ ==> EXAMPLE:
+ ==> for(int n=0; n<=4; n=n+1)
+ ==> { tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
+ ==> *+*
+ ==> * + *
+ ==> * + *
+ ==> * + *
+ ==> * + *
+ ==>
+ "*"+tab(3)+"*"; // use the procedure tab
+ ==> * *
+ // the static procedure internal_tab is not accessible
+ "*"+internal_tab(3)+"*";
+ ==> ? 'sample.lib::internal_tab()' is a local procedure and cannot be
acce\
+ ssed by an user.
+ ==> ? error occurred in line 5: ` "*"+internal_tab(3)+"*";`
+ // show the help section for tab
+ help tab;
+ ==> // ** Could not get IdxFile.
+ ==> // ** Either set environment variable SINGULAR_IDX_FILE to IdxFile,
+ ==> // ** or make sure that IdxFile is at
/home/hannes/singular/2-0/doc/singu\
+ lar.idx
+ ==> // proc tab from lib sample.lib
+ ==> proc tab (int n)
+ ==> USAGE: tab(n); (n integer)
+ ==> RETURNS: string of n space tabs
+ ==> EXAMPLE: example tab; shows an example
+
+Guidelines for the help text of a procedure
+...........................................
+
+There are no enforced rules on the format of the help section of a
+procedure.
+
+Nevertheless, we recommend that the help text of a procedure should
+contain information about the usage, purpose, return values and
+generated objects. Particular assumptions or limitations should be
+listed. It should also be mentioned if global objects are generated or
+manipulated.
+
+The help text of procedures contained in libraries of the SINGULAR
+distribution should furthermore comply with certain rules as explained
+in *note The help string of procedures::.
+
+
+File: sing.htm, Node: Names in procedures, Next: Parameter list, Prev:
Procedure definition, Up: Procedures
+
+3.7.2 Names in procedures
+-------------------------
+
+All variables are local to the procedure they are defined in. Locally
+defined variables cannot interfere with names in other procedures and
+are automatically deleted after leaving the procedure.
+
+Internally, local variables are stored using the nesting level. A
+variable is said to have nesting level 1, if it is local to a procedure
+that was called interactively, nesting level 2, if it is local to a
+procedure that was called by a procedure of nesting level 1 etc.
+`listvar()' also displays the nesting level, nesting level 0 is used for
+global objects (see *note listvar::). A ring may be 'moved up' by one
+nesting level with `keepring' (see *note keepring::). All variables
+living in that ring are moved together with that ring.
+
+To keep local variables after leaving the procedure, they have to be
+exported (i.e. made known) to some higher level by the `export' command
+(*note export::).
+
+*Example:*
+ proc xxx
+ {
+ int k=4; //defines a local variable k
+ int result=k+2;
+ export(result); //defines the global variable "result".
+ }
+ xxx();
+ listvar(all);
+ ==> // result [0] int 6
+ ==> // LIB [0] string standard.lib
+Note that the variable `result' became a global variable after the
+execution of `xxx'.
+
+
+File: sing.htm, Node: Parameter list, Next: Procedure commands, Prev: Names
in procedures, Up: Procedures
+
+3.7.3 Parameter list
+--------------------
+
+`*Syntax:*'
+ `( )'
+ `(' parameter_definition `)'
+
+`*Purpose:*'
+ defines the number, type and names of the arguments to a `proc'.
+ The parameter_list is optional. The default for a parameter_list
+ is `(list #)' which means the arguments are referenced by `#[1],
+ #[2]', etc.
+
+`*Example:*'
+
+ proc x0
+ {
+ // can be called with
+ ... // any number of arguments of any type: #[1], #[2],...
+ // number of arguments: size(#)
+ }
+
+ proc x1 ()
+ {
+ ... // can only be called without arguments
+ }
+
+ proc x2 (ideal i, int j)
+ {
+ ... // can only be called with 2 arguments,
+ // which can be converted to ideal resp. int
+ }
+
+ proc x3 (i,j)
+ {
+ ... // can only be called with 2 arguments
+ // of any type
+ // (i,j) is the same as (def i,def j)
+ }
+
+ proc x5 (i,list #)
+ {
+ ... // can only be called with at least 1 argument
+ // number of arguments: size(#)+1
+ }
+
+`*Note:*'
+
+ The parameter_list may stretch across multiple lines.
+ A parameter may have any type (including the types `proc' and
+ `ring'). If a parameter is of type ring, then it can only be
+ specified by name, but not with a type, e.g.
+
+ proc x6 (r)
+ {
+ ... // this is correct even if the parameter is a ring
+ }
+
+ proc x7 (ring r)
+ {
+ ... // this is NOT CORRECT
+ }
+
+
+File: sing.htm, Node: Procedure commands, Prev: Parameter list, Up:
Procedures
+
+3.7.4 Procedure commands
+------------------------
+
+Some commands only make sense inside a procedure, since they make
+objects known to the nesting level from which the procedure was called
+or to all nesting levels.
+
+* Menu:
+
+See
+* export::
+* keepring::
+* return::
+
+See *note export::; *note keepring::; *note return::.
+
+
+File: sing.htm, Node: Libraries, Next: Guidelines for writing a library,
Prev: Procedures, Up: General concepts
+
+3.8 Libraries
+=============
+
+A library is a collection of SINGULAR procedures in a file.
+SINGULAR reads a library with the command `LIB'. General information
+about the library is displayed by the command `help libname_lib'. After
+loading the library, its procedures can be used like the built-in
+SINGULAR functions.
+
+To have the full functionality of a built-in function libraries have to
+comply with the few syntax rules described below.
+
+Furthermore, libraries which are to be included in the SINGULAR
+distribution, have to comply with certain rules as explained in *note
+Guidelines for writing a library::.
+
+* Menu:
+
+* Loading of a library::
+* Format of a library::
+
+
+File: sing.htm, Node: Loading of a library, Next: Format of a library, Up:
Libraries
+
+3.8.1 Loading of a library
+--------------------------
+
+Libraries can be loaded with the `LIB' command:
+
+`*Syntax:*'
+ `LIB' string_expression `;'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ reads a library of procedures from a file. If the given filename
+ does not start with `.' or `/' and can not be located in the
+ current directory, each directory contained in the library
+ `SearchPath' is searched for file of this name.
+
+`*Note on SearchPath:*'
+ The the library `SearchPath' is constructed at SINGULAR start-up
+ time as follows:
+
+ 1. the directories contained in the environment variable
+ `SINGULARPATH' are appended
+
+ 2. the directories `$BinDir/LIB', `$RootDir/LIB',
+ `$RootDir/../LIB', `$DefaultDir/LIB', `$DefaultDir/../LIB' are
+ appended, where
+
+ * `$BinDir' is the value of the environment variable
+ `SINGULAR_BIN_DIR', if set, or, if not set, the directory
+ in which the SINGULAR program resides
+
+ * `$RootDir' is the value of the environment variable
+ `SINGULAR_ROOT_DIR', if set, or, if not set,
+ `$BinDir/../'.
+
+ * `$DefaultDir' is the value of the environment variable
+ `SINGULAR_DEFAULT_DIR', if set, or `/usr/local/Singular/'
+ on a Unix platform, `\Singular\' on a Windows 95/98/NT
+ platform, and `::Singular:' on a Macintosh.
+
+ 3. all directories which do not exist are removed from the
+ `SearchPath'.
+
+ For setting environment variables see *note system::, or consult
+ the manual of your shell.
+
+ The library `SearchPath' can be examined by starting up SINGULAR
+ with the option `-v', or by issuing the command
+ `system("--version");'.
+
+`*Note on standard.lib:*'
+ Unless SINGULAR is started with the `--no-stdlib' option, the
+ library `standard.lib' is automatically loaded at start-up time.
+
+Only the names of the procedures in the library are loaded, the body of
+the procedures is read during the first call of this procedure. This
+minimizes memory consumption by unused procedures. When SINGULAR is
+started with the `-q' or `--quiet' option, no message about the loading
+of a library is displayed. More precisely, option `-q' (and likewise
+`--quiet') unsets option `loadLib' to inhibit monitoring of library
+loading (*note option::).
+
+All loaded libraries are displayed by the `LIB;' command:
+ option(loadLib); // show loading of libraries;
+ // standard.lib is loaded
+ LIB;
+ ==> standard.lib
+ // the names of the procedures of inout.lib
+ LIB "inout.lib"; // are now known to Singular
+ ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
+ LIB;
+ ==> standard.lib,inout.lib
+
+* Menu:
+
+See
+* Command line options::
+* LIB::
+* Procedures and libraries::
+* SINGULAR libraries::
+* proc::
+* standard_lib::
+* string::
+* system::
+
+See *note Command line options::; *note LIB::; *note Procedures and
+libraries::; *note SINGULAR libraries::; *note proc::; *note
+standard_lib::; *note string::; *note system::.
+
+
+File: sing.htm, Node: Format of a library, Prev: Loading of a library, Up:
Libraries
+
+3.8.2 Format of a library
+-------------------------
+
+A library file can contain comments, a category-, info- and
+version-string definition, `LIB' commands, `proc' commands and `proc'
+commands with `example' and `help' sections, i.e., the following
+keywords are allowed: `category', `info', `version', `LIB', `/* ... */',
+`//', `[static] proc'. Anything else is not recognized by the parser of
+SINGULAR and leads to an error message while loading the library. If an
+error occurs, loading is aborted and an error message is displayed,
+specifying the type of error and the line where it was detected.
+
+The category-, info- and version-string are defined as follows:
+`*Syntax:*'
+ `info' = string_constant `;'
+
+`*Purpose:*'
+ defines the general help for the library. This text is displayed on
+ `help libname_lib;'.
+
+`*Example:*'
+
+ info="
+ This could be the general help of a library.
+ Quotes must be escaped with a \ such as \"
+ ";
+
+`*Note:*'
+ In the info-string the characters \ and " must be preceded by a \
+ (escaped). It is recommended that the info string is placed on the
+ top of a library file and contains general information about the
+ library as well as a listing of all procedures available to the
+ users (with a one line description of each procedure).
+
+ Although there is no enforced format of the info string of a
+ library, we recommend that you follow certain rules as explained in
+ *note The help string of a library::.
+
+`*Syntax:*'
+ `version' = string_constant `;'
+
+`*Purpose:*'
+ defines the version number for the library. It is displayed when
+ the library is loaded.
+
+`*Example:*'
+
+ version="$ Id: sample.lib,v 1.2 1998/05/07 singular Exp $";
+ version="some version string";
+
+`*Note:*'
+ It is common practice to simply define the version string to be `"$
+ I'`d:$"' and let a version control system expand it.
+
+`*Syntax:*'
+ `category' = string_constant `;'
+
+`*Purpose:*'
+ defines the category for the library.
+
+`*Example:*'
+
+ category="Utilities";
+
+`*Note:*'
+ reserved for sorting the libraries into categories.
+
+
+File: sing.htm, Node: Guidelines for writing a library, Next: Debugging
tools, Prev: Libraries, Up: General concepts
+
+3.9 Guidelines for writing a library
+====================================
+
+Although there are very few enforced rules on how libraries are written
+(see *note Libraries::), it is recommended that the libraries comply
+with the guidelines explained in this section, so that debugging and
+understanding are made easier.
+
+*Note:* For libraries which are to be included in the SINGULAR
+distribution, the following guidelines are mandatory.
+
+* Menu:
+
+* Procedures in a library::
+* Documentation of a library::
+* Typesetting of help strings::
+* The help string of a library::
+* The help string of procedures::
+* template_lib::
+
+
+File: sing.htm, Node: Procedures in a library, Next: Documentation of a
library, Up: Guidelines for writing a library
+
+3.9.1 Procedures in a library
+-----------------------------
+
+In this section we list miscellaneous recommendations on how procedures
+contained in a library should be implemented.
+ 1. The info- and version-string should appear at the beginning of the
+ library, before procedure definitions.
+
+ 2. The info-string should have the format as explained in *note The
+ help string of a library::.
+
+ 3. Each procedure which should not be accessible by users should be
+ declared `static'.
+
+ 4. Each procedure which is not declared `static' should have a help
+ and example section as explained in *note Procedure definition::.
+ Such procedures should furthermore carefully check any assumptions
+ made about their input (like the type of list elements), and, if
+ necessary, omit an error using the function *note ERROR::.
+
+ 5. No procedures should be defined within the body of another
+ procedure.
+
+ 6. If the value of the reserved variable `printlevel' (*note
+ printlevel::) is greater than 0 then interactive user-input, i.e.,
+ the usage of functions like `pause("..")' or `read("");' (*note
+ read::), may be requested.
+
+ 7. If the value of the reserved variable `printlevel' (*note
+ printlevel::) is 0 then interactive user-input, i.e., the usage of
+ functions like `pause("..")' or `read("");' (*note read::), may
+ *not* be requested. Instead, an error (using the function *note
+ ERROR::) should be reported together with the recommendation on
+ increasing the value of the reserved variable `printlevel'.
+
+ 8. It is often useful for a procedure to print out comments, either to
+ explain results or to display intermediate computations. However,
+ if this procedure is called by another procedure, such comments are
+ confusing and disturbing in most cases.
+
+ SINGULAR offers an elegant solution, which requires the usage of
+ the SINGULAR function *note dbprint:: and the reserved variables
+ *note printlevel::, and *note voice:: (`voice' counts the nesting
+ of procedures; It has the value 1 on the top level, 2 inside the
+ first procedure etc.; `printlevel' has the value 0 by default, but
+ can be set to any integer value by the user).
+
+ For example, if the following procedure `Test' is called directly
+ from the top level then `comment1' is displayed (i.e., printed out)
+ but not `comment2'; and nothing is displayed if `Test' is called
+ from within any other procedure. However, if `printlevel' is set
+ to a value k with k>0, then `comment1' (resp. `comment2') is
+ displayed provided that `Test' is called from other procedures,
+ with a nesting level up to k (resp. k-1).
+
+ Note furthermore, that the example part of a procedure behaves in
+ this respect like a procedure (i.e., the value of `voice' is 1).
+ Therefore, the command `printlevel=1;' is necessary for `comment1'
+ to be displayed on ` example Test;'. However, since printlevel is a
+ global variable, it should be reset to the old value at the end of
+ the example part.
+
+ proc Test
+ "USAGE: ...
+ ...
+ EXAMPLE: example Test; shows an example
+ "
+ { ...
+ int p = printlevel - voice + 3;
+ ...
+ dbprint(p,"comment1");
+ dbprint(p-1,"comment2");
+ // dbprint prints only if p > 0
+ ...
+ }
+ example
+ { "EXAMPLE:"; echo = 2;
+ int p = printlevel; //store old value of printlevel
+ printlevel = 1; //assign new value to printlevel
+ ...
+ Test();
+ printlevel = p; //reset printlevel to old value
+ }
+
+
+File: sing.htm, Node: Documentation of a library, Next: Typesetting of help
strings, Prev: Procedures in a library, Up: Guidelines for writing a library
+
+3.9.2 Documentation of a library
+--------------------------------
+
+The typesetting language in which the SINGULAR documentation is written
+is `texinfo'. Based on various tools, `info, dvi, ps,' and `html'
+versions of the `texinfo' documentation are generated.
+
+Starting with SINGULAR version 1-3, the `texinfo' documentation of all
+libraries of the SINGULAR distribution is generated automatically from
+their source code.
+
+More precisely, for each library,
+ - the info string of the library is parsed and typeset as explained
+ in *note Typesetting of help strings::.
+
+ - the help string of each procedure listed in the `PROCEDURE:'
+ section of the library info string is parsed and typeset as
+ explained in *note Typesetting of help strings::.
+
+ - the example of each procedure listed in the `PROCEDURE:' section of
+ the library info string is computed and its output is included into
+ the documentation.
+
+For a uniform look-and-feel of the library documentation, library
+developers should
+ - follow the recommendation of *note The help string of a library::
+ and *note The help string of procedures::.
+
+ - consult the source code of libraries like `template.lib' (*note
+ template_lib::) for examples on how library documentations are
+ written.
+
+ - make sure that each procedure listed in the `PROCEDURE:' section of
+ the library info string has a help string and an example section.
+
+ - not use interactive functions like `pause("..")' or `read("");'
+ (*note read::) and should limit the length of input lines to 60
+ characters in the example section of procedures.
+
+ - carefully check the generated documentation of their libraries in
+ its various formats using the `lib2doc' (*note lib2doc::) utility.
+
+* Menu:
+
+* lib2doc::
+
+
+File: sing.htm, Node: lib2doc, Up: Documentation of a library
+
+3.9.2.1 lib2doc
+...............
+
+`lib2doc' is a utility to generate the stand-alone documentation for a
+SINGULAR library in various formats.
+
+The `lib2doc' utility should be used by developers of SINGULAR libraries
+to check the generation of the documentation of their libraries.
+
+`lib2doc' can be downloaded from
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/misc/lib2doc.tar.gz'
+
+*Important:*
+To use `lib2doc', you need to have `perl' (version 5 or higher),
+`texinfo' (version 3.12 or higher) and `Singular' and `libparse'
+(version 1-3-4 or higher) installed on your system.
+
+To generate the documentation for a library, follow these steps:
+ 1. Unpack lib2doc.tar.gz
+
+ gzip -dc lib2doc.tar.gz | tar -pxf -
+
+ and
+
+ cd lib2doc
+
+ 2. Edit the beginning of the file `Makefile', filling in the values
+ for `SINGULAR' and `LIBPARSE'. Check also the values of `PERL' and
+ `LATEX2HTML'.
+
+ 3. Copy your library to the current directory:
+
+ cp <path-where-your-lib-is>/mylib.lib .
+
+ 4. Now you can run the following commands:
+
+ `make mylib.hlp'
+ Generates the file `mylib.hlp' - the info file for the
+ documentation of `mylib.lib'. This file can be viewed with
+
+ info -f mylib.hlp
+
+ `make mylib.dvi'
+ Generates the file `mylib.dvi' - the dvi file for the
+ documentation of `mylib.lib'. This file can be viewed with
+
+ xdvi mylib.dvi
+
+ `make mylib.ps'
+ Generates the file `mylib.ps' - the PostScript file for the
+ documentation of `mylib.lib'. This file can be viewed with
+ (for example)
+
+ ghostview mylib.dvi
+
+ `make mylib.html'
+ Generates the file `mylib.html' - the HTML file for the
+ documentation of `mylib.lib'. This file can be viewed with
+ (for example)
+
+ netscape mylib.html
+
+ `make clean'
+ Deletes all generated files.
+
+ Note that you can safely ignore messages complaining about
+ undefined references.
+
+
+File: sing.htm, Node: Typesetting of help strings, Next: The help string of
a library, Prev: Documentation of a library, Up: Guidelines for writing a
library
+
+3.9.3 Typesetting of help strings
+---------------------------------
+
+The help strings of procedures and info strings of libraries which are
+included in the distribution of SINGULAR are parsed and automatically
+converted into the texinfo format (the typesetting language in which the
+documentation of SINGULAR is written).
+
+For optimal typesetting results, the guidelines for writing libraries
+and procedures should be followed, and the following points should be
+kept in mind:
+
+ * If a help string starts with an `@' sign, then no parsing is done,
+ and the help string is assumed to be already in the texinfo format.
+
+ * help strings are typeset within a address@hidden @asis' environment (which
+ is similar to a latex `description' environment).
+
+ * If a line starts with only uppercase words and contains a colon,
+ then the text up to the colon is taken to be the description-string
+ of an item and the text following the colon is taken to be the
+ content of the item.
+
+ * If the description-string of an item matches
+
+ `EXAMPLE'
+ then this item and its content is ignored.
+
+ `SEE ALSO'
+ then the content of the item is assumed to be comma-separated
+ words which are valid references to other texinfo nodes of the
+ manual. (e.g., all procedure and command names are also
+ texinfo nodes).
+
+ `KEYWORDS' (or, `KEYPHRASES')
+ then the content of the item is assumed to be a
+ semicolon-separated list of phrases which are taken as keys
+ for the index of the manual (N.B. the name of a
+ procedure/library is automatically added to the index keys).
+
+ `PROCEDURES'
+ then the content of the item is assumed to be a summary
+ description of the procedures contained in the library.
+ Separate texinfo nodes (subsections in printed documents) are
+ *only* created out of the help strings of such procedures
+ which appear in the summary description of a library.
+
+ `LIBRARY'
+ then the content of the item is assumed to be a one-line
+ description of a library. If this one-line description consist
+ of only uppercase characters, then it is typeset in all
+ lowercase characters in the manual (otherwise it is left as
+ is).
+
+ * For the content of an item, the following texinfo markup elements
+ are recognized (and, their content not further manipulated):
+
+ address@hidden'
+ to enforce a line-break.
+
+ Example:
+ `old line @* new line'
+ ==>
+ old line
+ new line
+
+ address@hidden'
+ References to other parts of the SINGULAR manual can be set
+ using one of the following address@hidden' constructs. Notice
+ that `node' must be the name of a section of the SINGULAR
+ manual. In particular, it may be a name of a function, library
+ or library procedure.
+
+ address@hidden'
+ for a reference to the node `node' at the beginning of a
+ sentence.
+
+ address@hidden'
+ for a reference to the node `node' at the end of a
+ sentence.
+
+ address@hidden'
+ for a reference to the node `node' within parenthesis.
+
+ Example:
+ address@hidden Storms}, for more info.'
+ ==>*Note Hurricanes::, for more info.
+ ==>See Section 3.1 [Hurricanes], page 24, for more info.
+
+ `For more information, see @ref{Hurricanes}.'
+ ==>For more information, see *Note Hurricanes::.
+ ==>For more information, see Section 3.1 [Hurricanes],
+ page 24.
+
+ `... storms cause flooding (@pxref{Hurricanes}) ...'
+ ==>... storms cause flooding (*Note Hurricanes::) ...
+ ==>... storms cause flooding (see Section 3.1
+ [Hurricanes], page 24)
+
+ address@hidden'
+ for typesetting of small (i.e., which do not go over multiple
+ lines) mathematical expressions in LaTeX math-mode syntax.
+
+ Example:
+ address@hidden'
+ ==>
+ \alpha $\alpha$
+
+ Note:
+ Mathematical expressions inside address@hidden' may not
+ contain curly parenthesis and the "at" sign, i.e., may
+ not contain `{,},@'.
+
+ address@hidden'
+ for typesetting of small (i.e., which do not go over multiple
+ lines) strings in typewriter font.
+
+ Example:
+ address@hidden font}'
+ ==>
+ `typewriter font'
+
+ Note:
+ The string inside address@hidden' may not contain curly
+ parenthesis and the "at" sign, i.e., may not contain
+ `{,},@'.
+
+ address@hidden'
+ `...'
+
+ address@hidden example'
+ for pre-formatted text which is indented and typeset in
+ typewriter font.
+
+ Example:
+
+ before example
+ @example
+ in example
+ notice extra identation and
+ escape of special characters like @{,@},@@
+ @end example
+ after example
+
+ ==>
+ before example
+
+ in example
+ notice extra identation and
+ escape of special characters like {,},@
+
+ after example
+
+ Note:
+ The characters {,},@ have to be escaped by an @ sign
+ inside an @example environment.
+
+ address@hidden'
+ `...'
+
+ address@hidden format'
+ for pre-formatted text which is not indented and typeset in
+ normal font.
+
+ Example:
+
+ before format
+ @format
+ in format
+ no extra identation but still
+ escape of special characters like @{,@},@@
+ @end format
+ after format
+
+ ==>
+ before format
+
+ in format
+ no extra identation but still
+ escape of special characters like {,},@
+
+ after format
+
+ Note:
+ The characters {,},@ have to be escaped by an @ sign
+ inside an @example environment.
+
+ address@hidden'
+ `...'
+
+ address@hidden texinfo'
+ for text which is written in pure texinfo.
+
+ Example:
+
+ @texinfo
+ Among others, within a texinfo environment
+ one can use the tex environment to typeset
+ more complex mathematical like
+ @tex
+ $i_{1,1} $
+ @tex
+ @end texinfo
+
+
+ ==>
+ Among others, within a texinfo environment one can use
+ the tex environment to typeset more complex mathematical
+ like $ i_{1,1} $
+
+ Furthermore, a line-break is inserted in front of each line whose
+ previous line is shorter than 60 characters and does not contain
+ any of the above described recognized texinfo markup elements.
+
+See also *note template_lib:: for an examples of the typesetting rules
+explained here.
+
+
+File: sing.htm, Node: The help string of a library, Next: The help string of
procedures, Prev: Typesetting of help strings, Up: Guidelines for writing a
library
+
+3.9.4 The help string of a library
+----------------------------------
+
+The help (or, info) string of a library should have the following
+format:
+
+ info="
+ LIBRARY: <library_name> <one line description of the content>
+ AUTHOR: <name, and email address of author>
+ [SEE ALSO: <comma-separated words of cross references>]
+ [KEYWORDS: <semicolon-separated phrases of index keys>]
+ PROCEDURES:
+ <procedure1>; <one line description of the purpose>
+ .
+ .
+ <procedureN>; <one line description of the purpose>
+ ";
+Only such procedures should be listed in the `PROCEDURE' section which
+are not `static' and which have a help and example section.
+
+The purpose of the one line procedure descriptions is not to give a
+short help for the procedure, but to help the user decide what procedure
+might be the right one for the job. Details can then be found in the
+help section of each procedure. Therefore parameters may be omitted or
+abbreviated if necessary. If this description consists of only
+upper-case characters, then it will be typeset in all lowercase
+characters in the manual.
+
+For more information, see *note Typesetting of help strings::. For an
+example, see *note template_lib::.
+
+
+File: sing.htm, Node: The help string of procedures, Next: template_lib,
Prev: The help string of a library, Up: Guidelines for writing a library
+
+3.9.5 The help string of procedures
+-----------------------------------
+
+The help string of a procedure should have the following format:
+
+ USAGE: <proc_name>(<parameters>); <explanation of parameters>
+ [CREATE: <description of created objects which are not returned>]
+ RETURN: <description of the purpose and return value>
+ [NOTE: <particular assumptions or limitations, details>]
+ [SEE ALSO: <comma-separated names of related procedures/cross references>]
+ [KEYWORDS: <semicolon-separated phrases of index keys>]
+ EXAMPLE: example <proc_name>; shows an example
+
+Further arbitrary items (like `THEORY:', or `BACKGROUND:') are
+recognized, as well, but should be used diligently.
+
+Remember that help strings are formatted as explained in *note
+Typesetting of help strings::. In particular, descriptions may contain
+the texinfo markup elements address@hidden, @math{..}, @code{..}, @example,
address@hidden, @texinfo' to better control their typesetting. See *note
+msum::, *note mdouble::, *note mtripple:: for examples.
+
+
+File: sing.htm, Node: template_lib, Prev: The help string of procedures,
Up: Guidelines for writing a library
+
+3.9.6 template_lib
+------------------
+
+First, we show the source-code of a template library:
+ ////////////////////////////////////////////////////////////////////
+ // version string automatically expanded by CVS
+
+ version="Id: general.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $";
+ category="Miscellaneous";
+ // summary description of the library
+ info="
+ LIBRARY: template.lib A Template for a Singular Library
+ AUTHOR: Olaf Bachmann, email: address@hidden
+
+ SEE ALSO: standard_lib, Guidelines for writing a library,
+ Typesetting of help strings
+
+ KEYWORDS: library, template.lib; template.lib; library, info string
+
+ PROCEDURES:
+ mdouble(int) return double of int argument
+ mtripple(int) return three times int argument
+ msum([int,..,int]) sum of int arguments
+ ";
+ ////////////////////////////////////////////////////////////////////
+ proc mdouble(int i)
+ "USAGE: mdouble(i); i int
+ RETURN: int: i+i
+ NOTE: Help string is in pure ASCII
+ this line starts on a new line since previous line is short
+ mdouble(i): no new line
+ SEE ALSO: msum, mtripple, Typesetting of help strings
+ KEYWORDS: procedure, ASCII help
+ EXAMPLE: example mdouble; shows an example"
+ {
+ return (i + i);
+ }
+ example
+ { "EXAMPLE:"; echo = 2;
+ mdouble(0);
+ mdouble(-1);
+ }
+ ////////////////////////////////////////////////////////////////////
+ proc mtripple(int i)
+ "@c we do texinfo here
+ @table @asis
+ @item @strong{Usage:}
+ @code{mtripple(i)}; @code{i} int
+
+ @item @strong{Return:}
+ int: @math{i+i+i}
+ @item @strong{Note:}
+ Help is in pure Texinfo
+ @*This help string is written in texinfo, which enables you to use,
+ among others, the @@math command for mathematical typesetting (like
+ @math{\alpha, \beta}).
+ @*It also gives more control over the layout, but is, admittingly,
+ more cumbersome to write.
+ @end table
+ @c use @c ref contstuct for references
+ @cindex procedure, texinfo help
+ @c ref
+ @strong{See also:}
+ @ref{mdouble}, @ref{msum}, @ref{Typesetting of help strings}
+ @c ref
+ "
+ {
+ return (i + i + i);
+ }
+ example
+ { "EXAMPLE:"; echo = 2;
+ mtripple(0);
+ mtripple(-1);
+ }
+ ////////////////////////////////////////////////////////////////////
+ proc msum(list #)
+ "USAGE: msum([i_1,..,i_n]); @code{i_1,..,i_n} def
+ RETURN: Sum of int arguments
+ NOTE: This help string is written in a mixture of ASCII and texinfo
+ @* Use a @ref constructs for references (like @pxref{mtripple})
+ @* Use @code for typewriter font (like @code{i_1})
+ @* Use @math for simple math mode typesetting (like @math{i_1}).
+ @* Note: No parenthesis like } are allowed inside @math and @code
+ @* Use @example for indented preformatted text typeset in
typewriter
+ font like
+ @example
+ this --> that
+ @end example
+ Use @format for preformatted text typeset in normal font
+ @format
+ this --> that
+ @end format
+ Use @texinfo for text in pure texinfo
+ @texinfo
+ @expansion{}
+ @tex
+ $i_{1,1}$
+ @end tex
+
+ @end texinfo
+ Notice that
+ automatic linebreaking is still in affect (like on this
line).
+ SEE ALSO: mdouble, mtripple, Typesetting of help strings
+ KEYWORDS: procedure, ASCII/Texinfo help
+ EXAMPLE: example msum; shows an example"
+ {
+ if (size(#) == 0) { return (0);}
+ if (size(#) == 1) { return (#[1]);}
+ int i;
+ def s = #[1];
+ for (i=2; i<=size(#); i++)
+ {
+ s = s + #[i];
+ }
+ return (s);
+ }
+ example
+ { "EXAMPLE:"; echo = 2;
+ msum();
+ msum(4);
+ msum(1,2,3,4);
+ }
+
+After typesetting, the library appears in the document as follows (with
+one subsection for each procedure):
+
+*Library:*
+ template.lib
+
+*Purpose:*
+ A Template for a Singular Library
+
+*Author:*
+ Olaf Bachmann, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* mdouble:: return double of int argument
+* mtripple:: return three times int argument
+* msum:: sum of int arguments
+
+* Menu:
+
+See also:
+* Guidelines for writing a library::
+* Typesetting of help strings::
+* standard_lib::
+
+*See also:* *note Guidelines for writing a library::; *note Typesetting
+of help strings::; *note standard_lib::.
+
+
+File: sing.htm, Node: mdouble, Next: mtripple, Up: template_lib
+
+3.9.6.1 mdouble
+...............
+
+Procedure from library `template.lib' (*note template_lib::).
+
+*Usage:*
+ mdouble(i); i int
+
+*Return:*
+ int: i+i
+
+*Note:*
+ Help string is in pure ASCII
+ this line starts on a new line since previous line is short
+ mdouble(i): no new line
+
+*Example:*
+ LIB "template.lib";
+ mdouble(0);
+ ==> 0
+ mdouble(-1);
+ ==> -2
+
+* Menu:
+
+See also:
+* Typesetting of help strings::
+* msum::
+* mtripple::
+
+*See also:* *note Typesetting of help strings::; *note msum::; *note
+mtripple::.
+
+
+File: sing.htm, Node: mtripple, Next: msum, Prev: mdouble, Up: template_lib
+
+3.9.6.2 mtripple
+................
+
+Procedure from library `template.lib' (*note template_lib::).
+
+*Usage:*
+ `mtripple(i)'; `i' int
+
+*Return:*
+ int: i+i+i $i+i+i$
+
+*Note:*
+ Help is in pure Texinfo
+ This help string is written in texinfo, which enables you to use,
+ among others, the @math command for mathematical typesetting (like
+
+ \alpha, \beta $\alpha, \beta$
+ ).
+ It also gives more control over the layout, but is, admittingly,
+ more cumbersome to write.
+
+* Menu:
+
+*See also:*
+* Typesetting of help strings::
+* mdouble::
+* msum::
+
+*See also:* *note Typesetting of help strings::; *note mdouble::; *note
+msum::.
+
+*Example:*
+ LIB "template.lib";
+ mtripple(0);
+ ==> 0
+ mtripple(-1);
+ ==> -3
+
+
+File: sing.htm, Node: msum, Prev: mtripple, Up: template_lib
+
+3.9.6.3 msum
+............
+
+Procedure from library `template.lib' (*note template_lib::).
+
+*Usage:*
+ msum([i_1,..,i_n]); `i_1,..,i_n' def
+
+*Return:*
+ Sum of int arguments
+
+*Note:*
+ This help string is written in a mixture of ASCII and texinfo
+ Use a @ref constructs for references (like *note mtripple::)
+ Use @code for typewriter font (like `i_1')
+ Use @math for simple math mode typesetting (like i_1 $i_1$
+ ).
+ Note: No parenthesis like } are allowed inside @math and @code
+ Use @example for indented preformatted text typeset in typewriter
+ font like
+
+ this --> that
+
+ Use @format for preformatted text typeset in normal font
+
+ this -> that
+
+ Use @texinfo for text in pure texinfo
+
+ ==> $i_{1,1}$
+
+ Notice that
+ automatic linebreaking is still in affect (like on this line).
+
+*Example:*
+ LIB "template.lib";
+ msum();
+ ==> 0
+ msum(4);
+ ==> 4
+ msum(1,2,3,4);
+ ==> 10
+
+* Menu:
+
+See also:
+* Typesetting of help strings::
+* mdouble::
+* mtripple::
+
+*See also:* *note Typesetting of help strings::; *note mdouble::; *note
+mtripple::.
+
+
+File: sing.htm, Node: Debugging tools, Prev: Guidelines for writing a
library, Up: General concepts
+
+3.10 Debugging tools
+====================
+
+If SINGULAR does not come back to the prompt while calling a user
+defined procedure, probably a bracket or a `"' is missing. The easiest
+way to leave the procedure is to type some brackets or `"' and then
+<RETURN> .
+
+* Menu:
+
+* Tracing of procedures::
+* Source code debugger::
+* Break points::
+* Printing of data::
+* libparse::
+
+
+File: sing.htm, Node: Tracing of procedures, Next: Source code debugger,
Prev: Debugging tools, Up: Debugging tools
+
+3.10.1 Tracing of procedures
+----------------------------
+
+Setting the `TRACE' variable to 1 (resp. 3) results in a listing of the
+called procedures (resp. together with line numbers). If `TRACE' is set
+to 4, `Singular' displays each line before its interpretation and waits
+for the <RETURN> key being pressed.
+
+* Menu:
+
+* TRACE var::
+
+See *note TRACE var::.
+
+*Example:*
+ proc t1
+ {
+ int i=2;
+ while (i>0)
+ { i=i-1; }
+ }
+ TRACE=3;
+ t1();
+ ==>
+ ==> entering t1 (level 0)
+ ==> {1}{2}{3}{4}{5}{4}{5}{6}{7}{4}{5}{6}{7}{4}{6}{7}{8}
+ ==> leaving t1 (level 0)
+
+
+File: sing.htm, Node: Source code debugger, Next: Break points, Prev:
Tracing of procedures, Up: Debugging tools
+
+3.10.2 Source code debugger
+---------------------------
+
+The source code debugger (sdb) is an experimental feature, it's
+interface may change in future versions of Singular.
+To enable the use of the source code debugger SINGULAR has to be started
+with the option `-d' or `--sdb' (see *note Command line options::).
+
+sdb commands
+............
+
+Each sdb command consist of one character which may be followed by a
+parameter.
+`b'
+ print backtrace of calling stack
+
+`c'
+ continue
+
+`e'
+ edit the current procedure and reload it (current call will be
+ aborted)
+ only available on UNIX systems
+
+`h',`?'
+ display help screen
+
+`n'
+ execute current line, sdb break at next line
+
+`p' <identifier>
+ display type and value of the variable given by <identifier>
+
+`Q'
+ quit this Singular session
+
+`q' <flags>
+ quit debugger, set debugger flags(0,1,2)
+ 0: continue, disable the debugger
+ 1: continue
+ 2: throw an error, return to toplevel
+
+Syntactical errors in procedures
+................................
+
+If SINGULAR was started with the command line option `-d' or `--sdb' a
+syntactical error in a procedure will start the source code debugger
+instead of returning to the top level with an error message. The
+commands `q 1' and `q 2' are equivalent in this case.
+
+SDB breakpoints in procedures
+.............................
+
+Up to seven SDB breakpoints can be set. To set a breakpoint at a
+procedure use `breakpoint'. (See *note breakpoint::).
+These breakpoints can be cleared with the command `d breakpoint_no' from
+within the debugger or with `breakpoint(' proc_name `,-1);'.
+
+
+File: sing.htm, Node: Break points, Next: Printing of data, Prev: Source
code debugger, Up: Debugging tools
+
+3.10.3 Break points
+-------------------
+
+A break point can be put into a proc by inserting the command `~'. If
+`Singular' reaches a break point it asks for lines of commands
+(line-length must be less than 80 characters) from the user. It returns
+to normal execution if given an empty line. See *note ~::.
+
+*Example:*
+ proc t
+ {
+ int i=2;
+ ~;
+ return(i+1);
+ }
+ t();
+ ==> -- break point in t --
+ ==> -- 0: called from STDIN --
+ i; // here local variables of the procedure can be accessed
+ ==> 2
+ ==> -- break point in t --
+
+ ==> 3
+
+
+
+File: sing.htm, Node: Printing of data, Next: libparse, Prev: Break points,
Up: Debugging tools
+
+3.10.4 Printing of data
+-----------------------
+
+The procedure `dbprint' is useful for optional output of data: it takes
+2 arguments and prints the second argument, if the first argument is
+positive; it does nothing otherwise.
+
+* Menu:
+
+* dbprint::
+* voice::
+
+
+File: sing.htm, Node: libparse, Prev: Printing of data, Up: Debugging tools
+
+3.10.5 libparse
+---------------
+
+`libparse' is a stand-alone program contained in the SINGULAR
+distribution (at the place where the SINGULAR executable program
+resides), which cannot be called inside of SINGULAR. It is a debugging
+tool for libraries which performs exactly the same checks as the `LIB'
+command in SINGULAR, but generates more output during parsing.
+`libparse' is useful if an error occurs while loading the library, but
+the whole block around the line specified seems to be correct. In these
+situations the real error might be hundreds of lines earlier in the
+library.
+
+*Usage:*
+`libparse [options] singular-library'
+*Options:*
+`-d' Debuglevel
+ increases the amount of output during parsing, where Debuglevel is
+ an integer between 0 and 4. Default is 0.
+
+`-s'
+ turns on reporting about violations of unenforced syntax rules
+
+The following syntax checks are performed in any case:
+ * counting of pairs of brackets {,} , [,] and (,) (number of {
+ has to match number of }, same for [,] and (,) ).
+
+ * counting of " ( number of " must be even ).
+
+ * general library syntax ( only LIB, static, proc (with
+ parameters, help, body and example) and comments, i.e // and `/*
+ ... */', are allowed).
+Its output lists all procedures that have been parsed successfully:
+
+ $ libparse sample.lib
+ Checking library 'sample.lib'
+ Library function line,start-eod line,body-eob
line,example-eoe
+ Version:0.0.0;
+ g Sample tab line 9, 149-165 13, 271-298 14,
300-402
+ l Sample internal_tab line 24, 450-475 25, 476-496 0,
0-496
+
+where the following abbreviations are used:
+ * g: global procedure (default)
+
+ * l: static procedure, i.e., local to the library.
+
+each of the following is the position of the byte in the library.
+ * start: begin of 'proc'
+
+ * eod: end of parameters
+
+ * body: start of procedure body '{'
+
+ * eob: end of procedure body '}'
+
+ * example: position of 'example'
+
+ * eoe: end of example '}'
+
+Hence in the above example, the first procedure of the library
+sample.lib is user-accessible and its name is tab. The procedure starts
+in line 9, at character 149. The head of the procedure ends at character
+165, the body starts in line 13 at character 271 and ends at character
+298. The example section extends from line 14 character 300 to character
+402.
+
+The following example shows the result of a missing close-bracket } in
+line 26 of the library `sample.lib'.
+
+ LIB "sample.lib";
+ ==> ? Library sample.lib: ERROR occurred: in line 26, 497.
+ ==> ? missing close bracket '}' at end of library in line 26.
+ ==> ? Cannot load library,... aborting.
+ ==> ? error occurred in STDIN line 1: `LIB "sample.lib";`
+
+
+File: sing.htm, Node: Data types, Next: Functions and system variables,
Prev: General concepts, Up: Top
+
+4 Data types
+************
+
+This chapter explains all data types of SINGULAR in alphabetical order.
+For every type, there is a description of the declaration syntax as well
+as information about how to build expressions of certain types.
+
+The term expression list in SINGULAR refers to any comma separated list
+of expressions.
+
+For the general syntax of a declaration see *note General command
+syntax::.
+
+* Menu:
+
+* def::
+* ideal::
+* int::
+* intmat::
+* intvec::
+* link::
+* list::
+* map::
+* matrix::
+* module::
+* number::
+* poly::
+* proc::
+* qring::
+* resolution::
+* ring::
+* string::
+* vector::
+
+
+File: sing.htm, Node: def, Next: ideal, Prev: Data types, Up: Data types
+
+4.1 def
+=======
+
+Objects may be defined without a specific type: they get their type from
+the first assignment to them. E.g., `ideal i=x,y,z; def j=i^2;' defines
+the ideal `i^2' with the name `j'.
+
+*Note:* Unlike other assignments a ring as an untyped object is not a
+copy but another reference to the same (possibly unnamed) ring. This
+means that entries in one of these rings appear also in the other ones.
+The following defines a ring `s' which is just another reference (or
+name) for the basering `r'.
+
+ ring r=32003,(x,y,z),dp;
+ poly f = x;
+ def s=basering;
+ setring s;
+ nameof(basering);
+ ==> s
+ listvar();
+ ==> // s [0] *ring
+ ==> // f [0] poly
+ ==> // r [0] ring
+ ==> // LIB [0] string standard.lib
+ poly g = y;
+ kill f;
+ listvar(r);
+ ==> // r [0] ring
+ ==> // g [0] poly
+ ring t=32003,(u,w),dp;
+ def rt=r+t;
+ rt;
+ ==> // characteristic : 32003
+ ==> // number of vars : 5
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering dp
+ ==> // : names u w
+ ==> // block 3 : ordering C
+
+This reference to a ring with def is useful if the basering is not local
+to the procedure (so it cannot be accessed by its name) but one needs a
+name for it (e.g., for a use with `setring' or `map'). `setring r;'
+does not work in this case, because `r' may not be local to the
+procedure.
+
+* Menu:
+
+* def declarations::
+
+
+File: sing.htm, Node: def declarations, Prev: def, Up: def
+
+4.1.1 def declarations
+----------------------
+
+*Syntax:*
+ `def' name `=' expression `;'
+
+*Purpose:*
+ defines an object of the same type as the right-hand side.
+
+*Default:*
+ none
+
+*Note:*
+ This is useful if the right-hand side may be of variable type as a
+ consequence of a computation (e.g., ideal or module or matrix). It
+ may also be used in procedures to give the basering a name which is
+ local to the procedure.
+
+*Example:*
+
+ def i=2;
+ typeof(i);
+ ==> int
+
+* Menu:
+
+See
+* typeof::
+
+See *note typeof::.
+
+
+File: sing.htm, Node: ideal, Next: int, Prev: def, Up: Data types
+
+4.2 ideal
+=========
+
+Ideals are represented as lists of polynomials which generate the ideal.
+Like polynomials they can only be defined or accessed with respect to a
+basering.
+
+*Note:* `size' counts only the non-zero generators of an ideal whereas
+`ncols' counts all generators.
+
+* Menu:
+
+* ideal declarations::
+* ideal expressions::
+* ideal operations::
+* ideal related functions::
+
+
+File: sing.htm, Node: ideal declarations, Next: ideal expressions, Prev:
ideal, Up: ideal
+
+4.2.1 ideal declarations
+------------------------
+
+*Syntax:*
+ `ideal' name `=' list_of_poly_and_ideal_expressions `;'
+ `ideal' name `=' ideal_expression `;'
+
+*Purpose:*
+ defines an ideal.
+
+*Default:*
+ 0
+
+*Example:*
+
+ ring r=0,(x,y,z),dp;
+ poly s1 = x2;
+ poly s2 = y3;
+ poly s3 = z;
+ ideal i = s1, s2-s1, 0,s2*s3, s3^4;
+ i;
+ ==> i[1]=x2
+ ==> i[2]=y3-x2
+ ==> i[3]=0
+ ==> i[4]=y3z
+ ==> i[5]=z4
+ size(i);
+ ==> 4
+ ncols(i);
+ ==> 5
+
+
+File: sing.htm, Node: ideal expressions, Next: ideal operations, Prev:
ideal declarations, Up: ideal
+
+4.2.2 ideal expressions
+-----------------------
+
+An ideal expression is:
+ 1. an identifier of type ideal
+
+ 2. a function returning ideal
+
+ 3. ideal expressions combined by the arithmetic operations `+' or `*'
+
+ 4. a power of an ideal expression (operator `^' or `**')
+ Note that the computation of the product `i*i' involves all
+ products of generators of `i' while `i^2' involves only the
+ different ones, and is therefore faster.
+
+ 5. a type cast to ideal
+
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ ideal m = maxideal(1);
+ m;
+ ==> m[1]=x
+ ==> m[2]=y
+ ==> m[3]=z
+ poly f = x2;
+ poly g = y3;
+ ideal i = x*y*z , f-g, g*(x-y) + f^4 ,0, 2x-z2y;
+ ideal M = i + maxideal(10);
+ timer =0;
+ i = M*M;
+ timer;
+ ==> 0
+ ncols(i);
+ ==> 505
+ timer =0;
+ i = M^2;
+ ncols(i);
+ ==> 505
+ timer;
+ ==> 0
+ i[ncols(i)];
+ ==> x20
+ vector v = [x,y-z,x2,y-x,x2yz2-y];
+ ideal j = ideal(v);
+
+
+File: sing.htm, Node: ideal operations, Next: ideal related functions,
Prev: ideal expressions, Up: ideal
+
+4.2.3 ideal operations
+----------------------
+
+`+'
+ addition (concatenation of the generators and simplification)
+
+`*'
+ multiplication (with ideal, poly, vector, module; simplification in
+ case of multiplication with ideal)
+
+`^'
+ exponentiation (by a non-negative integer)
+
+ideal_expression `[' intvec_expression `]'
+ are polynomial generators of the ideal, index 1 gives the first
+ generator.
+
+*Note:* For simplification of an ideal, see also *note simplify::.
+
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ ideal I = 0,x,0,1;
+ I;
+ ==> I[1]=0
+ ==> I[2]=x
+ ==> I[3]=0
+ ==> I[4]=1
+ I + 0; // simplification
+ ==> _[1]=1
+ ideal J = I,0,x,x-z;;
+ J;
+ ==> J[1]=0
+ ==> J[2]=x
+ ==> J[3]=0
+ ==> J[4]=1
+ ==> J[5]=0
+ ==> J[6]=x
+ ==> J[7]=x-z
+ I * J; // multiplication with simplification
+ ==> _[1]=1
+ I*x;
+ ==> _[1]=0
+ ==> _[2]=x2
+ ==> _[3]=0
+ ==> _[4]=x
+ vector V = [x,y,z];
+ print(V*I);
+ ==> 0,x2,0,x,
+ ==> 0,xy,0,y,
+ ==> 0,xz,0,z
+ ideal m = maxideal(1);
+ m^2;
+ ==> _[1]=x2
+ ==> _[2]=xy
+ ==> _[3]=xz
+ ==> _[4]=y2
+ ==> _[5]=yz
+ ==> _[6]=z2
+ ideal II = I[2..4];
+ II;
+ ==> II[1]=x
+ ==> II[2]=0
+ ==> II[3]=1
+
+
+File: sing.htm, Node: ideal related functions, Prev: ideal operations, Up:
ideal
+
+4.2.4 ideal related functions
+-----------------------------
+
+`char_series'
+ irreducible characteristic series (see *note char_series::)
+
+`coeffs'
+ matrix of coefficients (see *note coeffs::)
+
+`contract'
+ contraction by an ideal (see *note contract::)
+
+`diff'
+ partial derivative (see *note diff::)
+
+`degree'
+ multiplicity, dimension and codimension of the ideal of leading
+ terms (see *note degree::)
+
+`dim'
+ Krull dimension of basering modulo the ideal of leading terms (see
+ *note dim::)
+
+`eliminate'
+ elimination of variables (see *note eliminate::)
+
+`facstd'
+ factorizing Groebner basis algorithm (see *note facstd::)
+
+`factorize'
+ ideal of factors of a polynomial (see *note factorize::)
+
+`fglm'
+ Groebner basis computation from a Groebner basis w.r.t. a different
+ ordering (see *note fglm::)
+
+`finduni'
+ computation of univariate polynomials lying in a zero dimensional
+ ideal (see *note finduni::)
+
+`groebner'
+ Groebner basis computation (a wrapper around
+ `std,stdhilb,stdfglm',...) (see *note groebner::)
+
+`highcorner'
+ computes the smallest monomial not contained in the ideal. The
+ ideal has to be zero-dimensional. (see *note highcorner::)
+
+`homog'
+ homogenization with respect to a variable (see *note homog::)
+
+`hilb'
+ Hilbert series of a standard basis (see *note hilb::)
+
+`indepSet'
+ sets of independent variables of an ideal (see *note indepSet::)
+
+`interred'
+ interreduction of an ideal (see *note interred::)
+
+`intersect'
+ ideal intersection (see *note intersect::)
+
+`jacob'
+ ideal of all partial derivatives resp. jacobian matrix (see *note
+ jacob::)
+
+`jet'
+ Taylor series up to a given order (see *note jet::)
+
+`kbase'
+ vector space basis of basering modulo ideal of leading terms (see
+ *note kbase::)
+
+`koszul'
+ Koszul matrix (see *note koszul::)
+
+`lead'
+ leading terms of a set of generators (see *note lead::)
+
+`lift'
+ lift-matrix (see *note lift::)
+
+`liftstd'
+ standard basis and transformation matrix computation (see *note
+ liftstd::)
+
+`lres'
+ free resolution for homogeneous ideals (see *note lres::)
+
+`maxideal'
+ power of the maximal ideal at 0 (see *note maxideal::)
+
+`minbase'
+ minimal generating set of a homogeneous ideal, resp. module, or an
+ ideal, resp. module, in a local ring (see *note minbase::)
+
+`minor'
+ set of minors of a matrix (see *note minor::)
+
+`modulo'
+ represents $(h1+h2)/h1 \cong h2/(h1 \cap h2)$
+ (h1+h2)/h1=h2/(h1 intersect h2) (see *note modulo::)
+
+`mres'
+ minimal free resolution of an ideal resp. module w.r.t. a minimal
+ set of generators of the given ideal resp. module (see *note
+ mres::)
+
+`mstd'
+ standard basis and minimal generating set of an ideal (see *note
+ mstd::)
+
+`mult'
+ multiplicity, resp. degree, of the ideal of leading terms (see
+ *note mult::)
+
+`ncols'
+ number of columns (see *note ncols::)
+
+`preimage'
+ preimage under a ring map (see *note preimage::)
+
+`qhweight'
+ quasihomogeneous weights of an ideal (see *note qhweight::)
+
+`quotient'
+ ideal quotient (see *note quotient::)
+
+`reduce'
+ normalform with respect to a standard basis (see *note reduce::)
+
+`res'
+ free resolution of an ideal resp. module but not changing the given
+ ideal resp. module (see *note res::)
+
+`simplify'
+ simplify a set of polynomials (see *note simplify::)
+
+`size'
+ number of non-zero generators (see *note size::)
+
+`sortvec'
+ permutation for sorting ideals resp. modules (see *note sortvec::)
+
+`sres'
+ free resolution of a standard basis (see *note sres::)
+
+`std'
+ standard basis computation (see *note std::)
+
+`stdfglm'
+ standard basis computation with fglm technique (see *note
+ stdfglm::)
+
+`stdhilb'
+ Hilbert driven standard basis computation (see *note stdhilb::
+
+`subst'
+ substitute a ring variable (see *note subst::)
+
+`syz'
+ computation of the first syzygy module (see *note syz::)
+
+`vdim'
+ vector space dimension of basering modulo ideal of leading terms
+ (see *note vdim::)
+
+`weight'
+ optimal weights (see *note weight::)
+
+
+File: sing.htm, Node: int, Next: intmat, Prev: ideal, Up: Data types
+
+4.3 int
+=======
+
+Variables of type int represent the machine integers and are, therefore,
+limited in their range (e.g., the range is between -2147483647 and
+2147483647 on 32-bit machines). They are mainly used to count things
+(dimension, rank, etc.), in loops (see *note for::), and to represent
+boolean values (FALSE is represented by 0, every other value means TRUE,
+see *note boolean expressions::).
+
+Integers consist of a sequence of digits, possibly preceded by a sign.
+A space is considered as a separator, so it is not allowed between
+digits. A sequence of digits outside the allowed range is converted to
+the type `number' if possible.
+
+* Menu:
+
+* int declarations::
+* int expressions::
+* int operations::
+* boolean expressions::
+* boolean operations::
+* int related functions::
+
+
+File: sing.htm, Node: int declarations, Next: int expressions, Prev: int,
Up: int
+
+4.3.1 int declarations
+----------------------
+
+*Syntax:*
+ `int' name `=' int_expression `;'
+
+*Purpose:*
+ defines an integer variable.
+
+*Default:*
+ 0
+
+*Example:*
+
+ int i = 42;
+ int j = i + 3; j;
+ ==> 45
+ i = i * 3 - j; i;
+ ==> 81
+ int k; // assigning the default value 0 to k
+ k;
+ ==> 0
+
+
+File: sing.htm, Node: int expressions, Next: int operations, Prev: int
declarations, Up: int
+
+4.3.2 int expressions
+---------------------
+
+An int expression is:
+ 1. a sequence of digits (if the number represented by this sequence is
+ too large to fit into the range of integers it is automatically
+ converted to the type number, if a basering is defined)
+
+ 2. an identifier of type int
+
+ 3. a function returning int
+
+ 4. int expressions combined by the arithmetic operations `+', `-',
+ `*', `div', `/', `%' (`mod'), or `^'
+
+ 5. a boolean expression
+
+ 6. a type cast to int
+
+*Note:* Variables of type int represent the compiler integers and are,
+therefore, limited in their range (see *note Limitations::). If this
+range is too small the expression must be converted to the type number
+over a ring with characteristic 0.
+
+
+*Example:*
+ 12345678901; // too large
+ ==> ? `12345678901` greater than 2147483647(max. integer
representation)
+ ==> ? error occurred in line 1: `12345678901; // too large`
+ typeof(_);
+ ==> none
+ ring r=0,x,dp;
+ 12345678901;
+ ==> 12345678901
+ typeof(_);
+ ==> number
+ // Note: 11*13*17*100*200*2000*503*1111*222222
+ // returns a machine integer:
+ 11*13*17*100*200*2000*503*1111*222222;
+ ==> // ** int overflow(*), result may be wrong
+ ==> // ** int overflow(*), result may be wrong
+ ==> // ** int overflow(*), result may be wrong
+ ==> // ** int overflow(*), result may be wrong
+ ==> -1875651584
+ // using the type cast number for a greater allowed range
+ number(11)*13*17*100*200*2000*503*1111*222222;
+ ==> 12075748128684240000000
+ ring rp=32003,x,dp;
+ 12345678901;
+ ==> 9603
+ typeof(_);
+ ==> number
+ intmat m[2][2] = 1,2,3,4;
+ m;
+ ==> 1,2,
+ ==> 3,4
+ m[2,2];
+ ==> 4
+ typeof(_);
+ ==> int
+ det(m);
+ ==> -2
+ m[1,1] + m[2,1] == trace(m);
+ ==> 0
+ ! 0;
+ ==> 1
+ 1 and 2;
+ ==> 1
+ intvec v = 1,2,3;
+ def d =transpose(v)*v; // scalarproduct gives an 1x1 intvec
+ typeof(d);
+ ==> intvec
+ int i = d[1]; // access the first (the only) entry in the
intvec
+ ring rr=31,(x,y,z),dp;
+ poly f = 1;
+ i = int(f); // cast to int
+ // Integers may be converted to constant polynomials by an assignment,
+ poly g=37;
+ // define the constant polynomial g equal to the image of
+ // the integer 37 in the actual coefficient field, here it equals 6
+ g;
+ ==> 6
+
+* Menu:
+
+See
+* Type conversion and casting::
+* number::
+
+See *note Type conversion and casting::; *note number::.
+
+
+File: sing.htm, Node: int operations, Next: int related functions, Prev:
int expressions, Up: int
+
+4.3.3 int operations
+--------------------
+
+`++'
+ changes its operand to its successor, is itself no int expression
+
+`--'
+ changes its operand to its predecessor, is itself no int expression
+
+`+'
+ addition
+
+`-'
+ negation or subtraction
+
+`*'
+ multiplication
+
+`/'
+ integer division (omitting the remainder), rounding toward 0
+
+`div'
+ integer division (omitting the remainder >= 0)
+
+`%'
+ integer modulo (the remainder of the division `/')
+
+`mod'
+ integer modulo (the remainder of the division `div'), always
+ non-negative
+
+`^', `**'
+ exponentiation (exponent must be non-negative)
+
+`<', `>', `<=', `>=', `==', `<>'
+ comparison
+
+*Note:* An assignment `j=i++;' or `j=i--;' is not allowed, in particular
+it does not change the value of `j', see *note Limitations::.
+
+
+*Example:*
+ int i=1;
+ int j;
+ i++; i; i--; i;
+ ==> 2
+ ==> 1
+ // ++ and -- do not return a value as in C, can not assign
+ j = i++;
+ ==> // ** right side is not a datum, assignment ignored
+ // the value of j is unchanged
+ j; i;
+ ==> 0
+ ==> 2
+ i+2, 2-i, 5^2;
+ ==> 4 0 25
+ 5 div 2, 8%3;
+ ==> 2 2
+ -5 div 2, -5 / 2, -5 mod 2, -5 % 2;
+ ==> -3 -2 1 -1
+ 1<2, 2<=2;
+ ==> 1 1
+
+
+File: sing.htm, Node: int related functions, Next: boolean expressions,
Prev: int operations, Up: int
+
+4.3.4 int related functions
+---------------------------
+
+`char'
+ characteristic of the coefficient field of a ring (see *note
+ char::)
+
+`deg'
+ degree of a poly resp. vector (see *note deg::)
+
+`det'
+ determinant (see *note det::)
+
+`dim'
+ Krull dimension of basering modulo ideal of leading terms, resp.
+ dimension of module of leading terms (see *note dim::)
+
+`extgcd'
+ Bezout representation of gcd (see *note extgcd::)
+
+`find'
+ position of a substring in a string (see *note find::)
+
+`gcd'
+ greatest common divisor (see *note gcd::)
+
+`koszul'
+ Koszul matrix (see *note koszul::)
+
+`memory'
+ memory usage (see *note memory::)
+
+`mult'
+ multiplicity of an ideal, resp. module, of leading terms (see *note
+ mult::)
+
+`ncols'
+ number of columns (see *note ncols::)
+
+`npars'
+ number of ring parameters (see *note npars::)
+
+`nrows'
+ number of rows of a matrix, resp. the rank of the free module where
+ the vector or module lives (see *note nrows::)
+
+`nvars'
+ number of ring variables (see *note nvars::)
+
+`ord'
+ degree of the leading term of a poly resp. vector (see *note ord::)
+
+`par'
+ n-th parameter of the basering (see *note par::)
+
+`pardeg'
+ degree of a number considered as a polynomial in the ring
+ parameters (see *note pardeg::)
+
+`prime'
+ the next lower prime (see *note prime::)
+
+`random'
+ a pseudo random integer between the given limits (see *note
+ random::)
+
+`regularity'
+ regularity of a resolution (see *note regularity::)
+
+`rvar'
+ test, if the given expression or string is a ring variable (see
+ *note rvar::)
+
+`size'
+ number of elements in an object (see *note size::)
+
+`trace'
+ trace of an integer matrix (see *note trace::)
+
+`var'
+ n-th ring variable of the basering (see *note var::)
+
+`vdim'
+ vector space dimension of basering modulo ideal of leading terms,
+ resp. of freemodule modulo module of leading terms (see *note
+ vdim::)
+
+
+File: sing.htm, Node: boolean expressions, Next: boolean operations, Prev:
int related functions, Up: int
+
+4.3.5 boolean expressions
+-------------------------
+
+A boolean expression is really an int expression used in a logical
+context:
+
+
+An int expression (<> 0 evaluates to _TRUE_ (represented by 1), 0
+represents _FALSE_).
+
+The following is the list of available comparisons of objects of the
+same type.
+
+*Note:* There are no comparisons for ideals and modules, resolution and
+maps.
+
+ 1. an integer comparison:
+
+ i == j
+ i != j // or i <> j
+ i <= j
+ i >= j
+ i > j
+ i < j
+
+ 2. a number comparison:
+
+ m == n
+ m != n // or m <> n
+ m < n
+ m > n
+ m <= n
+ m >= n
+
+ For numbers from Z/p or from field extensions not all operations
+ are useful:
+ - 0 is always the smallest element,
+ - in Z/p the representatives in the range -(p-1)/2..(p-1)/2 when
+ p>2 resp. 0 and 1 for p=2 are used for comparisons,
+ - in field extensions the last two operations (`>=,<=') yield
+ always TRUE (1) and the `<' and `>' are equivalent to `!='.
+
+ 3. a polynomial or vector comparison:
+
+ f == g
+ f != g // or f <> g
+ f <= g // comparing the leading term w.r.t. the monomial order
+ f < g
+ f >= g
+ f > g
+
+ 4. an intmat or matrix comparison:
+
+ v == w
+ v != w // or v <> w
+
+ 5. an intvec or string comparison:
+
+ f == g
+ f != g // or f <> g
+ f <= g // comparing lexicographically
+ f >= g // w.r.t. the order specified by ASCII
+ f > g
+ f < g
+
+ 6. boolean expressions combined by boolean operations (`and', `or',
+ `not')
+
+*Note:* All arguments of a logical expression are first evaluated and
+then the value of the logical expression is determined. For example, the
+logical expression `(a || b)' is evaluated by first evaluating `a' _and_
+`b', even though the value of `b' has no influence on the value of `(a
+|| b)', if `a' evaluates to true.
+
+Note that this evaluation is different from the left-to-right,
+conditional evaluation of logical expressions (as found in most
+programming languages). For example, in these other languages, the value
+of `(1 || b)' is determined without ever evaluating `b'.
+
+See *note Major differences to the C programming language::.
+
+
+File: sing.htm, Node: boolean operations, Prev: boolean expressions, Up: int
+
+4.3.6 boolean operations
+------------------------
+
+`and'
+ logical `and', may also be written as `&&'
+
+`or'
+ logical `or', may also be written as `||'
+
+`not'
+ logical `not', may also be written as `!'
+
+The precedence of the boolean operations is:
+
+ 1. parentheses
+
+ 2. comparisons
+
+ 3. not
+
+ 4. and
+
+ 5. or
+
+
+*Example:*
+ (1>2) and 3;
+ ==> 0
+ 1 > 2 and 3;
+ ==> 0
+ ! 0 or 1;
+ ==> 1
+ !(0 or 1);
+ ==> 0
+
+
+File: sing.htm, Node: intmat, Next: intvec, Prev: int, Up: Data types
+
+4.4 intmat
+==========
+
+Integer matrices are matrices with integer entries. For the range of
+integers see *note Limitations::. Integer matrices do not belong to a
+ring, they may be defined without a basering being defined. An intmat
+can be multiplied by and added to an int; in this case the int is
+converted into an intmat of the right size with the integer on the
+diagonal. The integer `1', for example, is converted into the unit
+matrix.
+
+* Menu:
+
+* intmat declarations::
+* intmat expressions::
+* intmat type cast::
+* intmat operations::
+* intmat related functions::
+
+
+File: sing.htm, Node: intmat declarations, Next: intmat expressions, Prev:
intmat, Up: intmat
+
+4.4.1 intmat declarations
+-------------------------
+
+*Syntax:*
+ `intmat' name `=' intmat_expression `;'
+ `intmat' name `[' rows `] [' cols `] =' intmat_expression `;'
+ `intmat' name `[' rows `] [' cols `] ='
+ list_of_int_and_intvec_and_intmat_expressions `;'
+ rows and cols must be positive int expressions.
+
+*Purpose:*
+ defines an intmat variable.
+ Given a list of integers, the matrix is filled up with the first
+ row from the left to the right, then the second row and so on. If
+ the int_list contains less than rows*cols elements, the matrix is
+ filled up with zeros; if it contains more elements, only the first
+ rows*cols elements are used.
+
+*Default:*
+ 0 (1 x 1 matrix)
+
+*Example:*
+
+ intmat im[3][5]=1,3,5,7,8,9,10,11,12,13;
+ im;
+ ==> 1,3,5,7,8,
+ ==> 9,10,11,12,13,
+ ==> 0,0,0,0,0
+ im[3,2];
+ ==> 0
+ intmat m[2][3] = im[1..2,3..5]; // defines a submatrix
+ m;
+ ==> 5,7,8,
+ ==> 11,12,13
+
+
+File: sing.htm, Node: intmat expressions, Next: intmat type cast, Prev:
intmat declarations, Up: intmat
+
+4.4.2 intmat expressions
+------------------------
+
+An intmat expression is:
+ 1. an identifier of type intmat
+
+ 2. a function returning intmat
+
+ 3. intmat operations with int (`+', `-', `*', `div', `%')
+
+ 4. intmat operations (`+', `-', `*')
+
+ 5. a type cast to intmat (*note intmat type cast::)
+
+
+*Example:*
+ intmat Idm[2][2];
+ Idm +1; // add the unit intmat
+ ==> 1,0,
+ ==> 0,1
+ intmat m1[3][2] = _,1,-2; // take entries from the last result
+ m1;
+ ==> 1,0,
+ ==> 0,1,
+ ==> 1,-2
+ intmat m2[2][3]=1,0,2,4,5,1;
+ transpose(m2);
+ ==> 1,4,
+ ==> 0,5,
+ ==> 2,1
+ intvec v1=1,2,4;
+ intvec v2=5,7,8;
+ m1=v1,v2; // fill m1 with v1 and v2
+ m1;
+ ==> 1,2,
+ ==> 4,5,
+ ==> 7,8
+ trace(m1*m2);
+ ==> 56
+
+* Menu:
+
+See
+* Type conversion and casting::
+* number::
+
+See *note Type conversion and casting::; *note number::.
+
+
+File: sing.htm, Node: intmat type cast, Next: intmat operations, Prev:
intmat expressions, Up: intmat
+
+4.4.3 intmat type cast
+----------------------
+
+`*Syntax:*'
+ `intmat (' expression `)'
+ `intmat (' expression, int_n, int_m `)'
+
+`*Type:*'
+ intmat
+
+`*Purpose:*'
+ Converts expression to an intmat, where expression must be of type
+ intvec, or intmat. If int_n and int_m are supplied, then they
+ specify the dimension of the intmat. Otherwise, the size (resp.
+ dimensions) of the intmat are determined by the size (resp.
+ dimensions) of the expression.
+
+`*Example:*'
+
+ intmat(intvec(1));
+ ==> 1
+ intmat(intvec(1), 1, 2);
+ ==> 1,0
+ intmat(intvec(1,2,3,4), 2, 2);
+ ==> 1,2,
+ ==> 3,4
+ intmat(_, 2, 3);
+ ==> 1,2,3,
+ ==> 4,0,0
+ intmat(_, 2, 1);
+ ==> 1,
+ ==> 2
+
+* Menu:
+
+See
+* Type conversion and casting::
+* intmat::
+* matrix type cast::
+
+See *note Type conversion and casting::; *note intmat::; *note matrix
+type cast::.
+
+
+File: sing.htm, Node: intmat operations, Next: intmat related functions,
Prev: intmat type cast, Up: intmat
+
+4.4.4 intmat operations
+-----------------------
+
+`+'
+ addition with intmat or int; the int is converted into a diagonal
+ intmat
+
+`-'
+ negation or subtraction with intmat or int; the int is converted
+ into a diagonal intmat
+
+`*'
+ multiplication with intmat, intvec, or int; the int is converted
+ into a diagonal intmat
+
+`div,/'
+ division of entries in the integers (omitting the remainder)
+
+`%, mod'
+ entries modulo int (remainder of the division)
+
+`<>', `=='
+ comparison
+
+intmat_expression `[' intvec_expression`,' intvec_expression `]'
+ is an intmat entry, where the first index indicates the row and the
+ second the column
+
+
+*Example:*
+ intmat m[2][4] = 1,0,2,4,0,1,-1,0,3,2,1,-2;
+ m;
+ ==> 1,0,2,4,
+ ==> 0,1,-1,0
+ m[2,3]; // entry at row 2, col 3
+ ==> -1
+ size(m); // number of entries
+ ==> 8
+ intvec v = 1,0,-1,2;
+ m * v;
+ ==> 7,1
+ typeof(_);
+ ==> intvec
+ intmat m1[4][3] = 0,1,2,3,v,1;
+ intmat m2 = m * m1;
+ m2; // 2 x 3 intmat
+ ==> -2,5,4,
+ ==> 4,-1,-1
+ m2*10; // multiply each entry of m with 10;
+ ==> -20,50,40,
+ ==> 40,-10,-10
+ -m2;
+ ==> 2,-5,-4,
+ ==> -4,1,1
+ m2 % 2;
+ ==> 0,1,0,
+ ==> 0,1,1
+ m2 div 2;
+ ==> -1,2,2,
+ ==> 2,-1,-1
+ m2[2,1]; // entry at row 2, col 1
+ ==> 4
+ m1[2..3,2..3]; // submatrix
+ ==> 1 0 2 1
+ m2[nrows(m2),ncols(m2)]; // the last entry of intmat m2
+ ==> -1
+
+
+File: sing.htm, Node: intmat related functions, Prev: intmat operations,
Up: intmat
+
+4.4.5 intmat related functions
+------------------------------
+
+`betti'
+ Betti numbers of a free resolution (see *note betti::)
+
+`det'
+ determinant (see *note det::)
+
+`ncols'
+ number of cols (see *note ncols::)
+
+`nrows'
+ number of rows (see *note nrows::)
+
+`random'
+ create a pseudo random intmat (see *note random::)
+
+`size'
+ total number of entries (see *note size::)
+
+`transpose'
+ transpose of an intmat (see *note transpose::)
+
+`trace'
+ trace of an intmat (see *note trace::)
+
+
+File: sing.htm, Node: intvec, Next: link, Prev: intmat, Up: Data types
+
+4.5 intvec
+==========
+
+Variables of type intvec are lists of integers. For the range of
+integers see *note Limitations::. They may be used for simulating sets
+of integers (and other sets if the intvec is used as an index set for
+other objects). Addition and subtraction of an intvec with an int or an
+intvec is done element-wise.
+
+* Menu:
+
+* intvec declarations::
+* intvec expressions::
+* intvec operations::
+* intvec related functions::
+
+
+File: sing.htm, Node: intvec declarations, Next: intvec expressions, Prev:
intvec, Up: intvec
+
+4.5.1 intvec declarations
+-------------------------
+
+*Syntax:*
+ `intvec' name `=' intvec_expression `;'
+ `intvec' name `=' list_of_int_and_intvec_expressions `;'
+
+*Purpose:*
+ defines an intvec variable.
+ An intvec consists of an ordered list of integers.
+
+*Default:*
+ 0
+
+*Example:*
+
+ intvec iv=1,3,5,7,8;
+ iv;
+ ==> 1,3,5,7,8
+ iv[4];
+ ==> 7
+ iv[3..size (iv)];
+ ==> 5 7 8
+
+
+File: sing.htm, Node: intvec expressions, Next: intvec operations, Prev:
intvec declarations, Up: intvec
+
+4.5.2 intvec expressions
+------------------------
+
+An intvec expression is:
+ 1. a range: int expression `..' int expression
+
+ 2. a function returning intvec
+
+ 3. intvec operations with int (`+', `-', `*', `/', `%')
+
+ 4. intvec operations (`+', `-')
+
+ 5. intvec operation with intmat (`*')
+
+ 6. a type cast to intvec
+
+
+*Example:*
+ intvec v=-1,2;
+ intvec w=v,v; // concatenation
+ w;
+ ==> -1,2,-1,2
+ w = -2..2,v,1;
+ w;
+ ==> -2,-1,0,1,2,-1,2,1
+ intmat m[3][2] = 0,1,2,-2,3,1;
+ m*v;
+ ==> 2,-6,-1
+ typeof(_);
+ ==> intvec
+ v = intvec(m);
+ v;
+ ==> 0,1,2,-2,3,1
+ ring r;
+ poly f = x2z + 2xy-z;
+ f;
+ ==> x2z+2xy-z
+ v = leadexp(f);
+ v;
+ ==> 2,0,1
+
+
+File: sing.htm, Node: intvec operations, Next: intvec related functions,
Prev: intvec expressions, Up: intvec
+
+4.5.3 intvec operations
+-----------------------
+
+`+'
+ addition with intvec or int (component-wise)
+
+`-'
+ negation or subtraction with intvec or int (component-wise)
+
+`*'
+ multiplication with int (component-wise)
+
+`/', `div'
+ division by int (component-wise)
+
+`%, mod'
+ modulo (component-wise)
+
+`<>', `==', `<=', `>=', `>', `<'
+ comparison (done lexicographically)
+
+intvec_expression `[' int_expression `]'
+ is an element of the intvec; the first element has index one.
+
+
+*Example:*
+ intvec iv = 1,3,5,7,8;
+ iv+1; // add 1 to each entry
+ ==> 2,4,6,8,9
+ iv*2;
+ ==> 2,6,10,14,16
+ iv;
+ ==> 1,3,5,7,8
+ iv-10;
+ ==> -9,-7,-5,-3,-2
+ iv=iv,0;
+ iv;
+ ==> 1,3,5,7,8,0
+ iv div 2;
+ ==> 0,1,2,3,4,0
+ iv+iv; // component-wise addition
+ ==> 2,6,10,14,16,0
+ iv[size(iv)-1]; // last-1 entry
+ ==> 8
+ intvec iw=2,3,4,0;
+ iv==iw; // lexicographic comparison
+ ==> 0
+ iv < iw;
+ ==> 1
+ iv != iw;
+ ==> 1
+ iv[2];
+ ==> 3
+ iw = 4,1,2;
+ iv[iw];
+ ==> 7 1 3
+
+
+File: sing.htm, Node: intvec related functions, Prev: intvec operations,
Up: intvec
+
+4.5.4 intvec related functions
+------------------------------
+
+`hilb'
+ returns Hilbert series as intvec (see *note hilb::)
+
+`indepSet'
+ sets of independent variables of an ideal (see *note indepSet::)
+
+`leadexp'
+ the exponent vector of the leading monomial (see *note leadexp::)
+
+`nrows'
+ number of rows (see *note nrows::)
+
+`qhweight'
+ returns quasihomogeneous weights (see *note qhweight::)
+
+`size'
+ length of the intvec (see *note size::)
+
+`sortvec'
+ permutation for sorting ideals/modules (see *note sortvec::)
+
+`transpose'
+ transpose of an intvec, returns an intmat (see *note transpose::)
+
+`weight'
+ returns weights for the weighted ecart method (see *note weight::)
+
+
+File: sing.htm, Node: link, Next: list, Prev: intvec, Up: Data types
+
+4.6 link
+========
+
+Links are the communication channels of SINGULAR, i.e., something
+SINGULAR can write to and/or read from. Currently, SINGULAR supports
+four different link types:
+ * ASCII links (see *note ASCII links::)
+
+ * MPfile links (see *note MPfile links::)
+
+ * MPtcp links (see *note MPtcp links::)
+
+ * DBM links (see *note DBM links::)
+
+* Menu:
+
+* link declarations::
+* link expressions::
+* link related functions::
+* ASCII links::
+* MP links::
+* DBM links::
+
+
+File: sing.htm, Node: link declarations, Next: link expressions, Prev:
link, Up: link
+
+4.6.1 link declarations
+-----------------------
+
+*Syntax:*
+ `link' name `=' string_expression `;'
+
+*Purpose:*
+ defines a new communication link.
+
+*Default:*
+ none
+
+*Example:*
+
+ link l=":w example.txt";
+ int i=22; // cf. ASCII links for explanation
+ string s="An int follows:";
+ write(l,s,i);
+ l;
+ ==> // type : ASCII
+ ==> // mode : w
+ ==> // name : example.txt
+ ==> // open : yes
+ ==> // read : not ready
+ ==> // write: ready
+ close(l); //
+ read(l);
+ ==> An int follows:
+ ==> 22
+ ==>
+ close(l);
+
+
+File: sing.htm, Node: link expressions, Next: link related functions, Prev:
link declarations, Up: link
+
+4.6.2 link expressions
+----------------------
+
+A link expression is:
+ 1. an identifier of type link
+
+ 2. a string describing the link
+
+A link is described by a string which consists of two parts: a property
+string followed by a name string. The property string describes the type
+of the link (`ASCII', `MPfile', `MPtcp' or `DBM') and the mode of the
+link (e.g., open for read, write or append). The name string describes
+the filename of the link, resp. a network connection for MPtcp links.
+
+For a detailed format description of the link describing string see:
+ * for ASCII links: *note ASCII links::
+
+ * for MPfile links: *note MPfile links::
+
+ * for MPtcp links: *note MPtcp links::
+
+ * for DBM links: *note DBM links::
+
+* Menu:
+
+* ASCII links::
+* MPfile links::
+* MPtcp links::
+* DBM links::
+
+
+File: sing.htm, Node: link related functions, Next: ASCII links, Prev: link
expressions, Up: link
+
+4.6.3 link related functions
+----------------------------
+
+`close'
+ closes a link (see *note close::)
+
+`dump'
+ generates a dump of all variables and their values (see *note
+ dump::)
+
+`getdump'
+ reads a dump (see *note getdump::)
+
+`open'
+ opens a link (see *note open::)
+
+`read'
+ reads from a link (see *note read::)
+
+`status'
+ gets the status of a link (see *note status::)
+
+`write'
+ writes to a link (see *note write::)
+
+`kill'
+ closes and kills a link (see *note kill::)
+
+
+File: sing.htm, Node: ASCII links, Next: MP links, Prev: link related
functions, Up: link
+
+4.6.4 ASCII links
+-----------------
+
+Via ASCII links data that can be converted to a string can be written
+into files for storage or communication with other programs. The data is
+written in plain ASCII format. The output format of polynomials is done
+w.r.t. the value of the global variable `short' (see *note short::).
+Reading from an ASCII link returns a string -- conversion into other
+data is up to the user. This can be done, for example, using the command
+`execute' (see *note execute::).
+
+The ASCII link describing string has to be one of the following:
+
+ 1. `"ASCII: "' + filename
+ the mode (read or append) is set by the first `read' or `write'
+ command.
+
+ 2. `"ASCII:r "' + filename
+ opens the file for reading.
+
+ 3. `"ASCII:w "' + filename
+ opens the file for overwriting.
+
+ 4. `"ASCII:a "' + filename
+ opens the file for appending.
+
+There are the following default values:
+ * the type `ASCII' may be omitted since ASCII links are the default
+ links.
+
+ * if non of `r', `w', or `a' is specified, the mode of the link is
+ set by the first `read' or `write' command on the link. If the
+ first command is `write', the mode is set to `a' (append mode).
+
+ * if the filename is omitted, `read' reads from stdin and `write'
+ writes to stdout.
+
+Using these default rules, the string `":r temp"' describes a link which
+is equivalent to the link `"ASCII:r temp"': an ASCII link to the file
+`temp' which is opened for reading. The string `"temp"' describes an
+ASCII link to the file `temp', where the mode is set by the first `read'
+or `write' command. See also the example below.
+
+Note that the filename may contain a path. On Microsoft Windows (resp.
+MS-DOS) platforms, names of a drive can precede the filename, but must
+be started with a `//' (as in `//c/temp/ex'. An ASCII link can be used
+either for reading or for writing, but not for both at the same time. A
+`close' command must be used before a change of I/O direction. Types
+without a conversion to `string' cannot be written.
+
+
+*Example:*
+ ring r=32003,(x,y,z),dp;
+ link l=":w example.txt"; // type is ASCII, mode is overwrite
+ l;
+ ==> // type : ASCII
+ ==> // mode : w
+ ==> // name : example.txt
+ ==> // open : no
+ ==> // read : not ready
+ ==> // write: not ready
+ status(l, "open", "yes"); // link is not yet opened
+ ==> 0
+ ideal i=x2,y2,z2;
+ write (l,1,";",2,";","ideal i=",i,";");
+ status(l, "open", "yes"); // now link is open
+ ==> 1
+ status(l, "mode"); // for writing
+ ==> w
+ close(l); // link is closed
+ write("example.txt","int j=5;");// data is appended to file
+ read("example.txt"); // data is returned as string
+ ==> 1
+ ==> ;
+ ==> 2
+ ==> ;
+ ==> ideal i=
+ ==> x2,y2,z2
+ ==> ;
+ ==> int j=5;
+ ==>
+ execute(read(l)); // read string is executed
+ ==> 1
+ ==> 2
+ ==> // ** redefining i **
+ close(l); // link is closed
+
+
+File: sing.htm, Node: MP links, Next: DBM links, Prev: ASCII links, Up:
link
+
+4.6.5 MP links
+--------------
+
+MP (Multi Protocol) links give the possibility to store and communicate
+data in the binary MP format: Read and write access is very fast
+compared to ASCII links. MP links can be established using files (link
+type is `MPfile') or using TCP sockets (link type is `MPtcp'). All data
+(including such data that cannot be converted to a string) can be
+written to an MP link. For ring-dependent data, a ring description is
+written together with the data. Reading from an MP link returns an
+expression (not a string) which was evaluated after the read operation.
+If the expression read from an MP link is not from the same ring as the
+current ring, then a `read' changes the current ring.
+
+Currently, MP links are only available on Unix platforms and data is
+written without attributes (which is likely to change in future
+versions). For a general description of MP, see
+`http://symbolicnet.mcs.kent.edu/areas/mp.html'.
+
+* Menu:
+
+* MPfile links::
+* MPtcp links::
+
+
+File: sing.htm, Node: MPfile links, Next: MPtcp links, Prev: MP links, Up:
MP links
+
+4.6.5.1 MPfile links
+....................
+
+MPfile links provide the possibility to store data in a file using the
+binary MP format. Read and write operations are very fast compared to
+ASCII links. Therefore, for storing large amounts of data, MPfile links
+should be used instead of ASCII links. Unlike ASCII links, data read
+from MPfile links is returned as expressions one at a time, and not as a
+string containing the entire content of the file. Furthermore,
+ring-dependent data is stored together with a ring description.
+Therefore, reading ring-dependent data might change the current ring.
+
+The MPfile link describing string has to be one of the following:
+
+ 1. `"MPfile: "' + filename
+ the mode (read or append) is set by the first `read' or `write'
+ command.
+
+ 2. `"MPfile:r "' + filename
+ opens the file for reading.
+
+ 3. `"MPfile:w "' + filename
+ opens the file for overwriting.
+
+ 4. `"MPfile:a "' + filename
+ opens the file for appending.
+
+There are the following default values:
+ * if none of `r', `w', or `a' is specified, the mode of the link is
+ set by the first `read' or `write' command on the link. If the
+ first command is `write', the mode is set to `a' (append mode).
+
+Note that the filename may contain a path. An MPfile link can be used
+either for reading or for writing, but not for both at the same time. A
+`close' command must be used before a change of I/O direction.
+
+
+*Example:*
+ ring r;
+ link l="MPfile:w example.mp"; // type=MPfile, mode=overwrite
+ l;
+ ==> // type : MPfile
+ ==> // mode : w
+ ==> // name : example.mp
+ ==> // open : no
+ ==> // read : not ready
+ ==> // write: not ready
+ ideal i=x2,y2,z2;
+ write (l,1, i, "hello world");// write three expressions
+ write(l,4); // append one more expression
+ close(l); // link is closed
+ // open the file for reading now
+ read(l); // only first expression is read
+ ==> 1
+ kill r; // no basering active now
+ def i = read(l); // second expression
+ // notice that current ring was set, the name was assigned
+ // automatically
+ listvar(ring);
+ ==> // mpsr_r0 [0] *ring
+ def s = read(l); // third expression
+ listvar();
+ ==> // s [0] string hello world
+ ==> // mpsr_r0 [0] *ring
+ ==> // i [0] ideal, 3 generator(s)
+ ==> // l [0] link
+ ==> // LIB [0] string standard.lib
+ close(l); // link is closed
+ dump("MPfile:w example.mp"); // dump everything to example.mp
+ kill i, s; // kill i and s
+ getdump("MPfile: example.mp");// get previous dump
+ listvar(); // got all variables and values back
+ ==> // mpsr_r0 [0] *ring
+ ==> // i [0] ideal, 3 generator(s)
+ ==> // s [0] string hello world
+ ==> // l [0] link
+ ==> // LIB [0] string standard.lib
+
+
+File: sing.htm, Node: MPtcp links, Prev: MPfile links, Up: MP links
+
+4.6.5.2 MPtcp links
+...................
+
+MPtcp links give the possibility to exchange data in the binary MP
+format between two processes which may run on the same or on different
+computers. MPtcp links can be opened in four different modes:
+
+`listen'
+ SINGULAR acts as a server.
+
+`connect'
+ SINGULAR acts as a client.
+
+`launch'
+ SINGULAR acts as a client, launching an application as server.
+
+`fork'
+ SINGULAR acts as a client, forking another SINGULAR as server.
+
+The MPtcp link describing string has to be
+ * listen mode:
+
+ 1. `"MPtcp:listen --MPport "' + portnumber
+
+ SINGULAR becomes a server and waits at the port for a connect call.
+
+ * connect mode:
+
+ 2. `"MPtcp:connect --MPport "' + portnumber
+
+ 3. `"MPtcp:connect --MPhost "' + hostname + `" --MPport "' +
+ portnumber
+
+ SINGULAR becomes a client and connects to a server waiting at the
+ host and port.
+
+ * launch mode:
+
+ 4. `"MPtcp:launch"'
+
+ 5. `"MPtcp:launch --MPrsh "' + rsh
+
+ 6. `"MPtcp:launch --MPrsh "' + rsh + `" --MPhost "' + hostname
+
+ 7. `"MPtcp:launch --MPrsh "' + rsh + `" --MPhost "' + hostname +
+ `" --MPapplication "' + application
+
+ SINGULAR becomes a client and starts (launches) the application
+ using the specified remote shell command (default is `ssh') on a
+ (possibly) different host (default is `localhost' which then acts
+ as a server.
+
+ * fork mode:
+
+ 8. `"MPtcp:fork"'
+
+ SINGULAR becomes a client and forks another SINGULAR on the same
+ host which acts as a server.
+
+There are the following default values:
+ * if none of `listen', `connect', `launch' or `fork' is specified,
+ the default mode is set to `fork'.
+
+ * if no remote shell (rsh) command is specified, then the command
+ `ssh' is used.
+
+ * if no application is specified (in mode `launch') the default
+ application is the value of `system("Singular") + "-bq"'. (This
+ evaluates to the absolute path of the SINGULAR currently running
+ with the option `"-bq"' appended.)
+
+ * if no hostname is specified the local host is used as default host.
+
+To open an MPtcp link in launch mode, the application to launch must
+either be given with an absolute pathname, or must be in a directory
+contained in the search path. The launched application acts as a server,
+whereas the SINGULAR that actually opened the link acts as a client.
+SINGULAR automatically appends the command line arguments "`--MPmode
+connect --MPhost' hostname `--MPport' portnumber" to the command line of
+the server application. Both hostname and portnumber are substituted by
+the values from the link specification. The client "listens" at the
+given port until the server application does a connect call. If SINGULAR
+is used as server application it has to be started with the command line
+option `-b'. Since launching is done using a remote shell command, the
+host on which the application should run must have an entry in the
+`.rhosts' file. Even the local machine must have an entry if
+applications are to be launched locally.
+
+If the MPtcp link is opened in fork mode a child of the current SINGULAR
+is forked. All variables and their values are inherited by the child.
+The child acts as a server whereas the SINGULAR that actually opened the
+link acts as a client.
+
+To arrange the evaluation of an expression by a server, the expression
+must be quoted using the command `quote' (see *note quote::), so that a
+local evaluation is prevented. Otherwise, the expression is evaluated
+first, and the result of the evaluation is written, instead of the
+expression which is to be evaluated.
+
+If SINGULAR is in server mode, the value of the variable `mp_ll' is the
+MPtcp link connecting to the client and SINGULAR is in an infinite
+read-eval-write loop until the connection is closed from the client side
+(by closing its connecting link). Reading and writing is done to the
+link `mp_ll': After an expression is read, it is evaluated and the
+result of the evaluation is written back. That is, for each expression
+which was written to the server, there is exactly one expression written
+back. This might be an "empty" expression, if the evaluation on the
+server side does not return a value.
+
+MPtcp links should explicitly be opened before being used. MPtcp links
+are bidirectional, i.e., can be be used for both, writing and reading.
+Reading from an MPtcp link blocks until data was written to that link.
+The `status' command can be used to check whether there is data to read.
+
+
+*Example:*
+ LIB "general.lib"; // needed for "killall" command
+ link l="MPtcp:launch";
+ open(l); l; // l is ready for writing but not for reading
+ ==> // type : MPtcp
+ ==> // mode : launch
+ ==> // name :
+ ==> // open : yes
+ ==> // read : not ready
+ ==> // write: ready
+
+ ring r; ideal i=x2+y,xyz+z,x2+y2;
+
+ write (l,quote(std(eval(i)))); // std(i) is computed on server
+ def j = read(l);j; // result of computation on server is read
+ ==> j[1]=z
+ ==> j[2]=y2-y
+ ==> j[3]=x2+y2
+
+ write(l, quote(getdump(mp_ll))); // server reads dump
+ dump(l); // dump is written to server (includes proc's)
+ read(l); // result of previous write-command is read
+ killall("not", "link"); killall("proc"); // kills everything, but links
+ ==> // ** killing the basering for level 0
+
+ write(l, quote(dump(mp_ll))); // server writes dump
+ getdump(l); // dump is read from server
+ read(l); // result of previous write-command is read
+
+ close(l); // server is shut down
+ listvar(all); // same state as we had before "killall()"
+ ==> // mpsr_r0 [0] ring
+ ==> // r [0] *ring
+ ==> // j [0] ideal, 3 generator(s)
+ ==> // i [0] ideal, 3 generator(s)
+ ==> // l [0] link
+
+ l = "MPtcp:"; // fork link declaration
+ open(l); l; // Notice that name is "parent"
+ ==> // type : MPtcp
+ ==> // mode : fork
+ ==> // name : parent
+ ==> // open : yes
+ ==> // read : not ready
+ ==> // write: ready
+
+ write(l, quote(status(mp_ll, "name")));
+ read(l); // and name of forked link is "child"
+ ==> child
+ write(l,quote(i)); // Child inherited vars and their values
+ read(l);
+ ==> _[1]=x2+y
+ ==> _[2]=xyz+z
+ ==> _[3]=x2+y2
+ close(l); // shut down forked child
+
+
+File: sing.htm, Node: DBM links, Prev: MP links, Up: link
+
+4.6.6 DBM links
+---------------
+
+DBM links provide access to data stored in a data base. Each entry in
+the data base consists of a (key_string, value_string) pair. Such a pair
+can be inserted with the command `write('link`,' key_string`,'
+value_string`)'. By calling `write('link`,' key_string`)', the entry
+with key key_string is deleted from the data base. The value of an entry
+is returned by the command `read('link`,' key_string`)'. With only one
+argument, `read('link`)' returns the next key in the data base. Using
+this feature a data base can be scanned in order to access all entries
+of the data base.
+
+If a data base with name `name' is opened for writing for the first
+time, two files (`name.pag' and `name.dir'), which contain the data
+base, are automatically created.
+
+The DBM link describing string has to be one of the following:
+
+ 1. `"DBM: "' + name
+ opens the data base for reading (default mode).
+
+ 2. `"DBM:r "' + name
+ opens the data base for reading.
+
+ 3. `"DBM:rw "' + name
+ opens the data base for reading and writing.
+
+Note that `name' must be given without the suffix `.pag' or `.dir'. The
+name may contain an (absolute) path.
+
+
+*Example:*
+ link l="DBM:rw example";
+ write(l,"1","abc");
+ write(l,"3","XYZ");
+ write(l,"2","ABC");
+ l;
+ ==> // type : DBM
+ ==> // mode : rw
+ ==> // name : example
+ ==> // open : yes
+ ==> // read : ready
+ ==> // write: ready
+ close(l);
+ // read all keys (till empty string):
+ read(l);
+ ==> 1
+ read(l);
+ ==> 3
+ read(l);
+ ==> 2
+ read(l);
+ ==>
+ // read data corresponding to key "1"
+ read(l,"1");
+ ==> abc
+ // read all data:
+ read(l,read(l));
+ ==> abc
+ read(l,read(l));
+ ==> XYZ
+ read(l,read(l));
+ ==> ABC
+ // close
+ close(l);
+
+
+File: sing.htm, Node: list, Next: map, Prev: link, Up: Data types
+
+4.7 list
+========
+
+Lists are arrays whose elements can be of any type (including ring and
+qring). If one element belongs to a ring the whole list belongs to that
+ring. This applies also to the special list `#'. The expression `list()'
+is the empty list.
+
+Note that a list stores the objects itself and not the names. Hence, if
+`L' is a list, `L[1]' for example has no name. A name, say `R', can be
+created for `L[1]' by `def R=L[1];'. To store also the name of an
+object, say `r', it can be added to the list with `nameof(r);'. Rings
+and qrings may be objects of a list.
+
+*Note*: Unlike other assignments a ring as an element of a list is not a
+copy but another reference to the same ring.
+
+* Menu:
+
+* list declarations::
+* list expressions::
+* list operations::
+* list related functions::
+
+
+File: sing.htm, Node: list declarations, Next: list expressions, Prev:
list, Up: list
+
+4.7.1 list declarations
+-----------------------
+
+*Syntax:*
+ `list' name `=' expression_list`;'
+ `list' name `=' list_expression`;'
+
+*Purpose:*
+ defines a list (of objects of possibly different types).
+
+*Default:*
+ empty list
+
+*Example:*
+
+ list l=1,"str";
+ l[1];
+ ==> 1
+ l[2];
+ ==> str
+ ring r;
+ listvar(r);
+ ==> // r [0] *ring
+ ideal i = x^2, y^2 + z^3;
+ l[3] = i;
+ l;
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> str
+ ==> [3]:
+ ==> _[1]=x2
+ ==> _[2]=z3+y2
+ listvar(r); // the list l belongs now to the ring r
+ ==> // r [0] *ring
+ ==> // l [0] list, size: 3
+ ==> // i [0] ideal, 2 generator(s)
+
+
+File: sing.htm, Node: list expressions, Next: list operations, Prev: list
declarations, Up: list
+
+4.7.2 list expressions
+----------------------
+
+A list expression is:
+ 1. the empty list `list()'
+
+ 2. an identifier of type list
+
+ 3. a function returning list
+
+ 4. list expressions combined by the arithmetic operation `+'
+
+ 5. a type cast to list
+
+* Menu:
+
+See
+* Type conversion and casting::
+
+See *note Type conversion and casting::.
+
+
+*Example:*
+ list l = "hello",1;
+ l;
+ ==> [1]:
+ ==> hello
+ ==> [2]:
+ ==> 1
+ l = list();
+ l;
+ ==> empty list
+ ring r =0,x,dp;
+ factorize((x+1)^2);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x+1
+ ==> [2]:
+ ==> 1,2
+ list(1,2,3);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 3
+
+
+File: sing.htm, Node: list operations, Next: list related functions, Prev:
list expressions, Up: list
+
+4.7.3 list operations
+---------------------
+
+`+'
+ concatenation
+
+`delete'
+ deletes one element from list, returns new list
+
+`insert'
+ inserts or appends a new element to list, returns a new list
+
+list_expression `[' int_expression `]'
+ is a list entry; the index 1 gives the first element.
+
+
+*Example:*
+ list l1 = 1,"hello",list(-1,1);
+ list l2 = list(1,2,3);
+ l1 + l2; // one new list
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> hello
+ ==> [3]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 1
+ ==> [4]:
+ ==> 1
+ ==> [5]:
+ ==> 2
+ ==> [6]:
+ ==> 3
+ list l3 =_;
+ l1,l2; // two lists
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> hello
+ ==> [3]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 1
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 3
+ l2[2];
+ ==> 2
+
+
+File: sing.htm, Node: list related functions, Prev: list operations, Up:
list
+
+4.7.4 list related functions
+----------------------------
+
+`bareiss'
+ returns a list of a matrix (lower triangular) and of an intvec
+ (permutations of columns, see *note bareiss::)
+
+`betti'
+ Betti numbers of a resolution (see *note betti::)
+
+`delete'
+ deletes an element from a list (see *note delete::)
+
+`facstd'
+ factorizing Groebner basis algorithm (see *note facstd::)
+
+`factorize'
+ list of factors of a polynomial (see *note factorize::)
+
+`insert'
+ inserts or appends a new element to a list (see *note insert::)
+
+`lres'
+ free resolution (see *note lres::)
+
+`minres'
+ minimize a free resolution (see *note minres::)
+
+`mres'
+ minimal free resolution of an ideal, resp. module w.r.t. a minimal
+ set of generators of the first module (see *note mres::)
+
+`names'
+ list of all user-defined variable names (see *note names::)
+
+`res'
+ free resolution of an ideal, resp. module (see *note res::)
+
+`size'
+ number of entries (see *note size::)
+
+`sres'
+ free resolution of an ideal, resp. module, given by a standard base
+ (see *note sres::)
+
+
+File: sing.htm, Node: map, Next: matrix, Prev: list, Up: Data types
+
+4.8 map
+=======
+
+Maps are ring maps from a preimage ring into the basering.
+
+*Note:*
+ * the target of a map is *ALWAYS* the actual basering
+
+ * the preimage ring is stored "by name", that means, maps can only be
+ used in such contexts, where the name of the preimage ring can be
+ resolved (i.e., there might be problems for rings/maps defined in
+ subprocedures). See also *note Identifier resolution::, *note Names
+ in procedures::.
+
+Maps between rings with different coefficient fields are possible and
+listed below.
+
+Canonically realized are
+ * $Q \rightarrow Q(a, \ldots)$
+ Q -> Q(a,..)
+
+ * $Q \rightarrow R$
+ Q -> R
+
+ * $Q \rightarrow C$
+ Q -> C
+
+ * $Z/p \rightarrow (Z/p)(a, \ldots)$
+ Z/p ->(Z/p)(a,...)
+
+ * $Z/p \rightarrow GF(p^n)$
+ Z/p -> GF(p^n)
+
+ * $Z/p \rightarrow R$
+ Z/p -> R
+
+ * $R \rightarrow C$
+ R -> C
+
+Possible are furthermore
+ * % This is quite a hack, but for now it works.
+ $Z/p \rightarrow Q,
+ \quad
+ [i]_p \mapsto i \in [-p/2, \, p/2]
+ \subseteq Z$
+ Z/p -> Q : [i]_p -> i in [-p/2, p/2] in Z
+
+ * $Z/p \rightarrow Z/p^\prime,
+ \quad
+ [i]_p \mapsto i \in [-p/2, \, p/2] \subseteq Z, \;
+ i \mapsto [i]_{p^\prime} \in Z/p^\prime$
+ Z/p -> Z/p' : [i]_p in Z/p -> i in [-p/2,p/2] in Z, i -> [i]_p' in
+ Z/p'
+
+ * $C \rightarrow R, \quad$ the real part
+ C -> R : the real part
+
+Finally, in Singular we allow the mapping from rings with coefficient
+field Q to rings whose ground fields have finite characteristic:
+
+ * $Q \rightarrow Z/p$
+ Q -> Z/p
+
+ * $Q \rightarrow (Z/p)(a, \ldots)$
+ Q -> (Z/p)(a,..)
+In these cases the denominator and the numerator of a number are mapped
+separately by the usual map from Z to Z/p, and the image of the number
+is built again afterwards by division. It is thus not allowed to map
+numbers whose denominator is divisible by the characteristic of the
+target ground field, or objects containing such numbers. We, therefore,
+strongly recommend using such maps only to map objects with integer
+coefficients.
+
+* Menu:
+
+* map declarations::
+* map expressions::
+* map operations::
+* fetch::
+* imap::
+* subst::
+
+See *note imap::; *note fetch::; *note subst::.
+
+
+File: sing.htm, Node: map declarations, Next: map expressions, Prev: map,
Up: map
+
+4.8.1 map declarations
+----------------------
+
+*Syntax:*
+ `map' name `=' preimage_ring_name `,' ideal_expression `;'
+ `map' name `=' preimage_ring_name `,'
+ list_of_poly_and_ideal_expressions `;'
+ `map' name `=' map_expression `;'
+
+*Purpose:*
+ defines a ring map from preimage_ring to basering.
+ Maps the variables of the preimage ring to the generators of the
+ ideal. If the ideal contains less elements than variables in the
+ preimage_ring the remaining variables are mapped to 0, if the ideal
+ contains more elements these are ignored. The image ring is always
+ the actual basering. For the mapping of coefficients from
+ different fields see *note map::.
+
+*Default:*
+ none
+
+*Note:*
+ There are standard mappings for maps which are close to the
+ identity map: `fetch' and `imap'.
+
+ The name of a map serves as the function which maps objects from
+ the preimage_ring into the basering. These objects must be defined
+ by names (no evaluation in the preimage ring is possible).
+
+*Example:*
+
+ ring r1=32003,(x,y,z),dp;
+ ideal i=x,y,z;
+ ring r2=32003,(a,b),dp;
+ map f=r1,a,b,a+b;
+ // maps from r1 to r2,
+ // x -> a
+ // y -> b
+ // z -> a+b
+ f(i);
+ ==> _[1]=a
+ ==> _[2]=b
+ ==> _[3]=a+b
+ // operations like f(i[1]) or f(i*i) are not allowed
+ ideal i=f(i);
+ // objects in different rings may have the same name
+ map g = r2,a2,b2;
+ map phi = g(f);
+ // composition of map f and g
+ // maps from r1 to r2,
+ // x -> a2
+ // y -> b2
+ // z -> a2+b2
+ phi(i);
+ ==> _[1]=a2
+ ==> _[2]=b2
+ ==> _[3]=a2+b2
+
+* Menu:
+
+See
+* fetch::
+* ideal expressions::
+* imap::
+* map::
+* ring::
+
+See *note fetch::; *note ideal expressions::; *note imap::; *note map::;
+*note ring::.
+
+
+File: sing.htm, Node: map expressions, Next: map operations, Prev: map
declarations, Up: map
+
+4.8.2 map expressions
+---------------------
+
+A map expression is:
+ 1. an identifier of type map
+
+ 2. a function returning map
+
+ 3. map expressions combined by composition using parentheses (`(',
+ `)')
+
+
+File: sing.htm, Node: map operations, Prev: map expressions, Up: map
+
+4.8.3 map operations
+--------------------
+
+`( )'
+ composition of maps. If, for example, `f' and `g' are maps, then
+ `f(g)' is a map expression giving the composition of `f' and `g'.
+
+map_expression `[' int_expressions `]'
+ is a map entry (the image of the corresponding variable)
+
+
+*Example:*
+ ring r=0,(x,y),dp;
+ map f=r,y,x; // the map f permutes the variables
+ f;
+ ==> f[1]=y
+ ==> f[2]=x
+ poly p=x+2y3;
+ f(p);
+ ==> 2x3+y
+ map g=f(f); // the map g defined as f^2 is the identity
+ g;
+ ==> g[1]=x
+ ==> g[2]=y
+ g(p) == p;
+ ==> 1
+
+
+File: sing.htm, Node: matrix, Next: module, Prev: map, Up: Data types
+
+4.9 matrix
+==========
+
+Objects of type matrix are matrices with polynomial entries. Like
+polynomials they can only be defined or accessed with respect to a
+basering. In order to compute with matrices having integer or rational
+entries define a ring with characteristic 0 and at least one variable.
+
+A matrix can be multiplied by and added to a poly; in this case the poly
+is converted into a matrix of the right size with the poly on the
+diagonal.
+
+If A is a matrix then the assignment `module M=A;' or `module
+M=module(A);' creates a module generated by the columns of A. Note that
+the trailing zero columns of A may be deleted by module operations with
+M.
+
+* Menu:
+
+* matrix declarations::
+* matrix expressions::
+* matrix type cast::
+* matrix operations::
+* matrix related functions::
+
+
+File: sing.htm, Node: matrix declarations, Next: matrix expressions, Prev:
matrix, Up: matrix
+
+4.9.1 matrix declarations
+-------------------------
+
+*Syntax:*
+ `matrix' name`['rows`]['cols`] =' list_of_poly_expressions `;'
+ `matrix' name = matrix_expression `;'
+
+*Purpose:*
+ defines a matrix (of polynomials).
+
+ The given poly_list fills up the matrix beginning with the first
+ row from the left to the right, then the second row and so on. If
+ the poly_list contains less than rows*cols elements, the matrix is
+ filled up with zeros; if it contains more elements, then only the
+ first rows*cols elements are used. If the right-hand side is a
+ matrix expression the matrix on the left-hand side gets the same
+ size as the right-hand side, otherwise the size is determined by
+ the left-hand side. If the size is omitted a 1x1 matrix is
+ created.
+
+*Default:*
+ 0 (1 x 1 matrix)
+
+*Example:*
+
+ int ro = 3;
+ ring r = 32003,(x,y,z),dp;
+ poly f=xyz;
+ poly g=z*f;
+ ideal i=f,g,g^2;
+ matrix m[ro][3] = x3y4, 0, i, f ; // a 3 x 3 matrix
+ m;
+ ==> m[1,1]=x3y4
+ ==> m[1,2]=0
+ ==> m[1,3]=xyz
+ ==> m[2,1]=xyz2
+ ==> m[2,2]=x2y2z4
+ ==> m[2,3]=xyz
+ ==> m[3,1]=0
+ ==> m[3,2]=0
+ ==> m[3,3]=0
+ print(m);
+ ==> x3y4,0, xyz,
+ ==> xyz2,x2y2z4,xyz,
+ ==> 0, 0, 0
+ matrix A; // the 1 x 1 zero matrix
+ matrix B[2][2] = m[1..2, 2..3]; //defines a submatrix
+ print(B);
+ ==> 0, xyz,
+ ==> x2y2z4,xyz
+ matrix C=m; // defines C as a 3 x 3 matrix equal to m
+ print(C);
+ ==> x3y4,0, xyz,
+ ==> xyz2,x2y2z4,xyz,
+ ==> 0, 0, 0
+
+
+File: sing.htm, Node: matrix expressions, Next: matrix type cast, Prev:
matrix declarations, Up: matrix
+
+4.9.2 matrix expressions
+------------------------
+
+A matrix expression is:
+ 1. an identifier of type matrix
+
+ 2. a function returning matrix
+
+ 3. matrix expressions combined by the arithmetic operations `+', `-'
+ or `*'
+
+ 4. a type cast to matrix (*note matrix type cast::)
+
+
+*Example:*
+ ring r=0,(x,y),dp;
+ poly f= x3y2 + 2x2y2 +2;
+ matrix H = jacob(jacob(f)); // the Hessian of f
+ matrix mc = coef(f,y);
+ print(mc);
+ ==> y2, 1,
+ ==> x3+2x2,2
+ module MD = [x+y,1,x],[x+y,0,y];
+ matrix M = MD;
+ print(M);
+ ==> x+y,x+y,
+ ==> 1, 0,
+ ==> x, y
+
+
+File: sing.htm, Node: matrix type cast, Next: matrix operations, Prev:
matrix expressions, Up: matrix
+
+4.9.3 matrix type cast
+----------------------
+
+`*Syntax:*'
+ `matrix (' expression `)'
+ `matrix (' expression, int_n, int_m `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ Converts expression to a matrix, where expression must be of type
+ int, intmat, intvec, number, poly, ideal, vector, module, or
+ matrix. If int_n and int_m are supplied, then they specify the
+ dimension of the matrix. Otherwise, the size (resp. dimensions) of
+ the matrix are determined by the size (resp. dimensions) of the
+ expression.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ matrix(x);
+ ==> _[1,1]=x
+ matrix(x, 1, 2);
+ ==> _[1,1]=x
+ ==> _[1,2]=0
+ matrix(intmat(intvec(1,2,3,4), 2, 2));
+ ==> _[1,1]=1
+ ==> _[1,2]=2
+ ==> _[2,1]=3
+ ==> _[2,2]=4
+ matrix(_, 2, 3);
+ ==> _[1,1]=1
+ ==> _[1,2]=2
+ ==> _[1,3]=0
+ ==> _[2,1]=3
+ ==> _[2,2]=4
+ ==> _[2,3]=0
+ matrix(_, 2, 1);
+ ==> _[1,1]=1
+ ==> _[2,1]=3
+
+* Menu:
+
+See
+* Type conversion and casting::
+* intmat type cast::
+* matrix::
+
+See *note Type conversion and casting::; *note intmat type cast::; *note
+matrix::.
+
+
+File: sing.htm, Node: matrix operations, Next: matrix related functions,
Prev: matrix type cast, Up: matrix
+
+4.9.4 matrix operations
+-----------------------
+
+`+'
+ addition with matrix or poly; the poly is converted into a diagonal
+ matrix
+
+`-'
+ negation or subtraction with matrix or poly; the poly is converted
+ into a diagonal matrix
+
+`*'
+ multiplication with matrix or poly; the poly is converted into a
+ diagonal matrix
+
+`/'
+ division by poly
+
+`==', `<>', `!='
+ comparison
+
+matrix_expression `[' int_expression`,' int_expression `]'
+ is a matrix entry, where the first index indicates the row and the
+ second the column
+
+
+*Example:*
+ ring r=32003,x,dp;
+ matrix A[3][3] = 1,3,2,5,0,3,2,4,5; // define a matrix
+ print(A); // nice printing of small matrices
+ ==> 1,3,2,
+ ==> 5,0,3,
+ ==> 2,4,5
+ A[2,3]; // matrix entry
+ ==> 3
+ A[2,3] = A[2,3] + 1; // change entry
+ A[2,1..3] = 1,2,3; // change 2nd row
+ print(A);
+ ==> 1,3,2,
+ ==> 1,2,3,
+ ==> 2,4,5
+ matrix E[3][3]; E = E + 1; // the unit matrix
+ matrix B =x*E - A;
+ print(B);
+ ==> x-1,-3, -2,
+ ==> -1, x-2,-3,
+ ==> -2, -4, x-5
+ det(B); // the characteristic polynomial of A
+ ==> x3-8x2-2x-1
+ A*A*A - 8 * A*A - 2*A == E; // Cayley-Hamilton
+ ==> 1
+ vector v =[x,-1,x2];
+ A*v; // multiplication of matrix and vector
+ ==> _[1,1]=2x2+x-3
+ ==> _[2,1]=3x2+x-2
+ ==> _[3,1]=5x2+2x-4
+ matrix m[2][2]=1,2,3;
+ print(m-transpose(m));
+ ==> 0,-1,
+ ==> 1,0
+
+
+File: sing.htm, Node: matrix related functions, Prev: matrix operations,
Up: matrix
+
+4.9.5 matrix related functions
+------------------------------
+
+`bareiss'
+ Gauss-Bareiss algorithm (see *note bareiss::)
+
+`coef'
+ matrix of coefficients and monomials (see *note coef::)
+
+`coeffs'
+ matrix of coefficients (see *note coeffs::)
+
+`det'
+ determinant (see *note det::)
+
+`diff'
+ partial derivative (see *note diff::)
+
+`jacob'
+ Jacobi matrix (see *note jacob::)
+
+`koszul'
+ Koszul matrix (see *note koszul::)
+
+`lift'
+ lift-matrix (see *note lift::)
+
+`liftstd'
+ standard basis and transformation matrix computation (see *note
+ liftstd::)
+
+`minor'
+ set of minors of a matrix (see *note minor::)
+
+`ncols'
+ number of columns (see *note ncols::)
+
+`nrows'
+ number of rows (see *note nrows::)
+
+`print'
+ nice print format (see *note print::)
+
+`size'
+ number of matrix entries (see *note size::)
+
+`subst'
+ substitute a ring variable (see *note subst::)
+
+`trace'
+ trace of a matrix (see *note trace::)
+
+`transpose'
+ transpose a matrix (see *note transpose::)
+
+`wedge'
+ wedge product (see *note wedge::)
+
+See also the library *note matrix_lib::, which contains more
+matrix-related functions.
+
+
+File: sing.htm, Node: module, Next: number, Prev: matrix, Up: Data types
+
+4.10 module
+===========
+
+Modules are submodules of a free module over the basering with basis
+`gen(1)', `gen(2)', ... . They are represented by lists of vectors
+which generate the submodule. Like vectors they can only be defined or
+accessed with respect to a basering. If M $M$
+ is a submodule of R^n, $R^n$,
+
+R $R$
+ the basering, generated by vectors v_1, ..., v_k, then v_1, ..., v_k $v_1,
\ldots, v_k$, then $v_1, \ldots, v_k$
+may be considered as the generators of relations of R^n/M $R^n/M$
+between the canonical generators `gen(1)',...,`gen(n)'. Hence any
+finitely generated R $R$
+-module can be represented in SINGULAR by its module of relations. The
+assignments `module M=v1,...,vk; matrix A=M;' create the presentation
+matrix of size n x k n$\times$k
+ for R^n/M, R$^n$/M,
+i.e., the columns of A are the vectors v_1, ..., v_k $v_1, \ldots, v_k$
+which generate M (cf. *note Representation of mathematical objects::).
+
+* Menu:
+
+* module declarations::
+* module expressions::
+* module operations::
+* module related functions::
+
+
+File: sing.htm, Node: module declarations, Next: module expressions, Prev:
module, Up: module
+
+4.10.1 module declarations
+--------------------------
+
+*Syntax:*
+ `module' name `=' list_of_vector_expressions `;'
+ `module' name `=' module_expression `;'
+
+*Purpose:*
+ defines a module.
+
+*Default:*
+ [0]
+
+*Example:*
+
+ ring r=0,(x,y,z),(c,dp);
+ vector s1 = [x2,y3,z];
+ vector s2 = [xy,1,0];
+ vector s3 = [0,x2-y2,z];
+ poly f = xyz;
+ module m = s1, s2-s1,f*(s3-s1);
+ m;
+ ==> m[1]=[x2,y3,z]
+ ==> m[2]=[-x2+xy,-y3+1,-z]
+ ==> m[3]=[-x3yz,-xy4z+x3yz-xy3z]
+ // show m in matrix format (columns generate m)
+ print(m);
+ ==> x2,-x2+xy,-x3yz,
+ ==> y3,-y3+1, -xy4z+x3yz-xy3z,
+ ==> z, -z, 0
+
+
+File: sing.htm, Node: module expressions, Next: module operations, Prev:
module declarations, Up: module
+
+4.10.2 module expressions
+-------------------------
+
+A module expression is:
+ 1. an identifier of type module
+
+ 2. a function returning module
+
+ 3. module expressions combined by the arithmetic operation `+'
+
+ 4. multiplication of a module expression with an ideal or a poly
+ expression: `*'
+
+ 5. a type cast to module
+
+* Menu:
+
+See
+* Type conversion and casting::
+* ideal::
+* poly::
+* vector::
+
+See *note Type conversion and casting::; *note ideal::; *note poly::;
+*note vector::.
+
+
+File: sing.htm, Node: module operations, Next: module related functions,
Prev: module expressions, Up: module
+
+4.10.3 module operations
+------------------------
+
+`+'
+ addition (concatenation of the generators and simplification)
+
+`*'
+ multiplication with ideal or poly, but not `module` * `module`
+
+module_expression `[' int_expression `,' int_expression `]'
+ is a module entry, where the first index indicates the row and the
+ second the column
+
+module_expressions `[' int_expression `]'
+ is a vector, where the index indicates the column
+
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ module m=[x,y],[0,0,z];
+ print(m*(x+y));
+ ==> x2+xy,0,
+ ==> xy+y2,0,
+ ==> 0, xz+yz
+
+
+File: sing.htm, Node: module related functions, Prev: module operations,
Up: module
+
+4.10.4 module related functions
+-------------------------------
+
+`coeffs'
+ matrix of coefficients (see *note coeffs::)
+
+`degree'
+ multiplicity, dimension and codimension of the module of leading
+ terms (see *note degree::)
+
+`diff'
+ partial derivative (see *note diff::)
+
+`dim'
+ Krull dimension of free module over the basering modulo the module
+ of leading terms (see *note dim::)
+
+`eliminate'
+ elimination of variables (see *note eliminate::)
+
+`freemodule'
+ the free module of given rank (see *note freemodule::)
+
+`groebner'
+ Groebner basis computation (a wrapper around
+ `std,stdhilb,stdfglm',...) (see *note groebner::)
+
+`hilb'
+ Hilbert function of a standard basis (see *note hilb::)
+
+`homog'
+ homogenization with respect to a variable (see *note homog::)
+
+`interred'
+ interreduction of a module (see *note interred::)
+
+`intersect'
+ module intersection (see *note intersect::)
+
+`jet'
+ Taylor series up to a given order (see *note jet::)
+
+`kbase'
+ vector space basis of free module over the basering modulo the
+ module of leading terms (see *note kbase::)
+
+`lead'
+ initial module (see *note lead::)
+
+`lift'
+ lift-matrix (see *note lift::)
+
+`liftstd'
+ standard basis and transformation matrix computation (see *note
+ liftstd::)
+
+`lres'
+ free resolution (see *note lres::)
+
+`minbase'
+ minimal generating set of a homogeneous ideal, resp. module, or an
+ ideal, resp. module, over a local ring
+
+`modulo'
+ represents $(h1+h2)/h1=h2/(h1 \cap h2)$
+ (h1+h2)/h1=h2/(h1 intersect h2) (see *note modulo::)
+
+`mres'
+ minimal free resolution of an ideal resp. module w.r.t. a minimal
+ set of generators of the given module (see *note mres::)
+
+`mult'
+ multiplicity, resp. degree, of the module of leading terms (see
+ *note mult::)
+
+`ncols'
+ number of columns (see *note ncols::)
+
+`nrows'
+ number of rows (see *note nrows::)
+
+`print'
+ nice print format (see *note print::)
+
+`prune'
+ minimize the embedding into a free module (see *note prune::)
+
+`qhweight'
+ quasihomogeneous weights of an ideal, resp. module (see *note
+ qhweight::)
+
+`quotient'
+ module quotient (see *note quotient::)
+
+`reduce'
+ normalform with respect to a standard basis (see *note reduce::)
+
+`res'
+ free resolution of an ideal, resp. module, but not changing the
+ given ideal, resp. module (see *note res::)
+
+`simplify'
+ simplify a set of vectors (see *note simplify::)
+
+`size'
+ number of non-zero generators (see *note size::)
+
+`sortvec'
+ permutation for sorting ideals/modules (see *note sortvec::)
+
+`sres'
+ free resolution of a standard basis (see *note sres::)
+
+`std'
+ standard basis computation (see *note std::, *note liftstd::)
+
+`subst'
+ substitute a ring variable (see *note subst::)
+
+`syz'
+ computation of the first syzygy module (see *note syz::)
+
+`vdim'
+ vector space dimension of free module over the basering modulo
+ module of leading terms (see *note vdim::)
+
+`weight'
+ "optimal" weights (see *note weight::)
+
+
+File: sing.htm, Node: number, Next: poly, Prev: module, Up: Data types
+
+4.11 number
+===========
+
+Numbers are elements from the coefficient field (or ground field). They
+can only be defined or accessed with respect to a basering which
+determines the coefficient field. See *note ring declarations:: for
+declarations of coefficient fields.
+
+*Warning:* Beware of the special meaning of the letter `e' (immediately
+following a sequence of digits) if the field is real (or complex). See
+*note number operations::, *note Miscellaneous oddities::.
+
+* Menu:
+
+* number declarations::
+* number expressions::
+* number operations::
+* number related functions::
+
+
+File: sing.htm, Node: number declarations, Next: number expressions, Prev:
number, Up: number
+
+4.11.1 number declarations
+--------------------------
+
+*Syntax:*
+ `number' name `=' number_expression `;'
+
+*Purpose:*
+ defines a number.
+
+*Default:*
+ 0
+
+*Note:*
+ Numbers may only be declared w.r.t. the coefficient field of the
+ current basering, i.e., a ring has to be defined prior to any
+ number declaration. See *note Rings and orderings:: for a list of
+ the available coefficient fields.
+
+*Example:*
+
+ // finite field Z/p, p<= 32003
+ ring r = 32003,(x,y,z),dp;
+ number n = 4/6;
+ n;
+ ==> -10667
+ // finite field GF(p^n), p^n <= 32767
+ // z is a primitive root of the minimal polynomial
+ ring rg= (7^2,z),x,dp;
+ number n = 4/9+z;
+ n;
+ ==> z11
+ // the rational numbers
+ ring r0 = 0,x,dp;
+ number n = 4/6;
+ n;
+ ==> 2/3
+ // algebraic extensions of Z/p or Q
+ ring ra=(0,a),x,dp;
+ minpoly=a^2+1;
+ number n=a3+a2+2a-1;
+ n;
+ ==> (a-2)
+ a^2;
+ ==> -1
+ // transcedental extensions of Z/p or Q
+ ring rt=(0,a),x,dp;
+ number n=a3+a2+2a-1;
+ n;
+ ==> (a3+a2+2a-1)
+ a^2;
+ ==> (a2)
+ // machine floating point numbers, single precision
+ ring R_0=real,x,dp;
+ number n=4/6;
+ n;
+ ==> 6.667e-01
+ n=0.25e+2;
+ n;
+ ==> 2.500e+01
+ // floating point numbers, arbitrary prescribed precision
+ ring R_1=(real,50),x,dp;
+ number n=4.0/6;
+ n;
+ ==> 0.66666666666666666666666666666666666666666666666667
+ n=0.25e+2;
+ n;
+ ==> 25
+ // floating point complex numbers, arbitrary prescribed precision
+ // the third parameter gives the name of the imaginary unit
+ ring R_2=(complex,50,i),x,dp;
+ number n=4.0/6;
+ n;
+ ==> 0.66666666666666666666666666666666666666666666666667
+ n=0.25e+2*i+n;
+ n;
+ ==> (0.66666666666666666666666666666666666666666666666667+i*25)
+
+
+File: sing.htm, Node: number expressions, Next: number operations, Prev:
number declarations, Up: number
+
+4.11.2 number expressions
+-------------------------
+
+A number expression is:
+ 1. a rational number (there are NO spaces allowed inside a rational
+ number, see *note int expressions::)
+
+ 2. a floating point number (if the coefficient field is `real'):
+ <digits>`.'<digits>`e'<sign><digits>
+
+ 3. an identifier of type number
+
+ 4. a function returning number
+
+ 5. an int expression (see *note Type conversion and casting::)
+
+ 6. number expressions combined by the arithmetic operations `+', `-',
+ `*', `/', `^', or `**'.
+
+ 7. a type cast to number
+
+
+*Example:*
+ // the following expressions are in any ring int expressions
+ 2 / 3;
+ ==> 0
+ 4/ 8;
+ ==> 0
+ 2 /2; // the notation of / for div might change in the future
+ ==> 1
+ ring r0=0,x,dp;
+ 2/3, 4/8, 2/2 ; // are numbers
+ ==> 2/3 1/2 1
+
+ poly f = 2x2 +1;
+ leadcoef(f);
+ ==> 2
+ typeof(_);
+ ==> number
+ ring rr =real,x,dp;
+ 1.7e-2; 1.7e+2; // are valid (but 1.7e2 not), if the field is `real`
+ ==> 1.700e-02
+ ==> 1.700e+02
+ ring rp = (31,t),x,dp;
+ 2/3, 4/8, 2/2 ; // are numbers
+ ==> 11 -15 1
+ poly g = (3t2 +1)*x2 +1;
+ leadcoef(g);
+ ==> (3t2+1)
+ typeof(_);
+ ==> number
+ par(1);
+ ==> (t)
+ typeof(_);
+ ==> number
+
+* Menu:
+
+See
+* Type conversion and casting::
+* ring::
+
+See *note Type conversion and casting::; *note ring::.
+
+
+File: sing.htm, Node: number operations, Next: number related functions,
Prev: number expressions, Up: number
+
+4.11.3 number operations
+------------------------
+
+`+'
+ addition
+
+`-'
+ negation or subtraction
+
+`*'
+ multiplication
+
+`/'
+ division
+
+`^', `**'
+ power, exponentiation (by an integer)
+
+`<=, >=, ==, <>'
+ comparison
+
+`mod'
+ integer modulo (the remainder of the division `div'), always
+ non-negative
+
+*Note:* quotient and exponentiation is only recognized as a number
+expression if it is already a number, see *note Miscellaneous
+oddities::.
+For the behavior of comparison operators in rings with ground field
+different from real or the rational numbers, see *note boolean
+expressions::.
+
+
+*Example:*
+ ring r=0,x,dp;
+ number n = 1/2 +1/3;
+ n;
+ ==> 5/6
+ n/2;
+ ==> 5/12
+ 1/2/3;
+ ==> 1/6
+ 1/2 * 1/3;
+ ==> 1/6
+ n = 2;
+ n^-2;
+ ==> 1/4
+ // the following oddities appear here
+ 2/(2+3);
+ ==> 0
+ number(2)/(2+3);
+ ==> 2/5
+ 2^-2; // for int's exponent must be non-negative
+ ==> ? exponent must be non-negative
+ ==> ? error occurred in line 12: ` 2^-2; // for int's exponent must
be no\
+ n-negative`
+ number(2)^-2;
+ ==> 1/4
+ 3/4>=2/5;
+ ==> 1
+ 2/6==1/3;
+ ==> 1
+
+
+File: sing.htm, Node: number related functions, Prev: number operations,
Up: number
+
+4.11.4 number related functions
+-------------------------------
+
+`cleardenom'
+ cancel denominators of numbers in poly and divide it by its content
+ (see *note cleardenom::)
+
+`impart'
+ imaginary part of a complex number, 0 otherwise (see *note
+ impart::, *note repart::)
+
+`numerator, denominator'
+ return the numerator/denominator of a rational number (see *note
+ numerator::, *note denominator::)
+
+`leadcoef'
+ coefficient of the leading term (see *note leadcoef::)
+
+`par'
+ n-th parameter of the basering (see *note par::)
+
+`pardeg'
+ degree of a number in ring parameters (see *note pardeg::)
+
+`parstr'
+ string form of ring parameters (see *note parstr::)
+
+`repart'
+ real part of a complex number (see *note impart::, *note repart::)
+
+
+File: sing.htm, Node: poly, Next: proc, Prev: number, Up: Data types
+
+4.12 poly
+=========
+
+Polynomials are the basic data for all main algorithms in `SINGULAR'.
+They consist of finitely many terms (coefficient*power product) which
+are combined by the usual polynomial operations (see *note poly
+expressions::). Polynomials can only be defined or accessed with respect
+to a basering which determines the coefficient type, the names of the
+indeterminates and the monomial ordering.
+
+ ring r=32003,(x,y,z),dp;
+ poly f=x3+y5+z2;
+
+* Menu:
+
+* poly declarations::
+* poly expressions::
+* poly operations::
+* poly related functions::
+
+
+File: sing.htm, Node: poly declarations, Next: poly expressions, Prev:
poly, Up: poly
+
+4.12.1 poly declarations
+------------------------
+
+*Syntax:*
+ `poly' name `=' poly_expression `;'
+
+*Purpose:*
+ defines a polynomial.
+
+*Default:*
+ 0
+
+*Example:*
+
+ ring r = 32003,(x,y,z),dp;
+ poly s1 = x3y2+151x5y+186xy6+169y9;
+ poly s2 = 1*x^2*y^2*z^2+3z8;
+ poly s3 = 5/4x4y2+4/5*x*y^5+2x2y2z3+y7+11x10;
+ int a,b,c,t=37,5,4,1;
+ poly f=3*x^a+x*y^(b+c)+t*x^a*y^b*z^c;
+ f;
+ ==> x37y5z4+3x37+xy9
+ short = 0;
+ f;
+ ==> x^37*y^5*z^4+3*x^37+x*y^9
+
+* Menu:
+
+See also:
+* short::
+
+*See also:* *note short::.
+
+
+File: sing.htm, Node: poly expressions, Next: poly operations, Prev: poly
declarations, Up: poly
+
+4.12.2 poly expressions
+-----------------------
+
+A poly expression is (optional parts in square brackets):
+ 1. a monomial (there are NO spaces allowed inside a monomial)
+
+ [coefficient] ring_variable [ exponent] [ring_variable [exponent]
...]
+
+ monomials which contain an indexed ring variable must be built from
+ `ring_variable' and `coefficient' with the operations `*' and `^'
+
+ 2. an identifier of type poly
+
+ 3. a function returning poly
+
+ 4. poly expressions combined by the arithmetic operations `+', `-',
+ `*', `/', or `^'
+
+ 5. an int expression (see *note Type conversion and casting::)
+
+ 6. a type cast to poly
+
+
+*Example:*
+ 2x, x3, 2x2y3, xyz, 2xy2; // are monomials
+ 2*x, x^3, 2*x^2*y^3, x*y*z, 2*x*y^2; // are poly expressions
+ 2*x(1); // is a valid poly expression, but not 2x(1) (a syntax error)
+ 2*x^3; // is a valid poly expression equal to 2x3 (a valid monomial)
+ // but not equal to 2x^3 which will be interpreted as (2x)^3
+ // since 2x is a monomial
+ ring r=0,(x,y),dp;
+ poly f = 10x2y3 +2x2y2-2xy+y -x+2;
+ lead(f);
+ ==> 10x2y3
+ leadmonom(f);
+ ==> x2y3
+ simplify(f,1); // normalize leading coefficient
+ ==> x2y3+1/5x2y2-1/5xy-1/10x+1/10y+1/5
+ poly g = 1/2x2 + 1/3y;
+ cleardenom(g);
+ ==> 3x2+2y
+ int i = 102;
+ poly(i);
+ ==> 102
+ typeof(_);
+ ==> poly
+
+* Menu:
+
+See
+* Type conversion and casting::
+* ring::
+
+See *note Type conversion and casting::; *note ring::.
+
+
+File: sing.htm, Node: poly operations, Next: poly related functions, Prev:
poly expressions, Up: poly
+
+4.12.3 poly operations
+----------------------
+
+`+'
+ addition
+
+`-'
+ negation or subtraction
+
+`*'
+ multiplication
+
+`/'
+ division by a polynomial, ignoring the rest
+
+`^', `**'
+ power by an integer
+
+`<', `<=', `>', `>=', `==', `<>'
+ comparison (w.r.t. monomial ordering)
+
+poly_expression `[' intvec_expression `]'
+ the monomial at the indicated place w.r.t. the monomial ordering
+
+
+*Example:*
+ ring R=0,(x,y),dp;
+ poly f = x3y2 + 2x2y2 + xy - x + y + 1;
+ f;
+ ==> x3y2+2x2y2+xy-x+y+1
+ f + x5 + 2;
+ ==> x5+x3y2+2x2y2+xy-x+y+3
+ f * x2;
+ ==> x5y2+2x4y2+x3y-x3+x2y+x2
+ (x+y)/x;
+ ==> 1
+ f/3x2;
+ ==> 1/3xy2+2/3y2
+ x5 > f;
+ ==> 1
+ x<=y;
+ ==> 0
+ x>y;
+ ==> 1
+ ring r=0,(x,y),ds;
+ poly f = fetch(R,f);
+ f;
+ ==> 1-x+y+xy+2x2y2+x3y2
+ x5 > f;
+ ==> 0
+ f[2..4];
+ ==> -x+y+xy
+ size(f);
+ ==> 6
+ f[size(f)+1]; f[-1]; // monomials out of range are 0
+ ==> 0
+ ==> 0
+ intvec v = 6,1,3;
+ f[v]; // the polynom built from the 1st, 3rd and 6th monomial
of f
+ ==> 1+y+x3y2
+
+
+File: sing.htm, Node: poly related functions, Prev: poly operations, Up:
poly
+
+4.12.4 poly related functions
+-----------------------------
+
+`cleardenom'
+ cancel denominators of numbers in poly and divide it by its content
+ (see *note cleardenom::)
+
+`coef'
+ matrix of coefficients and monomials (see *note coef::)
+
+`coeffs'
+ matrix of coefficients (see *note coeffs::)
+
+`deg'
+ degree (see *note deg::)
+
+`det'
+ determinant (see *note det::)
+
+`diff'
+ partial derivative (see *note diff::)
+
+`extgcd'
+ Bezout representation of gcd (see *note extgcd::)
+
+`factorize'
+ factorize polynomial (see *note factorize::)
+
+`finduni'
+ find univariate polynomials in a zero-dimensional ideal (see *note
+ finduni::)
+
+`gcd'
+ greatest common divisor (see *note gcd::)
+
+`homog'
+ homogenization (see *note homog::)
+
+`jacob'
+ ideal, resp. matrix, of all partial derivatives (see *note jacob::)
+
+`lead'
+ leading term (see *note lead::)
+
+`leadcoef'
+ coefficient of the leading term (see *note leadcoef::)
+
+`leadexp'
+ the exponent vector of the leading monomial (see *note leadexp::)
+
+`leadmonom'
+ leading monomial (see *note leadmonom::)
+
+`jet'
+ monomials with degree smaller k+1 (see *note jet::)
+
+`ord'
+ degree of the leading monomial (see *note ord::)
+
+`qhweight'
+ quasihomogeneous weights (see *note qhweight::)
+
+`reduce'
+ normal form with respect to a standard base (see *note reduce::)
+
+`rvar'
+ test for ring variable (see *note rvar::)
+
+`simplify'
+ normalize a polynomial (see *note simplify::)
+
+`size'
+ number of monomials (see *note size::)
+
+`subst'
+ substitute a ring variable (see *note subst::)
+
+`trace'
+ trace of a matrix (see *note trace::)
+
+`var'
+ the indicated variable of the ring (see *note var::)
+
+`varstr'
+ variable in string form (see *note varstr::)
+
+
+File: sing.htm, Node: proc, Next: qring, Prev: poly, Up: Data types
+
+4.13 proc
+=========
+
+Procedures are sequences of SINGULAR commands in a special format. They
+are used to extend the set of SINGULAR commands with user defined
+commands. Once a procedure is defined it can be used as any other
+SINGULAR command. Procedures may be defined by either typing them on the
+command line or by loading them from a file. For a detailed description
+on the concept of procedures in SINGULAR see *note Procedures::. A file
+containing procedure definitions which comply with certain syntax rules
+is called a library. Such a file is loaded using the command `LIB'. For
+more information on libraries see *note Libraries::.
+
+* Menu:
+
+* proc declaration::
+
+
+File: sing.htm, Node: proc declaration, Prev: proc, Up: proc
+
+4.13.1 proc declaration
+-----------------------
+
+*Syntax:*
+ [`static'] `proc' proc_name [parameter_list]
+ ["help_text"]
+ `{'
+\quad
+ procedure_body
+ `}'
+ [`example'
+ `{'
+\quad
+ sequence_of_commands;
+ `}']
+ `proc' proc_name `=' proc_name `;'
+ `proc' proc_name `=' string_expression `;'
+
+*Purpose:*
+ defines a new function, the `proc' proc_name, with the additional
+ information help_text, which is copied to the screen by `help
+ proc_name;' and the `example' section which is executed by `example
+ proc_name;'.
+ The help_text, the parameter_list, and the example section are
+ optional. The default for a parameter_list is `(list #)', see
+ *note Parameter list::. The help and example sections are ignored
+ if the procedure is defined interactively, i.e., if it was not
+ loaded from a file by a *note LIB:: command.
+ Specifying `static' in front of the proc-definition is only
+ possible in a library file and makes this procedure local to the
+ library, i.e., accessible only for the other procedures in the same
+ library, but not for the users.
+
+*Example:*
+
+ proc milnor_number (poly p)
+ {
+ ideal i= std(jacob(p));
+ int m_nr=vdim(i);
+ if (m_nr<0)
+ {
+ "// not an isolated singularity";
+ }
+ return(m_nr); // the value of m_nr is returned
+ }
+ ring r1=0,(x,y,z),ds;
+ poly p=x^2+y^2+z^5;
+ milnor_number(p);
+ ==> 4
+
+* Menu:
+
+See
+* LIB::
+* Libraries::
+* Procedures::
+
+See *note LIB::; *note Libraries::; *note Procedures::.
+
+
+File: sing.htm, Node: qring, Next: resolution, Prev: proc, Up: Data types
+
+4.14 qring
+==========
+
+SINGULAR offers the opportunity to calculate in quotient rings (factor
+rings), i.e., rings modulo an ideal. The ideal has to be given as a
+standard basis. For a detailed description of the concept of rings and
+quotient rings see *note Rings and orderings::.
+
+* Menu:
+
+* qring declaration::
+
+
+File: sing.htm, Node: qring declaration, Prev: qring, Up: qring
+
+4.14.1 qring declaration
+------------------------
+
+*Syntax:*
+ `qring' name `=' ideal_expression `;'
+
+*Default:*
+ none
+
+*Purpose:*
+ declares a quotient ring as the basering modulo ideal_expression.
+ Sets it as current basering.
+
+*Example:*
+
+ ring r=0,(x,y,z),dp;
+ ideal i=xy;
+ qring q=std(i);
+ basering;
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> // quotient ring from ideal
+ ==> _[1]=xy
+
+
+File: sing.htm, Node: resolution, Next: ring, Prev: qring, Up: Data types
+
+4.15 resolution
+===============
+
+The resolution type is intended as an intermediate representation which
+internally retains additional information obtained during computation of
+resolutions. It furthermore enables the use of partial results to
+compute, for example, Betti numbers or minimal resolutions. Like ideals
+and modules, a resolution can only be defined w.r.t. a basering.
+
+*Note:* to access the elements of a resolution, it has to be assigned to
+a list, which also completes computations and may therefore take time,
+(resp. an access directly with the brackets `[ , ]' causes implicitly a
+cast to a list).
+
+* Menu:
+
+* resolution declarations::
+* resolution expressions::
+* resolution related functions::
+
+
+File: sing.htm, Node: resolution declarations, Next: resolution expressions,
Prev: resolution, Up: resolution
+
+4.15.1 resolution declarations
+------------------------------
+
+*Syntax:*
+ `resolution' name `=' resolution_expression `;'
+
+*Purpose:*
+ defines a resolution.
+
+*Default:*
+ none
+
+*Example:*
+
+ ring R;
+ ideal i=z2,x;
+ resolution re=res(i,0);
+ re;
+ ==> 1 2 1
+ ==> R <-- R <-- R
+ ==>
+ ==> 0 1 2
+ ==> resolution not minimized yet
+ ==>
+ betti(re);
+ ==> 1,1,0,
+ ==> 0,1,1
+ list l = re;
+ l;
+ ==> [1]:
+ ==> _[1]=x
+ ==> _[2]=z2
+ ==> [2]:
+ ==> _[1]=-z2*gen(1)+x*gen(2)
+ ==> [3]:
+ ==> _[1]=0
+
+
+File: sing.htm, Node: resolution expressions, Next: resolution related
functions, Prev: resolution declarations, Up: resolution
+
+4.15.2 resolution expressions
+-----------------------------
+
+A resolution expression is:
+ 1. an identifier of type resolution
+
+ 2. a function returning a resolution
+
+ 3. a type cast to resolution from a list of ideals, resp. modules..
+
+* Menu:
+
+See
+* Type conversion and casting::
+
+See *note Type conversion and casting::.
+
+
+File: sing.htm, Node: resolution related functions, Prev: resolution
expressions, Up: resolution
+
+4.15.3 resolution related functions
+-----------------------------------
+
+`betti'
+ Betti numbers of a resolution (see *note betti::)
+
+`lres'
+ free resolution (see *note lres::)
+
+`minres'
+ minimize a free resolution (see *note minres::)
+
+`mres'
+ minimal free resolution of an ideal, resp. module w.r.t. a minimal
+ set of generators of the given ideal, resp. module (see *note
+ mres::)
+
+`res'
+ free resolution of an ideal, resp. module, but not changing the
+ given ideal, resp. module (see *note res::)
+
+`sres'
+ free resolution of a standard basis (see *note sres::)
+
+
+File: sing.htm, Node: ring, Next: string, Prev: resolution, Up: Data types
+
+4.16 ring
+=========
+
+Rings are used to describe properties of polynomials, ideals etc.
+Almost all computations in SINGULAR require a basering. For a detailed
+description of the concept of rings see *note Rings and orderings::.
+
+* Menu:
+
+* ring declarations::
+* ring related functions::
+* ring operations::
+
+
+File: sing.htm, Node: ring declarations, Next: ring related functions,
Prev: ring, Up: ring
+
+4.16.1 ring declarations
+------------------------
+
+*Syntax:*
+ `ring' name `= (' coefficient_field `),' `('
+ names_of_ring_variables `),' `(' ordering `);'
+
+*Default:*
+ `32003,(x,y,z),(dp,C);'
+
+*Purpose:*
+ declares a ring and sets it as the actual basering.
+
+The coefficient_field is given by one of the following:
+ 1. a non-negative int_expression less or equal 2147483629.
+
+ 2. an expression_list of an int_expression and one or more names.
+
+ 3. the name `real'
+
+ 4. an expression_list of the name `real' and an int_expression.
+
+ 5. an expression_list of the name `complex', an optional
+ int_expression and a name.
+
+For the definition of the 'coefficient_field', see *note Rings and
+orderings::.
+
+'names_of_ring_variables' must be a list of names or indexed names.
+
+'ordering' is a list of block orderings where each block ordering is
+either
+ 1. `lp', `dp', `Dp', `ls', `ds', or `Ds' optionally followed by a size
+ parameter in parentheses.
+
+ 2. `wp', `Wp', `ws', `Ws', or `a' followed by a weight vector given as
+ an intvec_expression in parentheses.
+
+ 3. `M' followed by an intmat_expression in parentheses.
+
+ 4. `c' or `C'.
+
+For the definition of the orderings, see *note Term orderings::, *note
+Monomial orderings::.
+
+If one of coefficient_field, names_of_ring_variables, and ordering
+consists of only one entry, the parentheses around this entry may be
+omitted.
+
+
+File: sing.htm, Node: ring related functions, Next: ring operations, Prev:
ring declarations, Up: ring
+
+4.16.2 ring related functions
+-----------------------------
+
+`charstr'
+ description of the coefficient field of a ring (see *note
+ charstr::)
+
+`keepring'
+ move ring to next upper level (see *note keepring::)
+
+`npars'
+ number of ring parameters (see *note npars::)
+
+`nvars'
+ number of ring variables (see *note nvars::)
+
+`ordstr'
+ monomial ordering of a ring (see *note ordstr::)
+
+`parstr'
+ names of all ring parameters or the name of the n-th ring parameter
+ (see *note parstr::)
+
+`qring'
+ quotient ring (see *note qring::)
+
+`setring'
+ set a new basering (see *note setring::)
+
+`varstr'
+ names of all ring variables or the name of the n-th ring variable
+ (see *note varstr::)
+
+
+File: sing.htm, Node: ring operations, Prev: ring related functions, Up:
ring
+
+4.16.3 ring operations
+----------------------
+
+`+'
+ construct a new ring k[X,Y] $k[X,Y]$
+ from k_1[X] $k_1[X]$
+ and k_2[Y] $k_2[Y]$
+ .
+
+Concerning the ground fields k_1 $k_1$
+ and k_2 $k_2$
+ take the following guide lines into consideration:
+ * Neither k_1 $k_1$
+ nor k_2 $k_2$
+ may be R $R$
+ or C $C$
+ .
+
+ * If the characteristic of k_1 $k_1$
+ and k_2 $k_2$
+ differs, then one of them must be Q $Q$
+ .
+
+ * At most one of k_1 $k_1$
+ and k_2 $k_2$
+ may be have parameters.
+
+ * If one of k_1 $k_1$
+ and k_2 $k_2$
+ is an algebraic extension of Z/p $Z/p$
+ it may not be defined by a `charstr' of type `(p^n,a)'.
+
+*Example:*
+ ring R1=0,(x,y),dp;
+ ring R2=32003,(a,b),dp;
+ def R=R1+R2;
+ R;
+ ==> // characteristic : 32003
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names x y
+ ==> // block 2 : ordering dp
+ ==> // : names a b
+ ==> // block 3 : ordering C
+
+* Menu:
+
+See also:
+* ring_lib::
+
+*See also:* *note ring_lib::.
+
+
+File: sing.htm, Node: string, Next: vector, Prev: ring, Up: Data types
+
+4.17 string
+===========
+
+Variables of type `string' are used for output (almost every type can be
+"converted" to `string') and for creating new commands at runtime see
+*note execute::. They are also return values of certain interpreter
+related functions (see *note Functions::). String constants consist of
+a sequence of ANY characters (including newline!) between a starting
+`"' and a closing `"'. There is also a string constant `newline', which
+is the newline character. The `+' sign "adds" strings, `""' is the
+empty string (hence strings form a semigroup). Strings may be used to
+comment the output of a computation or to give it a nice format. Strings
+may also be used for intermediate conversion of one type into another.
+
+ string s="Hi";
+ string s1="a string with new line at the end"+newline;
+ string s2="another string with new line at the end
+ ";
+ s;s1;s2;
+ ==> Hi
+ ==> a string with new line at the end
+ ==>
+ ==> another string with new line at the end
+ ==>
+ ring r; ideal i=std(ideal(x,y^3));
+ "dimension of i =",dim(i),", multiplicity of i =",mult(i);
+ ==> dimension of i = 1 , multiplicity of i = 3
+ "dimension of i = "+string(dim(i))+", multiplicity of i =
"+string(mult(i));
+ ==> dimension of i = 1, multiplicity of i = 3
+ "a"+"b","c";
+ ==> ab c
+A comma between two strings makes an expression list out of them (such a
+list is printed with a separating blank in between), while a `+'
+concatenates strings.
+
+* Menu:
+
+* string declarations::
+* string expressions::
+* string type cast::
+* string operations::
+* string related functions::
+
+
+File: sing.htm, Node: string declarations, Next: string expressions, Prev:
string, Up: string
+
+4.17.1 string declarations
+--------------------------
+
+*Syntax:*
+ `string' name `=' string_expression `;'
+ `string' name `=' list_of_string_expressions `;'
+
+*Purpose:*
+ defines a string variable.
+
+*Default:*
+ "" (the empty string)
+
+*Example:*
+
+ string s1="Now I know";
+ string s2="how to encode a \" in a string...";
+ string s=s1+" "+s2; // concatenation of 3 strings
+ s;
+ ==> Now I know how to encode a " in a string...
+ s1,s2; // 2 strings, separated by a blank in the output:
+ ==> Now I know how to encode a " in a string...
+
+
+File: sing.htm, Node: string expressions, Next: string type cast, Prev:
string declarations, Up: string
+
+4.17.2 string expressions
+-------------------------
+
+A string expression is:
+ 1. a sequence of characters between two unescaped quotes (`"')
+
+ 2. an identifier of type string
+
+ 3. a function returning string
+
+ 4. a substring (using the bracket operator)
+
+ 5. a type cast to string (*note string type cast::)
+
+ 6. string expressions combined by the operation `+'.
+
+
+*Example:*
+ // string_expression[start, length] : a substring
+ // (possibly filled up with blanks)
+ // the substring of s starting at position 2
+ // with a length of 4
+ string s="123456";
+ s[2,4];
+ ==> 2345
+ "abcd"[2,2];
+ ==> bc
+ // string_expression[position] : a character from a string
+ s[3];
+ ==> 3
+ // string_expression[position..position] :
+ // a substring starting at the first position up to the second
+ // given position
+ s[2..4];
+ ==> 2 3 4
+ // a function returning a string
+ typeof(s);
+ ==> string
+
+* Menu:
+
+See
+* Type conversion and casting::
+* string type cast::
+
+See *note Type conversion and casting::; *note string type cast::.
+
+
+File: sing.htm, Node: string type cast, Next: string operations, Prev:
string expressions, Up: string
+
+4.17.3 string type cast
+-----------------------
+
+`*Syntax:*'
+ `string (' expression [, expression_2, ... expression_n]`)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ Converts each expression to a string, where expression can be of
+ any type. The concatenated string of all concersions is returned.
+
+
+ The elements of intvec, intmat, ideal, module, matrix, and list,
+ are separated by a comma. No newlines are inserted.
+ Not defined elements of a list are omitted.
+ For link, the name of the link is used.
+ For map, the ideal defining the mapping is converted.
+
+`*Note:*'
+ When applied to a list, elements of type intvec, intmat, ideal,
+ module, matrix, and list become indistinguishable.
+
+`*Example:*'
+
+ string("1+1=", 2);
+ ==> 1+1=2
+ string(intvec(1,2,3,4));
+ ==> 1,2,3,4
+ string(intmat(intvec(1,2,3,4), 2, 2));
+ ==> 1,2,3,4
+ ring r;
+ string(r);
+ ==> (32003),(x,y,z),(dp(3),C)
+ string(ideal(x,y));
+ ==> x,y
+ qring R = std(ideal(x,y));
+ string(R);
+ ==> (32003),(x,y,z),(dp(3),C)
+ map phi = r, ideal(x,z);
+ string(phi);
+ ==> x,z
+ list l;
+ string(l);
+ ==>
+ l[3] = 1;
+ string(l); // notice that l[1],l[2] are omitted
+ ==> 1
+ l[2] = l;
+ l;
+ ==> [2]:
+ ==> [3]:
+ ==> 1
+ ==> [3]:
+ ==> 1
+ string(l); // notice that lists of list is flattened
+ ==> 1,1
+ l[1] = intvec(1,2,3);
+ l;
+ ==> [1]:
+ ==> 1,2,3
+ ==> [2]:
+ ==> [3]:
+ ==> 1
+ ==> [3]:
+ ==> 1
+ string(l); // notice that intvec elements are not distinguishable
+ ==> 1,2,3,1,1
+
+* Menu:
+
+See
+* Type conversion and casting::
+* print::
+* string::
+
+See *note Type conversion and casting::; *note print::; *note string::.
+
+
+File: sing.htm, Node: string operations, Next: string related functions,
Prev: string type cast, Up: string
+
+4.17.4 string operations
+------------------------
+
+`+'
+ concatenation
+
+`<=', `>=', `==', `<>'
+ comparison (lexicographical with respect to the ASCII encoding)
+
+string_expression `[' int_expression `]'
+ is a character of the string; the index 1 gives the first
+ character.
+
+string_expression `[' int_expression`,' int_expression `]'
+ is a substring, where the first argument is the start index and the
+ second is the length of the substring, filled up with blanks if the
+ length exceeds the total size of the string
+
+string_expression `[' intvec_expression `]'
+ is a expression list of characters from the string
+
+
+*Example:*
+ string s="abcde";
+ s[2];
+ ==> b
+ s[3,2];
+ ==> cd
+ ">>"+s[1,10]+"<<";
+ ==> >>abcde <<
+ s[2]="BC"; s;
+ ==> aBcde
+ intvec v=1,3,5;
+ s=s[v]; s;
+ ==> ace
+ s="123456"; s=s[3..5]; s;
+ ==> 345
+
+
+File: sing.htm, Node: string related functions, Prev: string operations,
Up: string
+
+4.17.5 string related functions
+-------------------------------
+
+`charstr'
+ description of the coefficient field of a ring (see *note
+ charstr::)
+
+`execute'
+ executing string as command (see *note execute::)
+
+`find'
+ position of a substring in a string (see *note find::)
+
+`names'
+ list of strings of all user-defined variable names (see *note
+ names::)
+
+`nameof'
+ name of an object (see *note nameof::)
+
+`option'
+ lists all defined options (see *note option::)
+
+`ordstr'
+ monomial ordering of a ring (see *note ordstr::)
+
+`parstr'
+ names of all ring parameters or the name of the n-th ring parameter
+ (see *note parstr::)
+
+`read'
+ read a file (see *note read::)
+
+`size'
+ length of a string (see *note size::)
+
+`sprintf'
+ string formatting (see *note sprintf::)
+
+`typeof'
+ type of an object (see *note typeof::)
+
+`varstr'
+ names of all ring variables or the name of the n-th ring variable
+ (see *note varstr::)
+
+
+File: sing.htm, Node: vector, Prev: string, Up: Data types
+
+4.18 vector
+===========
+
+Vectors are elements of a free module over the basering with basis
+`gen(1)', `gen(2)', ... . Each vector belongs to a free module of rank
+equal to the biggest index of a generator with non-zero coefficient.
+Since generators with zero coefficients need not be written any vector
+may be considered also as an element of a free module of higher rank.
+Like polynomials they can only be defined or accessed with respect to
+the basering. (E.g., if `f' and `g' are polynomials then
+`f*gen(1)+g*gen(3)+gen(4)' may also be written as `[f,0,g,1]' or as
+`[f,0,g,1,0]'.) Note that the elements of a vector have to be surrounded
+by square brackets (`[' , `]') (cf. *note Representation of
+mathematical objects::).
+
+* Menu:
+
+* vector declarations::
+* vector expressions::
+* vector operations::
+* vector related functions::
+
+
+File: sing.htm, Node: vector declarations, Next: vector expressions, Prev:
vector, Up: vector
+
+4.18.1 vector declarations
+--------------------------
+
+*Syntax:*
+ `vector' name `=' vector_expression `;'
+
+*Purpose:*
+ defines a vector of polynomials (an element of a free module).
+
+*Default:*
+ [0]
+
+*Example:*
+
+ ring r=0,(x,y,z),(c,dp);
+ poly s1 = x2;
+ poly s2 = y3;
+ poly s3 = z;
+ vector v = [s1, s2-s1, s3-s1]+ s1*gen(5);
+ // v is a vector in the free module of rank 5
+ v;
+ ==> [x2,y3-x2,-x2+z,0,x2]
+
+
+File: sing.htm, Node: vector expressions, Next: vector operations, Prev:
vector declarations, Up: vector
+
+4.18.2 vector expressions
+-------------------------
+
+A vector expression is:
+ 1. an identifier of type vector
+
+ 2. a function returning vector
+
+ 3. a poly expression (via the canonical embedding `p' ==> `p*gen(1)')
+
+ 4. vector expressions combined by the arithmetic operations `+' or `-'
+
+ 5. a poly expression and a vector expression combined by the
+ arithmetic operation `*'
+
+ 6. a type cast to vector using the brackets `[' , `]'
+
+
+*Example:*
+ // ordering gives priority to components:
+ ring rr=0,(x,y,z),(c,dp);
+ vector v=[x2+y3,2,0,x*y]+gen(6)*x6;
+ v;
+ ==> [y3+x2,2,0,xy,0,x6]
+ vector w=[z3-x,3y];
+ v-w;
+ ==> [y3-z3+x2+x,-3y+2,0,xy,0,x6]
+ v*(z+x);
+ ==> [xy3+y3z+x3+x2z,2x+2z,0,x2y+xyz,0,x7+x6z]
+
+* Menu:
+
+See
+* Type conversion and casting::
+* ring::
+
+See *note Type conversion and casting::; *note ring::.
+
+
+File: sing.htm, Node: vector operations, Next: vector related functions,
Prev: vector expressions, Up: vector
+
+4.18.3 vector operations
+------------------------
+
+`+'
+ addition
+
+`-'
+ negation or subtraction
+
+`/'
+ division by a monomial, not divisible terms yield 0
+
+`<', `<=', `>', `>=', `==', `<>'
+ comparison of leading terms w.r.t. monomial ordering
+
+vector_expression `[' int_expressions `]'
+ is a vector entry; the index 1 gives the first entry.
+
+
+*Example:*
+ ring R=0,(x,y),(c,dp);
+ [x,y]-[1,x];
+ ==> [x-1,-x+y]
+ [1,2,x,4][3];
+ ==> x
+
+
+File: sing.htm, Node: vector related functions, Prev: vector operations,
Up: vector
+
+4.18.4 vector related functions
+-------------------------------
+
+`cleardenom'
+ quotient of a vector by its content (see *note cleardenom::)
+
+`coeffs'
+ matrix of coefficients (see *note coeffs::)
+
+`deg'
+ degree (see *note deg::)
+
+`diff'
+ partial derivative (see *note diff::)
+
+`gen'
+ i-th generator (see *note gen::)
+
+`homog'
+ homogenization (see *note homog::)
+
+`jet'
+ k-jet: monomials with degree smaller k+1 (see *note jet::)
+
+`lead'
+ leading term (see *note lead::)
+
+`leadcoef'
+ leading coefficient (see *note leadcoef::)
+
+`leadexp'
+ the exponent vector of the leading monomial (see *note leadexp::)
+
+`leadmonom'
+ leading monomial (see *note leadmonom::)
+
+`nrows'
+ number of rows (see *note nrows::)
+
+`ord'
+ degree of the leading monomial (see *note ord::)
+
+`reduce'
+ normal form with respect to a standard base (see *note reduce::)
+
+`simplify'
+ normalize a vector (see *note simplify::)
+
+`size'
+ number of monomials (see *note size::)
+
+`subst'
+ substitute a ring variable (see *note subst::)
+
+
+File: sing.htm, Node: Functions and system variables, Next: Tricks and
pitfalls, Prev: Data types, Up: Top
+
+5 Functions and system variables
+********************************
+
+* Menu:
+
+* Functions::
+* Control structures::
+* System variables::
+
+
+File: sing.htm, Node: Functions, Next: Control structures, Prev: Functions
and system variables, Up: Functions and system variables
+
+5.1 Functions
+=============
+
+This section gives a complete reference of all functions, commands and
+special variables of the SINGULAR kernel (i.e., all built-in commands).
+*Note standard_lib::, for those functions from the `standard.lib' (this
+library is automatically loaded at start-up time) which extend the
+functionality of the kernel and are written in the SINGULAR programming
+language.
+
+The general syntax of a function is
+ [target =] function_name (<arguments>);
+If no target is specified, the result is printed. In some cases (e.g.,
+`export', `keepring', `kill', `setring', `type') the brackets are
+optional. For the commands `help', `break', `quit', `exit' and `LIB' no
+brackets are allowed.
+
+
+List of all supported kernel functions.
+
+* Menu:
+
+* attrib::
+* bareiss::
+* betti::
+* char::
+* char_series::
+* charstr::
+* cleardenom::
+* close::
+* coef::
+* coeffs::
+* contract::
+* dbprint::
+* defined::
+* deg::
+* degree::
+* delete::
+* det::
+* diff::
+* dim::
+* division::
+* dump::
+* eliminate::
+* eval::
+* ERROR::
+* example::
+* execute::
+* exit::
+* extgcd::
+* facstd::
+* factorize::
+* fetch::
+* fglm::
+* fglmquot::
+* filecmd::
+* find::
+* finduni::
+* fprintf::
+* freemodule::
+* gcd::
+* gen::
+* getdump::
+* groebner::
+* help::
+* highcorner::
+* hilb::
+* homog::
+* hres::
+* imap::
+* impart::
+* indepSet::
+* insert::
+* interred::
+* intersect::
+* jacob::
+* jet::
+* kbase::
+* kill::
+* killattrib::
+* koszul::
+* laguerre::
+* lead::
+* leadcoef::
+* leadexp::
+* leadmonom::
+* LIB::
+* lift::
+* liftstd::
+* listvar::
+* lres::
+* maxideal::
+* memory::
+* minbase::
+* minor::
+* minres::
+* modulo::
+* monitor::
+* mpresmat::
+* mres::
+* mstd::
+* mult::
+* nameof::
+* names::
+* ncols::
+* npars::
+* nres::
+* nrows::
+* nvars::
+* open::
+* option::
+* ord::
+* ordstr::
+* par::
+* pardeg::
+* parstr::
+* preimage::
+* prime::
+* print::
+* printf::
+* prune::
+* qhweight::
+* quot::
+* quote::
+* quotient::
+* random::
+* read::
+* reduce::
+* regularity::
+* repart::
+* res::
+* reservedName::
+* resultant::
+* rvar::
+* setring::
+* simplex::
+* simplify::
+* size::
+* sortvec::
+* sprintf::
+* sres::
+* status::
+* std::
+* stdfglm::
+* stdhilb::
+* subst::
+* system::
+* syz::
+* trace::
+* transpose::
+* type::
+* typeof::
+* uressolve::
+* vandermonde::
+* var::
+* varstr::
+* vdim::
+* wedge::
+* weight::
+* write::
+
+
+File: sing.htm, Node: attrib, Next: bareiss, Prev: Functions, Up: Functions
+
+5.1.1 attrib
+------------
+
+`*Syntax:*'
+ `attrib (' name `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ displays the attribute list of the object called name.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=std(maxideal(2));
+ attrib(I);
+ ==> attr:isSB, type int
+
+`*Syntax:*'
+ `attrib (' name `,' string_expression `)'
+
+`*Type:*'
+ any
+
+`*Purpose:*'
+ returns the value of the attribute string_expression of the
+ variable name. If the attribute is not defined for this variable,
+ `attrib' returns the empty string.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=std(maxideal(2));
+ attrib(I,"isSB");
+ ==> 1
+ // although maxideal(2) is a standard basis,
+ // SINGULAR does not know it:
+ attrib(maxideal(2), "isSB");
+ ==> 0
+
+`*Syntax:*'
+ `attrib (' name`,' string_expression`,' expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ sets the attribute string_expression of the variable name to the
+ value expression.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=maxideal(2); // the attribute "isSB" is not set
+ vdim(I);
+ ==> // ** I is no standardbasis
+ ==> 4
+ attrib(I,"isSB",1); // the standard basis attribute is set here
+ vdim(I);
+ ==> 4
+
+`*Remark:*'
+ An attribute may be described by any string_expression. Some of
+ these are used by the kernel of SINGULAR and referred to as
+ reserved attributes. Non-reserved attributes may be used, however,
+ in procedures and can considerably speed up computations.
+
+`*Reserved attributes:*'
+ (not all are in use at the moment)
+
+ `isSB'
+ the standard basis property is set by all commands computing a
+ standard basis like `groebner', `std', `stdhilb' etc.; used by
+ `lift', `dim', `degree', `mult', `hilb', `vdim', `kbase'
+
+ `isHomog'
+ the weight vector for homogeneous or quasihomogeneous
+ ideals/modules
+
+ `isCI'
+ complete intersection property
+
+ `isCM'
+ Cohen-Macaulay property
+
+ `rank'
+ set the rank of a module (see *note nrows::)
+
+ `withSB'
+ value of type ideal, resp. module, is std
+
+ `withHilb'
+ value of type intvec is hilb(_,1) (see *note hilb::)
+
+ `withRes'
+ value of type list is a free resolution
+
+ `withDim'
+ value of type int is the dimension (see *note dim::)
+
+ `withMult'
+ value of type int is the multiplicity (see *note mult::)
+
+
+File: sing.htm, Node: bareiss, Next: betti, Prev: attrib, Up: Functions
+
+5.1.2 bareiss
+-------------
+
+`*Syntax:*'
+ `bareiss (' module_expression `)'
+ `bareiss (' matrix_expression `)'
+ `bareiss (' module_expression`,' int_expression`,' int_expression
+ `)'
+ `bareiss (' matrix_expression`,' int_expression`,' int_expression
+ `)'
+
+`*Type:*'
+ list of module and intvec
+
+`*Purpose:*'
+ applies the sparse Gauss-Bareiss algorithm (see *note References::,
+ Lee and Saunders) to a module (or with type conversion to a matrix)
+ with an 'optimal' pivot strategy. The vectors of the module are the
+ columns of the matrix, hence elimination takes place w.r.t. rows.
+ With only one parameter a complete elimination is done. Result is
+ a list: the first entry is a module with a minimal independent set
+ of vectors (as a matrix lower triangular), the second entry an
+ intvec with the permutation of the rows w.r.t. the original matrix,
+ that is, a k at position l indicates that row l became row k.
+ The further parameters control the algorithm. `bareiss(M,i,j)' does
+ not consider the last i rows in the elimination procedure and stops
+ computing when the remaining number of vectors (columns) to reduce
+ is at most j.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),(c,dp);
+ module mm;
+ // ** generation of the module mm **
+ int d=7;
+ int b=2;
+ int db=d-b;
+ int i;
+ for(i=d;i>0;i--){ mm[i]=3*x*gen(i); }
+ for(i=db;i;i--){ mm[i]=mm[i]+7*y*gen(i+b); }
+ for(i=d;i>db;i--){ mm[i]=mm[i]+7*y*gen(i-db); }
+ for(i=d;i>b;i--){ mm[i]=mm[i]+11*z*gen(i-b); }
+ for(i=b;i;i--){ mm[i]=mm[i]+11*z*gen(i+db); }
+ // ** the generating matrix of mm **
+ print(mm);
+ ==> 3x, 0, 11z,0, 0, 7y, 0,
+ ==> 0, 3x, 0, 11z,0, 0, 7y,
+ ==> 7y, 0, 3x, 0, 11z,0, 0,
+ ==> 0, 7y, 0, 3x, 0, 11z,0,
+ ==> 0, 0, 7y, 0, 3x, 0, 11z,
+ ==> 11z,0, 0, 7y, 0, 3x, 0,
+ ==> 0, 11z,0, 0, 7y, 0, 3x
+ // complete elimination
+ list ss=bareiss(mm);
+ print(ss[1]);
+ ==> 7y, 0, 0, 0, 0, 0, 0,
+ ==> 3x, -33xz, 0, 0, 0, 0, 0,
+ ==> 11z,-121z2,1331z3,0, 0, 0, 0,
+ ==> 0, 0, 0, 9317yz3,0, 0, 0,
+ ==> 0, 21xy, _[5,3],14641z4,-43923xz4,0, 0,
+ ==> 0, 0, 0, 0, 65219y2z3,_[6,6],0,
+ ==> 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6],_[7,7]
+ ss[2];
+ ==> 2,7,5,1,4,3,6
+ // elimination up to 3 vectors
+ ss=bareiss(mm,0,3);
+ print(ss[1]);
+ ==> 7y, 0, 0, 0, 0, 0, 0,
+ ==> 3x, -33xz, 0, 0, 0, 0, 0,
+ ==> 11z,-121z2,1331z3,0, 0, 0, 0,
+ ==> 0, 0, 0, 9317yz3,0, 0, 0,
+ ==> 0, 0, 0, 0, 27951xyz3,102487yz4,65219y2z3,
+ ==> 0, 21xy, _[6,3],14641z4,_[6,5], _[6,6], -43923xz4,
+ ==> 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6], _[7,7]
+ ss[2];
+ ==> 2,7,5,1,3,4,6
+ // elimination without the last 3 rows
+ ss=bareiss(mm,3,0);
+ print(ss[1]);
+ ==> 7y, 0, 0, 0, 0, 0, 0,
+ ==> 0, 77yz,0, 0, 0, 0, 0,
+ ==> 0, 0, 231xyz, 0, 0, 0, 0,
+ ==> 0, 0, 0, 1617xy2z,0, 0, 0,
+ ==> 11z,21xy,-1331z3,14641z4, _[5,5],_[5,6],_[5,7],
+ ==> 0, 0, 539y2z, _[6,4], _[6,5],_[6,6],-3773y3z,
+ ==> 3x, 49y2,-363xz2,3993xz3, _[7,5],_[7,6],_[7,7]
+ ss[2];
+ ==> 2,3,4,1
+
+* Menu:
+
+See
+* det::
+* matrix::
+
+See *note det::; *note matrix::.
+
+
+File: sing.htm, Node: betti, Next: char, Prev: bareiss, Up: Functions
+
+5.1.3 betti
+-----------
+
+`*Syntax:*'
+ `betti (' list_expression `)'
+ `betti (' resolution_expression `)'
+ `betti (' list_expression `,' int_expression `)'
+ `betti (' resolution_expression `,' int_expression `)'
+
+`*Type:*'
+ intmat
+
+`*Purpose:*'
+ with 1 argument: computes the graded Betti numbers of a minimal
+ resolution of $R^n/M$, if $R$ denotes the basering and
+ $M$ a homogeneous submodule of $R^n$ and the argument represents a
+ resolution of
+ $R^n/M$.
+
+The entry d of the intmat at place (i,j) is the minimal number of
+ generators in degree i+j of the j-th syzygy module (= module of
+ relations) of $R^n/M$ (the 0th (resp.\ 1st) syzygy module of $R^n/M$ is
+ $R^n$ (resp.\ $M$)).
+ R^n/M, if R denotes the basering and M a homogeneous submodule of
+ R^n and the argument represents a resolution of R^n/M:
+ The entry d of the intmat at place (i,j) is the minimal number of
+ generators in degree i+j of the j-th syzygy module (= module of
+ relations) of R^n/M (the 0th (resp. 1st) syzygy module of R^n/M is
+ R^n (resp. M)). The argument is considered to be the result of a
+ res/sres/mres/nres/lres command. This implies that a zero is only
+ allowed (and counted) as a generator in the first module.
+ For the computation betti uses only the initial monomials. This
+ could lead to confusing results for a non-homogeneous input.
+
+ The optional second argument is a switch for the minimization of
+ the Betti numbers. If it is 0 then the Betti numbers correspond
+ exactly to the input - otherwise the command is identical to the
+ one-argument form.
+
+`*Example:*'
+
+ ring r=32003,(a,b,c,d),dp;
+ ideal j=bc-ad,b3-a2c,c3-bd2,ac2-b2d;
+ list T=mres(j,0); // 0 forces a full resolution
+ // a minimal set of generators for j:
+ print(T[1]);
+ ==> bc-ad,
+ ==> c3-bd2,
+ ==> ac2-b2d,
+ ==> b3-a2c
+ // second syzygy module of r/j which is the first
+ // syzygy module of j (minimal generating set):
+ print(T[2]);
+ ==> bd,c2,ac,b2,
+ ==> -a,-b,0, 0,
+ ==> c, d, -b,-a,
+ ==> 0, 0, -d,-c
+ // the second syzygy module (minimal generating set):
+ print(T[3]);
+ ==> -b,
+ ==> a,
+ ==> -c,
+ ==> d
+ print(T[4]);
+ ==> 0
+ betti(T);
+ ==> 1,0,0,0,
+ ==> 0,1,0,0,
+ ==> 0,3,4,1
+ // most useful for reading off the graded Betti numbers:
+ print(betti(T),"betti");
+ ==> 0 1 2 3
+ ==> ------------------------------
+ ==> 0: 1 - - -
+ ==> 1: - 1 - -
+ ==> 2: - 3 4 1
+ ==> ------------------------------
+ ==> total: 1 4 4 1
+
+Hence
+ * the 0th syzygy module of r/j (which is r) has 1 generator in degree
+ 0 (which is 1),
+
+ * the 1st syzygy module `T[1]' (which is j) has 4 generators (one in
+ degree 2 and three in degree 3),
+
+ * the 2nd syzygy module `T[2]' has 4 generators (all in degree 4),
+
+ * the 3rd syzygy module `T[3]' has 1 generator in degree 5,
+where the generators are the columns of the displayed matrix and degrees
+are assigned such that the corresponding maps have degree 0: $$
+0 \longleftarrow r/j \longleftarrow r(1)
+\buildrel{T[1]}\over{\longleftarrow} r(2) \oplus r^3(3)
+\buildrel{T[2]}\over{\longleftarrow} r^4(4)
+\buildrel{T[3]}\over{\longleftarrow} r(5)
+\longleftarrow 0 \quad .
+$$
+
+T[1] T[2] T[3]
+0 <- r/j <- r(1) <---- r(2)+r^3(3) <---- r^4(4) <---- r(5) <- 0 .
+
+* Menu:
+
+See
+* Syzygies and resolutions::
+* hres::
+* lres::
+* mres::
+* print::
+* res::
+* resolution::
+* sres::
+
+See *note Syzygies and resolutions::; *note hres::; *note lres::; *note
+mres::; *note print::; *note res::; *note resolution::; *note sres::.
+
+
+File: sing.htm, Node: char, Next: char_series, Prev: betti, Up: Functions
+
+5.1.4 char
+----------
+
+`*Syntax:*'
+ `char (' ring_name `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the characteristic of the coefficient field of a ring.
+
+`*Example:*'
+
+ ring r=32003,(x,y),dp;
+ char(r);
+ ==> 32003
+ ring s=0,(x,y),dp;
+ char(s);
+ ==> 0
+ ring ra=(7,a),(x,y),dp;
+ minpoly=a^3+a+1;
+ char(ra);
+ ==> 7
+ ring rp=(49,a),(x,y),dp;
+ char(rp);
+ ==> 7
+ ring rr=real,x,dp;
+ char(rr);
+ ==> 0
+
+* Menu:
+
+See
+* charstr::
+* ring::
+
+See *note charstr::; *note ring::.
+
Index: test/singular_manual/res_info/singular_httex/sing.htm-2
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.htm-2
diff -N test/singular_manual/res_info/singular_httex/sing.htm-2
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_info/singular_httex/sing.htm-2 14 Jul 2010
15:42:40 -0000 1.1
@@ -0,0 +1,10806 @@
+This is sing.htm, produced by makeinfo version 4.13 from singular.texi.
+
+
+File: sing.htm, Node: char_series, Next: charstr, Prev: char, Up: Functions
+
+5.1.5 char_series
+-----------------
+
+`*Syntax:*'
+ `char_series (' ideal_expression `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ the rows of the matrix represent the irreducible characteristic
+ series of the ideal with respect to the current ordering of
+ variables.
+ One application is the decomposition of the zero-set.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ print(char_series(ideal(xyz,xz,y)));
+ ==> y,z,
+ ==> x,y
+
+* Menu:
+
+See
+* Characteristic sets::
+
+See *note Characteristic sets::.
+
+
+File: sing.htm, Node: charstr, Next: cleardenom, Prev: char_series, Up:
Functions
+
+5.1.6 charstr
+-------------
+
+`*Syntax:*'
+ `charstr (' ring_name `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the description of the coefficient field of a ring.
+
+`*Example:*'
+
+ ring r=32003,(x,y),dp;
+ charstr(r);
+ ==> 32003
+ ring s=0,(x,y),dp;
+ charstr(s);
+ ==> 0
+ ring ra=(7,a),(x,y),dp;
+ minpoly=a^3+a+1;
+ charstr(ra);
+ ==> 7,a
+ ring rp=(49,a),(x,y),dp;
+ charstr(rp);
+ ==> 49,a
+ ring rr=real,x,dp;
+ charstr(rr);
+ ==> real
+
+* Menu:
+
+See
+* char::
+* ordstr::
+* ring::
+* varstr::
+
+See *note char::; *note ordstr::; *note ring::; *note varstr::.
+
+
+File: sing.htm, Node: cleardenom, Next: close, Prev: charstr, Up: Functions
+
+5.1.7 cleardenom
+----------------
+
+`*Syntax:*'
+ `cleardenom (' poly_expression `)'
+ `cleardenom (' vector_expression `)'
+
+`*Type:*'
+ same as the input type
+
+`*Purpose:*'
+ multiplies a polynomial, resp. vector, by a suitable constant to
+ cancel all denominators from its coefficients and then divide it by
+ its content.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ poly f=(3x+6y)^5;
+ f/5;
+ ==> 243/5x5+486x4y+1944x3y2+3888x2y3+3888xy4+7776/5y5
+ cleardenom(f/5);
+ ==> x5+10x4y+40x3y2+80x2y3+80xy4+32y5
+
+
+File: sing.htm, Node: close, Next: coef, Prev: cleardenom, Up: Functions
+
+5.1.8 close
+-----------
+
+`*Syntax:*'
+ `close (' link_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ closes a link.
+
+`*Example:*'
+
+ link l="MPtcp:launch";
+ open(l); // start SINGULAR "server" on localhost in batchmode
+ close(l); // shut down SINGULAR server
+
+* Menu:
+
+See
+* link::
+* open::
+
+See *note link::; *note open::.
+
+
+File: sing.htm, Node: coef, Next: coeffs, Prev: close, Up: Functions
+
+5.1.9 coef
+----------
+
+`*Syntax:*'
+ `coef (' poly_expression`,' product_of_ringvars `)'
+
+`*Type:*'
+ matrix
+
+`*Syntax:*'
+ `coef (' vector_expression`,' product_of_ringvars`,' matrix_name`,'
+ matrix_name `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ determines the monomials in f divisible by one of the ring
+ variables of m (where f is the first argument and m the second
+ argument) and the coefficients of these monomials as polynomials in
+ the remaining variables.
+
+ First case: returns a 2 x n matrix M, n being the number of the
+ determined monomials. The first row consists of these monomials,
+ the second row of the corresponding coefficients of the monomials
+ in f. Thus, f = M[1,1]*M[2,1]+...+M[1,n]*M[2,n].
+
+ Second case: the second matrix (i.e., the 4th argument) contains
+ the monomials, the first matrix (i.e., the 3rd argument) the
+ corresponding coefficients of the monomials in the vector.
+
+`*Note:*'
+ coef considers only monomials which really occur in f (i.e., which
+ are not 0), while coeffs (see *note coeffs::) returns the
+ coefficient 0 at the appropriate place if a monomial is not
+ present.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ poly f=x5+5x4y+10x2y3+y5;
+ matrix m=coef(f,y);
+ print(m);
+ ==> y5,y3, y, 1,
+ ==> 1, 10x2,5x4,x5
+ f=x20+xyz+xy+x2y+z3;
+ print(coef(f,xy));
+ ==> x20,x2y,xy, 1,
+ ==> 1, 1, z+1,z3
+ vector v=[f,zy+77+xy];
+ print(v);
+ ==> [x20+x2y+xyz+z3+xy,xy+yz+77]
+ matrix mc; matrix mm;
+ coef(v,y,mc,mm);
+ print(mc);
+ ==> x2+xz+x,x20+z3,
+ ==> x+z, 77
+ print(mm);
+ ==> y,1,
+ ==> y,1
+
+* Menu:
+
+See
+* coeffs::
+
+See *note coeffs::.
+
+
+File: sing.htm, Node: coeffs, Next: contract, Prev: coef, Up: Functions
+
+5.1.10 coeffs
+-------------
+
+`*Syntax:*'
+ `coeffs (' poly_expression `,' ring_variable `)'
+ `coeffs (' ideal_expression`,' ring_variable `)'
+ `coeffs (' vector_expression`,' ring_variable `)'
+ `coeffs (' module_expression`,' ring_variable `)'
+ `coeffs (' poly_expression`,' ring_variable`,' matrix_name `)'
+ `coeffs (' ideal_expression`,' ring_variable`,' matrix_name `)'
+ `coeffs (' vector_expression`,' ring_variable`,' matrix_name `)'
+ `coeffs (' module_expression`,' ring_variable`,' matrix_name `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ develops each polynomial of the first argument, say J, as a
+ univariate polynomial in the given ring_variable, say z, and
+ returns the coefficients as a k x d matrix M, where:
+
+ d-1 = maximum z-degree of all occurring polynomials
+ k = 1 if J is a polynomial,
+ k = number of generators if J is an ideal.
+
+ If J is a vector or a module this procedure is repeated for each
+ component and the resulting matrices are appended.
+ The third argument is used to return the matrix T of coefficients
+ such that matrix(J) = T*M. The third argument is used to return the
matrix T of coefficients
+ such that {\tt matrix}(J) = T*M.
+
+`*Note:*'
+ `coeffs' returns the coefficient 0 at the appropriate place if a
+ monomial is not present, while `coef' considers only monomials
+ which really occur in the given expression.
+ If $M=(m_{ij})$
+ M=(M[i,j]) then the j-th generator of an ideal J is equal to $$J_j = z^0
\cdot m_{1j} + z^1 \cdot m_{2j} + ... + z^{d-1} \cdot m_{dj},$$
+ while for a module J the i-th component of the j-th generator is
+ equal to the entry [i,j] of {\tt matrix}(J), and we get
+
+
+ J[j] = z^0*M[1,j] + z^1*M[2,j] + ... + z^(d-1)*M[d,j],
+
+
+ while for a module J the i-th component of the j-th generator is
+ equal to the entry [i,j] of matrix(J), and we get $$ J_{i,j} = z^0 \cdot
m_{(i-1)d+1,j} + z^1 \cdot m_{(i-1)d+2,j} + ... +
+ z^{d-1} \cdot m_{id,j}.$$
+
+
+ J[i,j] = z^0*M[(i-1)*d+1,j] + z^1*M[(i-1)*d+2,j] + ...
+ + z^(d-1)*M[i*d,j].
+
+`*Example:*'
+
+ ring r;
+ poly f=(x+y)^3;
+ matrix M=coeffs(f,y);
+ print(M);
+ ==> x3,
+ ==> 3x2,
+ ==> 3x,
+ ==> 1
+ ideal i=f,xyz+z10y4;
+ print(coeffs(i,y));
+ ==> x3, 0,
+ ==> 3x2,xz,
+ ==> 3x, 0,
+ ==> 1, 0,
+ ==> 0, z10
+
+`*Syntax:*'
+ `coeffs (' ideal_expression`,' ideal_expression `)'
+ `coeffs (' module_expression`,' module_expression `)'
+ `coeffs (' ideal_expression`,' ideal_expression`,'
+ product_of_ringvars `)'
+ `coeffs (' module_expression`,' module_expression`,'
+ product_of_ringvars `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ let the first argument be M, the second argument be K (a set of
+ monomials, resp. vectors with monomial entries, in the variables
+ appearing in P), the third argument be the product P of variables
+ to consider (if this argument is not given, then the product of all
+ ring variables is taken as default argument).
+ M is supposed to consist of elements of (resp. have entries in) a
+ finitely generated module over a ring in the variables not
+ appearing in P. K should contain the generators of M over this
+ smaller ring. Then `coeffs(M,K,P)' returns a matrix A of
+ coefficients with K*A=M such that the entries of A do not contain
+ any variable from P.
+ If K does not contain all generators that are necessary to express
+ M, then K*A=M' where M' is the part of M that can be expressed.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ ideal M=x2z+y3,xy;
+ print(coeffs(M,ideal(x2,xy,y2),xy));
+ ==> z,0,
+ ==> 0,1,
+ ==> 0,0
+ print(coeffs(M,ideal(x2,xy,y2)));
+ ==> 0,0,
+ ==> 0,1,
+ ==> 0,0
+
+* Menu:
+
+See
+* coef::
+* kbase::
+
+See *note coef::; *note kbase::.
+
+
+File: sing.htm, Node: contract, Next: dbprint, Prev: coeffs, Up: Functions
+
+5.1.11 contract
+---------------
+
+`*Syntax:*'
+ `contract (' ideal_expression`,' ideal_expression `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ contracts each of the n elements of the second ideal J by each of
+ the m elements of the first ideal I, producing a m x n matrix.
+ Contraction is defined on monomials by:
+
+ contract(x^A,x^B) := x^(B-A) (if B>=A componentwise),
+ := 0 (otherwise),
+
+$${\rm contract}(x^A , x^B) := \cases{ x^{(B-A)}, &if $B\ge A$
+ componentwise\cr 0,&otherwise.\cr}$$
+ where A and B are the multiexponents of the ring variables
+ represented by $x$.
+ x. `contract' is extended bilinearly to all polynomials.
+
+`*Example:*'
+
+ ring r=0,(a,b,c,d),dp;
+ ideal I=a2,a2+bc,abc;
+ ideal J=a2-bc,abcd;
+ print(contract(I,J));
+ ==> 1,0,
+ ==> 0,ad,
+ ==> 0,d
+
+* Menu:
+
+See
+* diff::
+
+See *note diff::.
+
+
+File: sing.htm, Node: dbprint, Next: defined, Prev: contract, Up: Functions
+
+5.1.12 dbprint
+--------------
+
+`*Syntax:*'
+ `dbprint (' int_expression`,' expression_list `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ applies the print command to each expression in the expression_list
+ if int_expression is positive. `dbprint' may also be used in
+ procedures in order to print results subject to certain conditions.
+
+`*Syntax:*'
+ `dbprint (' expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ The print command is applied to the expression if
+ `printlevel>=voice'.
+
+`*Note:*'
+ *Note Guidelines for writing a library::, for an example how this
+ is used for displaying comments while procedures are executed.
+
+`*Example:*'
+
+ int debug=0;
+ intvec i=1,2,3;
+ dbprint(debug,i);
+ debug=1;
+ dbprint(debug,i);
+ ==> 1,2,3
+ voice;
+ ==> 1
+ printlevel;
+ ==> 0
+ dbprint(i);
+
+* Menu:
+
+See
+* Debugging tools::
+* print::
+* printlevel::
+* voice::
+
+See *note Debugging tools::; *note print::; *note printlevel::; *note
+voice::.
+
+
+File: sing.htm, Node: defined, Next: deg, Prev: dbprint, Up: Functions
+
+5.1.13 defined
+--------------
+
+`*Syntax:*'
+ `defined (' name `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns a value <>0 (TRUE) if there is a user-defined object with
+ this name, and 0 (FALSE) otherwise.
+ A non-zero return value is the level where the object is defined
+ (level 1 denotes the top level, level 2 the level of a first
+ procedure, level 3 the level of a procedure called by a first
+ procedure, etc.). For ring variables, -1 is returned.
+
+`*Note:*'
+ A local object `m' may be identified by `if (defined(m)==voice)'.
+
+`*Example:*'
+
+ ring r=(0,t),(x,y),dp;
+ matrix m[5][6]=x,y,1,2,0,x+y;
+ defined(mm);
+ ==> 0
+ defined(r) and defined(m);
+ ==> 1
+ defined(m)==voice; // m is defined in the current level
+ ==> 1
+ defined(x);
+ ==> -1
+ defined(z);
+ ==> 0
+ defined(t);
+ ==> -1
+ defined(42);
+ ==> -1
+
+* Menu:
+
+See
+* rvar::
+* voice::
+
+See *note rvar::; *note voice::.
+
+
+File: sing.htm, Node: deg, Next: degree, Prev: defined, Up: Functions
+
+5.1.14 deg
+----------
+
+`*Syntax:*'
+ `deg (' poly_expression `)'
+ `deg (' vector_expression `)'
+ `deg (' poly_expression `,' intvec_expression `)'
+ `deg (' vector_expression `,' intvec_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the maximal (weighted) degree of the terms of a polynomial
+ or a vector;
+ deg(0) is -1.
+ The optional second argument gives the weight vector, the default
+ weights of the base ring will be used otherwise.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),lp;
+ deg(0);
+ ==> -1
+ deg(x3+y4+xyz3);
+ ==> 5
+ ring rr=7,(x,y),wp(2,3);
+ poly f=x2+y3;
+ deg(f);
+ ==> 9
+ ring R=7,(x,y),ws(2,3);
+ poly f=x2+y3;
+ deg(f);
+ ==> 9
+ vector v=[x2,y];
+ deg(v);
+ ==> 4
+
+* Menu:
+
+See
+* jet::
+* ord::
+* poly::
+* vector::
+
+See *note jet::; *note ord::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: degree, Next: delete, Prev: deg, Up: Functions
+
+5.1.15 degree
+-------------
+
+`*Syntax:*'
+ `degree (' ideal_expression `)'
+ `degree (' module_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ computes the (weighted) degree of the projective variety,
+ respectively sheaf over the projective variety, defined by the
+ ideal, respectively module, generated by the leading monomials of
+ the input. This is equal to the (weighted) degree of the
+ projective variety, respectively sheaf over the projective variety,
+ defined by the ideal, respectively module, if the input is a
+ standard basis with respect to a (weighted) degree ordering.
+
+`*Example:*'
+
+ ring r3=32003,(x,y,z,h),dp;
+ int a,b,c,t=11,10,3,1;
+ poly f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
+ +x^(c-2)*y^c*(y2+t*x)^2;
+ ideal i=jacob(f);
+ i=homog(i,h);
+ ideal i0=std(i);
+ degree(i0);
+ ==> 720
+
+* Menu:
+
+See
+* dim::
+* ideal::
+* mult::
+* std::
+* vdim::
+
+See *note dim::; *note ideal::; *note mult::; *note std::; *note vdim::.
+
+
+File: sing.htm, Node: delete, Next: det, Prev: degree, Up: Functions
+
+5.1.16 delete
+-------------
+
+`*Syntax:*'
+ `delete (' list_expression`,' int_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ deletes the element with the given index from a list (the input is
+ not changed).
+
+`*Example:*'
+
+ list l="a","b","c";
+ list l1=delete(l,2);l1;
+ ==> [1]:
+ ==> a
+ ==> [2]:
+ ==> c
+ l;
+ ==> [1]:
+ ==> a
+ ==> [2]:
+ ==> b
+ ==> [3]:
+ ==> c
+
+* Menu:
+
+See
+* insert::
+* list::
+
+See *note insert::; *note list::.
+
+
+File: sing.htm, Node: det, Next: diff, Prev: delete, Up: Functions
+
+5.1.17 det
+----------
+
+`*Syntax:*'
+ `det (' intmat_expression `)'
+ `det (' matrix_expression `)'
+ `det (' module_expression `)'
+
+`*Type:*'
+ int, resp. poly
+
+`*Purpose:*'
+ returns the determinant of a square matrix. A module is considered
+ as a matrix. The applied algorithms depend on type of input. If
+ the input is a module or matrix with symbolic entries the Bareiss
+ algorithm is used. In the other cases the chinese remainder
+ algorithm is used. For large sparse problems the input as a module
+ has advantages.
+
+`*Example:*'
+
+ ring r=7,(x,y),wp(2,3);
+ matrix m[3][3]=1,2,3,4,5,6,7,8,x;
+ det(m);
+ ==> -3x-1
+
+* Menu:
+
+See
+* intmat::
+* matrix::
+* minor::
+
+See *note intmat::; *note matrix::; *note minor::.
+
+
+File: sing.htm, Node: diff, Next: dim, Prev: det, Up: Functions
+
+5.1.18 diff
+-----------
+
+`*Syntax:*'
+ `diff (' poly_expression`,' ring_variable `)'
+ `diff (' vector_expression`,' ring_variable `)'
+ `diff (' ideal_expression`,' ring_variable `)'
+ `diff (' module_expression`,' ring_variable `)'
+ `diff (' matrix_expression`,' ring_variable `)'
+
+`*Type:*'
+ the same as the type of the first argument
+
+`*Syntax:*'
+ `diff (' ideal_expression`,' ideal_expression `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ computes the partial derivative of a polynomial object by a ring
+ variable (first forms)
+ respectively differentiates each polynomial (1..n) of the second
+ ideal by the differential operator corresponding to each polynomial
+ (1..m) in the first ideal, producing an m x n matrix.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ poly f=2x3y+3z5;
+ diff(f,x);
+ ==> 6x2y
+ vector v=[f,y2+z];
+ diff(v,z);
+ ==> 15z4*gen(1)+gen(2)
+ ideal j=x2-yz,xyz;
+ ideal i=x2,x2+yz,xyz;
+ // corresponds to differential operators
+ // d2/dx2, d2/dx2+d2/dydz, d3/dxdydz:
+ print(diff(i,j));
+ ==> 2,0,
+ ==> 1,x,
+ ==> 0,1
+
+* Menu:
+
+See
+* contract::
+* ideal::
+* jacob::
+* matrix::
+* module::
+* poly::
+* var::
+* vector::
+
+See *note contract::; *note ideal::; *note jacob::; *note matrix::;
+*note module::; *note poly::; *note var::; *note vector::.
+
+
+File: sing.htm, Node: dim, Next: division, Prev: diff, Up: Functions
+
+5.1.19 dim
+----------
+
+`*Syntax:*'
+ `dim (' ideal_expression `)'
+ `dim (' module_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ computes the dimension of the ideal, resp. module, generated by the
+ leading monomials of the given generators of the ideal, resp.
+ module. This is also the dimension of the ideal if it is
+ represented by a standard basis.
+
+`*Note:*'
+ The dimension of an ideal I means the Krull dimension of the
+ basering modulo I.
+ The dimension of a module is the dimension of its annihilator
+ ideal.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ ideal I=x2-y,x3;
+ dim(std(I));
+ ==> 1
+
+* Menu:
+
+See
+* degree::
+* ideal::
+* mult::
+* std::
+* vdim::
+
+See *note degree::; *note ideal::; *note mult::; *note std::; *note
+vdim::.
+
+
+File: sing.htm, Node: division, Next: dump, Prev: dim, Up: Functions
+
+5.1.20 division
+---------------
+
+`*Syntax:*'
+ `division (' ideal_expression`,' ideal_expression `)'
+ `division (' module_expression`,' module_expression `)'
+ `division (' ideal_expression`,' ideal_expression`,' int_expression
+ `)'
+ `division (' module_expression`,' module_expression`,'
+ int_expression `)'
+ `division (' ideal_expression`,' ideal_expression`,'
+ int_expression`,' intvec_expression `)'
+ `division (' module_expression`,' module_expression`,'
+ int_expression`,' intvec_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ `division' computes a division with remainder. For two ideals
+ resp. modules `M' (first argument) and `N' (second argument), it
+ returns a list `T,R,U' where `T' is a matrix, `R' is an ideal resp.
+ a module, and `U' is a diagonal matrix of units such that
+ `matrix(M)*U=matrix(N)*T+matrix(R)' is a standard representation
+ for the normal form `R' of `M' with respect to a standard basis of
+ `N'. `division' uses different algorithms depending on whether `N'
+ is represented by a standard basis. For a polynomial basering, the
+ matrix `U' is the identity matrix. A matrix `T' as above is also
+ computed by `lift'.
+ For additional arguments `n' (third argument) and `w' (fourth
+ argument), `division' returns a list `T,R' as above such that
+ `matrix(M)=matrix(N)*T+matrix(R)' is a standard representation for
+ the normal form `R' of `M' with respect to `N' up to weighted
+ degree `n' with respect to the weight vector `w'. The weighted
+ degree of `T' and `R' respect to `w' is at most `n'. If the weight
+ vector `w' is not given, `division' uses the standard weight vector
+ `w=1,...,1'.
+
+`*Example:*'
+
+ ring R=0,(x,y),ds;
+ poly f=x5+x2y2+y5;
+ division(f,jacob(f));
+ ==> [1]:
+ ==> _[1,1]=1/5x
+ ==> _[2,1]=3/10y
+ ==> [2]:
+ ==> _[1]=-1/2y5
+ ==> [3]:
+ ==> _[1,1]=1
+ division(f^2,jacob(f));
+ ==> [1]:
+ ==> _[1,1]=1/20x6-9/80xy5-5/16x7y+5/8x2y6
+ ==> _[2,1]=1/8x2y3+1/5x5y+1/20y6-3/4x3y4-5/4x6y2-5/16xy7
+ ==> [2]:
+ ==> _[1]=0
+ ==> [3]:
+ ==> _[1,1]=1/4-25/16xy
+ division(ideal(f^2),jacob(f),10);
+ ==> // ** _ is no standardbasis
+ ==> [1]:
+ ==> _[1,1]=-75/8y9
+ ==> _[2,1]=1/2x2y3+x5y-1/4y6-3/2x3y4+15/4xy7+375/16x2y8
+ ==> [2]:
+ ==> _[1]=x10+9/4y10
+
+* Menu:
+
+See
+* ideal::
+* lift::
+* module::
+
+See *note ideal::; *note lift::; *note module::.
+
+
+File: sing.htm, Node: dump, Next: eliminate, Prev: division, Up: Functions
+
+5.1.21 dump
+-----------
+
+`*Syntax:*'
+ `dump (' link_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ dumps (i.e., writes in one "message" or "block") the state of the
+ SINGULAR session (i.e., all defined variables and their values) to
+ the specified link (which must be either an ASCII or MP link) such
+ that a `getdump' can retrieve it later on.
+
+`*Example:*'
+
+ ring r;
+ // write the whole session to the file dump.ascii
+ // in ASCII format
+ dump(":w dump.ascii");
+ kill r; // kill the basering
+ // reread the session from the file
+ // redefining everything which was not explicitly killed before
+ getdump("dump.ascii");
+ ==> // ** redefining stdfglm **
+ ==> // ** redefining stdhilb **
+ ==> // ** redefining groebner **
+ ==> // ** redefining res **
+ ==> // ** redefining quot **
+ ==> // ** redefining quot1 **
+ ==> // ** redefining quotient0 **
+ ==> // ** redefining quotient1 **
+ ==> // ** redefining quotient2 **
+ ==> // ** redefining quotient3 **
+ ==> // ** redefining quotient5 **
+ ==> // ** redefining quotient4 **
+ ==> // ** redefining intersect1 **
+ ==> // ** redefining sprintf **
+ ==> // ** redefining printf **
+ ==> // ** redefining fprintf **
+ r;
+ ==> // characteristic : 32003
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+
+`*Restrictions:*'
+ For ASCII links, integer matrices contained in lists are dumped as
+ integer list elements (and not as integer matrices), and lists of
+ lists are dumped as one flatted list. Furthermore, links themselves
+ are not dumped.
+
+* Menu:
+
+See
+* getdump::
+* link::
+* write::
+
+See *note getdump::; *note link::; *note write::.
+
+
+File: sing.htm, Node: eliminate, Next: eval, Prev: dump, Up: Functions
+
+5.1.22 eliminate
+----------------
+
+`*Syntax:*'
+ `eliminate (' ideal_expression`,' product_of_ring_variables`)'
+ `eliminate (' module_expression`,' product_of_ring_variables`)'
+ `eliminate (' ideal_expression`,' product_of_ring_variables`,'
+ intvec_hilb `)'
+ `eliminate (' module_expression`,' product_of_ring_variables`,'
+ intvec_hilb `)'
+
+`*Type:*'
+ the same as the type of the first argument
+
+`*Purpose:*'
+ eliminates variables occurring as factors of the second argument
+ from an ideal, resp. module, by intersecting it with the subring
+ not containing these variables.
+ `eliminate' does not need a special ordering nor a standard basis
+ as input.
+
+`*Note:*'
+ Since elimination is expensive, for homogeneous input it might be
+ useful first to compute the Hilbert function of the ideal (first
+ argument) with a fast ordering (e.g., `dp'). Then make use of it to
+ speed up the computation: a Hilbert-driven elimination uses the
+ intvec provided as the third argument.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ ideal i=x2,xy,y5;
+ eliminate(i,x);
+ ==> _[1]=y5
+ ring R=0,(x,y,t,s,z),dp;
+ ideal i=x-t,y-t2,z-t3,s-x+y3;
+ eliminate(i,ts);
+ ==> _[1]=y2-xz
+ ==> _[2]=xy-z
+ ==> _[3]=x2-y
+ intvec v=hilb(std(i),1);
+ eliminate(i,ts,v);
+ ==> _[1]=y2-xz
+ ==> _[2]=xy-z
+ ==> _[3]=x2-y
+
+* Menu:
+
+See
+* hilb::
+* ideal::
+* module::
+* std::
+
+See *note hilb::; *note ideal::; *note module::; *note std::.
+
+
+File: sing.htm, Node: eval, Next: ERROR, Prev: eliminate, Up: Functions
+
+5.1.23 eval
+-----------
+
+`*Syntax:*'
+ `eval (' expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ evaluates (quoted) expressions. Within a quoted expression, the
+ quote can be "undone" by an `eval' (i.e., each eval "undoes" the
+ effect of exactly one quote). Used only when receiving a quoted
+ expression from an MPfile link, with `quote' and `write' to prevent
+ local evaluations when writing to an MPtcp link.
+
+`*Example:*'
+
+ link l="MPfile:w example.mp";
+ ring r=0,(x,y,z),ds;
+ ideal i=maxideal(3);
+ ideal j=x7,x2,z;
+ // compute i+j before writing, but not std
+ // this writes 'std(ideal(x3,...,z))'
+ write (l, quote(std(eval(i+j))));
+ option(prot);
+ close(l);
+ // now read it in again and evaluate
+ // read(l) forces to compute 'std(ideal(x3,...,z))'
+ read(l);
+ close(l);
+
+* Menu:
+
+See
+* MPfile links::
+* quote::
+* write::
+
+See *note MPfile links::; *note quote::; *note write::.
+
+
+File: sing.htm, Node: ERROR, Next: example, Prev: eval, Up: Functions
+
+5.1.24 ERROR
+------------
+
+`*Syntax:*'
+ `ERROR (' string_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ Immediately interrupts the current computation, returns to the
+ top-level, and displays the argument `string_expression' as error
+ message.
+
+`*Note:*'
+ This should be used as an emergency, resp. failure, exit within
+ procedures.
+
+`*Example:*'
+
+ int i=1;
+ proc myError() {ERROR("Need to leave now");i=2;}
+ myError();
+ ==> ? Need to leave now
+ ==> ? error occurred in line 2: `ERROR("Need to leave now");i=2;`
+ ==> ? leaving ::myError
+ ==> skipping text from `;` error at token `)`
+ i;
+ ==> 1
+
+
+File: sing.htm, Node: example, Next: execute, Prev: ERROR, Up: Functions
+
+5.1.25 example
+--------------
+
+`*Syntax:*'
+ `example' topic `;'
+
+`*Purpose:*'
+ computes an example for `topic'. Examples are available for all
+ SINGULAR kernel and library functions. Where available (e.g.,
+ within Emacs), use `<TAB>' completion for a list of all available
+ example `topic's.
+
+`*Example:*'
+
+ example prime;
+ example intvec_declarations;
+
+* Menu:
+
+See also:
+* help::
+
+*See also:* *note help::.
+
+
+File: sing.htm, Node: execute, Next: exit, Prev: example, Up: Functions
+
+5.1.26 execute
+--------------
+
+`*Syntax:*'
+ `execute (' string_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ executes a string containing a sequence of SINGULAR commands.
+
+`*Note:*'
+ The command `return' cannot appear in the string.
+ `execute' should be avoided in procedures whenever possible, since
+ it may give rise to name conflicts. Moreover, such procedures
+ cannot be precompiled (a feature which SINGULAR will provide in the
+ future).
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ ideal i=x+y,z3+22y;
+ write(":w save_i",i);
+ ring r0=0,(x,y,z),Dp;
+ string s="ideal k="+read("save_i")+";";
+ s;
+ ==> ideal k=x+y,z3+22y
+ ==> ;
+ execute(s); // define the ideal k
+ k;
+ ==> k[1]=x+y
+ ==> k[2]=z3+22y
+
+
+File: sing.htm, Node: exit, Next: extgcd, Prev: execute, Up: Functions
+
+5.1.27 exit
+-----------
+
+`*Syntax:*'
+ `exit;'
+
+`*Purpose:*'
+ exits (quits) SINGULAR, works also from inside a procedure or from
+ an interrupt.
+
+
+File: sing.htm, Node: extgcd, Next: facstd, Prev: exit, Up: Functions
+
+5.1.28 extgcd
+-------------
+
+`*Syntax:*'
+ `extgcd (' int_expression`,' int_expression `)'
+ `extgcd (' poly_expression`,' poly_expression `)'
+
+`*Type:*'
+ list of 3 objects of the same type as the type of the arguments
+
+`*Purpose:*'
+ computes extended gcd: the first element is the greatest common
+ divisor of the two arguments, the second and third are factors such
+ that if `list L=extgcd(a,b);' then L[1]=a*L[2]+b*L[3].
+
+`*Note:*'
+ Polynomials must be univariate to apply `extgcd'.
+
+`*Example:*'
+
+ extgcd(24,10);
+ ==> [1]:
+ ==> 2
+ ==> [2]:
+ ==> -2
+ ==> [3]:
+ ==> 5
+ ring r=0,(x,y),lp;
+ extgcd(x4-x6,(x2+x5)*(x2+x3));
+ ==> [1]:
+ ==> 2x5+2x4
+ ==> [2]:
+ ==> x2+x+1
+ ==> [3]:
+ ==> 1
+
+* Menu:
+
+See
+* gcd::
+* int::
+* poly::
+
+See *note gcd::; *note int::; *note poly::.
+
+
+File: sing.htm, Node: facstd, Next: factorize, Prev: extgcd, Up: Functions
+
+5.1.29 facstd
+-------------
+
+`*Syntax:*'
+ `facstd (' ideal_expression `)'
+ `facstd (' ideal_expression`,' ideal_expression `)'
+
+`*Type:*'
+ list of ideals
+
+`*Purpose:*'
+ returns a list of ideals computed by the factorizing Groebner basis
+ algorithm.
+ The intersection of these ideals has the same zero-set as the
+ input, i.e., the radical of the intersection coincides with the
+ radical of the input ideal. In many (but not all!) cases this is
+ already a decomposition of the radical of the ideal. (Note however,
+ that, in general, no inclusion between the input and output ideals
+ holds.)
+ The second, optional argument gives a list of polynomials which
+ define non-zero constraints. Hence, the intersection of the output
+ ideals has a zero-set which is the (closure of the) complement of
+ the zero-set of the second argument in the zero-set of the first
+ argument.
+
+`*Note:*'
+ Not implemented for baserings over real ground fields, galois
+ fields and over algebraic extensions over the rational numbers
+ (that is, only implemented for ground fields for which *note
+ factorize:: is implemented).
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,dp);
+ ideal I=xyz,x2z;
+ facstd(I);
+ ==> [1]:
+ ==> _[1]=z
+ ==> [2]:
+ ==> _[1]=x
+ facstd(I,x);
+ ==> [1]:
+ ==> _[1]=z
+
+* Menu:
+
+See
+* ideal::
+* ring::
+* std::
+
+See *note ideal::; *note ring::; *note std::.
+
+
+File: sing.htm, Node: factorize, Next: fetch, Prev: facstd, Up: Functions
+
+5.1.30 factorize
+----------------
+
+`*Syntax:*'
+ `factorize (' poly_expression `)'
+ `factorize (' poly_expression`, 0 )'
+ `factorize (' poly_expression`, 2 )'
+
+`*Type:*'
+ list of ideal and intvec
+
+`*Syntax:*'
+ `factorize (' poly_expression`, 1 )'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ computes the irreducible factors (as an ideal) of the polynomial
+ together with or without the multiplicities (as an intvec)
+ depending on the second argument:
+
+ 0: returns factors and multiplicities, first factor is a constant.
+ May also be written with only one argument.
+ 1: returns non-constant factors (no multiplicities).
+ 2: returns non-constant factors and multiplicities.
+
+`*Note:*'
+ Not implemented for the coefficient fields real and finite fields
+ of type `(p^n,a)'.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ factorize(9*(x-1)^2*(y+z));
+ ==> [1]:
+ ==> _[1]=9
+ ==> _[2]=y+z
+ ==> _[3]=x-1
+ ==> [2]:
+ ==> 1,1,2
+ factorize(9*(x-1)^2*(y+z),1);
+ ==> _[1]=y+z
+ ==> _[2]=x-1
+ factorize(9*(x-1)^2*(y+z),2);
+ ==> [1]:
+ ==> _[1]=y+z
+ ==> _[2]=x-1
+ ==> [2]:
+ ==> 1,2
+
+* Menu:
+
+See
+* poly::
+
+See *note poly::.
+
+
+File: sing.htm, Node: fetch, Next: fglm, Prev: factorize, Up: Functions
+
+5.1.31 fetch
+------------
+
+`*Syntax:*'
+ `fetch (' ring_name`,' name `)'
+
+`*Type:*'
+ number, poly, vector, ideal, module, matrix or list (the same type
+ as the second argument)
+
+`*Purpose:*'
+ maps objects between rings. `fetch' is the identity map between
+ rings and qrings, the i-th variable of the source ring is mapped to
+ the i-th variable of the basering. The coefficient fields must be
+ compatible. (See *note map:: for a description of possible mapping
+ between different ground fields).
+ `fetch' offers a convenient way to change variable names or
+ orderings, or to map objects from a ring to a quotient ring of that
+ ring or vice versa.
+
+`*Note:*'
+ Compared with `imap', `fetch' uses the position of the ring
+ variables, not their names.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal i=maxideal(2);
+ ideal j=std(i);
+ poly f=x+y2+z3;
+ vector v=[f,1];
+ qring q=j;
+ poly f=fetch(r,f);
+ f;
+ ==> z3+y2+x
+ vector v=fetch(r,v);
+ v;
+ ==> z3*gen(1)+y2*gen(1)+x*gen(1)+gen(2)
+ ideal i=fetch(r,i);
+ i;
+ ==> i[1]=z2
+ ==> i[2]=yz
+ ==> i[3]=y2
+ ==> i[4]=xz
+ ==> i[5]=xy
+ ==> i[6]=x2
+ ring rr=0,(a,b,c),lp;
+ poly f=fetch(q,f);
+ f;
+ ==> a+b2+c3
+ vector v=fetch(r,v);
+ v;
+ ==> a*gen(1)+b2*gen(1)+c3*gen(1)+gen(2)
+ ideal k=fetch(q,i);
+ k;
+ ==> k[1]=c2
+ ==> k[2]=bc
+ ==> k[3]=b2
+ ==> k[4]=ac
+ ==> k[5]=ab
+ ==> k[6]=a2
+
+* Menu:
+
+See
+* imap::
+* map::
+* qring::
+* ring::
+
+See *note imap::; *note map::; *note qring::; *note ring::.
+
+
+File: sing.htm, Node: fglm, Next: fglmquot, Prev: fetch, Up: Functions
+
+5.1.32 fglm
+-----------
+
+`*Syntax:*'
+ `fglm (' ring_name`,' ideal_name `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ computes for the given ideal in the given ring a reduced Groebner
+ basis in the current ring, by applying the so-called FGLM (Faugere,
+ Gianni, Lazard, Mora) algorithm.
+ The main application is to compute a lexicographical Groebner basis
+ from a reduced Groebner basis with respect to a degree ordering.
+ This can be much faster than computing a lexicographical Groebner
+ basis directly.
+
+`*Note:*'
+ The ideal must be zero-dimensional and given as a reduced Groebner
+ basis in the given ring.
+ The only permissible differences between the given ring and the
+ current ring are the monomial ordering and a permutation of the
+ variables, resp. parameters.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal i=y3+x2, x2y+x2, x3-x2, z4-x2-y;
+ option(redSB); // force the computation of a reduced SB
+ i=std(i);
+ vdim(i);
+ ==> 28
+ ring s=0,(z,x,y),lp;
+ ideal j=fglm(r,i);
+ j;
+ ==> j[1]=y4+y3
+ ==> j[2]=xy3-y3
+ ==> j[3]=x2+y3
+ ==> j[4]=z4+y3-y
+
+* Menu:
+
+See
+* fglmquot::
+* option::
+* qring::
+* ring::
+* std::
+* stdfglm::
+* vdim::
+
+See *note fglmquot::; *note option::; *note qring::; *note ring::; *note
+std::; *note stdfglm::; *note vdim::.
+
+
+File: sing.htm, Node: fglmquot, Next: filecmd, Prev: fglm, Up: Functions
+
+5.1.33 fglmquot
+---------------
+
+`*Syntax:*'
+ `fglmquot (' ideal_expression`,' poly_expression `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ computes a reduced Groebner basis of the ideal quotient `I:p' of a
+ zero-dimensional ideal `I' and a polynomial `p' using
+ FGLM-techniques.
+
+`*Note:*'
+ The ideal must be zero-dimensional and given as a reduced Groebner
+ basis in the given ring. The poly must be reduced with respect to
+ the ideal.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),lp;
+ ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
+ option(redSB); // force the computation of a reduced SB
+ i=std(i);
+ poly p=reduce(x+yz2+z10,i);
+ ideal j=fglmquot(i,p);
+ j;
+ ==> j[1]=z12
+ ==> j[2]=yz4-z8
+ ==> j[3]=y2+y-z8-z4
+ ==> j[4]=x+y-z10-z6-z4
+
+* Menu:
+
+See
+* fglm::
+* option::
+* quotient::
+* ring::
+* std::
+* vdim::
+
+See *note fglm::; *note option::; *note quotient::; *note ring::; *note
+std::; *note vdim::.
+
+
+File: sing.htm, Node: filecmd, Next: find, Prev: fglmquot, Up: Functions
+
+5.1.34 files, input from
+------------------------
+
+`*Syntax:*'
+ `< "'filename`"'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ input comes from the file filename. Shorthand for
+ `execute(read(filename))'.
+
+`*Example:*'
+
+ < "example"; //read in the file example and execute it
+
+* Menu:
+
+See
+* execute::
+* read::
+
+See *note execute::; *note read::.
+
+
+File: sing.htm, Node: find, Next: finduni, Prev: filecmd, Up: Functions
+
+5.1.35 find
+-----------
+
+`*Syntax:*'
+ `find (' string_expression`,' substring_expression `)'
+ `find (' string_expression`,' substring_expression`,'
+ int_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the first position of the substring in the string or 0 (if
+ not found),
+ starts the search at the position given in the 3rd argument.
+
+`*Example:*'
+
+ find("Aac","a");
+ ==> 2
+ find("abab","a"+"b");
+ ==> 1
+ find("abab","a"+"b",2);
+ ==> 3
+ find("abab","ab",3);
+ ==> 3
+ find("0123","abcd");
+ ==> 0
+
+* Menu:
+
+See
+* string::
+
+See *note string::.
+
+
+File: sing.htm, Node: finduni, Next: fprintf, Prev: find, Up: Functions
+
+5.1.36 finduni
+--------------
+
+`*Syntax:*'
+ `finduni (' ideal_expression `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ returns an ideal which is contained in the ideal_expression such
+ that the i-th generator is a univariate polynomial in the i-th ring
+ variable.
+ The polynomials have minimal degree w.r.t. this property.
+
+`*Note:*'
+ The ideal must be zero-dimensional and given as a reduced Groebner
+ basis in the current ring.
+
+`*Example:*'
+
+ ring r=0,(x,y,z), dp;
+ ideal i=y3+x2,x2y+x2,z4-x2-y;
+ option(redSB); // force computation of reduced basis
+ i=std(i);
+ ideal k=finduni(i);
+ print(k);
+ ==> x4-x2,
+ ==> y4+y3,
+ ==> z12
+
+* Menu:
+
+See
+* option::
+* ring::
+* std::
+* vdim::
+
+See *note option::; *note ring::; *note std::; *note vdim::.
+
+
+File: sing.htm, Node: fprintf, Next: freemodule, Prev: finduni, Up:
Functions
+
+5.1.37 fprintf
+--------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `fprintf (' link_expression`,' string_expression `[,'
+ any_expressions`] )'
+
+*Return:*
+ none
+
+*Purpose:*
+ `fprintf(l,fmt,...);' performs output formatting. The second
+ argument is a format control string. Additional arguments may be
+ required, depending on the content of the control string. A series
+ of output characters is generated as directed by the control
+ string; these characters are written to the link l. The control
+ string `fmt' is simply text to be copied, except that the string
+ may contain conversion specifications.
+ Do `help print;' for a listing of valid conversion specifications.
+ As an addition to the conversions of `print', the `%n' and `%2'
+ conversion specification does not consume an additional argument,
+ but simply generates a newline character.
+
+*Note:*
+ If one of the additional arguments is a list, then it should be
+ enclosed once more into a `list()' command, since passing a list as
+ an argument flattens the list by one level.
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ module m=[1,y],[0,x+z];
+ intmat M=betti(mres(m,0));
+ list l=r,m,M;
+ link li=""; // link to stdout
+ fprintf(li,"s:%s,l:%l",1,2);
+ ==> s:1,l:int(2)
+ fprintf(li,"s:%s",l);
+ ==> s:(0),(x,y,z),(dp(3),C)
+ fprintf(li,"s:%s",list(l));
+ ==> s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
+ fprintf(li,"2l:%2l",list(l));
+ ==> 2l:list("(0),(x,y,z),(dp(3),C)",
+ ==> module(y*gen(2)+gen(1),
+ ==> x*gen(2)+z*gen(2)),
+ ==> intmat(intvec(1,1 ),1,2))
+ ==>
+ fprintf(li,"%p",list(l));
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ fprintf(li,"%;",list(l));
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ fprintf(li,"%b",M);
+ ==> 0 1
+ ==> ------------------
+ ==> 0: 1 1
+ ==> ------------------
+ ==> total: 1 1
+ ==>
+
+* Menu:
+
+See also:
+* print::
+* printf::
+* sprintf::
+* string::
+
+*See also:* *note print::; *note printf::; *note sprintf::; *note
+string::.
+
+
+File: sing.htm, Node: freemodule, Next: gcd, Prev: fprintf, Up: Functions
+
+5.1.38 freemodule
+-----------------
+
+`*Syntax:*'
+ `freemodule (' int_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ creates the free module of rank n generated by `gen(1)', ...,
+ `gen(n)'.
+
+`*Example:*'
+
+ ring r=32003,(x,y),(c,dp);
+ freemodule(3);
+ ==> _[1]=[1]
+ ==> _[2]=[0,1]
+ ==> _[3]=[0,0,1]
+ matrix m=freemodule(3); // generates the 3x3 unit matrix
+ print(m);
+ ==> 1,0,0,
+ ==> 0,1,0,
+ ==> 0,0,1
+
+* Menu:
+
+See
+* gen::
+* module::
+
+See *note gen::; *note module::.
+
+
+File: sing.htm, Node: gcd, Next: gen, Prev: freemodule, Up: Functions
+
+5.1.39 gcd
+----------
+
+`*Syntax:*'
+ `gcd (' int_expression`,' int_expression `)'
+ `gcd (' number_expression`,' number_expression `)'
+ `gcd (' poly_expression`,' poly_expression `)'
+
+`*Type:*'
+ the same as the type of the arguments
+
+`*Purpose:*'
+ computes the greatest common divisor.
+
+`*Note:*'
+ Not implemented for the coefficient fields real and finite fields
+ of type `(p^n,a)'.
+ The gcd of two numbers is their gcd as integer numbers or
+ polynomials, otherwise it is not defined.
+
+`*Example:*'
+
+ gcd(2,3);
+ ==> 1
+ ring r=0,(x,y,z),lp;
+ gcd(3x2*(x+y),9x*(y2-x2));
+ ==> x2+xy
+ gcd(number(6472674604870),number(878646537247372));
+ ==> 2
+
+* Menu:
+
+See
+* extgcd::
+* int::
+* number::
+* poly::
+
+See *note extgcd::; *note int::; *note number::; *note poly::.
+
+
+File: sing.htm, Node: gen, Next: getdump, Prev: gcd, Up: Functions
+
+5.1.40 gen
+----------
+
+`*Syntax:*'
+ `gen (' int_expression `)'
+
+`*Type:*'
+ vector
+
+`*Purpose:*'
+ returns the i-th free generator of a free module.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,dp);
+ gen(3);
+ ==> [0,0,1]
+ vector v=gen(5);
+ poly f=xyz;
+ v=v+f*gen(4); v;
+ ==> [0,0,0,xyz,1]
+ ring rr=32003,(x,y,z),dp;
+ fetch(r,v);
+ ==> xyz*gen(4)+gen(5)
+
+* Menu:
+
+See
+* freemodule::
+* int::
+* vector::
+
+See *note freemodule::; *note int::; *note vector::.
+
+
+File: sing.htm, Node: getdump, Next: groebner, Prev: gen, Up: Functions
+
+5.1.41 getdump
+--------------
+
+`*Syntax:*'
+ `getdump (' link_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ reads the content of the entire file, resp. link, and restores all
+ variables from it. For ASCII links, `getdump' is equivalent to an
+ `execute(read(' link `))' command. For MP links, `getdump' should
+ only be used on data which were previously `dump''ed.
+
+`*Example:*'
+
+ int i=3;
+ dump(":w example.txt");
+ kill i;
+ option(noredefine);
+ getdump("example.txt");
+ i;
+ ==> 3
+
+`*Restrictions:*'
+ `getdump' is not supported for DBM links, or for a link connecting
+ to `stdin' (standard input).
+
+* Menu:
+
+See
+* dump::
+* link::
+* read::
+
+See *note dump::; *note link::; *note read::.
+
+
+File: sing.htm, Node: groebner, Next: help, Prev: getdump, Up: Functions
+
+5.1.42 groebner
+---------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `groebner (' ideal_expression `)'
+ `groebner (' module_expression `)'
+ `groebner (' ideal_expression`,' int_expression `)'
+ `groebner (' module_expression`,' int_expression `)'
+
+*Type:*
+ type of the first argument
+
+*Purpose:*
+ computes the standard basis of the first argument `I' (ideal or
+ module), by a heuristically chosen method: if the ordering of the
+ current ring is a local ordering, or if it is a non-block ordering
+ and the current ring has no parameters, then `std(I)' is returned.
+ Otherwise, `I' is mapped into a ring with no parameters and
+ ordering dp, where its Hilbert series is computed. This is followed
+ by a Hilbert-series based std computation in the original ring.
+
+*Note:*
+ If a 2nd argument `wait' is given, then the computation proceeds at
+ most `wait' seconds. That is, if no result could be computed in
+ `wait' seconds, then the computation is interrupted, 0 is returned,
+ a warning message is displayed, and the global variable
+ `groebner_error' is defined.
+
+*Example:*
+ ring r=0,(a,b,c,d),lp;
+ option(prot);
+ ideal i=a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; // cyclic 4
+ groebner(i);
+ ==> std in (0),(a,b,c,d,@t),(dp,C)
+ ==> [63:1]1(3)s2(2)s3s4-s5ss6-s7--
+ ==> product criterion:8 chain criterion:5
+ ==> std with hilb in (0),(a,b,c,d,@t),(lp(4),C)
+ ==> [63:1]1(3)s2(2)s3s4-s5ss6shhhh8shh
+ ==> product criterion:9 chain criterion:8
+ ==> hilbert series criterion:6
+ ==> dehomogenization
+ ==> imap to original ring
+ ==> simplification
+ ==> _[1]=c2d6-c2d2-d4+1
+ ==> _[2]=c3d2+c2d3-c-d
+ ==> _[3]=bd4-b+d5-d
+ ==> _[4]=bc-bd5+c2d4+cd-d6-d2
+ ==> _[5]=b2+2bd+d2
+ ==> _[6]=a+b+c+d
+ ring rp=(0,a,b),(c,d), lp;
+ ideal i=imap(r,i);
+ ideal j=groebner(i);
+ ==> std in 0,(c,d,a,b,@t),(dp,C)
+ ==> [63:1]1(3)s2(2)s3s4-s5ss6-s7--
+ ==> product criterion:8 chain criterion:5
+ ==> std with hilb in (0),(c,d,a,b,@t),(lp(2),C, dp(3))
+ ==> [63:3]1(3)s2(2)s3s4-s5ss6shhhh8shh
+ ==> product criterion:9 chain criterion:8
+ ==> hilbert series criterion:6
+ ==> dehomogenization
+ ==> imap to original ring
+ ==> simplification
+ option(noprot);
+ j; simplify(j,1); std(i);
+ ==> j[1]=(a3b2+a2b3-a-b)
+ ==> _[1]=1
+ ==> _[1]=1
+ if (system("with","MP")) {groebner(i,0);}
+ ==> // ** groebner did not finish
+ ==> _[1]=0
+ defined(groebner_error);
+ ==> 1
+
+* Menu:
+
+See also:
+* std::
+* stdfglm::
+* stdhilb::
+
+*See also:* *note std::; *note stdfglm::; *note stdhilb::.
+
+
+File: sing.htm, Node: help, Next: highcorner, Prev: groebner, Up: Functions
+
+5.1.43 help
+-----------
+
+`*Syntax:*'
+ `help;'
+ `help' topic `;'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ displays online help information for `topic' using the currently
+ set help browser. If no `topic' is given, the title page of the
+ manual is displayed.
+
+`*Note:*'
+
+ * `?' may be used instead of `help'.
+
+ * `topic' can be an index entry of the SINGULAR manual or the
+ name of a (loaded) procedure which has a help section.
+
+ * `topic' may contain wildcard characters (i.e., `*'
+ characters).
+
+ * If a (possibly "wildcarded") `topic' cannot be found (or
+ uniquely matched) a warning is displayed and no help
+ information is provided.
+
+ * If `topic' is the name of a (loaded) procedure whose help
+ section has changed w.r.t. the help available in the manual
+ then, instead of displaying the respective help section of the
+ manual in the help browser, the "newer" help section of the
+ procedure is simply printed to the terminal.
+
+ * The browser in which the help information is displayed can be
+ either set with the command-line option `--browser=<browser>'
+ (*note Command line options::), or with the command
+ `system("--browser", "<browser>")'. Use the command
+ `system("browsers");' for a list of all available browsers.
+ *Note The online help system::, for more details about help
+ browsers.
+
+`*Example:*'
+
+ help; // display title page of manual
+ help ring; // display help for 'ring'
+ ?ringe; // equivalent to 'help ringe;'
+ ==> // ** No help for topic 'ringe' (not even for '*ringe*')
+ ==> // ** Try '?;' for general help
+ ==> // ** or '?Index;' for all available help topics
+ ?ring*;
+ ==> // ** No unique help for 'ring*'
+ ==> // ** Try one of
+ ==> ?Rings and orderings; ?Rings and standard bases; ?ring;
+ ==> ?ring declarations; ?ring operations; ?ring related functions;
+ ==> ?ring.lib; ?ring_lib; ?ringtensor; ?ringweights;
+ help Rings and orderings;
+ help standard.lib; // displays help for library 'standard.lib'
+
+* Menu:
+
+See
+* Command line options::
+* Format of a library::
+* Procedure definition::
+* The online help system::
+* system::
+
+See *note Command line options::; *note Format of a library::; *note
+Procedure definition::; *note The online help system::; *note system::.
+
+
+File: sing.htm, Node: highcorner, Next: hilb, Prev: help, Up: Functions
+
+5.1.44 highcorner
+-----------------
+
+`*Syntax:*'
+ `highcorner (' ideal_expression `)'
+ `highcorner (' module_expression `)'
+
+`*Type:*'
+ poly, resp. vector
+
+`*Purpose:*'
+ returns the smallest monomial not contained in the ideal, resp.
+ module, generated by the initial terms of the given generators. If
+ the generators are a standard basis, this is also the smallest
+ monomial not contained in the ideal, resp. module.
+ If the ideal, resp. module, is not zero-dimensional, 0 is returned.
+
+`*Note:*'
+ Let the ideal I be given by a standard basis. Then `highcorner(I)'
+ returns 0 iff `dim(I)>0' or `dim(I)=-1'. Otherwise it returns the
+ smallest monomial m not in I which has the following properties
+ (with x(i) $x_i$
+ the variables of the basering):
+
+ * if x(i)>1 then x(i) $x_i>1$ then $x_i$
+ does not divide m (e.g., m=1 if the ordering is global)
+
+ * given any set of generators f_1,...f_k of I, let f_i' be
+ obtained from f_i by deleting the terms divisible by x(i)*m
+ for all i with x(i)<1. Then f_1',...,f_k' generate I.
$f_1,\dots,f_k$ of I, let $f'_i$ be obtained from
+ $f_i$ by deleting the terms divisible by $x_i\cdot m$ for all i with
$x_i<1$.
+ Then $f'_1,\dots,f'_k$ generate I.
+
+`*Example:*'
+
+ ring r=0,(x,y),ds;
+ ideal i=x3,x2y,y3;
+ highcorner(std(i));
+ ==> xy2
+ highcorner(std(ideal(1)));
+ ==> 0
+
+* Menu:
+
+See
+* dim::
+* std::
+* vdim::
+
+See *note dim::; *note std::; *note vdim::.
+
+
+File: sing.htm, Node: hilb, Next: homog, Prev: highcorner, Up: Functions
+
+5.1.45 hilb
+-----------
+
+`*Syntax:*'
+ `hilb (' ideal_expression `)'
+ `hilb (' module_expression `)'
+ `hilb (' ideal_expression`,' int_expression `)'
+ `hilb (' module_expression`,' int_expression `)'
+ `hilb (' ideal_expression`,' int_expression `,' intvec_expression
+ `)'
+ `hilb (' module_expression`,' int_expression `,' intvec_expression
+ `)'
+
+`*Type:*'
+ none (if called with one argument)
+ intvec (if called with two or three arguments)
+
+`*Purpose:*'
+ computes the (weighted) Hilbert series of the ideal, resp. module,
+ defined by the leading terms of the generators of the given ideal,
+ resp. module.
+ If `hilb' is called with one argument, then the 1st and 2nd Hilbert
+ series together with some additional information are displayed.
+ If `hilb' is called with two arguments, then the n-th Hilbert
+ series is returned as an intvec, where n=1,2 is the second
+argument.
+ If a weight vector w is a given as 3rd argument, then the Hilbert
+ series is computed w.r.t. these weights w (by default all weights
+ are set to 1).
+
+`*Caution:*'
+ The last entry of the returned intvec is not part of the actual
+ Hilbert series, but is used in the Hilbert driven standard basis
+ computation (see *note stdhilb::).
+
+`*Note:*'
+ If the input is homogeneous w.r.t. the weights and a standard
+ basis, the result is the (weighted) Hilbert series of the original
+ ideal, resp. module.
+
+`*Example:*'
+
+ ring R=32003,(x,y,z),dp;
+ ideal i=x2,y2,z2;
+ ideal s=std(i);
+ hilb(s);
+ ==> // 1 t^0
+ ==> // -3 t^2
+ ==> // 3 t^4
+ ==> // -1 t^6
+ ==>
+ ==> // 1 t^0
+ ==> // 3 t^1
+ ==> // 3 t^2
+ ==> // 1 t^3
+ ==> // dimension (affine) = 0
+ ==> // degree = 8
+ hilb(s,1);
+ ==> 1,0,-3,0,3,0,-1,0
+ hilb(s,2);
+ ==> 1,3,3,1,0
+ intvec w=2,2,2;
+ hilb(s,1,w);
+ ==> 1,0,0,0,-3,0,0,0,3,0,0,0,-1,0
+
+* Menu:
+
+See
+* Hilbert function::
+* ideal::
+* intvec::
+* module::
+* std::
+* stdhilb::
+
+See *note Hilbert function::; *note ideal::; *note intvec::; *note
+module::; *note std::; *note stdhilb::.
+
+
+File: sing.htm, Node: homog, Next: hres, Prev: hilb, Up: Functions
+
+5.1.46 homog
+------------
+
+`*Syntax:*'
+ `homog (' ideal_expression `)'
+ `homog (' module_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ tests for homogeneity: returns 1 for homogeneous input, 0
+ otherwise.
+
+`*Syntax:*'
+
+ `homog (' polynomial_expression`,' ring_variable `)'
+ `homog (' vector_expression`,' ring_variable `)'
+ `homog (' ideal_expression`,' ring_variable `)'
+ `homog (' module_expression`,' ring_variable `)'
+
+`*Type:*'
+ same as first argument
+
+`*Purpose:*'
+ homogenizes polynomials, vectors, ideals, or modules by multiplying
+ each monomial with a suitable power of the given ring variable
+ (which must have weight 1).
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),ds;
+ poly s1=x3y2+x5y+3y9;
+ poly s2=x2y2z2+3z8;
+ poly s3=5x4y2+4xy5+2x2y2z3+y7+11x10;
+ ideal i=s1,s2,s3;
+ homog(s2,z);
+ ==> x2y2z4+3z8
+ homog(i,z);
+ ==> _[1]=3y9+x5yz3+x3y2z4
+ ==> _[2]=x2y2z4+3z8
+ ==> _[3]=11x10+y7z3+5x4y2z4+4xy5z4+2x2y2z6
+ homog(i);
+ ==> 0
+ homog(homog(i,z));
+ ==> 1
+
+* Menu:
+
+See
+* ideal::
+* module::
+* poly::
+* vector::
+
+See *note ideal::; *note module::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: hres, Next: imap, Prev: homog, Up: Functions
+
+5.1.47 hres
+-----------
+
+`*Syntax:*'
+ `hres (' ideal_expression`,' int_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a free resolution of an ideal using the Hilbert-driven
+ algorithm.
+
+ More precisely, let R be the basering and I be the given ideal.
+ Then `hres' computes a minimal free resolution of R/I
+
+ A2 A1
+ ... ---> F2 ---> F1 ---> R -> R/I -> 0.
+
+$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
+ \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I
+ \longrightarrow 0.$$
+ If the int_expression k is not zero then the computation stops
+ after k steps and returns a list of modules $M_i={\tt module} (A_i)$,
i=1..k.
+ Mi=module(Ai), i=1...k.
+
+ `list L=hres(I,0);' returns a list L of n modules (where n is the
+ number of variables of the basering) such that ${\tt L[i]}=M_i$
+ L[i]=M_i in the above notation.
+
+`*Note:*'
+ The ideal_expression has to be homogeneous.
+ Accessing single elements of a resolution may require that some
+ partial computations have to be finished and may therefore take
+ some time.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=xz,yz,x3-y3;
+ def L=hres(I,0);
+ print(betti(L),"betti");
+ ==> 0 1 2
+ ==> ------------------------
+ ==> 0: 1 - -
+ ==> 1: - 2 1
+ ==> 2: - 1 1
+ ==> ------------------------
+ ==> total: 1 3 2
+ L[2]; // the first syzygy module of r/I
+ ==> _[1]=-x*gen(1)+y*gen(2)
+ ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
+
+* Menu:
+
+See
+* betti::
+* ideal::
+* int::
+* lres::
+* minres::
+* module::
+* mres::
+* res::
+* sres::
+
+See *note betti::; *note ideal::; *note int::; *note lres::; *note
+minres::; *note module::; *note mres::; *note res::; *note sres::.
+
+
+File: sing.htm, Node: imap, Next: impart, Prev: hres, Up: Functions
+
+5.1.48 imap
+-----------
+
+`*Syntax:*'
+ `imap (' ring_name`,' name `)'
+
+`*Type:*'
+ number, poly, vector, ideal, module, matrix or list (the same type
+ as the second argument)
+
+`*Purpose:*'
+ identity map on common subrings. `imap' is the map between rings
+ and qrings with compatible ground fields which is the identity on
+ variables and parameters of the same name and 0 otherwise. (See
+ *note map:: for a description of possible mapping between different
+ ground fields). Useful for mapping from a homogenized ring to the
+ original ring or for mappings from/to rings with/without
+ parameters. Compared with `fetch', `imap' uses the names of
+ variables and parameters. Unlike `map' and `fetch' `imap' can map
+ parameters to variables.
+
+`*Example:*'
+
+ ring r=0,(x,y,z,a,b,c),dp;
+ ideal i=xy2z3a4b5+1,homog(xy2z3a4b5+1,c); i;
+ ==> i[1]=xy2z3a4b5+1
+ ==> i[2]=xy2z3a4b5+c15
+ ring r1=0,(a,b,x,y,z),lp;
+ ideal j=imap(r,i); j;
+ ==> j[1]=a4b5xy2z3+1
+ ==> j[2]=a4b5xy2z3
+ ring r2=(0,a,b),(x,y,z),ls;
+ ideal j=imap(r,i); j;
+ ==> j[1]=1+(a4b5)*xy2z3
+ ==> j[2]=(a4b5)*xy2z3
+
+* Menu:
+
+See
+* fetch::
+* homog::
+* map::
+* qring::
+* ring::
+
+See *note fetch::; *note homog::; *note map::; *note qring::; *note
+ring::.
+
+
+File: sing.htm, Node: impart, Next: indepSet, Prev: imap, Up: Functions
+
+5.1.49 impart
+-------------
+
+`*Syntax:*'
+ `impart (' number_expression `)'
+
+`*Type:*'
+ number
+
+`*Purpose:*'
+ returns the imaginary part of a number in a complex ground field,
+ returns 0 otherwise.
+
+`*Example:*'
+
+ ring r=(complex,i),x,dp;
+ impart(1+2*i);
+ ==> 2
+
+* Menu:
+
+See
+* repart::
+
+See *note repart::.
+
+
+File: sing.htm, Node: indepSet, Next: insert, Prev: impart, Up: Functions
+
+5.1.50 indepSet
+---------------
+
+`*Syntax:*'
+ `indepSet (' ideal_expression `)'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+ computes a maximal set U of independent variables of the ideal
+ given by a standard basis. If `v' is the result then `v[i]' is 1
+ if and only if the i-th variable of the ring, `x(i)', is an
+ independent variable. Hence, the set U consisting of all variables
+ `x(i)' with `v[i]=1' is a maximal independent set.
+
+`*Note:*'
+ U is a set of independent variables for I if and only if $I \cap
K[U]=(0)$,
+ I intersect K[U]=(0), i.e., eliminating the remaining variables
+ gives (0). U is maximal if dim(I)=#U.
+
+`*Syntax:*'
+ `indepSet (' ideal_expression, int_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ computes a list of all maximal independent sets of the leading
+ ideal (if the flag is 0), resp. of all those sets of independent
+ variables of the leading ideal which cannot be enlarged.
+
+`*Example:*'
+
+ ring r=32003,(x,y,u,v,w),dp;
+ ideal I=xyw,yvw,uyw,xv;
+ attrib(I,"isSB",1);
+ indepSet(I);
+ ==> 1,1,1,0,0
+ eliminate(I,vw);
+ ==> _[1]=0
+ indepSet(I,0);
+ ==> [1]:
+ ==> 1,1,1,0,0
+ ==> [2]:
+ ==> 0,1,1,1,0
+ ==> [3]:
+ ==> 1,0,1,0,1
+ ==> [4]:
+ ==> 0,0,1,1,1
+ indepSet(I,1);
+ ==> [1]:
+ ==> 1,1,1,0,0
+ ==> [2]:
+ ==> 0,1,1,1,0
+ ==> [3]:
+ ==> 1,0,1,0,1
+ ==> [4]:
+ ==> 0,0,1,1,1
+ ==> [5]:
+ ==> 0,1,0,0,1
+ eliminate(I,xuv);
+ ==> _[1]=0
+
+* Menu:
+
+See
+* ideal::
+* std::
+
+See *note ideal::; *note std::.
+
+
+File: sing.htm, Node: insert, Next: interred, Prev: indepSet, Up: Functions
+
+5.1.51 insert
+-------------
+
+`*Syntax:*'
+ `insert (' list_expression`,' expression `)'
+ `insert (' list_expression`,' expression`,' int_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ inserts a new element (expression) into a list at the beginning, or
+ (if called with 3 arguments) after the given position (the input is
+ not changed).
+
+`*Example:*'
+
+ list L=1,2;
+ insert(L,4,2);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 4
+ insert(L,4);
+ ==> [1]:
+ ==> 4
+ ==> [2]:
+ ==> 1
+ ==> [3]:
+ ==> 2
+
+* Menu:
+
+See
+* delete::
+* list::
+
+See *note delete::; *note list::.
+
+
+File: sing.htm, Node: interred, Next: intersect, Prev: insert, Up:
Functions
+
+5.1.52 interred
+---------------
+
+`*Syntax:*'
+ `interred (' ideal_expression `)'
+ `interred (' module_expression `)'
+
+`*Type:*'
+ the same as the input type
+
+`*Purpose:*'
+ interreduces a set of polynomials/vectors.
+ input: f_1,...,f_n input: $f_1,\dots,f_n$
+
+ output: g_1,...,g_s with s<=n and the properties
+
+
+output: $g_1,\dots,g_s$ with $s \leq n$ and the properties
+
+ * (f_1,...,f_n) = (g_1,...,g_s) $(f_1,\dots,f_n) = (g_1,\dots,g_s)$
+
+ * L(g_i)<>L(g_j) for all i<>j $L(g_i)\neq L(g_j)$ for all $i\neq j$
+
+ * in the case of a global ordering (polynomial ring):
+ L(g_i) $L(g_i)$
+ does not divide m for all monomials m of
+ {g_1,...,g_(i-1),g_(i+1),...,g_s}
$\{g_1,\dots,g_{i-1},g_{i+1},\dots,g_s\}$
+
+ * in the case of a local or mixed ordering (localization of
+ polynomial ring):
+ if L(g_i) | L(g_j) for any i<>j, $L(g_i) | L(g_j)$ for any $i \neq
j$,
+ then ecart(g_i) > ecart(g_j) $ecart(g_i) > ecart(g_j)$
+
+Here, $L(g)$ denotes the leading term of $g$ and
+ $ecart(g):=deg(g)-deg(L(g))$.
+
+
+ Here, L(g) denotes the leading term of g and ecart(g) :=
+ deg(g)-deg(L(g)).
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal i=x2+z,z,2z;
+ interred(i);
+ ==> _[1]=z
+ ==> _[2]=x2
+ ring R=0,(x,y,z),ds;
+ ideal i=zx+y3,z+y3,z+xy;
+ interred(i);
+ ==> _[1]=z+xy
+ ==> _[2]=xy-y3
+ ==> _[3]=x2y-y3
+
+* Menu:
+
+See
+* ideal::
+* module::
+* std::
+
+See *note ideal::; *note module::; *note std::.
+
+
+File: sing.htm, Node: intersect, Next: jacob, Prev: interred, Up: Functions
+
+5.1.53 intersect
+----------------
+
+`*Syntax:*'
+ `intersect (' expression_list of ideal_expression `)'
+ `intersect (' expression_list of module_expression `)'
+
+`*Type:*'
+ ideal, resp. module
+
+`*Purpose:*'
+ computes the intersection of ideals, resp. modules.
+
+`*Note:*'
+ If the option `returnSB' is enabled then the result is a standard
+ basis.
+
+`*Example:*'
+
+ ring R=0,(x,y),dp;
+ ideal i=x;
+ ideal j=y;
+ intersect(i,j);
+ ==> _[1]=xy
+ ring r=181,(x,y,z),(c,ls);
+ ideal id1=maxideal(3);
+ ideal id2=x2+xyz,y2-z3y,z3+y5xz;
+ ideal id3=intersect(id1,id2,ideal(x,y));
+ id3;
+ ==> id3[1]=yz3+xy6z
+ ==> id3[2]=yz4-y2z
+ ==> id3[3]=y2z3-y3
+ ==> id3[4]=xz3+x2y5z
+ ==> id3[5]=xyz2+x2z
+ ==> id3[6]=xyz3-xy2
+ ==> id3[7]=xy2z+x2y
+ ==> id3[8]=x2yz+x3
+
+* Menu:
+
+See
+* ideal::
+* module::
+* option::
+
+See *note ideal::; *note module::; *note option::.
+
+
+File: sing.htm, Node: jacob, Next: jet, Prev: intersect, Up: Functions
+
+5.1.54 jacob
+------------
+
+`*Syntax:*'
+ `jacob (' poly_expression `)'
+ `jacob (' ideal_expression `)'
+
+`*Type:*'
+ ideal, if the input is a polynomial
+ matrix, if the input is an ideal
+
+`*Purpose:*'
+ computes the Jacobi ideal, resp. Jacobi matrix, generated by all
+ partial derivatives of the input.
+
+`*Example:*'
+
+ ring R;
+ poly f=x2+y3+z5;
+ jacob(f);
+ ==> _[1]=2x
+ ==> _[2]=3y2
+ ==> _[3]=5z4
+ ideal i=jacob(f);
+ print(jacob(i));
+ ==> 2,0, 0,
+ ==> 0,6y,0,
+ ==> 0,0, 20z3
+
+* Menu:
+
+See
+* diff::
+* ideal::
+* module::
+* nvars::
+
+See *note diff::; *note ideal::; *note module::; *note nvars::.
+
+
+File: sing.htm, Node: jet, Next: kbase, Prev: jacob, Up: Functions
+
+5.1.55 jet
+----------
+
+`*Syntax:*'
+ `jet (' poly_expression`,' int_expression `)'
+ `jet (' vector_expression`,' int_expression `)'
+ `jet (' ideal_expression`,' int_expression `)'
+ `jet (' module_expression`,' int_expression `)'
+ `jet (' poly_expression`,' int_expression`,' intvec_expression `)'
+ `jet (' vector_expression`,' int_expression`,' intvec_expression
+ `)'
+ `jet (' ideal_expression`,' int_expression`,' intvec_expression `)'
+
+ `jet (' module_expression`,' int_expression`,' intvec_expression
+ `)'
+ `jet (' poly_expression`,' int_expression`,' poly_expression `)'
+ `jet (' vector_expression`,' int_expression`,' poly_expression `)'
+ `jet (' ideal_expression`,' int_expression`,' matrix_expression `)'
+
+ `jet (' module_expression`,' int_expression`,' matrix_expression
+ `)'
+
+`*Type:*'
+ the same as the type of the first argument
+
+`*Purpose:*'
+ deletes from the first argument all terms of degree bigger than the
+ second argument.
+ If a third argument `w' of type intvec is given, the degree is
+ replaced by the weighted degree defined by `w'.
+ If a third argument `u' of type poly or matrix is given, the first
+ argument `p' is replaced by `p/u'.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,dp);
+ jet(1+x+x2+x3+x4,3);
+ ==> x3+x2+x+1
+ poly f=1+x+x2+xz+y2+x3+y3+x2y2+z4;
+ jet(f,3);
+ ==> x3+y3+x2+y2+xz+x+1
+ intvec iv=2,1,1;
+ jet(f,3,iv);
+ ==> y3+y2+xz+x+1
+ // the part of f with (total) degree >3:
+ f-jet(f,3);
+ ==> x2y2+z4
+ // the homogeneous part of f of degree 2:
+ jet(f,2)-jet(f,1);
+ ==> x2+y2+xz
+ // the part of maximal degree:
+ jet(f,deg(f))-jet(f,deg(f)-1);
+ ==> x2y2+z4
+ // the absolute term of f:
+ jet(f,0);
+ ==> 1
+ // now for other types:
+ ideal i=f,x,f*f;
+ jet(i,2);
+ ==> _[1]=x2+y2+xz+x+1
+ ==> _[2]=x
+ ==> _[3]=3x2+2y2+2xz+2x+1
+ vector v=[f,1,x];
+ jet(v,1);
+ ==> [x+1,1,x]
+ jet(v,0);
+ ==> [1,1]
+ v=[f,1,0];
+ module m=v,v,[1,x2,z3,0,1];
+ jet(m,2);
+ ==> _[1]=[x2+y2+xz+x+1,1]
+ ==> _[2]=[x2+y2+xz+x+1,1]
+ ==> _[3]=[1,x2,0,0,1]
+
+* Menu:
+
+See
+* deg::
+* ideal::
+* int::
+* intvec::
+* module::
+* poly::
+* vector::
+
+See *note deg::; *note ideal::; *note int::; *note intvec::; *note
+module::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: kbase, Next: kill, Prev: jet, Up: Functions
+
+5.1.56 kbase
+------------
+
+`*Syntax:*'
+ `kbase (' ideal_expression `)'
+ `kbase (' module_expression `)'
+ `kbase (' ideal_expression`,' int_expression`)'
+ `kbase (' module_expression`,' int_expression`)'
+
+`*Type:*'
+ the same as the input type of the first argument
+
+`*Purpose:*'
+ with one argument: computes a vector space basis (consisting of
+ monomials) of the quotient ring by the ideal, resp. of a free
+ module by the module, in case it is finite dimensional and if the
+ input is a standard basis with respect to the ring ordering. If
+ the input is not a standard basis, the leading terms of the input
+ are used and the result may have no meaning.
+ With two arguments: computes the part of a vector space basis of
+ the respective quotient with degree of the monomials equal to the
+ second argument. Here, the quotient does not need to be finite
+ dimensional.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),ds;
+ ideal i=x2,y2,z;
+ kbase(std(i));
+ ==> _[1]=xy
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=1
+ i=x2,y3,xyz; // quotient not finite dimensional
+ kbase(std(i),2);
+ ==> _[1]=z2
+ ==> _[2]=yz
+ ==> _[3]=xz
+ ==> _[4]=y2
+ ==> _[5]=xy
+
+* Menu:
+
+See
+* ideal::
+* module::
+* vdim::
+
+See *note ideal::; *note module::; *note vdim::.
+
+
+File: sing.htm, Node: kill, Next: killattrib, Prev: kbase, Up: Functions
+
+5.1.57 kill
+-----------
+
+`*Syntax:*'
+ `kill (' name `)'
+ `kill (' list_of_names `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ deletes objects.
+
+`*Example:*'
+
+ int i=3;
+ ring r=0,x,dp;
+ poly p;
+ listvar();
+ ==> // r [0] *ring
+ ==> // p [0] poly
+ ==> // i [0] int 3
+ ==> // LIB [0] string standard.lib
+ kill(i,r);
+ // the variable `i` does not exist any more
+ i;
+ ==> ? `i` is undefined
+ ==> ? error occurred in line 7: ` i;`
+ listvar();
+ ==> // LIB [0] string standard.lib
+
+* Menu:
+
+See
+* defined::
+* general_lib::
+* names::
+
+See *note defined::; *note general_lib::; *note names::.
+
+
+File: sing.htm, Node: killattrib, Next: koszul, Prev: kill, Up: Functions
+
+5.1.58 killattrib
+-----------------
+
+`*Syntax:*'
+ `killattrib (' name`,' string_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ deletes the attribute given as the second argument.
+
+`*Example:*'
+
+ ring r=32003,(x,y),lp;
+ ideal i=maxideal(1);
+ attrib(i,"isSB",1);
+ attrib(i);
+ ==> attr:isSB, type int
+ killattrib(i,"isSB");
+ attrib(i);
+ ==> no attributes
+
+* Menu:
+
+See
+* attrib::
+* option::
+
+See *note attrib::; *note option::.
+
+
+File: sing.htm, Node: koszul, Next: laguerre, Prev: killattrib, Up:
Functions
+
+5.1.59 koszul
+-------------
+
+`*Syntax:*'
+ `koszul (' int_expression`,' int_expression `)'
+ `koszul (' int_expression`,' ideal_expression `)'
+ `koszul (' int_expression`,' int_expression`,' ideal_expression `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ `koszul(d,n)' computes a matrix of the Koszul relations of degree d
+ of the first n ring variables.
+
+ `koszul(d,id)' computes a matrix of the Koszul relations of degree
+ d of the generators of the ideal `id'.
+
+ `koszul(d,n,id)' computes a matrix of the Koszul relations of
+ degree d of the first n generators of the ideal `id'.
+
+`*Note:*'
+ `koszul(1,id),koszul(2,id),...' form a complex, that is, the
+ product of the matrices `koszul(i,id)' and `koszul(i+1,id)' equals
+ zero.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ print(koszul(2,3));
+ ==> -y,-z,0,
+ ==> x, 0, -z,
+ ==> 0, x, y
+ ideal I=xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z;
+ print(koszul(1,I));
+ ==> xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z
+ print(koszul(2,I));
+ ==> -xyz-y2z-yz2,-xy2-y3-y2z,0,
+ ==> xz2+yz2+z3, 0, -xy2-y3-y2z,
+ ==> 0, xz2+yz2+z3, xyz+y2z+yz2
+ print(koszul(2,I)*koszul(3,I));
+ ==> 0,
+ ==> 0,
+ ==> 0
+
+* Menu:
+
+See
+* int::
+* matrix::
+
+See *note int::; *note matrix::.
+
+
+File: sing.htm, Node: laguerre, Next: lead, Prev: koszul, Up: Functions
+
+5.1.60 laguerre
+---------------
+
+`*Syntax:*'
+ `laguerre (' poly_expression`,' int_expression`,' int_expression
+ `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ computes all complex roots of a univariate polynomial using
+ Laguerre's algorithm. The second argument defines the precision of
+ the fractional part if the ground field is the field of rational
+ numbers, otherwise it will be ignored. The third argument (can be
+ 0, 1 or 2) gives the number of extra runs for Laguerre's algorithm
+ (with corrupted roots), leading to better results.
+
+`*Note:*'
+ If the ground field is the field of complex numbers, the elements
+ of the list are of type number, otherwise of type string.
+
+`*Example:*'
+
+ ring rs1=0,(x,y),lp;
+ poly f=15x5+x3+x2-10;
+ laguerre(f,10,2);
+ ==> [1]:
+ ==> (0.2930464644-I*0.9003002396)
+ ==> [2]:
+ ==> (0.2930464644+I*0.9003002396)
+ ==> [3]:
+ ==> (-0.7392783383-I*0.5355190078)
+ ==> [4]:
+ ==> (-0.7392783383+I*0.5355190078)
+ ==> [5]:
+ ==> 0.8924637479
+
+
+File: sing.htm, Node: lead, Next: leadcoef, Prev: laguerre, Up: Functions
+
+5.1.61 lead
+-----------
+
+`*Syntax:*'
+ `lead (' poly_expression `)'
+ `lead (' vector_expression `)'
+ `lead (' ideal_expression `)'
+ `lead (' module_expression `)'
+
+`*Type:*'
+ the same as the input type
+
+`*Purpose:*'
+ returns the leading (or initial) term(s) of a polynomial, a vector,
+ resp. of the generators of an ideal or module with respect to the
+ monomial ordering.
+
+`*Note:*'
+ `IN' may be used instead of `lead'.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,ds);
+ poly f=2x2+3y+4z3;
+ vector v=[2x10,f];
+ ideal i=f,z;
+ module m=v,[0,0,2+x];
+ lead(f);
+ ==> 3y
+ lead(v);
+ ==> [2x10]
+ lead(i);
+ ==> _[1]=3y
+ ==> _[2]=z
+ lead(m);
+ ==> _[1]=[2x10]
+ ==> _[2]=[0,0,2]
+ lead(0);
+ ==> 0
+
+* Menu:
+
+See
+* ideal::
+* leadcoef::
+* leadexp::
+* leadmonom::
+* module::
+* poly::
+* vector::
+
+See *note ideal::; *note leadcoef::; *note leadexp::; *note leadmonom::;
+*note module::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: leadcoef, Next: leadexp, Prev: lead, Up: Functions
+
+5.1.62 leadcoef
+---------------
+
+`*Syntax:*'
+ `leadcoef (' poly_expression `)'
+ `leadcoef (' vector_expression `)'
+
+`*Type:*'
+ number
+
+`*Purpose:*'
+ returns the leading (or initial) coefficient of a polynomial or a
+ vector with respect to the monomial ordering.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,ds);
+ poly f=x2+y+z3;
+ vector v=[2*x^10,f];
+ leadcoef(f);
+ ==> 1
+ leadcoef(v);
+ ==> 2
+ leadcoef(0);
+ ==> 0
+
+* Menu:
+
+See
+* lead::
+* leadexp::
+* leadmonom::
+* number::
+* poly::
+* vector::
+
+See *note lead::; *note leadexp::; *note leadmonom::; *note number::;
+*note poly::; *note vector::.
+
+
+File: sing.htm, Node: leadexp, Next: leadmonom, Prev: leadcoef, Up:
Functions
+
+5.1.63 leadexp
+--------------
+
+`*Syntax:*'
+ `leadexp (' poly_expression `)'
+ `leadexp (' vector_expression `)'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+ returns the exponent vector of the leading monomial of a polynomial
+ or a vector. In the case of a vector the last component is the
+ index in the vector.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,ds);
+ poly f=x2+y+z3;
+ vector v=[2*x^10,f];
+ leadexp(f);
+ ==> 0,1,0
+ leadexp(v);
+ ==> 10,0,0,1
+ leadexp(0);
+ ==> 0,0,0
+
+* Menu:
+
+See
+* intvec::
+* lead::
+* leadcoef::
+* leadmonom::
+* poly::
+* vector::
+
+See *note intvec::; *note lead::; *note leadcoef::; *note leadmonom::;
+*note poly::; *note vector::.
+
+
+File: sing.htm, Node: leadmonom, Next: LIB, Prev: leadexp, Up: Functions
+
+5.1.64 leadmonom
+----------------
+
+`*Syntax:*'
+ `leadmonom (' poly_expression `)'
+ `leadmonom (' vector_expression `)'
+
+`*Type:*'
+ the same as the input type
+
+`*Purpose:*'
+ returns the leading monomial of a polynomial or a vector as a
+ polynomial or vector whose coefficient is one.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(c,ds);
+ poly f=2x2+3y+4z3;
+ vector v=[2x10,f];
+ leadmonom(f);
+ ==> y
+ leadmonom(v);
+ ==> [x10]
+ leadmonom(0);
+ ==> 0
+
+* Menu:
+
+See
+* intvec::
+* lead::
+* leadcoef::
+* leadexp::
+* poly::
+* vector::
+
+See *note intvec::; *note lead::; *note leadcoef::; *note leadexp::;
+*note poly::; *note vector::.
+
+
+File: sing.htm, Node: LIB, Next: lift, Prev: leadmonom, Up: Functions
+
+5.1.65 LIB
+----------
+
+`*Syntax:*'
+ `LIB' string_expression`;'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ reads a library of procedures from a file. If the given filename
+ does not start with `.' or `/' and cannot be located in the current
+ directory, each directory contained in the library `SearchPath' is
+ searched for file of this name. *Note Loading of a library::, for
+ more info on `SearchPath'.
+
+`*Note on standard.lib:*'
+ Unless SINGULAR is started with the `--no-stdlib' option, the
+ library `standard.lib' is automatically loaded at start-up time.
+
+`*Syntax:*'
+ `LIB;'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ shows all loaded libraries written in Singular.
+
+`*Example:*'
+
+ option(loadLib); // show loading of libraries
+ LIB; // standard.lib is loaded
+ ==> standard.lib
+
+ // the names of the procedures of inout.lib
+ LIB "inout.lib"; // are now known to Singular
+ ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
+ LIB;
+ ==> standard.lib,inout.lib
+
+* Menu:
+
+See
+* Command line options::
+* Loading of a library::
+* Procedures and libraries::
+* SINGULAR libraries::
+* proc::
+* standard_lib::
+* string::
+* system::
+
+See *note Command line options::; *note Loading of a library::; *note
+Procedures and libraries::; *note SINGULAR libraries::; *note proc::;
+*note standard_lib::; *note string::; *note system::.
+
+
+File: sing.htm, Node: lift, Next: liftstd, Prev: LIB, Up: Functions
+
+5.1.66 lift
+-----------
+
+`*Syntax:*'
+ `lift (' ideal_expression`,' subideal_expression `)'
+ `lift (' module_expression`,' submodule_expression `)'
+ `lift (' ideal_expression`,' subideal_expression`,' matrix_name `)'
+
+ `lift (' module_expression`,' submodule_expression`,' matrix_name
+ `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ computes the transformation matrix which expresses the generators
+ of a submodule in terms of the generators of a module. Uses
+ different algorithms for modules which are, resp. are not,
+ represented by a standard basis.
+ More precisely, if `m' is the module (or ideal), `sm' the
+ submodule (or ideal), and `T' the transformation matrix returned by
+ lift, then `matrix(sm)*U = matrix(m)*T' and `module(sm*U) =
+ module(matrix(m)*T)' (resp. `ideal(sm*U) = ideal(matrix(m)*T)'),
+ where `U' is a diagonal matrix of units.
+ `U' is always the unity matrix if the basering is a polynomial ring
+ (not power series ring). `U' is stored in the optional third
+ argument.
+
+`*Note:*'
+ Gives a warning if `sm' is not a submodule.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),(dp,C);
+ ideal m=3x2+yz,7y6+2x2y+5xz;
+ poly f=y7+x3+xyz+z2;
+ ideal i=jacob(f);
+ matrix T=lift(i,m);
+ matrix(m)-matrix(i)*T;
+ ==> _[1,1]=0
+ ==> _[1,2]=0
+
+* Menu:
+
+See
+* division::
+* ideal::
+* module::
+
+See *note division::; *note ideal::; *note module::.
+
+
+File: sing.htm, Node: liftstd, Next: listvar, Prev: lift, Up: Functions
+
+5.1.67 liftstd
+--------------
+
+`*Syntax:*'
+ `liftstd (' ideal_expression`,' matrix_name `)'
+ `liftstd (' module_expression`,' matrix_name `)'
+
+`*Type:*'
+ ideal or module
+
+`*Purpose:*'
+ returns a standard basis of an ideal or module and the
+ transformation matrix from the given ideal, resp. module, to the
+ standard basis.
+ That is, if `m' is the ideal or module, `sm' the standard basis
+ returned by `liftstd', and `T' the transformation matrix then
+ `matrix(sm)=matrix(m)*T' and `sm=ideal(matrix(m)*T)', resp.
+ `sm=module(matrix(m)*T)'.
+
+`*Example:*'
+
+ ring R=0,(x,y,z),dp;
+ poly f=x3+y7+z2+xyz;
+ ideal i=jacob(f);
+ matrix T;
+ ideal sm=liftstd(i,T);
+ sm;
+ ==> sm[1]=xy+2z
+ ==> sm[2]=3x2+yz
+ ==> sm[3]=yz2+3048192z3
+ ==> sm[4]=3024xz2-yz2
+ ==> sm[5]=y2z-6xz
+ ==> sm[6]=3097158156288z4+2016z3
+ ==> sm[7]=7y6+xz
+ print(T);
+ ==> 0,1,T[1,3], T[1,4],y, T[1,6],0,
+ ==> 0,0,-3x+3024z,3x, 0, T[2,6],1,
+ ==> 1,0,T[3,3], T[3,4],-3x,T[3,6],0
+ matrix(sm)-matrix(i)*T;
+ ==> _[1,1]=0
+ ==> _[1,2]=0
+ ==> _[1,3]=0
+ ==> _[1,4]=0
+ ==> _[1,5]=0
+ ==> _[1,6]=0
+ ==> _[1,7]=0
+
+* Menu:
+
+See
+* ideal::
+* matrix::
+* option::
+* ring::
+* std::
+
+See *note ideal::; *note matrix::; *note option::; *note ring::; *note
+std::.
+
+
+File: sing.htm, Node: listvar, Next: lres, Prev: liftstd, Up: Functions
+
+5.1.68 listvar
+--------------
+
+`*Syntax:*'
+ `listvar (' [package] `)'
+ `listvar (' [package`,'] type `)'
+ `listvar (' [package`,'] ring_name `)'
+ `listvar (' [package`,'] name `)'
+ `listvar (' [package`,'] `all )'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ lists all (user-)defined names in the current namespace:
+
+ * `listvar()': all currently visible names except procedures,
+
+ * `listvar('type`)': all currently visible names of the given
+ type,
+
+ * `listvar('ring_name`)': all names which belong to the given
+ ring,
+
+ * `listvar('name`)': the object with the given name,
+
+ * `listvar(all)': all names except procedures.
+
+ The current basering is marked with a `*'. The nesting level of
+ variables in procedures is shown in square brackets.
+
+`*Example:*'
+
+ proc t1 { }
+ proc t2 { }
+ ring s;
+ poly ss;
+ ring r;
+ poly f=x+y+z;
+ int i=7;
+ ideal I=f,x,y;
+ listvar(all);
+ ==> // i [0] int 7
+ ==> // r [0] *ring
+ ==> // I [0] ideal, 3 generator(s)
+ ==> // f [0] poly
+ ==> // s [0] ring
+ ==> // ss [0] poly
+ ==> // LIB [0] string standard.lib
+ listvar();
+ ==> // i [0] int 7
+ ==> // r [0] *ring
+ ==> // I [0] ideal, 3 generator(s)
+ ==> // f [0] poly
+ ==> // s [0] ring
+ ==> // LIB [0] string standard.lib
+ listvar(r);
+ ==> // r [0] *ring
+ ==> // I [0] ideal, 3 generator(s)
+ ==> // f [0] poly
+ listvar(t1);
+ ==> // t1 [0] proc
+ listvar(proc);
+ ==> // t2 [0] proc
+ ==> // t1 [0] proc
+ ==> // fprintf [0] proc from standard.lib
+ ==> // printf [0] proc from standard.lib
+ ==> // sprintf [0] proc from standard.lib
+ ==> // intersect1 [0] proc from standard.lib (static)
+ ==> // quotient4 [0] proc from standard.lib
+ ==> // quotient5 [0] proc from standard.lib
+ ==> // quotient3 [0] proc from standard.lib
+ ==> // quotient2 [0] proc from standard.lib
+ ==> // quotient1 [0] proc from standard.lib
+ ==> // quotient0 [0] proc from standard.lib (static)
+ ==> // quot1 [0] proc from standard.lib (static)
+ ==> // quot [0] proc from standard.lib
+ ==> // res [0] proc from standard.lib
+ ==> // groebner [0] proc from standard.lib
+ ==> // stdhilb [0] proc from standard.lib
+ ==> // stdfglm [0] proc from standard.lib
+
+* Menu:
+
+See
+* Names::
+* Names in procedures::
+* defined::
+* names::
+* type::
+
+See *note Names::; *note Names in procedures::; *note defined::; *note
+names::; *note type::.
+
+
+File: sing.htm, Node: lres, Next: maxideal, Prev: listvar, Up: Functions
+
+5.1.69 lres
+-----------
+
+`*Syntax:*'
+ `lres (' ideal_expression`,' int_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a free resolution of an ideal using La Scala's algorithm.
+
+ More precisely, let R be the basering and I be the given ideal.
+ Then `lres' computes a minimal free resolution of R/I
+
+ A2 A1
+ ... ---> F2 ---> F1 ---> R -> R/I -> 0.
+
+$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
+ \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I
+ \longrightarrow 0.$$
+ If the int_expression k is not zero then the computation stops
+ after k steps and returns a list of modules $M_i={\tt module}(A_i)$,
i=1..k.
+ Mi=module(Ai), i=1..k.
+
+ `list L=lres(I,0);' returns a list L of n modules (where n is the
+ number of variables of the basering) such that ${\tt L[i]}=M_i$
+ L[i]=M_i in the above notation.
+
+`*Note:*'
+ The ideal_expression has to be homogeneous.
+ Accessing single elements of a resolution may require that some
+ partial computations have to be finished and may therefore take
+ some time.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=xz,yz,x3-y3;
+ def L=lres(I,0);
+ print(betti(L),"betti");
+ ==> 0 1 2
+ ==> ------------------------
+ ==> 0: 1 - -
+ ==> 1: - 2 1
+ ==> 2: - 1 1
+ ==> ------------------------
+ ==> total: 1 3 2
+ L[2]; // the first syzygy module of r/I
+ ==> _[1]=-x*gen(1)+y*gen(2)
+ ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
+
+* Menu:
+
+See
+* betti::
+* hres::
+* ideal::
+* int::
+* minres::
+* module::
+* mres::
+* res::
+* sres::
+
+See *note betti::; *note hres::; *note ideal::; *note int::; *note
+minres::; *note module::; *note mres::; *note res::; *note sres::.
+
+
+File: sing.htm, Node: maxideal, Next: memory, Prev: lres, Up: Functions
+
+5.1.70 maxideal
+---------------
+
+`*Syntax:*'
+ `maxideal (' int_expression `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ returns the power given by int_expression of the maximal ideal
+ generated by all ring variables (`maxideal(i)=1' for `i<=0').
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ maxideal(2);
+ ==> _[1]=z2
+ ==> _[2]=yz
+ ==> _[3]=y2
+ ==> _[4]=xz
+ ==> _[5]=xy
+ ==> _[6]=x2
+
+* Menu:
+
+See
+* ideal::
+* ring::
+
+See *note ideal::; *note ring::.
+
+
+File: sing.htm, Node: memory, Next: minbase, Prev: maxideal, Up: Functions
+
+5.1.71 memory
+-------------
+
+`*Syntax:*'
+ `memory (' int_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns statistics concerning the memory management:
+
+ * `memory(0)' is the number of active (used) bytes,
+
+ * `memory(1)' is the number of bytes allocated from the
+ operating system,
+
+ * `memory(2)' is the maximal number of bytes ever allocated from
+ the operating system during the current SINGULAR session.
+
+`*Note:*'
+ To monitor the memory usage during ongoing computations the option
+ `mem' should be set (using the command `option(mem);', see also
+ *note option::).
+
+`*Example:*'
+
+ ring r=0,(x(1..500)),dp;
+ poly p=(x(1)+x(500))^50;
+ proc ReportMemoryUsage()
+ { "Memory currently used by SINGULAR :",memory(0),"Byte (",
+ memory(0)/1023, "KByte)" +newline+
+ "Memory currently allocated from system:",memory(1), "Byte (",
+ memory(1)/1023, "KByte)";
+ "Maximal memory allocated from system :",memory(2), "Byte (",
+ memory(2)/1023, "KByte)";
+ }
+ ReportMemoryUsage();
+ ==> Memory currently used by SINGULAR : 206940 Byte ( 202 KByte)
+ ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
+ ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
+ kill p;
+ ReportMemoryUsage(); // less memory used: p killed
+ ==> Memory currently used by SINGULAR : 153704 Byte ( 150 KByte)
+ ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
+ ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
+ kill r;
+ ReportMemoryUsage(); // even less memory: r killed
+ ==> Memory currently used by SINGULAR : 143124 Byte ( 139 KByte)
+ ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
+ ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
+
+* Menu:
+
+See
+* option::
+* system::
+
+See *note option::; *note system::.
+
+
+File: sing.htm, Node: minbase, Next: minor, Prev: memory, Up: Functions
+
+5.1.72 minbase
+--------------
+
+`*Syntax:*'
+ `minbase (' ideal_expression `)'
+ `minbase (' module_expression `)'
+
+`*Type:*'
+ the same as the type of the argument
+
+`*Purpose:*'
+ returns a minimal set of generators of an ideal, resp. module, if
+ the input is either homogeneous or if the ordering is local.
+
+`*Example:*'
+
+ ring r=181,(x,y,z),(c,ls);
+ ideal id2=x2+xyz,y2-z3y,z3+y5xz;
+ ideal id4=maxideal(3)+id2;
+ size(id4);
+ ==> 13
+ minbase(id4);
+ ==> _[1]=x2
+ ==> _[2]=xyz+x2
+ ==> _[3]=xz2
+ ==> _[4]=y2
+ ==> _[5]=yz2
+ ==> _[6]=z3
+
+* Menu:
+
+See
+* mstd::
+
+See *note mstd::.
+
+
+File: sing.htm, Node: minor, Next: minres, Prev: minbase, Up: Functions
+
+5.1.73 minor
+------------
+
+`*Syntax:*'
+ `minor (' matrix_expression`,' int_expression `)'
+ `minor (' matrix_expression`,' int_expression`,' ideal_expression
+ `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ returns the set of all minors (=subdeterminants) of the given size
+ of a matrix. The optional third argument must be a standard basis.
+ If a third argument is given, the computations will be performed
+ modulo that ideal.
+
+`*Example:*'
+
+ ring r=0,(x(1..5)),ds;
+ matrix m[2][4]=x(1..4),x(2..5);
+ print(m);
+ ==> x(1),x(2),x(3),x(4),
+ ==> x(2),x(3),x(4),x(5)
+ ideal j=minor(m,2);
+ j;
+ ==> j[1]=-x(4)^2+x(3)*x(5)
+ ==> j[2]=-x(3)*x(4)+x(2)*x(5)
+ ==> j[3]=-x(2)*x(4)+x(1)*x(5)
+ ==> j[4]=x(3)^2-x(2)*x(4)
+ ==> j[5]=x(2)*x(3)-x(1)*x(4)
+ ==> j[6]=-x(2)^2+x(1)*x(3)
+ minor(m,2,std(ideal(x(1))));
+ ==> _[1]=-x(4)^2+x(3)*x(5)
+ ==> _[2]=-x(3)*x(4)+x(2)*x(5)
+ ==> _[3]=-x(2)*x(4)
+ ==> _[4]=x(3)^2-x(2)*x(4)
+ ==> _[5]=x(2)*x(3)
+ ==> _[6]=-x(2)^2
+
+* Menu:
+
+See
+* det::
+
+See *note det::.
+
+
+File: sing.htm, Node: minres, Next: modulo, Prev: minor, Up: Functions
+
+5.1.74 minres
+-------------
+
+`*Syntax:*'
+ `minres (' list_expression `)'
+
+`*Type:*'
+ list
+
+`*Syntax:*'
+ `minres (' resolution_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ minimizes a free resolution of an ideal or module given by the
+ list_expression, resp. resolution_expression.
+
+`*Example:*'
+
+ ring r1=32003,(x,y),dp;
+ ideal i=x5+xy4,x3+x2y+xy2+y3;
+ resolution rs=lres(i,0);
+ rs;
+ ==> 1 2 1
+ ==> r1 <-- r1 <-- r1
+ ==>
+ ==> 0 1 2
+ ==> resolution not minimized yet
+ ==>
+ list(rs);
+ ==> [1]:
+ ==> _[1]=x3+x2y+xy2+y3
+ ==> _[2]=xy4
+ ==> _[3]=y7
+ ==> [2]:
+ ==> _[1]=-y4*gen(1)+x2*gen(2)+xy*gen(2)+y2*gen(2)+gen(3)
+ ==> _[2]=-y3*gen(2)+x*gen(3)
+ minres(rs);
+ ==> 1 2 1
+ ==> r1 <-- r1 <-- r1
+ ==>
+ ==> 0 1 2
+ ==>
+ list(rs);
+ ==> [1]:
+ ==> _[1]=x3+x2y+xy2+y3
+ ==> _[2]=xy4
+ ==> [2]:
+ ==> _[1]=xy4*gen(1)-x3*gen(2)-x2y*gen(2)-xy2*gen(2)-y3*gen(2)
+
+* Menu:
+
+See
+* mres::
+* res::
+* sres::
+
+See *note mres::; *note res::; *note sres::.
+
+
+File: sing.htm, Node: modulo, Next: monitor, Prev: minres, Up: Functions
+
+5.1.75 modulo
+-------------
+
+`*Syntax:*'
+ `modulo (' ideal_expression`,' ideal_expression `)'
+ `modulo (' module_expression`,' module_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ `modulo(h1,h2)' represents h1/(h1 intersect h2) (isomorphic to
+ (h1+h2)/h2) represents $h_1/(h_1 \cap h_2) \cong (h_1+h_2)/h_2$
+ where $h_1$ and $h_2$
+ h1 and h2 are considered as submodules of the same free module $R^l$
+ R^l (l=1 for ideals). Let $H_1$, resp.\ $H_2$,
+ H1 and H2 be the matrices of size l x k, resp. l x m, having the
+ columns of be the matrices of size $l \times k$, resp.\ $l \times m$,
having the
+ generators of $h_1$, resp.\ $h_2$,
+ h1, resp. h2, as columns. Then $h_1/(h_1 \cap h_2) \cong R^k /
ker(\overline{H_1})$
+
+ __
+ h1/(h1 intersect h2) is isomorphic to R^k/ker(H1)
+
+
+
+ where $\overline{H_1}: R^k \rightarrow R^l/Im(H_2)=R^l/h_2$
+ is the induced map.
+
+ __
+ H1: R^k ---> R^l/Im(H2)=R^l/h2 is the induced map.
+
+
+
+
+ `modulo(h1,h2)' returns generators of the kernel of this induced
+ map.
+
+`*Example:*'
+
+ ring r;
+ ideal h1=x,y,z;
+ ideal h2=x;
+ module m=modulo(h1,h2);
+ print(m);
+ ==> 1,0, 0,0,
+ ==> 0,-z,x,0,
+ ==> 0,y, 0,x
+
+* Menu:
+
+See
+* syz::
+
+See *note syz::.
+
+
+File: sing.htm, Node: monitor, Next: mpresmat, Prev: modulo, Up: Functions
+
+5.1.76 monitor
+--------------
+
+`*Syntax:*'
+ `monitor (' string_expression `)'
+ `monitor (' string_expression`,' string_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ controls the recording of all user input and/or program output into
+ a file. The second argument describes what to log: `"i"' means
+ input, `"o"' means output, `"io"' for both.
+ The default for the second argument is `"i"'.
+ Each `monitor' command closes a previous monitor file and opens the
+ file given by the first string expression.
+ `monitor ("")' turns off recording.
+
+`*Example:*'
+
+ monitor("doe.tmp","io"); // log input and output to doe.tmp
+ ring r;
+ poly f=x+y+z;
+ int i=7;
+ ideal I=f,x,y;
+ monitor(""); // stop logging
+
+
+File: sing.htm, Node: mpresmat, Next: mres, Prev: monitor, Up: Functions
+
+5.1.77 mpresmat
+---------------
+
+`*Syntax:*'
+ `mpresmat (' ideal_expression`,' int_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ computes the multipolynomial resultant matrix of the input system.
+ Uses the sparse resultant matrix method of Gelfand, Kapranov and
+ Zelevinsky (second parameter = 0) or the resultant matrix method of
+ Macaulay (second parameter = 1).
+
+`*Note:*'
+ When using the resultant matrix method of Macaulay the input system
+ must be homogeneous. The number of elements in the input system
+ must be the number of variables in the basering plus one.
+
+`*Example:*'
+
+ ring rsq=(0,s,t,u),(x,y),lp;
+ ideal i=s+tx+uy,x2+y2-10,x2+xy+2y2-16;
+ module m=mpresmat(i,0);
+ print(m);
+ ==> -16,0, -10,0, (s),0, 0, 0, 0, 0,
+ ==> 0, -16,0, -10,(u),(s),0, 0, 0, 0,
+ ==> 2, 0, 1, 0, 0, (u),0, 0, 0, 0,
+ ==> 0, 2, 0, 1, 0, 0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 0, (t),0, -10,(s),0, -16,
+ ==> 1, 0, 0, 0, 0, (t),0, (u),(s),0,
+ ==> 0, 1, 0, 0, 0, 0, 1, 0, (u),2,
+ ==> 1, 0, 1, 0, 0, 0, 0, (t),0, 0,
+ ==> 0, 1, 0, 1, 0, 0, 0, 0, (t),1,
+ ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
+
+* Menu:
+
+See
+* uressolve::
+
+See *note uressolve::.
+
+
+File: sing.htm, Node: mres, Next: mstd, Prev: mpresmat, Up: Functions
+
+5.1.78 mres
+-----------
+
+`*Syntax:*'
+ `mres (' ideal_expression`,' int_expression `)'
+ `mres (' module_expression`,' int_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a minimal free resolution of an ideal or module M with the
+ standard basis method. More precisely, let A=`matrix'(M), then
+ `mres' computes a free resolution of coker(A)=F0/M
+
+ A2 A1
+ ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
+
+$coker(A)=F_0/M$
+ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
+ \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M
+ \longrightarrow 0,$$
+ where the columns of the matrix $A_1$
+ A1 are a minimal set of generators of M if the basering is local or
+ if M is homogeneous. If the int expression k is not zero then the
+ computation stops after k steps and returns a list of modules $M_i={\tt
module}(A_i)$, i=1...k.
+ Mi=module(Ai), i=1...k.
+ `mres(M,0)' returns a resolution consisting of at most n+2 modules,
+ where n is the number of variables of the basering. Let `list
+ L=mres(M,0);' then `L[1]' consists of a minimal set of generators
+ of the input, `L[2]' consists of a minimal set of generators for
+ the first syzygy module of `L[1]', etc., until `L[p+1]', such that
+ L[i]<>0 for i<=p, ${\tt L[i]}\neq 0$ for $i \le p$,
+ but `L[p+1]', the first syzygy module of `L[p]', is 0 (if the
+ basering is not a qring).
+
+`*Note:*'
+ Accessing single elements of a resolution may require that some
+ partial computations have to be finished and may therefore take
+ some time.
+
+`*Example:*'
+
+ ring r=31991,(t,x,y,z,w),ls;
+ ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
+ t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
+ resolution L=mres(M,0);
+ L;
+ ==> 1 4 15 18 7 1
+ ==> r <-- r <-- r <-- r <-- r <-- r
+ ==>
+ ==> 0 1 2 3 4 5
+ ==>
+ // projective dimension of M is 5
+
+* Menu:
+
+See
+* hres::
+* ideal::
+* lres::
+* module::
+* res::
+* sres::
+
+See *note hres::; *note ideal::; *note lres::; *note module::; *note
+res::; *note sres::.
+
+
+File: sing.htm, Node: mstd, Next: mult, Prev: mres, Up: Functions
+
+5.1.79 mstd
+-----------
+
+`*Syntax:*'
+ `mstd (' ideal_expression `)'
+ `mstd (' module_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ returns a list whose first entry is a standard basis for the ideal,
+ resp. module. If the monomial ordering is global, then the second
+ entry is both a generating set for the ideal, resp. module, and a
+ subset of the standard basis. If, additionally, the input is
+ homogeneous then the second entry is a minimal generating set for
+ the ideal, resp. module.
+
+`*Example:*'
+
+ ring r=0,(x,y,z,t),dp;
+ poly f=x3+y4+z6+xyz;
+ ideal j=jacob(f),f;
+ j=homog(j,t);j;
+ ==> j[1]=3x2+yz
+ ==> j[2]=4y3+xzt
+ ==> j[3]=6z5+xyt3
+ ==> j[4]=0
+ ==> j[5]=z6+y4t2+x3t3+xyzt3
+ mstd(j);
+ ==> [1]:
+ ==> _[1]=3x2+yz
+ ==> _[2]=4y3+xzt
+ ==> _[3]=6z5+xyt3
+ ==> _[4]=xyzt3
+ ==> _[5]=y2z2t3
+ ==> _[6]=yz3t4
+ ==> _[7]=xz3t4
+ ==> _[8]=yz2t7
+ ==> _[9]=xz2t7
+ ==> _[10]=y2zt7
+ ==> _[11]=xy2t7
+ ==> [2]:
+ ==> _[1]=3x2+yz
+ ==> _[2]=4y3+xzt
+ ==> _[3]=6z5+xyt3
+ ==> _[4]=xyzt3
+
+* Menu:
+
+See
+* ideal::
+* minbase::
+* module::
+* std::
+
+See *note ideal::; *note minbase::; *note module::; *note std::.
+
+
+File: sing.htm, Node: mult, Next: nameof, Prev: mstd, Up: Functions
+
+5.1.80 mult
+-----------
+
+`*Syntax:*'
+ `mult (' ideal_expression `)'
+ `mult (' module_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ computes the degree of the monomial ideal, resp. module, generated
+ by the leading monomials of the input.
+ If the input is a standard basis of a homogeneous ideal then it
+ returns the degree of this ideal.
+ If the input is a standard basis of an ideal in a (local) ring with
+ respect to a local degree ordering then it returns the multiplicity
+ of the ideal (in the sense of Samuel, with respect to the maximal
+ ideal).
+
+`*Example:*'
+
+ ring r=32003,(x,y),ds;
+ poly f=(x3+y5)^2+x2y7;
+ ideal i=std(jacob(f));
+ mult(i);
+ ==> 46
+ mult(std(f));
+ ==> 6
+
+* Menu:
+
+See
+* degree::
+* dim::
+* ideal::
+* std::
+* vdim::
+
+See *note degree::; *note dim::; *note ideal::; *note std::; *note
+vdim::.
+
+
+File: sing.htm, Node: nameof, Next: names, Prev: mult, Up: Functions
+
+5.1.81 nameof
+-------------
+
+`*Syntax:*'
+ `nameof (' expression `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the name of an expression as string.
+
+`*Example:*'
+
+ int i=9;
+ string s=nameof(i);
+ s;
+ ==> i
+ nameof(s);
+ ==> s
+ nameof(i+1); //returns the empty string:
+ ==>
+ nameof(basering);
+ ==> basering
+ basering;
+ ==> ? `basering` is undefined
+ ==> ? error occurred in line 7: ` basering;`
+ ring r;
+ nameof(basering);
+ ==> r
+
+* Menu:
+
+See
+* names::
+* reservedName::
+* typeof::
+
+See *note names::; *note reservedName::; *note typeof::.
+
+
+File: sing.htm, Node: names, Next: ncols, Prev: nameof, Up: Functions
+
+5.1.82 names
+------------
+
+`*Syntax:*'
+ `names ( )'
+ `names (' ring_name `)'
+
+`*Type:*'
+ list of strings
+
+`*Purpose:*'
+ returns the names of all user-defined variables which are ring
+ independent (this includes the names of procedures) or, in the
+ second case, which belong to the given ring.
+
+`*Example:*'
+
+ int i=9;
+ ring r;
+ poly f;
+ poly g;
+ setring r;
+ names();
+ ==> [1]:
+ ==> r
+ ==> [2]:
+ ==> i
+ ==> [3]:
+ ==> fprintf
+ ==> [4]:
+ ==> printf
+ ==> [5]:
+ ==> sprintf
+ ==> [6]:
+ ==> intersect1
+ ==> [7]:
+ ==> quotient4
+ ==> [8]:
+ ==> quotient5
+ ==> [9]:
+ ==> quotient3
+ ==> [10]:
+ ==> quotient2
+ ==> [11]:
+ ==> quotient1
+ ==> [12]:
+ ==> quotient0
+ ==> [13]:
+ ==> quot1
+ ==> [14]:
+ ==> quot
+ ==> [15]:
+ ==> res
+ ==> [16]:
+ ==> groebner
+ ==> [17]:
+ ==> stdhilb
+ ==> [18]:
+ ==> stdfglm
+ ==> [19]:
+ ==> LIB
+ names(r);
+ ==> [1]:
+ ==> g
+ ==> [2]:
+ ==> f
+
+* Menu:
+
+See
+* nameof::
+* reservedName::
+
+See *note nameof::; *note reservedName::.
+
+
+File: sing.htm, Node: ncols, Next: npars, Prev: names, Up: Functions
+
+5.1.83 ncols
+------------
+
+`*Syntax:*'
+ `ncols (' matrix_expression `)'
+ `ncols (' intmat_expression `)'
+ `ncols (' ideal_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the number of columns of a matrix or an intmat or the
+ number of given generators of the ideal, including zeros.
+
+`*Note:*'
+ `size('ideal`)' counts the number of generators which are different
+ from zero. (Use `nrows' to get the number of rows of a given matrix
+ or intmat.)
+
+`*Example:*'
+
+ ring r;
+ matrix m[5][6];
+ ncols(m);
+ ==> 6
+ ideal i=x,0,y;
+ ncols(i);
+ ==> 3
+ size(i);
+ ==> 2
+
+* Menu:
+
+See
+* matrix::
+* nrows::
+* size::
+
+See *note matrix::; *note nrows::; *note size::.
+
+
+File: sing.htm, Node: npars, Next: nres, Prev: ncols, Up: Functions
+
+5.1.84 npars
+------------
+
+`*Syntax:*'
+ `npars (' ring_name `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the number of parameters of a ring.
+
+`*Example:*'
+
+ ring r=(23,t,v),(x,a(1..7)),lp;
+ // the parameters are t,v
+ npars(r);
+ ==> 2
+
+* Menu:
+
+See
+* par::
+* parstr::
+* ring::
+
+See *note par::; *note parstr::; *note ring::.
+
+
+File: sing.htm, Node: nres, Next: nrows, Prev: npars, Up: Functions
+
+5.1.85 nres
+-----------
+
+`*Syntax:*'
+ `nres (' ideal_expression`,' int_expression `)'
+ `nres (' module_expression`,' int_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a free resolution of an ideal or module M which is
+ minimized from the second module on (by the standard basis method).
+
+ More precisely, let $A_1$=matrix(M),
+ A1=matrix(M), then `nres' computes a free resolution of
+ coker(A1)=F0/M
+
+ A2 A1
+ ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
+
+$coker(A_1)=F_0/M$
+ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow
0,$$
+
+ where the columns of the matrix $A_1$
+ A1 are the given set of generators of M. If the int expression k
+ is not zero then the computation stops after k steps and returns a
+ list of modules $M_i={\tt module}(A_i)$, i=1..k.
+ Mi=module(Ai), i=1..k.
+ `nres(M,0)' returns a list of n modules where n is the number of
+ variables of the basering. Let `list L=nres(M,0);' then `L[1]=M'
+ is identical to the input, `L[2]' is a minimal set of generators
+ for the first syzygy module of `L[1]', etc. (L[i]=M_i (${\tt L[i]}=M_i$
+ in the notations from above).
+
+`*Example:*'
+
+ ring r=31991,(t,x,y,z,w),ls;
+ ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
+ t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
+ resolution L=nres(M,0);
+ L;
+ ==> 1 4 15 18 7 1
+ ==> r <-- r <-- r <-- r <-- r <-- r
+ ==>
+ ==> 0 1 2 3 4 5
+ ==> resolution not minimized yet
+ ==>
+
+* Menu:
+
+See
+* hres::
+* ideal::
+* lres::
+* module::
+* mres::
+* res::
+* resolution::
+* sres::
+
+See *note hres::; *note ideal::; *note lres::; *note module::; *note
+mres::; *note res::; *note resolution::; *note sres::.
+
+
+File: sing.htm, Node: nrows, Next: nvars, Prev: nres, Up: Functions
+
+5.1.86 nrows
+------------
+
+`*Syntax:*'
+ `nrows (' matrix_expression `)'
+ `nrows (' intmat_expression `)'
+ `nrows (' intvec_expression `)'
+ `nrows (' module_expression `)'
+ `nrows (' vector_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the number of rows of a matrix, an intmat or an intvec,
+ resp. the minimal rank of a free module in which the given module
+ or vector lives (the index of the last non-zero component).
+
+`*Note:*'
+ Use `ncols' to get the number of columns of a given matrix or
+ intmat.
+
+`*Example:*'
+
+ ring R;
+ matrix M[2][3];
+ nrows(M);
+ ==> 2
+ nrows(freemodule(4));
+ ==> 4
+ module m=[0,0,1];
+ nrows(m);
+ ==> 3
+ nrows([0,x,0]);
+ ==> 2
+
+* Menu:
+
+See
+* gen::
+* matrix::
+* module::
+* ncols::
+* vector::
+
+See *note gen::; *note matrix::; *note module::; *note ncols::; *note
+vector::.
+
+
+File: sing.htm, Node: nvars, Next: open, Prev: nrows, Up: Functions
+
+5.1.87 nvars
+------------
+
+`*Syntax:*'
+ `nvars (' ring_name `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the number of variables of a ring.
+
+`*Example:*'
+
+ ring r=(23,t,v),(x,a(1..7)),ls;
+ // the variables are x,a(1),...,a(7)
+ nvars(r);
+ ==> 8
+
+* Menu:
+
+See
+* npars::
+* ring::
+* var::
+* varstr::
+
+See *note npars::; *note ring::; *note var::; *note varstr::.
+
+
+File: sing.htm, Node: open, Next: option, Prev: nvars, Up: Functions
+
+5.1.88 open
+-----------
+
+`*Syntax:*'
+ `open (' link_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ opens a link.
+
+`*Example:*'
+
+ link l="MPtcp:launch";
+ open(l); // start SINGULAR "server" on localhost in batchmode
+ close(l); // shut down SINGULAR server
+
+* Menu:
+
+See
+* close::
+* link::
+
+See *note close::; *note link::.
+
+
+File: sing.htm, Node: option, Next: ord, Prev: open, Up: Functions
+
+5.1.89 option
+-------------
+
+`*Syntax:*'
+ `option ()'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ lists all defined options.
+
+`*Syntax:*'
+ `option (' option_name `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ sets an option.
+
+`*Note:*'
+ To disable an option, use the prefix `no'.
+
+`*Syntax:*'
+ `option ( get )'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+ dumps the state of all options to an intvec.
+
+`*Syntax:*'
+ `option ( set,' intvec_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ restores the state of all options from an intvec (produced by
+ `option(get)').
+
+`*Values:*'
+ The following options are used to manipulate the behavior of
+ computations and act like boolean switches. Use the prefix `no' to
+ disable an option. Notice that some options are ring dependent and
+ reset to their default values on a change of the current basering.
+
+ `none'
+ turns off all options (including the `prompt' option).
+
+ `returnSB'
+ the functions `syz', `intersect', `quotient', `modulo' return
+ a standard base instead of a generating set if `returnSB' is
+ set. This option should not be used for `lift'.
+
+ `fastHC'
+ tries to the find the highest corner of the staircase (HC) as
+ fast as possible during a standard basis computation (only
+ used for local orderings).
+
+ `intStrategy'
+ avoids division of coefficients during standard basis
+ computations. This option is ring dependent. By default, it is
+ set for rings with characteristic 0 and not set for all other
+ rings.
+
+ `oldStd'
+ uses a more lazy approach in std computations, which was used
+ in Singular version before 2-0 (and which may lead to faster
+ or slower computations, depending on the example)
+
+ `minRes'
+ special (additional) minimizing during computations (`res',
+ `mres'),
+ assumes homogeneous case and degree-compatible ordering.
+
+ `notRegularity'
+ disables the regularity bound for `res' and `mres' (see *note
+ regularity::).
+
+ `notSugar'
+ disables the sugar strategy during standard basis computation.
+
+ `notBuckets'
+ disables the bucket representation of polynomials during
+ standard basis computations. This option usually decreases the
+ memory usage but increases the computation time. It should
+ only be set for memory-critical standard basis computations.
+
+ `prot'
+ shows protocol information indicating the progress during the
+ following computations: `facstd', `fglm', `groebner', `lres',
+ `mres', `minres', `mstd', `res', `sres', `std', `stdfglm',
+ `stdhilb', `syz'. See below for more details.
+
+ `redSB'
+ computes a reduced standard basis in any standard basis
+ computation.
+
+ `redTail'
+ reduction of the tails of polynomials during standard basis
+ computations. This option is ring dependent. By default, it is
+ set for rings with global degree orderings and not set for all
+ other rings.
+
+ `redThrough'
+ for inhomogeneous input, polynomial reductions during standard
+ basis computations are never postponed, but always finished
+ through. This option is ring dependent. By default, it is
+ set for rings with global degree orderings and not set for all
+ other rings.
+
+ `sugarCrit'
+ uses criteria similar to the homogeneous case to keep more
+ useless pairs.
+
+ `weightM'
+ automatically computes suitable weights for the weighted ecart
+ and the weighted sugar method.
+
+
+ The following options, which also control computations, are
+ special, since they are not manipulated by the `option' command but
+ by a direct assignment of a value. Reset the option by assigning
+ the value 0; the command `option(none)' will not reset them! If
+ there is a non-zero value assigned, the command `option()' prints
+ the option.
+
+ `multBound'
+ a multiplicity bound is set (see *note multBound::).
+
+ `degBound'
+ a degree bound is set (see *note degBound::).
+
+
+ The last set of options controls the output of SINGULAR:
+
+ `Imap'
+ shows the mapping of variables with the fetch and imap
+ commands.
+
+ `loadLib'
+ shows loading of libraries (set by default).
+
+ `debugLib'
+ warns about syntax errors during loading of libraries.
+
+ `loadProc'
+ shows loading of procedures from libraries.
+
+ `mem'
+ shows memory usage in square brackets (see *note memory::).
+
+ `prompt'
+ shows prompt (`>', resp. `.') if ready for input (default).
+
+ `reading'
+ shows the number of characters read from a file.
+
+ `redefine'
+ warns about variable redefinitions (set by default).
+
+ `usage'
+ shows correct usage in error messages (set by default).
+
+`*Example:*'
+
+ option(prot);
+ option();
+ ==> //options: prot redefine usage prompt
+ option(notSugar);
+ option();
+ ==> //options: prot notSugar redefine usage prompt
+ option(noprot);
+ option();
+ ==> //options: notSugar redefine usage prompt
+ option(none);
+ option();
+ ==> //options: none
+ ring r=0,x,dp;
+ degBound=22;
+ option();
+ ==> //options: degBound redTail redThrough intStrategy
+ intvec i=option(get);
+ option(none);
+ option(set,i);
+ option();
+ ==> //options: degBound redTail redThrough intStrategy
+
+
+The output reported on `option(prot)' has the following meaning:
+
+ `facstd' `F' found a new factor
+ all other characters: like the output of
+ `std' and `reduce'
+ `fglm' `.' basis monomial found
+ `+' edge monomial found
+ `-' border monomial found
+ `groebner' all characters: like the output of `std'
+ `lres' `.' minimal syzygy found
+ `n' slanted degree, i.e., row of Betti matrix
+ `(mn)' calculate in module n
+ `g' pair found giving reductum and syzygy
+ `mres' `[d]' computations of the d-th syzygy module
+ all other characters: like the output of
+ `std'
+ `minres' `[d]' minimizing of the d-th syzygy module
+ `mstd' all characters: like the output of `std'
+ `reduce' `r' reduced a leading term
+ `t' reduced a non-leading term
+ `res' `[d]' computations of the d-th syzygy module
+ all other characters: like the output of
+ `std'
+ `sres' `.' syzygy found
+ `(n)' n elements remaining
+ `[n]' finished module n
+ `std' `[m:n]' internal ring change to poly representation
+ with exponent bound m and n words in exponent
+ vector
+ `s' found a new element of the standard basis
+ `-' reduced a pair/S-polynomial to 0
+ `.' postponed a reduction of a pair/S-polynomial
+ `h' used Hilbert series criterion
+ `H(d)' found a 'highest corner' of degree d, no need
+ to consider higher degrees
+ `(n)' n critical pairs are still to be reduced
+ `(S:n)' doing complete reduction of n elements
+ `d' the degree of the leading terms is currently
+ d
+ `stdfglm' all characters in first part: like the output
+ of `std'
+ all characters in second part: like the
+ output of `fglm'
+ `stdhilb' all characters: like the output of `std'
+ `syz' all characters: like the output of `std'
+
+* Menu:
+
+See
+* degBound::
+* multBound::
+* std::
+
+See *note degBound::; *note multBound::; *note std::.
+
+
+File: sing.htm, Node: ord, Next: ordstr, Prev: option, Up: Functions
+
+5.1.90 ord
+----------
+
+`*Syntax:*'
+ `ord (' poly_expression `)'
+ `ord (' vector_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the (weighted) degree of the initial term of a polynomial
+ or a vector; the weights are the weights used for the first block
+ of the ring ordering.
+
+`*Note:*'
+ `ord(0)' is `-1'.
+
+`*Example:*'
+
+ ring r=7,(x,y),wp(2,3);
+ ord(0);
+ ==> -1
+ poly f=x2+y3; // weight on y is 3
+ ord(f);
+ ==> 9
+ ring R=7,(x,y),ws(2,3);
+ poly f=x2+y3;
+ ord(f);
+ ==> 4
+ vector v=[x2,y];
+ ord(v);
+ ==> 3
+
+* Menu:
+
+See
+* deg::
+* poly::
+* vector::
+
+See *note deg::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: ordstr, Next: par, Prev: ord, Up: Functions
+
+5.1.91 ordstr
+-------------
+
+`*Syntax:*'
+ `ordstr (' ring_name `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the description of the monomial ordering of the ring.
+
+`*Example:*'
+
+ ring r=7,(x,y),wp(2,3);
+ ordstr(r);
+ ==> wp(2,3),C
+
+* Menu:
+
+See
+* charstr::
+* parstr::
+* ring::
+* varstr::
+
+See *note charstr::; *note parstr::; *note ring::; *note varstr::.
+
+
+File: sing.htm, Node: par, Next: pardeg, Prev: ordstr, Up: Functions
+
+5.1.92 par
+----------
+
+`*Syntax:*'
+ `par (' int_expression `)'
+
+`*Type:*'
+ number
+
+`*Purpose:*'
+ `par(n);' returns the n-th parameter of the basering.
+
+`*Note:*'
+ This command should only be used if the basering has at least one
+ parameter.
+
+`*Example:*'
+
+ ring r=(0,a,b,c),(x,y,z),dp;
+ char(r); // char to get the characteristic
+ ==> 0
+ par(2); // par to get the n-th parameter
+ ==> (b)
+
+* Menu:
+
+See
+* char::
+* npars::
+* parstr::
+* ring::
+* var::
+
+See *note char::; *note npars::; *note parstr::; *note ring::; *note
+var::.
+
+
+File: sing.htm, Node: pardeg, Next: parstr, Prev: par, Up: Functions
+
+5.1.93 pardeg
+-------------
+
+`*Syntax:*'
+ `pardeg (' number_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the degree of a number considered as a polynomial in the
+ ring parameters.
+
+`*Example:*'
+
+ ring r=(0,a,b,c),(x,y,z),dp;
+ pardeg(a^2*b);
+ ==> 3
+
+* Menu:
+
+See
+* deg::
+* number::
+* ring::
+* var::
+
+See *note deg::; *note number::; *note ring::; *note var::.
+
+
+File: sing.htm, Node: parstr, Next: preimage, Prev: pardeg, Up: Functions
+
+5.1.94 parstr
+-------------
+
+`*Syntax:*'
+ `parstr (' ring_name `)'
+ `parstr (' int_expression `)'
+ `parstr (' ring_name`,' int_expression `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the list of parameters of the ring as a string or the name
+ of the n-th parameter where n is given by the int_expression.
+ If the ring_name is omitted, the basering is used, thus `parstr(n)'
+ is equivalent to `parstr(basering,n)'.
+
+`*Example:*'
+
+ ring r=(7,a,b,c),(x,y),wp(2,3);
+ parstr(r);
+ ==> a,b,c
+ parstr(2);
+ ==> b
+ parstr(r,3);
+ ==> c
+
+* Menu:
+
+See
+* charstr::
+* npars::
+* ordstr::
+* par::
+* ring::
+* varstr::
+
+See *note charstr::; *note npars::; *note ordstr::; *note par::; *note
+ring::; *note varstr::.
+
+
+File: sing.htm, Node: preimage, Next: prime, Prev: parstr, Up: Functions
+
+5.1.95 preimage
+---------------
+
+`*Syntax:*'
+ `preimage (' ring_name`,' map_name`,' ideal_name `)'
+ `preimage (' ring_name`,' ideal_expression`,' ideal_name `)'
+
+`*Type:*'
+ ideal
+
+`*Purpose:*'
+ returns the preimage of an ideal under a given map.
+ The second argument has to be a map from the basering to the given
+ ring (or an ideal defining such a map), and the ideal has to be an
+ ideal in the given ring.
+
+`*Note:*'
+ To compute the kernel of a map, the preimage of zero has to be
+ determined. Hence there is no special command for computing the
+ kernel of a map in SINGULAR.
+
+`*Example:*'
+
+ ring r1=32003,(x,y,z,w),lp;
+ ring r=32003,(x,y,z),dp;
+ ideal i=x,y,z;
+ ideal i1=x,y;
+ ideal i0=0;
+ map f=r1,i;
+ setring r1;
+ ideal i1=preimage(r,f,i1);
+ i1;
+ ==> i1[1]=w
+ ==> i1[2]=y
+ ==> i1[3]=x
+ // the kernel of f
+ preimage(r,f,i0);
+ ==> _[1]=w
+
+* Menu:
+
+See
+* ideal::
+* map::
+* ring::
+
+See *note ideal::; *note map::; *note ring::.
+
+
+File: sing.htm, Node: prime, Next: print, Prev: preimage, Up: Functions
+
+5.1.96 prime
+------------
+
+`*Syntax:*'
+ `prime (' int_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the largest prime less then 32004 smaller or equal to the
+ argument;
+ returns 2 for all arguments smaller than 3.
+
+`*Example:*'
+
+ prime(32004);
+ ==> 32003
+ prime(0);
+ ==> 2
+ prime(-1);
+ ==> 2
+
+* Menu:
+
+See
+* general_lib::
+* int::
+
+See *note general_lib::; *note int::.
+
+
+File: sing.htm, Node: print, Next: printf, Prev: prime, Up: Functions
+
+5.1.97 print
+------------
+
+`*Syntax:*'
+ `print (' expression `)'
+ `print (' expression`, "betti" )'
+ `print (' expression`,' format_string `)'
+
+`*Type:*'
+ none (for the first two calling sequences), resp.
+ string (for the last calling sequence)
+
+`*Purpose:*'
+ The first form prints the expression to the terminal and has no
+ return value. Use the format string `%p' to print into a string
+ (see below).
+ The second form prints the graded Betti numbers from a matrix. See
+ the description of the format string `"betti"' below for more
+ details.
+ The last form returns the printed output as a string. The format
+ string determines which format to use to generate the string.
+
+ The following format strings are supported:
+
+ `"betti"'
+ The Betti numbers are printed in a matrix-like format where
+ the entry $d$ in row $i$ and column $j$
+ d in row i and column j is the minimal number of generators in
+ degree $i+j$ of the $j$-th
+ i+j of the j-th syzygy module of $R^n/M$ (the 0th and 1st syzygy
module of $R^n/M$ is $R^n$ and $M$, resp.).
+ R^n/M (the 0th and 1st syzygy module of R^n/M are R^n and M,
+ resp.).
+
+ `"%s"'
+ returns `string(' expression `)'
+
+ `"%2s"'
+ similar to `"%s"', except that newlines are inserted after
+ every comma and at the end
+
+ `"%l"'
+ similar to `"%s"', except that each object is embraced by its
+ type such that it can be directly used for "cutting and
+ pasting"
+
+ `"%2l"'
+ similar to `"%l"', except that newlines are inserted after
+ every comma and at the end
+
+ `"%;"'
+ returns the string equivalent to typing `expression;'
+
+ `"%t"'
+ returns the string equivalent to typing `type expression;'
+
+ `"%p"'
+ returns the string equivalent to typing `print(expression);'
+
+ `"%b"'
+ returns the string equivalent to typing `print(expression,
+ "betti");'
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ module m=[1,y],[0,x+z];
+ m;
+ ==> m[1]=y*gen(2)+gen(1)
+ ==> m[2]=x*gen(2)+z*gen(2)
+ print(m); // the columns generate m
+ ==> 1,0,
+ ==> y,x+z
+ string s=print(m,"%s"); s;
+ ==> y*gen(2)+gen(1),x*gen(2)+z*gen(2)
+ s=print(m,"%2s"); s;
+ ==> y*gen(2)+gen(1),
+ ==> x*gen(2)+z*gen(2)
+ ==>
+ s=print(m,"%l"); s;
+ ==> module(y*gen(2)+gen(1),x*gen(2)+z*gen(2))
+ s=print(m,"%;"); s;
+ ==> m[1]=y*gen(2)+gen(1)
+ ==> m[2]=x*gen(2)+z*gen(2)
+ ==>
+ s=print(m,"%t"); s;
+ ==> // m [0] module, rk 2, 2 generator(s)
+ ==> m[1]=y*gen(2)+gen(1)
+ ==> m[2]=x*gen(2)+z*gen(2)
+ s=print(m,"%p"); s;
+ ==> 1,0,
+ ==> y,x+z
+ ==>
+ intmat M=betti(mres(m,0));
+ print(M,"betti");
+ ==> 0 1
+ ==> ------------------
+ ==> 0: 1 1
+ ==> ------------------
+ ==> total: 1 1
+ list l=r,M;
+ s=print(l,"%s"); s;
+ ==> (0),(x,y,z),(dp(3),C),1,1
+ s=print(l,"%2s"); s;
+ ==> (0),(x,y,z),(dp(3),C),
+ ==> 1,1
+ ==>
+ s=print(l,"%l"); s;
+ ==> list("(0),(x,y,z),(dp(3),C)",intmat(intvec(1,1 ),1,2))
+
+* Menu:
+
+See
+* Type conversion and casting::
+* betti::
+* dbprint::
+* fprintf::
+* printf::
+* short::
+* sprintf::
+* string type cast::
+* type::
+
+See *note Type conversion and casting::; *note betti::; *note dbprint::;
+*note fprintf::; *note printf::; *note short::; *note sprintf::; *note
+string type cast::; *note type::.
+
+
+File: sing.htm, Node: printf, Next: prune, Prev: print, Up: Functions
+
+5.1.98 printf
+-------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `printf (' string_expression `[,' any_expressions`] )'
+
+*Return:*
+ none
+
+*Purpose:*
+ `printf(fmt,...);' performs output formatting. The first argument
+ is a format control string. Additional arguments may be required,
+ depending on the content of the control string. A series of output
+ characters is generated as directed by the control string; these
+ characters are displayed (i.e., printed to standard out).
+ The control string `fmt' is simply text to be copied, except that
+ the string may contain conversion specifications.
+ Do `help print;' for a listing of valid conversion specifications.
+ As an addition to the conversions of `print', the `%n' and `%2'
+ conversion specification does not consume an additional argument,
+ but simply generates a newline character.
+
+*Note:*
+ If one of the additional arguments is a list, then it should be
+ enclosed once more into a `list()' command, since passing a list as
+ an argument flattens the list by one level.
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ module m=[1,y],[0,x+z];
+ intmat M=betti(mres(m,0));
+ list l=r,m,M;
+ printf("s:%s,l:%l",1,2);
+ ==> s:1,l:int(2)
+ printf("s:%s",l);
+ ==> s:(0),(x,y,z),(dp(3),C)
+ printf("s:%s",list(l));
+ ==> s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
+ printf("2l:%2l",list(l));
+ ==> 2l:list("(0),(x,y,z),(dp(3),C)",
+ ==> module(y*gen(2)+gen(1),
+ ==> x*gen(2)+z*gen(2)),
+ ==> intmat(intvec(1,1 ),1,2))
+ ==>
+ printf("%p",list(l));
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ printf("%;",list(l));
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ printf("%b",M);
+ ==> 0 1
+ ==> ------------------
+ ==> 0: 1 1
+ ==> ------------------
+ ==> total: 1 1
+ ==>
+
+* Menu:
+
+See also:
+* fprintf::
+* print::
+* sprintf::
+* string::
+
+*See also:* *note fprintf::; *note print::; *note sprintf::; *note
+string::.
+
+
+File: sing.htm, Node: prune, Next: qhweight, Prev: printf, Up: Functions
+
+5.1.99 prune
+------------
+
+`*Syntax:*'
+ `prune (' module_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ returns the module minimally embedded in a free module such that
+ the corresponding factor modules are isomorphic.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ module m=gen(1),gen(3),[x,y,0,z],[x+y,0,0,0,1];
+ print(m);
+ ==> 1,0,x,x+y,
+ ==> 0,0,y,0,
+ ==> 0,1,0,0,
+ ==> 0,0,z,0,
+ ==> 0,0,0,1
+ print(prune(m));
+ ==> y,
+ ==> z
+
+* Menu:
+
+See
+* module::
+
+See *note module::.
+
+
+File: sing.htm, Node: qhweight, Next: quot, Prev: prune, Up: Functions
+
+5.1.100 qhweight
+----------------
+
+`*Syntax:*'
+ `qhweight (' ideal_expression `)'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+ computes the weight vector of the variables for a quasihomogeneous
+ ideal. If the input is not weighted homogeneous, an intvec of
+ zeros is returned.
+
+`*Example:*'
+
+ ring h1=32003,(t,x,y,z),dp;
+ ideal i=x4+y3+z2;
+ qhweight(i);
+ ==> 0,3,4,6
+
+* Menu:
+
+See
+* ideal::
+* intvec::
+* weight::
+
+See *note ideal::; *note intvec::; *note weight::.
+
+
+File: sing.htm, Node: quot, Next: quote, Prev: qhweight, Up: Functions
+
+5.1.101 quot
+------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `quot (' module_expression`,' module_expression `)'
+ `quot (' module_expression`,' module_expression`,' int_expression
+ `)'
+ `quot (' ideal_expression`,' ideal_expression `)'
+ `quot (' ideal_expression`,' ideal_expression`,' int_expression `)'
+
+*Type:*
+ ideal
+
+*Syntax:*
+ `quot (' module_expression`,' ideal_expression `)'
+
+*Type:*
+ module
+
+*Purpose:*
+ computes the quotient of the 1st and the 2nd argument. If a 3rd
+ argument 'n' is given the n-th method is used (n=1...5).
+
+*Example:*
+ ring r=181,(x,y,z),(c,ls);
+ ideal id1=maxideal(4);
+ ideal id2=x2+xyz,y2-z3y,z3+y5xz;
+ option(prot);
+ ideal id3=quotient(id1,id2);
+ ==> [1023:1]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
+ ==> product criterion:12 chain criterion:0
+ ==> {3}[1023:3]8(2)s(4)s(5)s9s.s.s.s.s.s
+ ==> product criterion:0 chain criterion:39
+ id3;
+ ==> id3[1]=z2
+ ==> id3[2]=yz
+ ==> id3[3]=y2
+ ==> id3[4]=xz
+ ==> id3[5]=xy
+ ==> id3[6]=x2
+ ideal id4=quot(id1,id2,1);
+ ==> [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
+ ==> product criterion:0 chain criterion:0
+ ==> (S:3)rtrtrt
+ ==> {1}[1023:3]4(2)s(4)s(5)s5s.s(3)s(2)sss
+ ==> product criterion:0 chain criterion:39
+ ==> {1}[1023:3]4(5)s(4)s(3)s(2)sss
+ ==> product criterion:0 chain criterion:9
+ ==> [255:3]3(11)s(10)sss(9)s(10)s(8)ss(7)s(8)s(6)s(7)s4(5)-----
+ ==> product criterion:12 chain criterion:9
+ ==> {1}[1023:3]4(2)sss
+ ==> product criterion:0 chain criterion:12
+ ==> [255:3]2(8)s(7)s(6)s3(5)ssssss4-----
+ ==> product criterion:15 chain criterion:3
+ id4;
+ ==> id4[1]=z2
+ ==> id4[2]=yz
+ ==> id4[3]=xz
+ ==> id4[4]=y2
+ ==> id4[5]=xy
+ ==> id4[6]=x2
+ ideal id5=quot(id1,id2,2);
+ ==> [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
+ ==> product criterion:0 chain criterion:0
+ ==> (S:3)rtrtrt
+ ==> {1}[1023:3]4(2)sss
+ ==> product criterion:0 chain criterion:12
+ ==> {1}[1023:3]4(5)s(4)s(3)s(2)sss
+ ==> product criterion:0 chain criterion:9
+ ==> [255:3]2(8)s(7)s(6)s3(5)s(4)s(3)s(2)sss
+ ==> product criterion:15 chain criterion:0
+ id5;
+ ==> id5[1]=z2
+ ==> id5[2]=yz
+ ==> id5[3]=xz
+ ==> id5[4]=y2
+ ==> id5[5]=xy
+ ==> id5[6]=x2
+
+* Menu:
+
+See also:
+* quotient::
+
+*See also:* *note quotient::.
+
+
+File: sing.htm, Node: quote, Next: quotient, Prev: quot, Up: Functions
+
+5.1.102 quote
+-------------
+
+`*Syntax:*'
+ `quote (' expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ prevents expressions from evaluation. Used only in connections with
+ write to MPfile links, prevents evaluation of an expression before
+ sending it to an other SINGULAR process. Within a quoted
+ expression, the quote can be "undone" by an `eval' (i.e., each eval
+ "undoes" the effect of exactly one quote).
+
+`*Example:*'
+
+ link l="MPfile:w example.mp";
+ ring r=0,(x,y,z),ds;
+ ideal i=maxideal(3);
+ ideal j=x7,x2,z;
+ option(prot);
+ // compute i+j before writing, but not std
+ write (l, quote(std(eval(i+j))));
+ close(l);
+ // now read it in again and evaluate:
+ read(l);
+ ==> [1023:1]1(12)s2(11)s3(10)--s(7)s(6)-----7-
+ ==> product criterion:4 chain criterion:0
+ ==> _[1]=z
+ ==> _[2]=x2
+ ==> _[3]=xy2
+ ==> _[4]=y3
+ close(l);
+
+* Menu:
+
+See
+* MPfile links::
+* eval::
+* write::
+
+See *note MPfile links::; *note eval::; *note write::.
+
+
+File: sing.htm, Node: quotient, Next: random, Prev: quote, Up: Functions
+
+5.1.103 quotient
+----------------
+
+`*Syntax:*'
+ `quotient (' ideal_expression`,' ideal_expression `)'
+ `quotient (' module_expression`,' module_expression `)'
+
+`*Type:*'
+ ideal
+
+`*Syntax:*'
+ `quotient (' module_expression`,' ideal_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ computes the ideal quotient, resp. module quotient. Let `R' be the
+ basering, `I,J' ideals and `M' a module in R^n. ${\tt R}^n$.
+ Then
+
+ * `quotient(I,J)'= {a in R | aJ in I } $\{a \in R \mid aJ \subset I\}$,
+
+ * `quotient(M,J)'= {b in R | bJ in M }. $\{b \in R^n \mid bJ \subset
M\}$.
+
+`*Example:*'
+
+ ring r=181,(x,y,z),(c,ls);
+ ideal id1=maxideal(3);
+ ideal id2=x2+xyz,y2-z3y,z3+y5xz;
+ ideal id6=quotient(id1,id2);
+ id6;
+ ==> id6[1]=z
+ ==> id6[2]=y
+ ==> id6[3]=x
+ quotient(id2,id1);
+ ==> _[1]=z2
+ ==> _[2]=yz
+ ==> _[3]=y2
+ ==> _[4]=xz
+ ==> _[5]=xy
+ ==> _[6]=x2
+ module m=x*freemodule(3),y*freemodule(2);
+ ideal id3=x,y;
+ quotient(m,id3);
+ ==> _[1]=[1]
+ ==> _[2]=[0,1]
+ ==> _[3]=[0,0,x]
+
+* Menu:
+
+See
+* fglmquot::
+* ideal::
+* module::
+
+See *note fglmquot::; *note ideal::; *note module::.
+
+
+File: sing.htm, Node: random, Next: read, Prev: quotient, Up: Functions
+
+5.1.104 random
+--------------
+
+`*Syntax:*'
+ `random (' int_expression`,' int_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns a random integer between the integer given by the first
+ int_expression and the one given by the second int_expression.
+
+`*Syntax:*'
+ `random (' int_expression`,' int_expression`,' int_expression `)'
+
+`*Type:*'
+ intmat
+
+`*Purpose:*'
+ returns a random intmat where the size is given by the second
+ (number of rows) and third argument (number of columns). The
+ absolute value of the entries of the matrix is smaller than or
+ equal to the integer given as the first argument.
+
+`*Note:*'
+ The random generator can be set to a start value with the function
+ `system', resp. by a command line option.
+
+`*Example:*'
+
+ random(1,1000);
+ ==> 35
+ random(1,2,3);
+ ==> 0,0,0,
+ ==> 1,1,-1
+ system("random",210); // start random generator with 210
+ random(-1000,1000);
+ ==> 707
+ random(-1000,1000);
+ ==> 284
+ system("random",210);
+ random(-1000,1000); // the same random values again
+ ==> 707
+
+* Menu:
+
+See
+* Command line options::
+* int::
+* intmat::
+* system::
+
+See *note Command line options::; *note int::; *note intmat::; *note
+system::.
+
+
+File: sing.htm, Node: read, Next: reduce, Prev: random, Up: Functions
+
+5.1.105 read
+------------
+
+`*Syntax:*'
+ `read (' link_expression `)'
+ for DBM links:
+ `read (' link_expression `)'
+ `read (' link_expression`,' string_expression `)'
+
+`*Type:*'
+ any
+
+`*Purpose:*'
+ reads data from a link.
+ For ASCII links, the content of the entire file is returned as one
+ string. If the ASCII link is the empty string, `read' reads from
+ standard input.
+ For MP links, one expression is read from the link and returned
+ after evaluation.
+ For MPtcp links the `read' command blocks as long as there is no
+ data to be read from the link. The `status' command can be used to
+ check whether or not there is data to be read.
+ For DBM links, a `read' with one argument returns the value of the
+ next entry in the data base, and a `read' with two arguments
+ returns the value to the key given as the second argument from the
+ data base.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ ideal i=x+y,z3+22y;
+ // write the ideal i to the file save_i
+ write(":w save_i",i);
+ ring r0=0,(x,y,z),Dp;
+ // create an ideal k equal to the content
+ // of the file save_i
+ string s="ideal k="+read("save_i")+";";
+ execute(s);
+ k;
+ ==> k[1]=x+y
+ ==> k[2]=z3+22y
+
+* Menu:
+
+See
+* execute::
+* getdump::
+* link::
+* status::
+* write::
+
+See *note execute::; *note getdump::; *note link::; *note status::;
+*note write::.
+
+
+File: sing.htm, Node: reduce, Next: regularity, Prev: read, Up: Functions
+
+5.1.106 reduce
+--------------
+
+`*Syntax:*'
+ `reduce (' poly_expression`,' ideal_expression `)'
+ `reduce (' poly_expression`,' ideal_expression`,' int_expression
+ `)'
+ `reduce (' poly_expression`,' ideal_expression`,' poly_expression
+ `)'
+ `reduce (' vector_expression`,' ideal_expression `)'
+ `reduce (' vector_expression`,' ideal_expression`,' int_expression
+ `)'
+ `reduce (' vector_expression`,' module_expression `)'
+ `reduce (' vector_expression`,' module_expression`,' int_expression
+ `)'
+ `reduce (' vector_expression`,' module_expression`,'
+ poly_expression `)'
+ `reduce (' ideal_expression`,' ideal_expression `)'
+ `reduce (' ideal_expression`,' ideal_expression`,' int_expression
+ `)'
+ `reduce (' ideal_expression`,' ideal_expression`,'
+ matrix_expression `)'
+ `reduce (' module_expression`,' ideal_expression `)'
+ `reduce (' module_expression`,' ideal_expression`,' int_expression
+ `)'
+ `reduce (' module_expression`,' module_expression `)'
+ `reduce (' module_expression`,' module_expression`,' int_expression
+ `)'
+ `reduce (' module_expression`,' module_expression`,'
+ matrix_expression `)'
+
+`*Type:*'
+ the type of the first argument
+
+`*Purpose:*'
+ reduces a polynomial, vector, ideal or module to its normal form
+ with respect to an ideal or module represented by a standard basis.
+ Returns 0 if and only if the polynomial (resp. vector, ideal,
+ module) is an element (resp. subideal, submodule) of the ideal
+ (resp. module). The result may have no meaning if the second
+ argument is not a standard basis.
+ The third (optional) argument 1 of type int forces a reduction
+ which considers only the leading term and does no tail reduction.
+ If a third argument `u' of type poly or matrix is given, the first
+ argument `p' is replaced by `p/u'. This works only for zero
+ dimensional ideals (resp. modules) in the second argument and
+ gives, even in a local ring, a reduced normal form which is the
+ projection to the quotient by the ideal (resp. module).
+
+`*Note:*'
+ The commands `reduce' and `NF' are synonymous.
+
+`*Example:*'
+
+ ring r1 = 0,(z,y,x),ds;
+ poly s1=2x5y+7x2y4+3x2yz3;
+ poly s2=1x2y2z2+3z8;
+ poly s3=4xy5+2x2y2z3+11x10;
+ ideal i=s1,s2,s3;
+ ideal j=std(i);
+ reduce(3z3yx2+7y4x2+yx5+z12y2x2,j);
+ ==> -yx5+2401/81y14x2+2744/81y11x5+392/27y8x8+224/81y5x11+16/81y2x14
+ reduce(3z3yx2+7y4x2+yx5+z12y2x2,j,1);
+ ==> -yx5+z12y2x2
+
+* Menu:
+
+See
+* ideal::
+* module::
+* std::
+* vector::
+
+See *note ideal::; *note module::; *note std::; *note vector::.
+
+
+File: sing.htm, Node: regularity, Next: repart, Prev: reduce, Up: Functions
+
+5.1.107 regularity
+------------------
+
+`*Syntax:*'
+ `regularity (' list_expression `)'
+ `regularity (' resolution_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ computes the regularity of a homogeneous ideal, resp. module, from
+ a minimal resolution given by the list expression.
+ Let
+
+ K[X]e(a,n) --> ... --> (+) K[X]e(a,0) --> I --> 0
+
+ be a minimal resolution with homogeneous maps of degree 0. The
+ regularity is the smallest number s with the property
+ deg(e(a,i)) <= s+i for all i. \noindent
+ Let $0 \rightarrow\ \bigoplus_a K[x]e_{a,n}\ \rightarrow\ \dots
+ \rightarrow\ \bigoplus_a K[x]e_{a,0}\ \rightarrow\
+ I\ \rightarrow\ 0$
+ be a minimal resolution of I considered with homogeneous maps of degree 0.
+ The regularity is the smallest number $s$ with the property deg($e_{a,i})
+ \leq s+i$ for all $i$.
+
+`*Note:*'
+ If applied to a non minimal resolution only an upper bound is
+ returned.
+ If the input to the commands `res' and `mres' is homogeneous the
+ regularity is computed and used as a degree bound during the
+ computation unless `option(notRegularity);' is given.
+
+`*Example:*'
+
+ ring rh3=32003,(w,x,y,z),(dp,C);
+ poly f=x11+y10+z9+x5y2+x2y2z3+xy3*(y2+x)^2;
+ ideal j=homog(jacob(f),w);
+ def jr=res(j,0);
+ regularity(jr);
+ ==> 25
+ // example for upper bound behavior:
+ list jj=jr;
+ regularity(jj);
+ ==> 25
+ jj=nres(j,0);
+ regularity(jj);
+ ==> 27
+ jj=minres(jj);
+ regularity(jj);
+ ==> 25
+
+* Menu:
+
+See
+* list::
+* minres::
+* mres::
+* option::
+* res::
+* resolution::
+* sres::
+
+See *note list::; *note minres::; *note mres::; *note option::; *note
+res::; *note resolution::; *note sres::.
+
+
+File: sing.htm, Node: repart, Next: res, Prev: regularity, Up: Functions
+
+5.1.108 repart
+--------------
+
+`*Syntax:*'
+ `repart (' number_expression `)'
+
+`*Type:*'
+ number
+
+`*Purpose:*'
+ returns the real part of a number from a complex ground field,
+ returns its argument otherwise.
+
+`*Example:*'
+
+ ring r=(complex,i),x,dp;
+ repart(1+2*i);
+ ==> 1
+
+* Menu:
+
+See
+* impart::
+
+See *note impart::.
+
+
+File: sing.htm, Node: res, Next: reservedName, Prev: repart, Up: Functions
+
+5.1.109 res
+-----------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+`*Syntax:*'
+ `res (' ideal_expression`,' int_expression `[,' any_expression `])'
+
+ `res (' module_expression`,' int_expression `[,' any_expression
+ `])'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a (possibly minimal) free resolution of an ideal or module
+ using a heuristically chosen method.
+ The second (int) argument (say, `k') specifies the length of the
+ resolution. If it is not positive then `k' is assumed to be the
+ number of variables of the basering.
+ If a third argument is given, the returned resolution is minimized.
+
+ Depending on the input, the returned resolution is computed using
+ the following methods:
+
+ *quotient rings:*
+ `nres' (classical method using syzygies) , see *note nres::.
+
+ *homogeneous ideals and k=0:*
+ `lres' (La'Scala's method), see *note lres::.
+
+ *not minimized resolution and (homogeneous input with k not 0, or local
rings):*
+ `sres' (Schreyer's method), see *note sres::.
+
+ *all other inputs:*
+ `mres' (classical method), see *note mres::.
+
+`*Note:*'
+ Accessing single elements of a resolution may require that some
+ partial computations have to be finished and may therefore take
+ some time.
+
+* Menu:
+
+See also
+* betti::
+* hres::
+* ideal::
+* lres::
+* minres::
+* module::
+* mres::
+* nres::
+* resolution::
+* sres::
+
+See also *note betti::; *note hres::; *note ideal::; *note lres::; *note
+minres::; *note module::; *note mres::; *note nres::; *note
+resolution::; *note sres::.
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ ideal i=xz,yz,x3-y3;
+ def l=res(i,0); // homogeneous ideal: uses lres
+ l;
+ ==> 1 3 2
+ ==> r <-- r <-- r
+ ==>
+ ==> 0 1 2
+ ==> resolution not minimized yet
+ ==>
+ print(betti(l), "betti"); // input to betti may be of type resolution
+ ==> 0 1 2
+ ==> ------------------------
+ ==> 0: 1 - -
+ ==> 1: - 2 1
+ ==> 2: - 1 1
+ ==> ------------------------
+ ==> total: 1 3 2
+ l[2]; // element access may take some time
+ ==> _[1]=-x*gen(1)+y*gen(2)
+ ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
+ i=i,x+1;
+ l=res(i,0); // inhomogeneous ideal: uses mres
+ l;
+ ==> 1 3 3 1
+ ==> r <-- r <-- r <-- r
+ ==>
+ ==> 0 1 2 3
+ ==> resolution not minimized yet
+ ==>
+ ring rs=0,(x,y,z),ds;
+ ideal i=imap(r,i);
+ def l=res(i,0); // local ring not minimized: uses sres
+ l;
+ ==> 1 1
+ ==> rs <-- rs
+ ==>
+ ==> 0 1
+ ==> resolution not minimized yet
+ ==>
+ res(i,0,0); // local ring and minimized: uses mres
+ ==> 1 1
+ ==> rs <-- rs
+ ==>
+ ==> 0 1
+ ==>
+
+
+File: sing.htm, Node: reservedName, Next: resultant, Prev: res, Up:
Functions
+
+5.1.110 reservedName
+--------------------
+
+`*Syntax:*'
+ `reservedName ()'
+
+`*Type:*'
+ none
+
+`*Syntax:*'
+ `reservedName (' string_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ prints a list of all reserved identifiers (first form) or tests
+ whether the string is a reserved identifier (second form).
+
+`*Example:*'
+
+ reservedName();
+ ==> ... // output skipped
+ reservedName("ring");
+ ==> 1
+ reservedName("xyz");
+ ==> 0
+
+* Menu:
+
+See
+* names::
+* string::
+
+See *note names::; *note string::.
+
+
+File: sing.htm, Node: resultant, Next: rvar, Prev: reservedName, Up:
Functions
+
+5.1.111 resultant
+-----------------
+
+`*Syntax:*'
+ `resultant (' poly_expression`,' poly_expression`,' ring_variable
+ `)'
+
+`*Type:*'
+ poly
+
+`*Purpose:*'
+ computes the resultant of the first and second argument with
+ respect to the variable given as the third argument.
+
+`*Example:*'
+
+ ring r=32003,(x,y,z),dp;
+ poly f=3*(x+2)^3+y;
+ poly g=x+y+z;
+ resultant(f,g,x);
+ ==> 3y3+9y2z+9yz2+3z3-18y2-36yz-18z2+35y+36z-24
+
+* Menu:
+
+See
+* poly::
+* ring::
+
+See *note poly::; *note ring::.
+
+
+File: sing.htm, Node: rvar, Next: setring, Prev: resultant, Up: Functions
+
+5.1.112 rvar
+------------
+
+`*Syntax:*'
+ `rvar (' name `)'
+ `rvar (' poly_expression `)'
+ `rvar (' string_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the number of the variable if the name is a ring variable
+ of the basering or if the string is the name of a ring variable of
+ the basering; returns 0 if not. Hence the return value of `rvar'
+ can also be used in a boolean context to check whether the variable
+ exists.
+
+`*Example:*'
+
+ ring r=29,(x,y,z),lp;
+ rvar(x);
+ ==> 1
+ rvar(r);
+ ==> 0
+ rvar(y);
+ ==> 2
+ rvar(var(3));
+ ==> 3
+ rvar("x");
+ ==> 1
+
+* Menu:
+
+See
+* defined::
+* ring::
+* var::
+* varstr::
+
+See *note defined::; *note ring::; *note var::; *note varstr::.
+
+
+File: sing.htm, Node: setring, Next: simplex, Prev: rvar, Up: Functions
+
+5.1.113 setring
+---------------
+
+`*Syntax:*'
+ `setring' ring_name
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ changes the basering to another (already defined) ring.
+
+`*Example:*'
+
+ ring r1=0,(x,y),lp;
+ // the basering is r1
+ ring r2=32003,(a(1..8)),ds;
+ // the basering is r2
+ setring r1;
+ // the basering is again r1
+ nameof(basering);
+ ==> r1
+ listvar();
+ ==> // r2 [0] ring
+ ==> // r1 [0] *ring
+ ==> // LIB [0] string standard.lib
+
+`*Use in procedures:*'
+ All changes of the basering by a definition of a new ring or a
+ `setring' command in a procedure are local to this procedure. Use
+ `keepring' to move a ring, which is local to a procedure, up by one
+ nesting level.
+
+* Menu:
+
+See
+* keepring::
+* qring::
+* ring::
+
+See *note keepring::; *note qring::; *note ring::.
+
+
+File: sing.htm, Node: simplex, Next: simplify, Prev: setring, Up: Functions
+
+5.1.114 simplex
+---------------
+
+`*Syntax:*'
+ `simplex (' matrix_expression`,' int_expression`,'
+ int_expression`,' int_expression`,' int_expression`,'
+ int_expression`)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ perform the simplex algorithm for the tableau given by the input,
+ e.g. M,m,n,m1,m2,m3:
+
+ M matrix of numbers :
+ first row describing the objective function (maximize
+ problem), the remaining rows describing constraints;
+
+ m,n,m1,m2,m3 int :
+ n = number of variables; m = total number of constraints;
+ m1 = number of <=constraints (rows 2 ... m1+1 of M);
+ m2 = number of >=constraints (rows m1+2 ... m1+m2+1 of M);
+ m3 = number of == constraints.
+
+ The following assumptions are made:
+
+ * ground field is of type `(real,N)', N>=4;
+
+ * the matrix M is of size m x n;
+
+ * m=m1+m2+m3;
+
+ * the entries M[2,1] ,..., M[m+1,1] are non-negative;
+
+ * the variables x(i) are non-negative;
+
+ * a row b, a(1) ,..., a(n) corresponds to b+a(1)x(1)+...+a(n)x(n);
+
+ * for a <=, >=, or == constraint: add "in mind" >=0, <=0, or ==0.
+
+ The output is a list L with
+
+ * L[1] = matrix
+
+ * L[2] = int:
+ 0 = finite solution found; 1 = unbounded; -1 = no solution;
+ -2 = error occured;
+
+ * L[3] = intvec :
+ L[3][k] = number of variable which corresponds to row k+1 of
+ L[1];
+
+ * L[4] = intvec :
+ L[4][j] = number of variable which is represented by column
+ j+1 of L[1] ("non-basis variable");
+
+ * L[5] = int :
+ number of constraints (= m);
+
+ * L[6] = int :
+ number of variables (= n).
+
+ The solution can be read from the first column of L[1] as is done
+ by the procedure *note simplexOut:: in `solve.lib'.
+
+`*Example:*'
+
+ ring r = (real,10),(x),lp;
+
+ // consider the max. problem:
+ //
+ // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4)
+ //
+ // with constraints: x(1) + 2*x(3) <= 740
+ // 2*x(2) - 7*x(4) <= 0
+ // x(2) - x(3) + 2*x(4) >= 0.5
+ // x(1) + x(2) + x(3) + x(4) = 9
+ //
+ matrix sm[5][5]=( 0, 1, 1, 3,-0.5,
+ 740,-1, 0,-2, 0,
+ 0, 0,-2, 0, 7,
+ 0.5, 0,-1, 1,-2,
+ 9,-1,-1,-1,-1);
+
+ int n = 4; // number of constraints
+ int m = 4; // number of variables
+ int m1= 2; // number of <= constraints
+ int m2= 1; // number of >= constraints
+ int m3= 1; // number of == constraints
+ simplex(sm, n, m, m1, m2, m3);
+ ==> [1]:
+ ==> _[1,1]=17.025
+ ==> _[1,2]=-0.95
+ ==> _[1,3]=-0.05
+ ==> _[1,4]=1.95
+ ==> _[1,5]=-1.05
+ ==> _[2,1]=730.55
+ ==> _[2,2]=0.1
+ ==> _[2,3]=-0.1
+ ==> _[2,4]=-1.1
+ ==> _[2,5]=0.9
+ ==> _[3,1]=3.325
+ ==> _[3,2]=-0.35
+ ==> _[3,3]=-0.15
+ ==> _[3,4]=0.35
+ ==> _[3,5]=0.35
+ ==> _[4,1]=0.95
+ ==> _[4,2]=-0.1
+ ==> _[4,3]=0.1
+ ==> _[4,4]=0.1
+ ==> _[4,5]=0.1
+ ==> _[5,1]=4.725
+ ==> _[5,2]=-0.55
+ ==> _[5,3]=0.05
+ ==> _[5,4]=0.55
+ ==> _[5,5]=-0.45
+ ==> [2]:
+ ==> 0
+ ==> [3]:
+ ==> 5,2,4,3
+ ==> [4]:
+ ==> 1,6,8,7
+ ==> [5]:
+ ==> 4
+ ==> [6]:
+ ==> 4
+
+* Menu:
+
+See
+* simplexOut::
+
+See *note simplexOut::.
+
+
+File: sing.htm, Node: simplify, Next: size, Prev: simplex, Up: Functions
+
+5.1.115 simplify
+----------------
+
+`*Syntax:*'
+ `simplify (' poly_expression`,' int_expression `)'
+ `simplify (' vector_expression`,' int_expression `)'
+ `simplify (' ideal_expression`,' int_expression `)'
+ `simplify (' module_expression`,' int_expression `)'
+
+`*Type:*'
+ the type of the first argument
+
+`*Purpose:*'
+ returns the "simplified" first argument depending on the
+ simplification rule given as the second argument. The
+ simplification rules are the sum of the following functions:
+
+ `1'
+ normalize (make leading coefficients 1).
+
+ `2'
+ erase zero generators/columns.
+
+ `4'
+ keep only the first one of identical generators/columns.
+
+ `8'
+ keep only the first one of generators/columns which differ
+ only by a factor in the ground field.
+
+ `16'
+ keep only those generators/columns whose leading monomials
+ differ.
+
+ `32'
+ keep only those generators/columns whose leading monomials are
+ not divisible by other ones.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),(c,dp);
+ ideal i=0,2x,2x,4x,3x+y,5x2;
+ simplify(i,1);
+ ==> _[1]=0
+ ==> _[2]=x
+ ==> _[3]=x
+ ==> _[4]=x
+ ==> _[5]=x+1/3y
+ ==> _[6]=x2
+ simplify(i,2);
+ ==> _[1]=2x
+ ==> _[2]=2x
+ ==> _[3]=4x
+ ==> _[4]=3x+y
+ ==> _[5]=5x2
+ simplify(i,4);
+ ==> _[1]=0
+ ==> _[2]=2x
+ ==> _[3]=4x
+ ==> _[4]=3x+y
+ ==> _[5]=5x2
+ simplify(i,8);
+ ==> _[1]=0
+ ==> _[2]=2x
+ ==> _[3]=3x+y
+ ==> _[4]=5x2
+ simplify(i,16);
+ ==> _[1]=0
+ ==> _[2]=2x
+ ==> _[3]=5x2
+ simplify(i,32);
+ ==> _[1]=0
+ ==> _[2]=2x
+ simplify(i,32+2+1);
+ ==> _[1]=x
+ matrix A[2][3]=x,0,2x,y,0,2y;
+ simplify(A,2+8); // by automatic conversion to module
+ ==> _[1]=[x,y]
+
+* Menu:
+
+See
+* ideal::
+* module::
+* poly::
+* vector::
+
+See *note ideal::; *note module::; *note poly::; *note vector::.
+
+
+File: sing.htm, Node: size, Next: sortvec, Prev: simplify, Up: Functions
+
+5.1.116 size
+------------
+
+`*Syntax:*'
+ `size (' string_expression `)'
+ `size (' intvec_expression `)'
+ `size (' intmat_expression `)'
+ `size (' poly_expression `)'
+ `size (' vector_expression `)'
+ `size (' ideal_expression `)'
+ `size (' module_expression `)'
+ `size (' matrix_expression `)'
+ `size (' list_expression `)'
+ `size (' resolution_expression `)'
+ `size (' ring_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ depends on the type of argument:
+
+ ideal or module
+ returns the number of (non-zero) generators.
+
+ string, intvec, list or resolution
+ returns the length, i.e., the number of characters, entries or
+ elements.
+
+ poly or vector
+ returns the number of monomials.
+
+ matrix or intmat
+ returns the number of entries (rows*columns).
+
+ ring
+ returns the number of elements in the ground field (for Z/p
+ and algebraic extensions) or -1
+
+`*Example:*'
+
+ string s="hello";
+ size(s);
+ ==> 5
+ intvec iv=1,2;
+ size(iv);
+ ==> 2
+ ring r=0,(x,y,z),lp;
+ poly f=x+y+z;
+ size(f);
+ ==> 3
+ vector v=[x+y,0,0,1];
+ size(v);
+ ==> 3
+ ideal i=f,y;
+ size(i);
+ ==> 2
+ module m=v,[0,1],[0,0,1],2*v;
+ size(m);
+ ==> 4
+ matrix mm[2][2];
+ size(mm);
+ ==> 4
+ ring r1=(2,a),x,dp;
+ minpoly=a4+a+1;
+ size(r1);
+ ==> 8
+
+* Menu:
+
+See
+* ideal::
+* intmat::
+* intvec::
+* module::
+* ncols::
+* nrows::
+* poly::
+* string::
+* vector::
+
+See *note ideal::; *note intmat::; *note intvec::; *note module::; *note
+ncols::; *note nrows::; *note poly::; *note string::; *note vector::.
+
+
+File: sing.htm, Node: sortvec, Next: sprintf, Prev: size, Up: Functions
+
+5.1.117 sortvec
+---------------
+
+`*Syntax:*'
+ `sortvec (' ideal_expression `)'
+ `sortvec (' module_expression `)'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+computes the permutation {\tt v}
+ which orders the ideal, resp.\ module, {\tt I} by its initial terms,
+ starting with the smallest, that is, {\tt I(v[i]) < I(v[i+1])} for all
+ {\tt i}.
+ computes the permutation v which orders the ideal, resp. module, I
+ by its initial terms, starting with the smallest, that is,
+ I(v[i]) < I(v[i+1]) for all i.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ ideal I=y,z,x,x3,xz;
+ sortvec(I);
+ ==> 2,1,3,5,4
+
+* Menu:
+
+See
+* general_lib::
+
+See *note general_lib::.
+
+
+File: sing.htm, Node: sprintf, Next: sres, Prev: sortvec, Up: Functions
+
+5.1.118 sprintf
+---------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `sprintf (' string_expression `[,' any_expressions `] )'
+
+*Return:*
+ string
+
+*Purpose:*
+ `sprintf(fmt,...);' performs output formatting. The first argument
+ is a format control string. Additional arguments may be required,
+ depending on the content of the control string. A series of output
+ characters is generated as directed by the control string; these
+ characters are returned as a string.
+ The control string `fmt' is simply text to be copied, except that
+ the string may contain conversion specifications.
+ Do `help print;' for a listing of valid conversion specifications.
+ As an addition to the conversions of `print', the `%n' and `%2'
+ conversion specification does not consume an additional argument,
+ but simply generates a newline character.
+
+*Note:*
+ If one of the additional arguments is a list, then it should be
+ enclosed once more into a `list()' command, since passing a list as
+ an argument flattens the list by one level.
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ module m=[1,y],[0,x+z];
+ intmat M=betti(mres(m,0));
+ list l = r, m, M;
+ string s = sprintf("s:%s,%n l:%l", 1, 2); s;
+ ==> s:1,
+ ==> l:int(2)
+ s = sprintf("s:%n%s", l); s;
+ ==> s:
+ ==> (0),(x,y,z),(dp(3),C)
+ s = sprintf("s:%2%s", list(l)); s;
+ ==> s:
+ ==> (0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
+ s = sprintf("2l:%n%2l", list(l)); s;
+ ==> 2l:
+ ==> list("(0),(x,y,z),(dp(3),C)",
+ ==> module(y*gen(2)+gen(1),
+ ==> x*gen(2)+z*gen(2)),
+ ==> intmat(intvec(1,1 ),1,2))
+ ==>
+ s = sprintf("%p", list(l)); s;
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ s = sprintf("%;", list(l)); s;
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ ==> [2]:
+ ==> _[1]=y*gen(2)+gen(1)
+ ==> _[2]=x*gen(2)+z*gen(2)
+ ==> [3]:
+ ==> 1,1
+ ==>
+ s = sprintf("%b", M); s;
+ ==> 0 1
+ ==> ------------------
+ ==> 0: 1 1
+ ==> ------------------
+ ==> total: 1 1
+ ==>
+
+* Menu:
+
+See also:
+* fprintf::
+* print::
+* printf::
+* string::
+
+*See also:* *note fprintf::; *note print::; *note printf::; *note
+string::.
+
+
+File: sing.htm, Node: sres, Next: status, Prev: sprintf, Up: Functions
+
+5.1.119 sres
+------------
+
+`*Syntax:*'
+ `sres (' ideal_expression`,' int_expression `)'
+ `sres (' module_expression`,' int_expression `)'
+
+`*Type:*'
+ resolution
+
+`*Purpose:*'
+ computes a free resolution of an ideal or module with Schreyer's
+ method. The ideal, resp. module, has to be a standard basis. More
+ precisely, let M be given by a standard basis and $A_1={\tt matrix}(M)$.
+ A1=matrix(M). Then `sres' computes a free resolution of
+ coker(A1)=F0/M
+
+ A2 A1
+ ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
+
+$coker(A_1)=F_0/M$
+ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow
0.$$
+ If the int expression k is not zero then the computation stops
+ after k steps and returns a list of modules (given by standard
+ bases) $M_i={\tt module}(A_i)$, i=1..k.
+ Mi=module(Ai), i=1..k.
+ `sres(M,0)' returns a list of n modules where n is the number of
+ variables of the basering.
+
+ Even if `sres' does not compute a minimal resolution, the `betti'
+ command gives the true betti numbers! In many cases of interest
+ `sres' is much faster than any other known method. Let `list
+ L=sres(M,0);' then `L[1]=M' is identical to the input, `L[2]' is a
+ standard basis with respect to the Schreyer ordering of the first
+ syzygy module of `L[1]', etc. (L[i]=M_i (${\tt L[i]}=M_i$
+ in the notations from above.)
+
+`*Note:*'
+ Accessing single elements of a resolution may require that some
+ partial computations have to be finished and may therefore take
+ some time.
+
+`*Example:*'
+
+ ring r=31991,(t,x,y,z,w),ls;
+ ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
+ t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
+ M=std(M);
+ resolution L=sres(M,0);
+ L;
+ ==> 1 35 141 209 141 43 4
+ ==> r <-- r <-- r <-- r <-- r <-- r <-- r
+ ==>
+ ==> 0 1 2 3 4 5 6
+ ==> resolution not minimized yet
+ ==>
+ print(betti(L),"betti");
+ ==> 0 1 2 3 4 5
+ ==> ------------------------------------------
+ ==> 0: 1 - - - - -
+ ==> 1: - - - - - -
+ ==> 2: - - - - - -
+ ==> 3: - 4 - - - -
+ ==> 4: - - - - - -
+ ==> 5: - - - - - -
+ ==> 6: - - 6 - - -
+ ==> 7: - - 9 16 2 -
+ ==> 8: - - - 2 5 1
+ ==> ------------------------------------------
+ ==> total: 1 4 15 18 7 1
+
+* Menu:
+
+See
+* betti::
+* hres::
+* ideal::
+* int::
+* lres::
+* minres::
+* module::
+* mres::
+* res::
+* syz::
+
+See *note betti::; *note hres::; *note ideal::; *note int::; *note
+lres::; *note minres::; *note module::; *note mres::; *note res::; *note
+syz::.
+
+
+File: sing.htm, Node: status, Next: std, Prev: sres, Up: Functions
+
+5.1.120 status
+--------------
+
+`*Syntax:*'
+ `status (' link_expression`,' string_expression `)'
+
+`*Type:*'
+ string
+
+`*Syntax:*'
+ `status (' link_expression`,' string_expression`,'
+ string_expression `)'
+ `status (' link_expression`,' string_expression`,'
+ string_expression`,' int_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ returns the status of the link as asked for by the second argument.
+ If a third argument is given, the result of the comparison to the
+ status string is returned: `(status(l,s1)==s2)' is equivalent to
+ `status(l,s1,s2)'. If a fourth integer argument (say, `i') is
+ given and if `status(l,s1,s2)' yields `0', then the execution of
+ the current process is suspended (the process is put to "sleep")
+ for approximately `i' microseconds, and afterwards the result of
+ another call to `status(l,s1,s2)' is returned. The latter is useful
+ for "polling" the `read' status of MPtcp links such that busy loops
+ are avoided (see *note Parallelization with MPtcp links:: for an
+ example). Note that on some systems, the minimum time for a
+ process to be put to sleep is one second.
+ The following string expressions are allowed:
+
+ ``"name"''
+ the name string given by the definition of the link (usually
+ the filename)
+
+ ``"type"''
+ returns `"ASCII"', `"MPfile"', `"MPtcp"' or `"DBM"'
+
+ ``"open"''
+ returns `"yes"' or `"no"'
+
+ ``"openread"''
+ returns `"yes"' or `"no"'
+
+ ``"openwrite"''
+ returns `"yes"' or `"no"'
+
+ ``"read"''
+ returns `"ready"' or `"not ready"'
+
+ ``"write"''
+ returns `"ready"' or `"not ready"'
+
+ ``"mode"''
+ returns (depending on the type of the link and its status)
+ `"","w","a","r"' or `"rw"'
+
+`*Example:*'
+
+ link l=":w example.txt";
+ status(l,"write");
+ ==> not ready
+ open(l);
+ status(l,"write","ready");
+ ==> 1
+ close(l);
+
+* Menu:
+
+See
+* link::
+* open::
+* read::
+* write::
+
+See *note link::; *note open::; *note read::; *note write::.
+
+
+File: sing.htm, Node: std, Next: stdfglm, Prev: status, Up: Functions
+
+5.1.121 std
+-----------
+
+`*Syntax:*'
+ `std (' ideal_expression`)'
+ `std (' module_expression`)'
+ `std (' ideal_expression`,' intvec_expression `)'
+ `std (' module_expression`,' intvec_expression `)'
+ `std (' ideal_expression`,' intvec_expression`,' intvec_expression
+ `)'
+ `std (' module_expression`,' intvec_expression`,' intvec_expression
+ `)'
+ `std (' ideal_expression`,' poly_expression `)'
+ `std (' module_expression`,' vector_expression `)'
+
+`*Type:*'
+ ideal or module
+
+`*Purpose:*'
+ returns a standard basis of an ideal or module with respect to the
+ monomial ordering of the basering. A standard basis is a set of
+ generators such that the leading terms generate the leading ideal,
+ resp. module.
+ Use an optional second argument of type intvec as Hilbert series
+ (result of `hilb(i,1)', see *note hilb::), if the ideal, resp.
+ module, is homogeneous (Hilbert driven standard basis computation,
+ *note stdhilb::). If the ideal is quasihomogeneous with some
+ weights w and if the Hilbert series is computed w.r.t. to these
+ weights, then use w as third argument.
+ Use an optional second argument of type poly, resp. vector, to
+ construct the standard basis from an already computed one (given as
+ the first argument) and one additional generator (the second
+ argument).
+
+`*Note:*'
+ The standard basis is computed with a (more or less)
+ straight-forward implementation of the classical Buchberger (resp.
+ Mora) algorithm. For global orderings, use the `groebner' command
+ instead (*note groebner::), which heuristically chooses the "best"
+ algorithm to compute a Groebner basis.
+ To view the progress of long running computations, use
+ `option(prot)' (see *note option(prot)::).
+
+`*Example:*'
+
+ // local computation
+ ring r=32003,(x,y,z),ds;
+ poly s1=1x2y+151xyz10+169y21;
+ poly s2=1xz14+6x2y4+3z24;
+ poly s3=5y10z10x+2y20z10+y10z20+11x3;
+ ideal i=s1,s2,s3;
+ ideal j=std(i);
+ degree(j);
+ ==> 0
+ // Hilbert driven elimination (standard)
+ ring rhom=32003,(x,y,z,h),dp;
+ ideal i=homog(imap(r,i),h);
+ ideal j=std(i);
+ intvec iv=hilb(j,1);
+ ring rlex=32003,(x,y,z,h),lp;
+ ideal i=fetch(rhom,i);
+ ideal j=std(i,iv);
+ j=subst(j,h,1);
+ j[1];
+ ==> z64
+ // Hilbert driven elimination (ideal is quasihomogeneous)
+ intvec w=10,1,1;
+ ring whom=32003,(x,y,z),wp(w);
+ ideal i=fetch(r,i);
+ ideal j=std(i);
+ intvec iw=hilb(j,1,w);
+ ring wlex=32003,(x,y,z),lp;
+ ideal i=fetch(whom,i);
+ ideal j=std(i,iw,w);
+ j[1];
+ ==> z64
+
+* Menu:
+
+See
+* facstd::
+* fglm::
+* groebner::
+* ideal::
+* mstd::
+* option::
+* ring::
+* stdfglm::
+* stdhilb::
+
+See *note facstd::; *note fglm::; *note groebner::; *note ideal::; *note
+mstd::; *note option::; *note ring::; *note stdfglm::; *note stdhilb::.
+
+
+File: sing.htm, Node: stdfglm, Next: stdhilb, Prev: std, Up: Functions
+
+5.1.122 stdfglm
+---------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `stdfglm (' ideal_expression `)'
+ `stdfglm (' ideal_expression`,' string_expression `)'
+
+*Type:*
+ ideal
+
+*Purpose:*
+ computes the standard basis of the ideal in the basering via `fglm'
+ (from the ordering given as the second argument to the ordering of
+ the basering).
+ If no second argument is given, "dp" is used.
+
+*Example:*
+ ring r=0,(x,y,z),lp;
+ ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
+ ideal i1=stdfglm(i); //uses fglm from "dp" to "lp"
+ i1;
+ ==> i1[1]=z12
+ ==> i1[2]=yz4-z8
+ ==> i1[3]=y2+y-z8-z4
+ ==> i1[4]=xy-xz4-y+z4
+ ==> i1[5]=x2+y-z4
+ ideal i2=stdfglm(i,"Dp"); //uses fglm from "Dp" to "lp"
+ i2;
+ ==> i2[1]=z12
+ ==> i2[2]=yz4-z8
+ ==> i2[3]=y2+y-z8-z4
+ ==> i2[4]=xy-xz4-y+z4
+ ==> i2[5]=x2+y-z4
+
+* Menu:
+
+See also:
+* fglm::
+* groebner::
+* std::
+* stdhilb::
+
+*See also:* *note fglm::; *note groebner::; *note std::; *note
+stdhilb::.
+
+
+File: sing.htm, Node: stdhilb, Next: subst, Prev: stdfglm, Up: Functions
+
+5.1.123 stdhilb
+---------------
+
+Procedure from library `standard.lib' (*note standard_lib::).
+
+*Syntax:*
+ `stdhilb (' ideal_expression `)'
+ `stdhilb (' ideal_expression`,' intvec_expression `)'
+
+*Type:*
+ ideal
+
+*Purpose:*
+ computes the standard basis of the homogeneous ideal in the
+ basering, via a Hilbert driven standard basis computation.
+ An optional second argument will be used as 1st Hilbert function.
+
+*Assume:*
+ The optional second argument is the first Hilbert series as
+ computed by `hilb'.
+
+*Example:*
+ ring r=0,(x,y,z),dp;
+ ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
+ ideal i1=stdhilb(i); i1;
+ ==> i1[1]=y3+x2
+ ==> i1[2]=x2y+x2
+ ==> i1[3]=x3-x2
+ ==> i1[4]=z4-x2-y
+ // the latter computation is equivalent to:
+ intvec v=hilb(i,1);
+ ==> // ** i is no standardbasis
+ ideal i2=stdhilb(i,v); i2;
+ ==> i2[1]=y3+x2
+ ==> i2[2]=x2y+x2
+ ==> i2[3]=x3-x2
+ ==> i2[4]=z4-x2-y
+
+* Menu:
+
+See also:
+* groebner::
+* std::
+* stdfglm::
+
+*See also:* *note groebner::; *note std::; *note stdfglm::.
+
+
+File: sing.htm, Node: subst, Next: system, Prev: stdhilb, Up: Functions
+
+5.1.124 subst
+-------------
+
+`*Syntax:*'
+ `subst (' poly_expression`,' ring_variable`,' poly_expression `)'
+ `subst (' vector_expression`,' ring_variable`,' poly_expression `)'
+
+ `subst (' ideal_expression`,' ring_variable`,' poly_expression `)'
+ `subst (' module_expression`,' ring_variable`,' poly_expression `)'
+
+`*Type:*'
+ poly, vector, ideal or module (corresponding to the first argument)
+
+`*Purpose:*'
+ substitutes a ring variable by a polynomial.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ poly f=x2+y2+z2+x+y+z;
+ subst(f,x,3/2);
+ ==> y2+z2+y+z+15/4
+ int a=1;
+ subst(f,y,a);
+ ==> x2+z2+x+z+2
+ subst(f,y,z);
+ ==> x2+2z2+x+2z
+ subst(f,y,z+1);
+ ==> x2+2z2+x+4z+2
+
+* Menu:
+
+See
+* ideal::
+* map::
+* module::
+* poly::
+* vector::
+
+See *note ideal::; *note map::; *note module::; *note poly::; *note
+vector::.
+
+
+File: sing.htm, Node: system, Next: syz, Prev: subst, Up: Functions
+
+5.1.125 system
+--------------
+
+`*Syntax:*'
+ `system (' string_expression `)'
+ `system (' string_expression`,' expression `)'
+
+`*Type:*'
+ depends on the desired function, may be none
+
+`*Purpose:*'
+ interface to internal data and the operating system. The
+ string_expression determines the command to execute. Some commands
+ require an additional argument (second form) where the type of the
+ argument depends on the command. See below for a list of all
+ possible commands.
+
+`*Note:*'
+ Not all functions work on every platform.
+
+`*Functions:*'
+
+ `system("sh"', string_expression `)'
+ shell escape, returns the return code of the shell as int. The
+ string is sent literally to the shell.
+
+ `system("pid")'
+ returns the process number as int (for creating unique names).
+
+ `system("uname")'
+ returns a string identifying the architecture for which
+ SINGULAR was compiled.
+
+ `system("getenv",' string_expression`)'
+ returns the value of the shell environment variable given as
+ the second argument. The return type is string.
+
+ `system("setenv",'string_expression, string_expression`)'
+ sets the shell environment variable given as the second
+ argument to the value given as the third argument. Returns the
+ third argument. Might not be available on all platforms.
+
+ `system("tty")'
+ resets the terminal.
+
+ `system("version")'
+ returns the version number of SINGULAR as int.
+
+ `system("contributors")'
+ returns names of people who contributed to the SINGULAR kernel
+ as string.
+
+ `system("gen")'
+ returns the generating element of the multiplicative group of
+ (Z/p)\{0} (as int) where p is the characteristic of the
+ basering.
+
+ `system("nblocks")'
+
+ `system("nblocks",' ring_name `)'
+ returns the number of blocks of the given ring, or the number
+ of parameters of the current basering, if no second argument
+ is given. The return type is int.
+
+ `system("Singular")'
+ returns the absolute (path) name of the running SINGULAR as
+ string.
+
+ `system("'-`")'
+ prints the values of all options.
+
+ `system("'-long_option_name`")'
+ returns the value of the (command-line) option
+ long_option_name. The type of the returned value is either
+ string or int. *Note Command line options::, for more info.
+
+ `system("'-long_option_name`",' expression`)'
+ sets the value of the (command-line) option long_option_name
+ to the value given by the expression. Type of the expression
+ must be string, or int. *Note Command line options::, for
+ more info. Among others, this can be used for setting the seed
+ of the random number generator, the used help browser, the
+ minimal display time, or the timer resolution.
+
+ `system("browsers");'
+ returns a string about available help browsers. *Note The
+ online help system::.
+
+`*Example:*'
+
+ // a listing of the current directory:
+ system("sh","ls");
+ // execute a shell, return to SINGULAR with exit:
+ system("sh","sh");
+ string unique_name="/tmp/xx"+string(system("pid"));
+ unique_name;
+ ==> /tmp/xx4711
+ system("uname")
+ ==> ix86-Linux
+ system("getenv","PATH");
+ ==> /bin:/usr/bin:/usr/local/bin
+ system("Singular");
+ ==> /usr/local/bin/Singular
+ // report value of all options
+ system("--");
+ ==> // --batch 0
+ ==> // --execute
+ ==> // --sdb 0
+ ==> // --echo 0
+ ==> // --help 0
+ ==> // --quiet 0
+ ==> // --random 937848971
+ ==> // --no-tty 0
+ ==> // --user-option
+ ==> // --version 0
+ ==> // --allow-net 0
+ ==> // --browser
+ ==> // --emacs 0
+ ==> // --no-stdlib 0
+ ==> // --no-rc 0
+ ==> // --no-warn 0
+ ==> // --no-out 0
+ ==> // --min-time "0.5"
+ ==> // --mp-port
+ ==> // --mp-host
+ ==> // --ticks-per-sec 1
+ ==> // --mp-transp
+ ==> // --mp-mode
+ // set minimal display time to 0.02 seconds
+ system("--min-time", "0.02");
+ // set timer resolution to 0.01 seconds
+ system("--ticks-per-sec", 100);
+ // re-seed random number generator
+ system("--random", 12345678);
+ // allow netscape to access HTML pages from the net
+ system("--allow-net", 1);
+ // and set help browser to netscape
+ system("--browser", "netscape");
+
+
+File: sing.htm, Node: syz, Next: trace, Prev: system, Up: Functions
+
+5.1.126 syz
+-----------
+
+`*Syntax:*'
+ `syz (' ideal_expression `)'
+ `syz (' module_expression `)'
+
+`*Type:*'
+ module
+
+`*Purpose:*'
+ computes the first syzygy (i.e., the module of relations of the
+ given generators) of the ideal, resp. module.
+
+`*Example:*'
+
+ ring R=0,(x,y),(c,dp);
+ ideal i=x,y;
+ syz(i);
+ ==> _[1]=[y,-x]
+
+* Menu:
+
+See
+* hres::
+* ideal::
+* lres::
+* module::
+* mres::
+* nres::
+* res::
+* sres::
+
+See *note hres::; *note ideal::; *note lres::; *note module::; *note
+mres::; *note nres::; *note res::; *note sres::.
+
+
+File: sing.htm, Node: trace, Next: transpose, Prev: syz, Up: Functions
+
+5.1.127 trace
+-------------
+
+`*Syntax:*'
+ `trace (' intmat_expression `)'
+ `trace (' matrix_expression `)'
+
+`*Type:*'
+ int, if the argument is an intmat, resp.
+ poly, if the argument is a matrix
+
+`*Purpose:*'
+ returns the trace of an intmat, resp. matrix.
+
+`*Example:*'
+
+ intmat m[2][2]=1,2,3,4;
+ print(m);
+ ==> 1 2
+ ==> 3 4
+ trace(m);
+ ==> 5
+
+* Menu:
+
+See
+* intmat::
+* matrix::
+
+See *note intmat::; *note matrix::.
+
+
+File: sing.htm, Node: transpose, Next: type, Prev: trace, Up: Functions
+
+5.1.128 transpose
+-----------------
+
+`*Syntax:*'
+ `transpose (' intmat_expression `)'
+ `transpose (' matrix_expression `)'
+ `transpose (' module_expression `)'
+
+`*Type:*'
+ intmat, matrix, or module, corresponding to the argument
+
+`*Purpose:*'
+ transposes a matrix.
+
+`*Example:*'
+
+ ring R=0,x,dp;
+ matrix m[2][3]=1,2,3,4,5,6;
+ print(m);
+ ==> 1,2,3,
+ ==> 4,5,6
+ print(transpose(m));
+ ==> 1,4,
+ ==> 2,5,
+ ==> 3,6
+
+* Menu:
+
+See
+* intmat::
+* matrix::
+* module::
+
+See *note intmat::; *note matrix::; *note module::.
+
+
+File: sing.htm, Node: type, Next: typeof, Prev: transpose, Up: Functions
+
+5.1.129 type
+------------
+
+`*Syntax:*'
+ `type ' name `;'
+ `type (' name `);'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ prints the name, level, type and value of a variable. To display
+ the value of an expression, it is sufficient to type the expression
+ followed by `;'.
+
+`*Example:*'
+
+ int i=3;
+ i;
+ ==> 3
+ type(i);
+ ==> // i [0] int 3
+
+* Menu:
+
+See
+* Data types::
+* listvar::
+* print::
+
+See *note Data types::; *note listvar::; *note print::.
+
+
+File: sing.htm, Node: typeof, Next: uressolve, Prev: type, Up: Functions
+
+5.1.130 typeof
+--------------
+
+`*Syntax:*'
+ `typeof (' expression `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the type of an expression as string.
+
+ Returns the type of the first list element if the expression is an
+ expression list.
+
+ Possible types are: `"ideal"', `"int"', `"intmat"', `"intvec"',
+ `"list"', `"map"', `"matrix"', `"module"', `"number"', `"none"',
+ `"poly"', `"proc"', `"qring"', `"resolution"', `"ring"',
+ `"string"', `"vector"'.
+
+ For internal use only is the type `"?unknown type?"'.
+
+`*Example:*'
+
+ int i=9; i;
+ ==> 9
+ typeof(_);
+ ==> int
+ print(i);
+ ==> 9
+ typeof(_);
+ ==> none
+ type i;
+ ==> // i [0] int 9
+ typeof(_);
+ ==> string
+ string s=typeof(i);
+ s;
+ ==> int
+ typeof(s);
+ ==> string
+ proc p() { "hello"; return();}
+ p();
+ ==> hello
+ typeof(_);
+ ==> none
+
+* Menu:
+
+See
+* Data types::
+* type::
+
+See *note Data types::; *note type::.
+
+
+File: sing.htm, Node: uressolve, Next: vandermonde, Prev: typeof, Up:
Functions
+
+5.1.131 uressolve
+-----------------
+
+`*Syntax:*'
+ `uressolve (' ideal_expression`,' int_expression`,'
+ int_expression`,' int_expression `)'
+
+`*Type:*'
+ list
+
+`*Purpose:*'
+ computes all complex roots of a zerodimensional ideal.
+ Makes either use of the multipolynomial resultant of Macaulay
+ (second argument = 1), which works only for homogeneous ideals, or
+ uses the sparse resultant of Gelfand, Kapranov and Zelevinsky
+ (second argument = 0).
+ The sparse resultant algorithm uses a mixed polyhedral subdivision
+ of the Minkowsky sum of the Newton polytopes in order to construct
+ the sparse resultant matrix. Its determinant is a nonzero multiple
+ of the sparse resultant. The u-resultant of B.L. van der Waerden
+ and Laguerre's algorithm are used to determine the complex roots.
+ The third argument defines the precision of the fractional part if
+ the ground field is the field of rational numbers, otherwise it
+ will be ignored.
+ The fourth argument (can be 0, 1 or 2) gives the number of extra
+ runs of Laguerre's algorithm (with corrupted roots), leading to
+ better results.
+
+`*Note:*'
+ If the ground field is the field of complex numbers, the elements
+ of the list are of type number, otherwise of type string.
+
+`*Example:*'
+
+ ring rsc=(real,20,I),(x,y),lp;
+ ideal i=(2+3*I)*x2+(0.35+I*45.0e-2)*y2-8,x2+xy+(42.7)*y2;
+ list l=uressolve(i,0,0,2);
+ l[1];
+ ==> [1]:
+ ==> (-1.315392899374542198+I*0.70468233142752928117)
+ ==> [2]:
+ ==> (0.12292646536251281054+I*0.19245727404407015049)
+ subst(subst(i[1],x,l[1][1]),y,l[1][2]);
+ ==> 0
+
+* Menu:
+
+See
+* laguerre::
+* mpresmat::
+
+See *note laguerre::; *note mpresmat::.
+
+
+File: sing.htm, Node: vandermonde, Next: var, Prev: uressolve, Up:
Functions
+
+5.1.132 vandermonde
+-------------------
+
+`*Syntax:*'
+ `vandermonde (' ideal_expression`,' ideal_expression`,'
+ int_expression `)'
+
+`*Type:*'
+ poly
+
+`*Purpose:*'
+ `vandermonde(p,v,d)' computes the (unique) polynomial of degree d
+ with prescribed values v[1],...,v[N] at the points p^0,...,p^(N-1),
+ N=(d+1)^n, n the number of ring variables.
+ The returned polynomial is sum_a c[a]*x1^a1*...*xn^an, where the
+ coefficients c[a] are the solution of the (transposed) Vandermonde
+ system of linear equations
+
+ sum_(|a|<=d) c_[a] * p[1]^(k*a1) *..* p[n]^(k*an) = v[k+1],
+ k=1,...,N.
+
+{\tt vandermonde(p,v,d)} computes the (unique) polynomial of degree
+ @code{d} with prescribed values {\tt v[1],...,v[N]} at the points
+ {\tt p}$^0,\dots,$ {\tt p}$^{N-1}$, {\tt N=(d+1)}$^n$, $n$ the
+ number of ring variables.
+
+ The returned polynomial is $\sum
+ c_{\alpha_1\ldots\alpha_n}\cdot x_1^{\alpha_1} \cdot \dots \cdot
+ x_n^{\alpha_n}$, where the coefficients
+ $c_{\alpha_1\ldots\alpha_n}$ are the solution of the (transposed)
+ Vandermonde system of linear equations
+ $$ \sum_{\alpha_1+\ldots+\alpha_n\leq d} c_{\alpha_1\ldots\alpha_n} \cdot
+ {\tt p}_1^{(k-1)\alpha_1}\cdot\dots\cdot {\tt p}_n^{(k-1)\alpha_n} =
+ {\tt v}[k], \quad k=1,\dots,{\tt N}.$$
+
+`*Note:*'
+ the ground field has to be the field of rational numbers. Moreover,
+ ncols(p)==n, the number of variables in the basering, and all the
+ given generators have to be numbers different from 0,1 or -1.
+ Finally, ncols(v)==(d+1)^n, and all given generators have to be
+ numbers. the ground field has to be the field of rational
+ numbers. Moreover, {\tt ncols(p)==}$n$, the number of variables in the
+ basering, and all the given generators have to be numbers different from
+ 0,1 or -1. Finally, {\tt ncols(v)==(d+1)$^n$}, and all given generators
have
+ to be numbers.
+
+`*Example:*'
+
+ ring r=0,(x,y),dp;
+ // determine f with deg(f)=2 and with given values v of f
+ // at 9 points: (2,3)^0=(1,1),...,(2,3)^8=(2^8,3^8)
+ // valuation point: (2,3)
+ ideal p=2,3;
+ ideal v=1,2,3,4,5,6,7,8,9;
+ poly ip=vandermonde(p,v,2);
+ ip[1..5]; // the 5 first terms of ip:
+ ==> -1/9797760x2y2-595/85536x2y+55/396576xy2+935/384x2-1309/3240xy
+ // compute value of ip at the point 2^8,3^8, result must be 9
+ subst(subst(ip,x,2^8),y,3^8);
+ ==> 9
+
+* Menu:
+
+See also:
+
+
+File: sing.htm, Node: var, Next: varstr, Prev: vandermonde, Up: Functions
+
+5.1.133 var
+-----------
+
+`*Syntax:*'
+ `var (' int_expression `)'
+
+`*Type:*'
+ poly
+
+`*Purpose:*'
+ `var(n)' returns the n-th ring variable.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ var(2);
+ ==> y
+
+* Menu:
+
+See
+* int::
+* nvars::
+* ring::
+* varstr::
+
+See *note int::; *note nvars::; *note ring::; *note varstr::.
+
+
+File: sing.htm, Node: varstr, Next: vdim, Prev: var, Up: Functions
+
+5.1.134 varstr
+--------------
+
+`*Syntax:*'
+ `varstr (' ring_name `)'
+ `varstr (' int_expression `)'
+ `varstr (' ring_name`,' int_expression `)'
+
+`*Type:*'
+ string
+
+`*Purpose:*'
+ returns the list of the names of the ring variables as a string or
+ the name of the n-th ring variable, where n is given by the
+ int_expression.
+ If the ring name is omitted, the basering is used, thus `varstr(n)'
+ is equivalent to `varstr(basering,n)'.
+
+`*Example:*'
+
+ ring r=0,(x,y,z),dp;
+ varstr(r);
+ ==> x,y,z
+ varstr(r,1);
+ ==> x
+ varstr(2);
+ ==> y
+
+* Menu:
+
+See
+* charstr::
+* int::
+* nvars::
+* ordstr::
+* parstr::
+* ring::
+* var::
+
+See *note charstr::; *note int::; *note nvars::; *note ordstr::; *note
+parstr::; *note ring::; *note var::.
+
+
+File: sing.htm, Node: vdim, Next: wedge, Prev: varstr, Up: Functions
+
+5.1.135 vdim
+------------
+
+`*Syntax:*'
+ `vdim (' ideal_expression `)'
+ `vdim (' module_expression `)'
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ computes the vector space dimension of the ring, resp. free module,
+ modulo the ideal, resp. module, generated by the initial terms of
+ the given generators. If the generators form a standard basis,
+ this is the same as the vector space dimension of the ring, resp.
+ free module, modulo the ideal, resp. module.
+ If the ideal, resp. module, is not zero-dimensional, -1 is
+ returned.
+
+`*Example:*'
+
+ ring r=0,(x,y),ds;
+ ideal i=x2+y2,x2-y2;
+ ideal j=std(i);
+ vdim(j);
+ ==> 4
+
+* Menu:
+
+See
+* degree::
+* dim::
+* ideal::
+* kbase::
+* mult::
+* std::
+
+See *note degree::; *note dim::; *note ideal::; *note kbase::; *note
+mult::; *note std::.
+
+
+File: sing.htm, Node: wedge, Next: weight, Prev: vdim, Up: Functions
+
+5.1.136 wedge
+-------------
+
+`*Syntax:*'
+ `wedge (' matrix_expression`,' int_expression `)'
+
+`*Type:*'
+ matrix
+
+`*Purpose:*'
+ `wedge(M,n)' computes the `n'-th exterior power of the matrix `M'.
+
+`*Example:*'
+
+ ring r;
+ matrix m[2][3]=x,y,y,z,z,x;
+ print(m);
+ ==> x,y,y,
+ ==> z,z,x
+ print(wedge(m,2));
+ ==> xz-yz,-x2+yz,xy-yz
+
+* Menu:
+
+See
+* int::
+* matrix::
+* minor::
+
+See *note int::; *note matrix::; *note minor::.
+
+
+File: sing.htm, Node: weight, Next: write, Prev: wedge, Up: Functions
+
+5.1.137 weight
+--------------
+
+`*Syntax:*'
+ `weight (' ideal_expression `)'
+ `weight (' module_expression `)'
+
+`*Type:*'
+ intvec
+
+`*Purpose:*'
+ computes an "optimal" weight vector for an ideal, resp. module,
+ which may be used as weight vector for the variables in order to
+ speed up the standard basis algorithm. If the input is weighted
+ homogeneous, a weight vector for which the input is weighted
+ homogeneous is found.
+
+`*Example:*'
+
+ ring h1=32003,(t,x,y,z),dp;
+ ideal i=
+ 9x8+y7t3z4+5x4y2t2+2xy2z3t2,
+ 9y8+7xy6t+2x5y4t2+2x2yz3t2,
+ 9z8+3x2y3z2t4;
+ intvec e=weight(i);
+ e;
+ ==> 5,7,5,7
+ ring r=32003,(a,b,c,d),wp(e);
+ map f=h1,a,b,c,d;
+ ideal i0=std(f(i));
+
+* Menu:
+
+See
+* ideal::
+* intvec::
+* qhweight::
+
+See *note ideal::; *note intvec::; *note qhweight::.
+
+
+File: sing.htm, Node: write, Prev: weight, Up: Functions
+
+5.1.138 write
+-------------
+
+`*Syntax:*'
+ `write (' link_expression`,' expression_list `)'
+ for DBM links:
+ `write (' link`,' string_expression`,' string_expression `)'
+ `write (' link`,' string_expression `)'
+
+`*Type:*'
+ none
+
+`*Purpose:*'
+ writes data to a link.
+ If the link is of type `ASCII', all expressions are converted to
+ strings (and separated by a newline character) before they are
+ written. As a consequence, only such values which can be converted
+ to a string can be written to an `ASCII' link.
+ For MP links, ring-dependent expressions are written together with
+ a ring description. To prevent an evaluation of the expression
+ before it is written, the `quote' command (possibly together with
+ `eval') can be used. A `write' blocks (i.e., does not return to the
+ prompt), as long as a MPtcp link is not ready for writing.
+ For DBM links, `write' with three arguments inserts the first
+ string as key and the second string as value into the dbm data
+ base.
+ Called with two arguments, it deletes the entry with the key
+ specified by the string from the data base.
+
+`*Example:*'
+
+ // write the values of the variables f and i as strings into
+ // the file "outfile" (overwrite it, if it exists)
+ write(":w outfile",f,i);
+
+ // now append the string "that was f,i" (without the quotes)
+ // at the end of the file "outfile"
+ write(":a outfile","that was f,i");
+ // alternatively, links could be used:
+ link l=":a outfile"; l;
+ // type : ASCII
+ // mode : a
+ // name : outfile
+ // open : no
+ // read : not ready
+ // write: not ready
+ write(l," that was f,i");
+ // saving and retrieving data (ASCII format):
+ ring r=32003,(x,y,z),dp;
+ ideal i=x+y,z3+22y;
+ write(":w save_i",i);// this writes x+y,z3+22y to the file save_i
+ ring r=32003,(x,y,z),dp;
+ string s=read("save_i"); //creates the string x+y,z3+22y
+ execute("ideal k="+s+";"); // this defines an ideal k which
+ // is equal to i.
+ // for large objects, the MP format and MPfile links are better:
+ write("MPfile:w save_i.mp",i);
+ def j=read("MPfile:r save_i.mp");
+
+* Menu:
+
+See
+* Data types::
+* dump::
+* eval::
+* link::
+* print::
+* printf::
+* quote::
+* read::
+* short::
+
+See *note Data types::; *note dump::; *note eval::; *note link::; *note
+print::; *note printf::; *note quote::; *note read::; *note short::.
+
+
+File: sing.htm, Node: Control structures, Next: System variables, Prev:
Functions, Up: Functions and system variables
+
+5.2 Control structures
+======================
+
+
+List of all supported control structures.
+
+* Menu:
+
+* break::
+* breakpoint::
+* continue::
+* else::
+* export::
+* for::
+* if::
+* keepring::
+* quit::
+* return::
+* while::
+* ~::
+
+A sequence of commands surrounded by curly brackets (`{' and `}') is a
+so called block. Blocks are used in SINGULAR in order to define
+procedures and to collect commands belonging to `if', `else', `for' and
+`while' statements and to the `example' part in libraries. Even if the
+sequence of statements consists of only a single command it has to be
+surrounded by curly brackets! Variables which are defined inside a
+block are not local to that block. Note that there is no ending
+semicolon at the end of the block.
+`*Example:*'
+
+ if ( i>j )
+ {
+ // This is the block
+ int temp;
+ temp=i;
+ i=j;
+ j=temp;
+ kill temp;
+ }
+
+
+File: sing.htm, Node: break, Next: breakpoint, Prev: Control structures,
Up: Control structures
+
+5.2.1 break
+-----------
+
+`*Syntax:*'
+ `break;'
+
+`*Purpose:*'
+ leaves the innermost `for' or `while' block.
+
+`*Example:*'
+
+ while (1)
+ {
+ ...
+ if ( ... )
+ {
+ break; // leave the while block
+ }
+ }
+
+* Menu:
+
+See
+* Control structures::
+* for::
+* while::
+
+See *note Control structures::; *note for::; *note while::.
+
+
+File: sing.htm, Node: breakpoint, Next: continue, Prev: break, Up: Control
structures
+
+5.2.2 breakpoint
+----------------
+
+`*Syntax:*'
+ `breakpoint(' proc_name `);'
+ `breakpoint(' proc_name`,' line_no `);'
+
+`*Purpose:*'
+ sets a breakpoint at the beginning of the specified procedure or at
+ the given line. *Note:* Line number 1 is the first line of a
+ library (for procedures from libraries), resp. the line with the
+ `{'.
+ A line number of -1 removes all breakpoint from that procedure.
+
+`*Example:*'
+
+ breakpoint(groebner);
+ ==> breakpoint 1, at line 163 in groebner
+ breakpoint(groebner, 176);
+ ==> breakpoint 2, at line 176 in groebner
+ breakpoint(groebner, -1);
+ ==> breakpoints in groebner deleted(0x6)
+
+* Menu:
+
+See
+* Source code debugger::
+* ~::
+
+See *note Source code debugger::; *note ~::.
+
+
+File: sing.htm, Node: continue, Next: else, Prev: breakpoint, Up: Control
structures
+
+5.2.3 continue
+--------------
+
+`*Syntax:*'
+ `continue;'
+
+`*Purpose:*'
+ skips the rest of the innermost `for' or `while' loop und jumps to
+ the beginning of the block. This command is only valid inside a
+ `for' or a `while' construction.
+
+`*Note:*'
+ Unlike the C-construct it *does not execute the increment
+ statement*. The command `continue' is mainly for internal use.
+
+`*Example:*'
+
+ for (int i = 1 ; i<=10; i=i+1)
+ {
+ ...
+ if (i==3) { i=8;continue; }
+ // skip the rest if i is 3 and
+ // continue with the next i: 8
+ i;
+ }
+ ==> 1
+ ==> 2
+ ==> 8
+ ==> 9
+ ==> 10
+
+* Menu:
+
+See
+* Control structures::
+* for::
+* while::
+
+See *note Control structures::; *note for::; *note while::.
+
+
+File: sing.htm, Node: else, Next: export, Prev: continue, Up: Control
structures
+
+5.2.4 else
+----------
+
+`*Syntax:*'
+ `if (' boolean_expression `)' true_block `else' false_block
+
+`*Purpose:*'
+ executes false_block if the boolean_expression of the `if'
+ statement is false. This command is only valid in combination with
+ an `if' command.
+
+`*Example:*'
+
+ int i=3;
+ if (i > 5)
+ {
+ "i is bigger than 5";
+ }
+ else
+ {
+ "i is smaller than 6";
+ }
+ ==> i is smaller than 6
+
+* Menu:
+
+See
+* Control structures::
+* boolean expressions::
+* if::
+
+See *note Control structures::; *note boolean expressions::; *note if::.
+
+
+File: sing.htm, Node: export, Next: for, Prev: else, Up: Control structures
+
+5.2.5 export
+------------
+
+`*Syntax:*'
+ `export' name `;'
+ `export' list_of_names `;'
+
+`*Purpose:*'
+ converts a local variable of a procedure to a global one.
+
+`*Note:*'
+ Objects defined in a ring are not automatically exported when
+ exporting the ring (use `keepring' instead).
+
+`*Example:*'
+
+ proc p1
+ {
+ int i,j;
+ export(i);
+ intmat m;
+ listvar();
+ export(m);
+ }
+ p1();
+ ==> // m [1] intmat 1 x 1
+ ==> // j [1] int 0
+ ==> // i [0] int 0
+ listvar();
+ ==> // m [0] intmat 1 x 1
+ ==> // i [0] int 0
+
+* Menu:
+
+See
+* keepring::
+
+See *note keepring::.
+
+
+File: sing.htm, Node: for, Next: if, Prev: export, Up: Control structures
+
+5.2.6 for
+---------
+
+`*Syntax:*'
+ `for (' init_command`;' boolean_expression`;' iterate_commands`)'
+ block
+
+`*Purpose:*'
+ repetitive, conditional execution of a command block.
+ The command init_command is executed first. Then boolean_expression
+ is evaluated. If its value is TRUE the block is executed, otherwise
+ the `for' statement is complete. After each execution of the block,
+ the command iterate_command is executed and boolean_expression is
+ evaluated. This is repeated until boolean_expression evaluates to
+ FALSE.
+ The command `break;' leaves the innermost `for' construct.
+
+`*Example:*'
+
+ // sum of 1 to 10:
+ int s=0;
+ for (int i=1; i<=10; i=i+1)
+ {
+ s=s+i;
+ }
+ s;
+ ==> 55
+
+* Menu:
+
+See
+* Control structures::
+* boolean expressions::
+* break::
+* continue::
+* if::
+* while::
+
+See *note Control structures::; *note boolean expressions::; *note
+break::; *note continue::; *note if::; *note while::.
+
+
+File: sing.htm, Node: if, Next: keepring, Prev: for, Up: Control structures
+
+5.2.7 if
+--------
+
+`*Syntax:*'
+ `if (' boolean_expression `)' true_block
+ `if (' boolean_expression `)' true_block `else' false_block
+
+`*Purpose:*'
+ executes true_block if the boolean condition is true. If the `if'
+ statement is followed by an `else' statement and the boolean
+ condition is false, then false_block is executed.
+
+`*Example:*'
+
+ int i = 9;
+ matrix m[i][i];
+ if (i > 5 and typeof(m) == "matrix")
+ {
+ m[i][i] = i;
+ }
+
+* Menu:
+
+See
+* Control structures::
+* boolean expressions::
+* break::
+* else::
+
+See *note Control structures::; *note boolean expressions::; *note
+break::; *note else::.
+
+
+File: sing.htm, Node: keepring, Next: quit, Prev: if, Up: Control
structures
+
+5.2.8 keepring
+--------------
+
+`*Syntax:*'
+ `keepring' name `;'
+
+`*Purpose:*'
+ moves the specified ring to the next (upper) level. This command
+ can only be used inside of procedures and it should be the last
+ command before the `return' statement. There it provides the
+ possibility to keep a ring which is local to the procedure (and its
+ objects) accessible after the procedure ended without making the
+ ring global.
+
+`*Example:*'
+
+ proc P1
+ {
+ ring r=0,x,dp;
+ keepring r;
+ }
+ proc P2
+ {
+ "inside P2: " + nameof(basering);
+ P1();
+ "inside P2, after call of P1: " + nameof(basering);
+ }
+ ring r1= 0,y,dp;
+ P2();
+ ==> inside P2: r1
+ ==> inside P2, after call of P1: r
+ "at top level: " + nameof(basering);
+ ==> at top level: r1
+
+* Menu:
+
+See
+* ring::
+
+See *note ring::.
+
+
+File: sing.htm, Node: quit, Next: return, Prev: keepring, Up: Control
structures
+
+5.2.9 quit
+----------
+
+`*Syntax:*'
+ `quit;'
+
+`*Purpose:*'
+ quits SINGULAR; works also from inside a procedure. The commands
+ `quit' and `exit' are synonymous.
+
+`*Example:*'
+
+ quit;
+
+
+File: sing.htm, Node: return, Next: while, Prev: quit, Up: Control
structures
+
+5.2.10 return
+-------------
+
+`*Syntax:*'
+ `return (' expression_list `);'
+ `return ();'
+
+`*Type:*'
+ any
+
+`*Purpose:*'
+ returns the result(s) of a procedure and can only be used inside a
+ procedure. Note that the brackets are required even if no return
+ value is given.
+
+`*Example:*'
+
+ proc p2
+ {
+ int i,j;
+ for(i=1;i<=10;i++)
+ {
+ j=j+i;
+ }
+ return(j);
+ }
+ // can also return an expression list, i.e., more than one value
+ proc tworeturn ()
+ { return (1,2); }
+ int i,j = tworeturn();
+ // return type may even depend on the input
+ proc type_return (int i)
+ {
+ if (i > 0) {return (i);}
+ else {return (list(i));}
+ }
+ // then we need def type (or list) to collect value
+ def t1 = type_return(1);
+ def t2 = type_return(-1);
+
+* Menu:
+
+See
+* Data types::
+* proc::
+
+See *note Data types::; *note proc::.
+
+
+File: sing.htm, Node: while, Next: ~, Prev: return, Up: Control structures
+
+5.2.11 while
+------------
+
+`*Syntax:*'
+ `while ('boolean_expression`)' block
+
+`*Purpose:*'
+ repetitive, conditional execution of block.
+ The boolean_expression is evaluated and if its value is TRUE, the
+ block gets executed. This is repeated until boolean_expression
+ evaluates to FALSE. The command `break' leaves the innermost
+ `while' construction.
+
+`*Example:*'
+
+ int i = 9;
+ while (i>0)
+ {
+ // ... // do something for i=9, 8, ..., 1
+ i = i - 1;
+ }
+ while (1)
+ {
+ // ... // do something forever
+ if (i == -5) // but leave the loop if i is -5
+ {
+ break;
+ }
+ }
+
+* Menu:
+
+See
+* Control structures::
+* boolean expressions::
+* break::
+
+See *note Control structures::; *note boolean expressions::; *note
+break::.
+
+
+File: sing.htm, Node: ~, Prev: while, Up: Control structures
+
+5.2.12 ~ (break point)
+----------------------
+
+`*Syntax:*'
+ `~;'
+
+`*Purpose:*'
+ sets a break point. Whenever SINGULAR reaches the command `~;' in a
+ sequence of commands it prompts for input. The user may now input
+ lines of SINGULAR commands. The line length cannot exceed 80
+ characters. SINGULAR proceeds with the execution of the command
+ following `~;' as soon as it receives an empty line.
+
+`*Example:*'
+
+ proc t
+ {
+ int i=2;
+ ~;
+ return(i+1);
+ }
+ t();
+ ==> -- break point in t --
+ ==> -- 0: called from STDIN --
+ // here local variables of the procedure can be accessed
+ i;
+ ==> 2
+ ==> -- break point in t --
+
+ ==> 3
+
+* Menu:
+
+See
+* Break points::
+
+See *note Break points::.
+
+
+File: sing.htm, Node: System variables, Prev: Control structures, Up:
Functions and system variables
+
+5.3 System variables
+====================
+
+
+List of all system variables.
+
+* Menu:
+
+* degBound::
+* echo::
+* minpoly::
+* multBound::
+* noether::
+* printlevel::
+* short::
+* timer::
+* TRACE var::
+* rtimer::
+* voice::
+
+
+File: sing.htm, Node: degBound, Next: echo, Prev: System variables, Up:
System variables
+
+5.3.1 degBound
+--------------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ The standard basis computation is stopped if the total (weighted)
+ degree exceeds `degBound'.
+ `degBound' should not be used for a global ordering with
+ inhomogeneous input.
+ Reset this bound by setting `degBound' to 0.
+
+`*Example:*'
+
+ degBound = 7;
+ option();
+ ==> //options for 'std'-command: degBound
+ ideal j=std(i);
+ degBound;
+ ==> 7
+ degBound = 0; //resets degree bound to infinity
+
+* Menu:
+
+See
+* deg::
+* int::
+* option::
+* std::
+
+See *note deg::; *note int::; *note option::; *note std::.
+
+
+File: sing.htm, Node: echo, Next: minpoly, Prev: degBound, Up: System
variables
+
+5.3.2 echo
+----------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ input is echoed if `echo' >= `voice'.
+ `echo' is a local setting for a procedure and defaulted to 0.
+ `echo' does not affect the output of commands.
+
+`*Example:*'
+
+ echo = 1;
+ int i = echo;
+ ==> int i = echo;
+
+* Menu:
+
+See
+* int::
+* voice::
+
+See *note int::; *note voice::.
+
+
+File: sing.htm, Node: minpoly, Next: multBound, Prev: echo, Up: System
variables
+
+5.3.3 minpoly
+-------------
+
+`*Type:*'
+ number
+
+`*Purpose:*'
+ describes the coefficient field of the current basering as an
+ algebraic extension with the minimal polynomial equal to `minpoly'.
+ Setting the `minpoly' should be the first command after defining
+ the ring.
+
+`*Note:*'
+ The minimal polynomial has to be specified in the syntax of a
+ polynomial. Its variable is not one of the ring variables, but the
+ algebraic element which is being adjoined to the field. Algebraic
+ extensions in SINGULAR are only possible over the rational numbers
+ or over Z/p, p a prime number.
+ SINGULAR does not check whether the given polynomial is
+ irreducible! It can be checked in advance with the function
+ `factorize' (*note factorize::).
+
+`*Example:*'
+
+ //(Q[i]/(i^2+1))[x,y,z]:
+ ring Cxyz=(0,i),(x,y,z),dp;
+ minpoly=i^2+1;
+ i2; //this is a number, not a poly
+ ==> -1
+
+* Menu:
+
+See
+* factorize::
+* ring::
+
+See *note factorize::; *note ring::.
+
+
+File: sing.htm, Node: multBound, Next: noether, Prev: minpoly, Up: System
variables
+
+5.3.4 multBound
+---------------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ The standard basis computation is stopped if the ideal is
+ zero-dimensional in a ring with local ordering and its multiplicity
+ (`mult') is lower than `multBound'.
+ Reset this bound by setting `multBound' to 0.
+
+`*Example:*'
+
+ multBound = 20;
+ option();
+ ==> //options for 'std'-command: multBound
+ ideal j=std(i);
+ multBound;
+ ==> 20
+ multBound = 0; //disables multBound
+
+* Menu:
+
+See
+* int::
+* mult::
+* option::
+* std::
+
+See *note int::; *note mult::; *note option::; *note std::.
+
+
+File: sing.htm, Node: noether, Next: printlevel, Prev: multBound, Up:
System variables
+
+5.3.5 noether
+-------------
+
+`*Type:*'
+ poly
+
+`*Purpose:*'
+ The standard basis computation in local rings cuts off all
+ monomials above (in the sense of the monomial ordering) the
+ monomial `noether' during the computation.
+ Reset `noether' by setting `noether' to 0.
+
+`*Example:*'
+
+ ring R=32003,(x,y,z),ds;
+ ideal i=x2+y12,y13;
+ std(i);
+ ==> _[1]=x2+y12
+ ==> _[2]=y13
+ noether=x11;
+ std(i);
+ ==> _[1]=x2
+ noether=0; //disables noether
+
+* Menu:
+
+See
+* poly::
+* std::
+
+See *note poly::; *note std::.
+
+
+File: sing.htm, Node: printlevel, Next: short, Prev: noether, Up: System
variables
+
+5.3.6 printlevel
+----------------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ sets the debug level for `dbprint'. If `printlevel' >= `voice'
+ then `dbprint' is equivalent to `print', otherwise nothing is
+ printed.
+
+`*Note:*'
+ *Note Procedures in a library::, for a small example about how this
+ is used for the display of comments while procedures are executed.
+
+`*Example:*'
+
+ voice;
+ ==> 1
+ printlevel=0;
+ dbprint(1);
+ printlevel=voice;
+ dbprint(1);
+ ==> 1
+
+* Menu:
+
+See
+* dbprint::
+* int::
+* voice::
+
+See *note dbprint::; *note int::; *note voice::.
+
+
+File: sing.htm, Node: short, Next: timer, Prev: printlevel, Up: System
variables
+
+5.3.7 short
+-----------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ the output of monomials is done in the short manner, if `short' is
+ non-zero. A C-like notion is used, if short is zero. Both
+ notations may be used as input.
+ The default depends on the names of the ring variables (0 if there
+ are names of variables longer than 1 character, 1 otherwise). Every
+ change of the basering sets `short' to the previous value for that
+ ring. In other words, the value of the variable `short' is
+ "ring-local".
+
+`*Example:*'
+
+ ring r=23,x,dp;
+ int save=short;
+ short=1;
+ 2x2,x2;
+ ==> 2x2 x2
+ short=0;
+ 2x2,x2;
+ ==> 2*x^2 x^2
+ short=save; //resets short to the previous value
+
+* Menu:
+
+See
+* int::
+
+See *note int::.
+
+
+File: sing.htm, Node: timer, Next: TRACE var, Prev: short, Up: System
variables
+
+5.3.8 timer
+-----------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+
+ 1. the CPU time (i.e, user and system time) used for each command
+ is printed if timer >0 , if this time is bigger than a
+ (customizable) minimal time and if `printlevel+1 >= voice'
+ (which is by default true on the SINGULAR top level, but not
+ true while procedures are executed).
+
+ 2. yields the used CPU time since the start-up of SINGULAR in a
+ (customizable) resolution.
+
+ The default setting of `timer' is 0, the default minimal time is
+ 0.5 seconds, and the default timer resolution is 1 (i.e., the
+ default unit of time is one second). The minimal time and timer
+ resolution can be set using the command line options `--min-time'
+ and `--ticks-per-sec' and can be checked using
+ `system("--min-time")' and `system("--ticks-per-sec")'.
+
+ How to use `timer' in order to measure the time for a sequence of
+ commands, see example below.
+
+`*Note for Windows95/98:*'
+ The value of the `timer' cannot be used (resp. trusted) when
+ SINGULAR is run under Windows95/98 (this is due to the shortcomings
+ of the Windows95/98 operating system). Use *note rtimer::, instead.
+
+`*Example:*'
+
+ timer=1; // The time of each command is printed
+ int t=timer; // initialize t by timer
+ ring r=0,(x,y,z),dp;
+ poly p=(x+2y+3z+4xy+5xz+6yz)^20;
+ // timer as int_expression:
+ t=timer-t;
+ t; // yields the time in ticks-per-sec (default 1)
+ ==> 0
+ // since t was initialized by timer
+ int tps=system("--ticks-per-sec");
+ t/tps; // yields the time in seconds truncated to int
+ ==> 0
+
+* Menu:
+
+See
+* Command line options::
+* printlevel::
+* rtimer::
+* system::
+* voice::
+
+See *note Command line options::; *note printlevel::; *note rtimer::;
+*note system::; *note voice::.
+
+
+File: sing.htm, Node: TRACE var, Next: rtimer, Prev: timer, Up: System
variables
+
+5.3.9 TRACE
+-----------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ sets level of debugging.
+
+ `TRACE=0'
+ no debugging messages are printed.
+
+ `TRACE=1'
+ messages about entering and leaving of procedures are
+ displayed.
+
+ `TRACE=3'
+ messages about entering and leaving of procedures together
+ with line numbers are displayed.
+
+ `TRACE=4'
+ each line is echoed and the interpretation of commands in this
+ line is suspended until the user presses `RETURN'.
+
+
+ `TRACE' is defaulted to 0.
+ `TRACE' does not affect the output of commands.
+
+`*Example:*'
+
+ TRACE=1;
+ LIB "general.lib";
+ sum(1..100);
+ ==> entering sum (level 0)
+ ==> leaving sum (level 0)
+ ==> 5050
+
+* Menu:
+
+See
+* int::
+
+See *note int::.
+
+
+File: sing.htm, Node: rtimer, Next: voice, Prev: TRACE var, Up: System
variables
+
+5.3.10 rtimer
+-------------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ identical to `timer' (*note timer::), except that real times (i.e.,
+ wall-clock) times are reported, instead of CPU times. This can be
+ trusted on all operating systems (including Windows95/98).
+
+
+File: sing.htm, Node: voice, Prev: rtimer, Up: System variables
+
+5.3.11 voice
+------------
+
+`*Type:*'
+ int
+
+`*Purpose:*'
+ shows the nesting level of procedures.
+
+`*Note:*'
+ *Note Guidelines for writing a library::, for an small example how
+ this is used for the display of comments while procedures are
+ executed.
+
+`*Example:*'
+
+ voice;
+ ==> 1
+ proc p
+ {
+ voice;
+ };
+ p();
+ ==> 2
+
+* Menu:
+
+See
+* dbprint::
+* listvar::
+* printlevel::
+
+See *note dbprint::; *note listvar::; *note printlevel::.
+
+
+File: sing.htm, Node: Tricks and pitfalls, Next: Examples, Prev: Functions
and system variables, Up: Top
+
+6 Tricks and pitfalls
+*********************
+
+* Menu:
+
+* Limitations::
+* Major differences to the C programming language::
+* Miscellaneous oddities::
+* Identifier resolution::
+
+
+File: sing.htm, Node: Limitations, Next: Major differences to the C
programming language, Up: Tricks and pitfalls
+
+6.1 Limitations
+===============
+
+SINGULAR has the following limitations:
+ * the characteristic of a prime field must be less than 2147483629
+
+ * the (weighted) degree of a monomial must be smaller than the
+ largest `long', usually 2147483648
+
+ * the exponent of a ring variable must be smaller than 32768 unless
+ the ring ordering start with the pseudo ordering `L(' max_exponent
+ `)'
+
+ * the rank of any free module must be smaller than the largest
+ `long', usually 2147483648
+
+ * the number of parameters must be smaller than 32768
+
+ * the number of ring variables must be smaller than 32768
+
+ * the precision of long floating point numbers (for ground field
+ `real') must be smaller than 32768
+
+ * integers (of type `int') have the limited range from -2147483647 to
+ 2147483647
+
+ * floating point numbers (type `number' from field `real') have a
+ limited range which is machine dependent. A typical range is
+ -1.0e-38 to 1.0e+38. The string representation of overflow and
+ underflow is machine dependent, as well. For example "`Inf'" on
+ Linux, or "`+.+00e+00'" on HPUX.
+
+ * the length of an identifier is unlimited but `listvar' displays
+ only the first 20 characters
+
+ * statements may not contain more than 10000 tokens
+
+ * All input to Singular must be 7-bit clean, i.e. special characters
+ like the the German Umlaute (a", o", etc.), or the French accent
+ characters may neither appear as input to SINGULAR, nor in
+ libraries or procedure definitions.
+
+
+File: sing.htm, Node: Major differences to the C programming language, Next:
Miscellaneous oddities, Prev: Limitations, Up: Tricks and pitfalls
+
+6.2 Major differences to the C programming language
+===================================================
+
+Although many constructs from SINGULAR's programming language are
+similar to those from the C programming language, there are some subtle
+differences. Most notably:
+
+* Menu:
+
+* No rvalue of increments and assignments::
+* Evaluation of logical expressions::
+* No case or switch statement::
+* Usage of commas::
+* Usage of brackets::
+* Behavior of continue::
+* Return type of procedures::
+
+
+File: sing.htm, Node: No rvalue of increments and assignments, Next:
Evaluation of logical expressions, Up: Major differences to the C programming
language
+
+6.2.1 No rvalue of increments and assignments
+---------------------------------------------
+
+The increment operator `++' (resp. decrement operator `--') has no
+rvalue, i.e., cannot be used on the right-hand sides of assignments.
+So, instead of
+
+ j = i++; // WRONG!!!
+
+(which results in an error), it must be written
+
+ i++; j = i;
+
+Likewise, an assignment expression does not have a result. Therefore,
+compound assignments like `i = j = k;' are not allowed and result in an
+error.
+
+
+File: sing.htm, Node: Evaluation of logical expressions, Next: No case or
switch statement, Prev: No rvalue of increments and assignments, Up: Major
differences to the C programming language
+
+6.2.2 Evaluation of logical expressions
+---------------------------------------
+
+*All* arguments of a logical expression are first evaluated and then the
+value of the logical expression is determined. For example, the logical
+expressions `(a || b)' is evaluated by first evaluating `a' _and_ `b',
+even though the value of `b' has no influence on the value of `(a ||
+b)', if `a' evaluates to true.
+
+Note, that this evaluation is different from the left-to-right,
+conditional evaluation of logical expressions (as found in most
+programming languages). For example, in these other languages, the value
+of `(1 || b)' is determined without ever evaluating `b'. This causes
+some problems with boolean tests on variables, which might not be
+defined at evaluation time. For example, the following results in an
+error, if the variable `i' is undefined:
+
+ if (defined(i) && i > 0) {} // WRONG!!!
+
+This must be written instead as:
+
+ if (defined(i))
+ {
+ if (i > 0) {}
+ }
+
+However, there are several short work-arounds for this problem:
+ 1. If a variable (say, `i') is only to be used as a boolean flag, then
+ define (value is TRUE) and undefine (value is FALSE) `i' instead of
+ assigning a value. Using this scheme, it is sufficient to simply
+ write
+
+ if (defined(i))
+
+ in order to check whether `i' is TRUE. Use the command `kill' to
+ undefine a variable, i.e. to assign it a FALSE value (*note
+ kill::).
+
+ 2. If a variable can have more than two values, then define it, if
+ necessary, before it is used for the first time. For example, if
+ the following is used within a procedure
+
+ if (! defined(DEBUG)) { int DEBUG = 1;}
+ ...
+ if (DEBUG == 3) {...}
+ if (DEBUG == 2) {...}
+ ...
+
+ then a user of this procedure does not need to care about the
+ existence of the `DEBUG' variable - this remains hidden from the
+ user. However, if `DEBUG' exists globally, then its local default
+ value is overwritten by its global one.
+
+
+File: sing.htm, Node: No case or switch statement, Next: Usage of commas,
Prev: Evaluation of logical expressions, Up: Major differences to the C
programming language
+
+6.2.3 No case or switch statement
+---------------------------------
+
+SINGULAR does not offer a `case' (or `switch') statement. However, it
+can be imitated in the following way:
+
+ while (1)
+ {
+ if (choice == choice_1) { ...; break;}
+ ...
+ if (choice == choice_n) { ...; break;}
+ // default case
+ ...; break;
+ }
+
+
+File: sing.htm, Node: Usage of commas, Next: Usage of brackets, Prev: No
case or switch statement, Up: Major differences to the C programming language
+
+6.2.4 Usage of commas
+---------------------
+
+In SINGULAR, a comma separates list elements and the value of a comma
+expression is a list. Hence, commas can not be used to combine several
+expressions into a single expression. For example, instead of writing
+
+ for (i=1, j=5; i<5 || j<10; i++, j++) {...} // WRONG!!!!!!
+
+one has to write
+
+ for (i,j = 1,5; i<5 || j<10; i++, j++) {...}
+
+
+File: sing.htm, Node: Usage of brackets, Next: Behavior of continue, Prev:
Usage of commas, Up: Major differences to the C programming language
+
+6.2.5 Usage of brackets
+-----------------------
+
+In SINGULAR, curly brackets (`{' `}') *must always* be used to enclose
+the statement body following such constructs like `if', `else', `for',
+or `while', even if this block consists of only a single statement.
+Similarly, in the return statement of a procedure, parentheses (`(' `)')
+*must always* be used to enclose the return value. Even if there is no
+value to return, parentheses have to be used after a return statement
+(i.e., `return();'). For example,
+
+ if (i == 1) return i; // WRONG!!!!!
+
+results in an error. Instead, it must be written as
+
+ if (i == 1) { return (i); }
+
+
+File: sing.htm, Node: Behavior of continue, Next: Return type of procedures,
Prev: Usage of brackets, Up: Major differences to the C programming language
+
+6.2.6 Behavior of continue
+--------------------------
+
+SINGULAR's `continue' construct is only valid inside the body of a `for'
+or `while' construct. It skips the rest of the loop-body and jumps to
+the beginning of the block. Unlike the C-construct SINGULAR's `continue'
+*does not execute the increment statement*. For example,
+
+ for (int i = 1 ; i<=10; i=i+1)
+ {
+ ...
+ if (i==3) { i=8;continue; }
+ // skip the rest if i is 3 and
+ // continue with the next i: 8
+ i;
+ }
+ ==> 1
+ ==> 2
+ ==> 8
+ ==> 9
+ ==> 10
+
+
+File: sing.htm, Node: Return type of procedures, Prev: Behavior of continue,
Up: Major differences to the C programming language
+
+6.2.7 Return type of procedures
+-------------------------------
+
+Although the SINGULAR language is a strongly typed programming language,
+the type of the return value of a procedure does not need to be
+specified. As a consequence, the return type of a procedure may vary,
+i.e., may, for example, depend on the input. However, the return value
+of such a procedure may then only be assigned to a variable of type
+`def'.
+
+ proc type_return (int i)
+ {
+ if (i > 0) {return (i);}
+ else {return (list(i));}
+ }
+ def t1 = type_return(1);
+ def t2 = type_return(-1);
+ typeof(t1); typeof(t2);
+ ==> int
+ ==> list
+
+Furthermore, it is mandatory to assign the return value of a procedure
+to a variable of type `def', if a procedure changes the current ring
+using the `keepring' command (*note keepring::) and returns a
+ring-dependent value (like a polynomial or module).
+
+ proc def_return
+ {
+ ring r=0,(x,y),dp;
+ poly p = x;
+ keepring r;
+ return (x);
+ }
+ def p = def_return();
+ // poly p = def_return(); would be WRONG!!!
+ typeof(p);
+ ==> poly
+
+On the other hand, more than one value can be returned by a single
+`return' statement. For example,
+
+ proc tworeturn () { return (1,2); }
+ int i,j = tworeturn();
+
+
+File: sing.htm, Node: Miscellaneous oddities, Next: Identifier resolution,
Prev: Major differences to the C programming language, Up: Tricks and pitfalls
+
+6.3 Miscellaneous oddities
+==========================
+
+ 1. integer division
+
+ If two numerical constants (i.e., two sequences of digits) are
+ divided using the `/' operator, the surrounding whitespace
+ determines which division to use: if there is no space between the
+ constants and the `/' operator (e.g., "3/2"), both numerical
+ constants are treated as of type `number' and the current ring
+ division is used. If there is at least one space surrounding the
+ `/' operator (e.g., "3 / 2"), both numerical constants are treated
+ as of type `int' and an integer division is performed. To avoid
+ confusion, use the `div' operator instead of `/' for integer
+ division and an explicit type cast to `number' for ring division.
+ Note, that this problem does only occur for divisions of numerical
+ constants.
+
+ ring r=32002,x,dp;
+ 3/2; // ring division
+ ==> -15994
+ 3 / 2; // integer division
+ ==> 1
+ 3 div 2;
+ ==> 1
+ number(3) / number(2);
+ ==> -15994
+ number a=3;
+ number b=2;
+ a/b;
+ ==> -15994
+ int c=3;
+ int d=2;
+ c / d;
+ ==> 1
+
+ 2. monomials and precedence
+
+ The computation of a monomial has precedence over all operators:
+
+ ring r=0,(x,y),dp;
+ 2xy^2 == (2*x*y)^2;
+ ==> 1
+ 2xy^2 == 2x*y^2;
+ ==> 0
+ 2x*y^2 == 2*x * (y^2);
+ ==> 1
+
+ 3. meaning of `mult'
+
+ For an arbitrary ideal or module `i', `mult(i)' returns the
+ multiplicity of the ideal generated by the leading monomials of the
+ given generators of `i', hence depends on the monomial ordering!
+
+ A standard mistake is to interpret `degree(i)' or `mult(i)' for an
+ inhomogeneous ideal `i' as the degree of the homogenization or as
+ something like the 'degree of the affine part'. For the ordering
+ `dp' (degree reverse lexicographical) the converse is true: if `i'
+ is given by a standard basis, `mult(i)' is the degree of the
+ homogeneous ideal obtained by homogenization of `i' and then
+ putting the homogenizing variable to 0, hence it is the degree of
+ the part at infinity (this can also be checked by looking at the
+ initial ideal).
+
+ 4. size of ideals
+
+ `size' counts the non-zero entries of an ideal or module. Use
+ `ncols' to determine the actual number of entries in the ideal or
+ module.
+
+ 5. computations in `qring'
+
+ In order to speed up computations in quotient rings, SINGULAR
+ usually does not reduce polynomials w.r.t. the quotient ideal;
+ rather the given representative is used as long as possible during
+ computations. If it is necessary, reduction is done during standard
+ base computations. To reduce a polynomial `f' by hand w.r.t. the
+ current quotient ideal use the command `reduce(f,std(0))' (*note
+ reduce::).
+
+ 6. substring selection
+
+ To extract substrings from a `string', square brackets are used,
+ enclosing either two comma-separated `int's or an `intvec'.
+ Although two comma-separated `int's represent an `intvec', they
+ mean different things in substring access. Square brackets
+ enclosing two `int's (e.g. `s[2,6]') return a substring where the
+ first integer denotes the starting position and the second integer
+ denotes the length of the substring. The result is returned as a
+ `string'. Square brackets enclosing an `intvec' (e.g.
+ `s[intvec(2,6)]') return the characters of the string at the
+ position given by the values of the `intvec'. The result is
+ returned as an expression list of strings.
+
+ string s = "one-word";
+ s[2,6]; // a substring starting at the second char
+ ==> ne-wor
+ size(_);
+ ==> 6
+ intvec v = 2,6;
+ s[v]; // the second and the sixth char
+ ==> n o
+ string st = s[v]; // stick together by an assignment
+ st;
+ ==> no
+ size(_);
+ ==> 2
+ v = 2,6,8;
+ s[v];
+ ==> n o d
+
+
+File: sing.htm, Node: Identifier resolution, Prev: Miscellaneous oddities,
Up: Tricks and pitfalls
+
+6.4 Identifier resolution
+=========================
+
+In SINGULAR, an identifier (i.e., a "word") is resolved in the following
+way and order: It is checked for
+ 1. a reserved name (like `ring', `std', ...),
+
+ 2. a local variable (w.r.t. a procedure),
+
+ 3. a local ring variable (w.r.t. the current basering locally set in a
+ procedure),
+
+ 4. a global variable,
+
+ 5. a global ring variable (w.r.t. the current basering)
+
+ 6. a monomial consisting of local ring variables written without
+ operators,
+
+ 7. a monomial consisting of global ring variables written without
+ operators.
+
+Consequently, it is allowed to have general variables with the same name
+as ring variables. However, the above identifier resolution order must
+be kept in mind. Otherwise, surprising results may come up.
+
+ ring r=0,(x,y),dp;
+ int x;
+ x*y; // resolved product int*poly, i.e., 0*y
+ ==> 0
+ xy; // "xy" is one identifier and resolved to monomial xy
+ ==> xy
+
+For these reasons, we strongly recommend not to use variables which have
+the same name(s) as ring variables.
+
+Moreover, we strongly recommend not to use ring variables whose name is
+fully contained in (i.e., is a substring of) another name of a ring
+variable. Otherwise, effects like the following might occur:
+
+ ring r=0,(x, x1),dp; // name x is substring of name x1 !!!!!!!!!
+ x;x1; // resolved poly x
+ ==> x
+ ==> x1
+ short=0; 2x1; // resolved to monomial 2*x^1 !!!!!!
+ ==> 2*x
+ 2*x1; // resolved to product 2 times x1
+ ==> 2*x1
+
+
+File: sing.htm, Node: Examples, Next: Polynomial data, Prev: Tricks and
pitfalls, Up: Top
+
+Appendix A Examples
+*******************
+
+The following topics are treated:
+
+* Menu:
+
+* Milnor and Tjurina::
+* Procedures and LIB::
+* Critical points::
+* Saturation::
+* Long coefficients::
+* Parameters::
+* T1 and T2::
+* Deformations::
+* Finite fields::
+* Elimination::
+* Free resolution::
+* Computation of Ext::
+* Polar curves::
+* Depth::
+* Formatting output::
+* Cyclic roots::
+* G_a -Invariants::
+* Invariants of a finite group::
+* Factorization::
+* Puiseux pairs::
+* Primary decomposition::
+* Normalization::
+* Branches of an Isolated Space Curve Singularity::
+* Kernel of module homomorphisms::
+* Algebraic dependence::
+* Classification::
+* Fast lexicographical GB::
+* Parallelization with MPtcp links::
+
+
+File: sing.htm, Node: Milnor and Tjurina, Next: Procedures and LIB, Prev:
Examples, Up: Examples
+
+A.1 Milnor and Tjurina
+======================
+
+The Milnor number, resp. the Tjurina number, of a power series f in
$K[[x_1,\ldots,x_n]]$
+K[[x1,...,xn]] is
+milnor(f) = dim_K(K[[x1,...,xn]]/jacob(f))
+resp.
+tjurina(f) = dim_K(K[[x1,...,xn]]/((f)+jacob(f)))
+where $$
+\hbox{milnor}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/\hbox{jacob}(f)),
+$$
+respectively
+$$
+\hbox{tjurina}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/((f)+\hbox{jacob}(f)))
+$$
+where
+`jacob(f)' is the ideal generated by the partials of `f'. `tjurina(f)'
+is finite, if and only if `f' has an isolated singularity. The same
+holds for `milnor(f)' if K has characteristic 0. SINGULAR displays -1
+if the dimension is infinite.
+
+SINGULAR cannot compute with infinite power series. But it can work in
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$,
+Loc_(x)K[x1,...,xn], the localization of $K[x_1,\ldots,x_n]$
+K[x1,...,xn] at the maximal ideal $(x_1,\ldots,x_n)$.
+(x1,...,xn). To do this one has to define an s-ordering like ds, Ds,
+ls, ws, Ws or an appropriate matrix ordering (look at the manual to get
+information about the possible monomial orderings in SINGULAR, or type
+`help Monomial orderings;' to get a menu of possible orderings. For
+further help type, e.g., `help local orderings;'). See *note Monomial
+orderings::.
+
+We shall show in the example below how to realize the following:
+ * set option `prot' to have a short protocol during standard basis
+ computation
+
+ * define the ring `r1' with char 32003, variables `x,y,z', monomial
+ ordering `ds', series ring (i.e., K[x,y,z] localized at (x,y,z))
+
+ * list the information about `r1' by typing its name
+
+ * define the integers `a,b,c,t'
+
+ * define a polynomial `f' (depending on `a,b,c,t') and display it
+
+ * define the jacobian ideal `i' of `f'
+
+ * compute a standard basis of `i'
+
+ * compute the Milnor number (=250) with `vdim' and create and display
+ a string in order to comment the result (text between quotes "
+ "; is a 'string')
+
+ * compute a standard basis of `i+(f)'
+
+ * compute the Tjurina number (=195) with `vdim'
+
+ * then compute the Milnor number (=248) and the Tjurina number (=195)
+ for `t'=1
+
+ * reset the option to `noprot'
+
+ option(prot);
+ ring r1 = 32003,(x,y,z),ds;
+ r1;
+ ==> // characteristic : 32003
+ ==> // number of vars : 3
+ ==> // block 1 : ordering ds
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ int a,b,c,t=11,5,3,0;
+ poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+
+ x^(c-2)*y^c*(y^2+t*x)^2;
+ f;
+ ==> y5+x5y2+x2y2z3+xy7+z9+x11
+ ideal i=jacob(f);
+ i;
+ ==> i[1]=5x4y2+2xy2z3+y7+11x10
+ ==> i[2]=5y4+2x5y+2x2yz3+7xy6
+ ==> i[3]=3x2y2z2+9z8
+ ideal j=std(i);
+ ==>
[1023:2]7(2)s8s10s11s12s(3)s13(4)s(5)s14(6)s(7)15--.s(6)-16.-.s(5)17.s(7)\
+ s--s18(6).--19-..sH(24)20(3)...21....22....23.--24-
+ ==> product criterion:10 chain criterion:69
+ "The Milnor number of f(11,5,3) for t=0 is", vdim(j);
+ ==> The Milnor number of f(11,5,3) for t=0 is 250
+ j=i+f; // overwrite j
+ j=std(j);
+ ==>
[1023:2]7(3)s8(2)s10s11(3)ss12(4)s(5)s13(6)s(8)s14(9).s(10).15--sH(23)(8)\
+
...16......17.......sH(21)(9)sH(20)16(10).17...........18.......19..----.\
+ .sH(19)
+ ==> product criterion:10 chain criterion:53
+ vdim(j); // compute the Tjurina number for t=0
+ ==> 195
+ t=1;
+ f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
+ +x^(c-2)*y^c*(y^2+t*x)^2;
+ ideal i1=jacob(f);
+ ideal j1=std(i1);
+ ==>
[1023:2]7(2)s8s10s11s12s13(3)ss(4)s14(5)s(6)s15(7).....s(8)16.s...s(9)..1\
+
7............s18(10).....s(11)..-.19.......sH(24)(10).....20...........21\
+
..........22.............................23..............................\
+ .24.----------.25.26
+ ==> product criterion:11 chain criterion:83
+ "The Milnor number of f(11,5,3) for t=1:",vdim(j1);
+ ==> The Milnor number of f(11,5,3) for t=1: 248
+ vdim(std(j1+f)); // compute the Tjurina number for t=1
+ ==>
[1023:2]7(16)s8(15)s10s11ss(16)-12.s-s13s(17)s(18)s(19)-s(18).-14-s(17)-s\
+
(16)ss(17)s15(18)..-s...--.16....-.......s(16).sH(23)s(18)...17..........\
+
18.........sH(20)17(17)....................18..........19..---....-.-....\
+
.....20.-----...s17(9).........18..............19..-.......20.-......21..\
+ .......sH(19)16(5).....18......19.-----
+ ==> product criterion:15 chain criterion:174
+ ==> 195
+ option(noprot);
+
+
+File: sing.htm, Node: Procedures and LIB, Next: Critical points, Prev:
Milnor and Tjurina, Up: Examples
+
+A.2 Procedures and LIB
+======================
+
+The computation of the Milnor number (for an arbitrary isolated complete
+intersection singularity ICIS) and the Tjurina number (for an arbitrary
+isolated singularity) can be done by using procedures from the library
+`sing.lib'. For a hypersurface singularity it is very easy to write a
+procedure which computes the Milnor number and the Tjurina number.
+
+We shall demonstrate:
+ * load the library `sing.lib'
+
+ * define a local ring in 2 variables and characteristic 0
+
+ * define a plane curve singularity
+
+ * compute Milnor number and Tjurina number by using the procedures
+ `milnor' and `tjurina'
+
+ * write your own procedures: (A procedure has a list of input
+ parameters and of return values, both lists may be empty.)
+
+ - the procedure `mil' which must be called with one
+ parameter, a polynomial. The name g is local to the
+ procedure and is killed automatically. `mil' returns the
+ Milnor number (and displays a comment).
+
+ - the procedure `tjur' where the parameters are not specified.
+ They are referred to by `#[1]' for the 1st, `#[2]' for the
+ 2nd parameter, etc. `tjur' returns the Tjurina number (and
+ displays a comment).
+
+ - the procedure `milrina' which returns a list consisting of two
+ integers, the Milnor and the Tjurina number.
+
+ LIB "sing.lib";
+ // you should get the information that sing.lib has been loaded
+ // together with some other libraries which are needed by sing.lib
+ ring r = 0,(x,y),ds;
+ poly f = x7+y7+(x-y)^2*x2y2;
+ milnor(f);
+ ==> 28
+ tjurina(f);
+ ==> 24
+
+ proc mil (poly g)
+ {
+ "Milnor number:";
+ return(vdim(std(jacob(g))));
+ }
+ mil(f);
+ ==> Milnor number:
+ ==> 28
+
+ proc tjur
+ {
+ "Tjurina number:";
+ return(vdim(std(jacob(#[1])+#[1])));
+ }
+ tjur(f);
+ ==> Tjurina number:
+ ==> 24
+
+ proc milrina (poly f)
+ {
+ ideal j=jacob(f);
+ list L=vdim(std(j)),vdim(std(j+f));
+ return(L);
+ }
+ milrina(f); // a list containing Milnor and Tjurina number
+ ==> [1]:
+ ==> 28
+ ==> [2]:
+ ==> 24
+ milrina(f)[2]; // the second element of the list
+ ==> 24
+
+
+File: sing.htm, Node: Critical points, Next: Saturation, Prev: Procedures
and LIB, Up: Examples
+
+A.3 Critical points
+===================
+
+The same computation which computes the Milnor, resp. the Tjurina,
+number, but with ordering `dp' instead of `ds' (i.e., in $K[x_1,\ldots,x_n]$
+K[x1,...,xn] instead of $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$
+Loc_(x)K[x1,...,xn]) gives:
+ * the number of critical points of `f' in the affine plane (counted
+ with multiplicities)
+
+ * the number of singular points of `f' on the affine plane curve
+ `f'=0 (counted with multiplicities).
+
+We start with the ring `r1' from section *note Milnor and Tjurina:: and
+its elements.
+
+The following will be realized below:
+ * reset the protocol option and activate the timer
+
+ * define the ring `r2' with char 32003, variables `x,y,z' and
+ monomial ordering `dp' (= degrevlex) (i.e., the polynomial ring =
+ K[x,y,z]).
+
+ * Note that polynomials, ideals, matrices (of polys), vectors,
+ modules belong to a ring, hence we have to define `f' and
+ `jacob(f)' again in `r2'. Since these objects are local to a
+ ring, we may use the same names. Instead of defining `f' again
+ we map it from ring `r1' to `r2' by using the `imap' command
+ (`imap' is a convenient way to map variables from some ring
+ identically to variables with the same name in the basering, even
+ if the ground field is different. Compare with `fetch' which
+ works for almost identical rings, e.g., if the rings differ only
+ by the ordering or by the names of the variables and which may be
+ used to rename variables). Integers and strings, however, do not
+ belong to any ring. Once defined they are globally known.
+
+ * The result of the computation here (together with the previous one
+ in *note Milnor and Tjurina::) shows that (for `t'=0)
$\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/\hbox{jacob}(f))$
+ dim_K(Loc_(x,y,z)K[x,y,z]/jacob(f)) = 250 (previously computed)
+ while $\hbox{dim}_K(K[x,y,z]/\hbox{jacob}(f))$
+ dim_K(K[x,y,z]/jacob(f)) = 536. Hence `f' has 286 critical
+ points, counted with multiplicity, outside the origin.
+ Moreover, since
$\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/(\hbox{jacob}(f)+(f)))$
+ dim_K(Loc_(x,y,z)K[x,y,z]/(jacob(f)+(f))) = 195 =
$\hbox{dim}_K(K[x,y,z]/(\hbox{jacob}(f)+(f)))$,
+ dim_K(K[x,y,z]/(jacob(f)+(f))), the affine surface `f'=0 is smooth
+ outside the origin.
+
+ ring r1 = 32003,(x,y,z),ds;
+ int a,b,c,t=11,5,3,0;
+ poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+
+ x^(c-2)*y^c*(y^2+t*x)^2;
+ option(noprot);
+ timer=1;
+ ring r2 = 32003,(x,y,z),dp;
+ poly f=imap(r1,f);
+ ideal j=jacob(f);
+ vdim(std(j));
+ ==> 536
+ vdim(std(j+f));
+ ==> 195
+ timer=0; // reset timer
+
+
+File: sing.htm, Node: Saturation, Next: Long coefficients, Prev: Critical
points, Up: Examples
+
+A.4 Saturation
+==============
+
+Since in the example above, the ideal j+(f) $j+(f)$
+ has the same `vdim' in the polynomial ring and in the localization at 0
+(each 195),
+
+f=0 $f=0$
+ is smooth outside 0. Hence j+(f) $j+(f)$
+ contains some power of the maximal ideal m $m$
+. We shall check this in a different manner: For any two ideals i, j $i, j$
+ in the basering R $R$
+ let $$
+\hbox{sat}(i,j)=\{x\in R\;|\; \exists\;n\hbox{ s.t. }
+x\cdot(j^n)\subseteq i\}
+= \bigcup_{n=1}^\infty i:j^n$$
+
+sat(i,j) = {x in R | there is an n s.t. x*(j^n) contained in i}
+= union_(n=1...) of i:j^n,
+denote the saturation of i $i$
+ with respect to j $j$
+. This defines, geometrically, the closure of the complement of V( j $j$
+) in V( i $i$
+) (V( i $i$
+) denotes the variety defined by i $i$
+). In our case, sat(j+(f),m) $sat(j+(f),m)$
+ must be the whole ring, hence generated by 1.
+
+The saturation is computed by the procedure `sat' in `elim.lib' by
+computing iterated ideal quotients with the maximal ideal. `sat'
+returns a list of two elements: the saturated ideal and the number of
+iterations. (Note that `maxideal(n)' denotes the n-th power of the
+maximal ideal).
+
+ LIB "elim.lib"; // loading library elim.lib
+ // you should get the information that elim.lib has been loaded
+ // together with some other libraries which are needed by it
+ option(noprot); // no protocol
+ ring r2 = 32003,(x,y,z),dp;
+ poly f = x^11+y^5+z^(3*3)+x^(3+2)*y^(3-1)+x^(3-1)*y^(3-1)*z3+
+ x^(3-2)*y^3*(y^2)^2;
+ ideal j=jacob(f);
+ sat(j+f,maxideal(1));
+ ==> [1]:
+ ==> _[1]=1
+ ==> [2]:
+ ==> 17
+ // list the variables defined so far:
+ listvar();
+ ==> // r2 [0] *ring
+ ==> // j [0] ideal, 3 generator(s)
+ ==> // f [0] poly
+ ==> // LIB [0] string standard.lib,elim.li..., 83
char(s)
+
+
+File: sing.htm, Node: Long coefficients, Next: Parameters, Prev:
Saturation, Up: Examples
+
+A.5 Long coefficients
+=====================
+
+The following innocent example produces in its standard basis extremely
+long coefficients in char 0 for the lexicographical ordering. But a
+very small deformation does not (the undeformed example is degenerate
+with respect to the Newton boundary). This example demonstrates that it
+might be wise, for complicated examples, to do the calculation first in
+positive char (e.g., 32003). It has been shown, that in complicated
+examples, more than 95 percent of the time needed for a standard basis
+computation is used in the computation of the coefficients (in char 0).
+The representation of long integers with real is demonstrated.
+
+ timer = 1; // activate the timer
+ option(prot);
+ ring R0 = 0,(x,y),lp;
+ poly f = x5+y11+xy9+x3y9;
+ ideal i = jacob(f);
+ ideal i1 = i,i[1]*i[2]; // undeformed ideal
+ ideal i2 = i,i[1]*i[2]+1/1000000*x5y8; // deformation of i1
+ i1; i2;
+ ==> i1[1]=5x4+3x2y9+y9
+ ==> i1[2]=9x3y8+9xy8+11y10
+ ==> i1[3]=45x7y8+27x5y17+45x5y8+55x4y10+36x3y17+33x2y19+9xy17+11y19
+ ==> i2[1]=5x4+3x2y9+y9
+ ==> i2[2]=9x3y8+9xy8+11y10
+ ==>
i2[3]=45x7y8+27x5y17+45000001/1000000x5y8+55x4y10+36x3y17+33x2y19+9xy17+1\
+ 1y19
+ ideal j = std(i1);
+ ==>
[65535:1]11(2)ss19s20s21s22(3)-23-s27s28s29s30s31s32s33s34s35s36s37s38s39\
+ s40s70-
+ ==> product criterion:1 chain criterion:30
+ j;
+ ==>
j[1]=264627y39+26244y35-1323135y30-131220y26+1715175y21+164025y17+1830125\
+ y16
+ ==>
j[2]=12103947791971846719838321886393392913750065060875xy8-28639152114168\
+
3198701331939250003266767738632875y38-31954402206909026926764622877573565\
+
78554430672591y37+57436621420822663849721381265738895282846320y36+1657764\
+
214948799497573918210031067353932439400y35+213018481589308191195677223898\
+
98682697001205500y34+1822194158663066565585991976961565719648069806148y33\
+
-4701709279892816135156972313196394005220175y32-1351872269688192267600786\
+
97600850686824231975y31-3873063305929810816961516976025038053001141375y30\
+
+1325886675843874047990382005421144061861290080000y29+1597720195476063141\
+
9467945895542406089526966887310y28-26270181336309092660633348002625330426\
+
7126525y27-7586082690893335269027136248944859544727953125y26-867853074106\
+
49464602285843351672148965395945625y25-5545808143273594102173252331151835\
+
700278863924745y24+19075563013460437364679153779038394895638325y23+548562\
+
322715501761058348996776922561074021125y22+157465452677648386073957464715\
+
68100780933983125y21-1414279129721176222978654235817359505555191156250y20\
+
-20711190069445893615213399650035715378169943423125y19+272942733337472665\
+
573418092977905322984009750y18+789065115845334505801847294677413365720955\
+
3750y17+63554897038491686787729656061044724651089803125y16-22099251729923\
+
906699732244761028266074350255961625y14+147937139679655904353579489722585\
+ 91339027857296625y10
+ ==> j[3]=5x4+3x2y9+y9
+ // Compute average coefficient length (=51) by
+ // - converting j[2] to a string in order to compute the number
+ // of characters
+ // - divide this by the number of monomials:
+ size(string(j[2]))/size(j[2]);
+ ==> 51
+ vdim(j);
+ ==> 63
+ // For a better representation normalize the long coefficients
+ // of the polynomial j[2] and map it to real:
+ poly p=(1/12103947791971846719838321886393392913750065060875)*j[2];
+ ring R1=real,(x,y),lp;
+ short=0; // force the long output format
+ poly p=imap(R0,p);
+ p;
+ ==>
x*y^8-2.366e-02*y^38-2.640e-01*y^37+4.745e-06*y^36+1.370e-04*y^35+1.760e-\
+
03*y^34+1.505e-01*y^33+3.884e-07*y^32-1.117e-05*y^31-3.200e-04*y^30+1.095\
+
e-01*y^29+1.320e+00*y^28-2.170e-05*y^27-6.267e-04*y^26-7.170e-03*y^25-4.5\
+
82e-01*y^24+1.576e-06*y^23+4.532e-05*y^22+1.301e-03*y^21-1.168e-01*y^20-1\
+
.711e+00*y^19+2.255e-05*y^18+6.519e-04*y^17+5.251e-03*y^16-1.826e+00*y^14\
+ +1.222e+00*y^10
+ // Compute a standard basis for the deformed ideal:
+ setring R0;
+ j = std(i2);
+ ==>
[65535:1]11(2)ss19s20s21s22(3)-s23(2)s27.28.s29(3)s30.s31ss32sss33sss34ss\
+ 35--38-
+ ==> product criterion:11 chain criterion:21
+ j;
+ ==> j[1]=y16
+ ==>
j[2]=65610xy8+17393508y27+7223337y23+545292y19+6442040y18-119790y14+80190\
+ y10
+ ==> j[3]=5x4+3x2y9+y9
+ vdim(j);
+ ==> 40
+
+
+File: sing.htm, Node: Parameters, Next: T1 and T2, Prev: Long coefficients,
Up: Examples
+
+A.6 Parameters
+==============
+
+Let us deform the above ideal now by introducing a parameter t and
+compute over the ground field Q(t). We compute the dimension at the
+generic point, i.e., $dim_{Q(t)}Q(t)[x,y]/j$.
+dim_Q(t) Q(t)[x,y]/j. (This gives the same result as for the deformed
+ideal above. Hence, the above small deformation was "generic".)
+
+For almost all $a \in Q$
+a in Q this is the same as $dim_Q Q[x,y]/j_0$,
+dim_Q Q[x,y]/j0, where $j_0=j|_{t=a}$.
+j_0=j_t=a
+
+ ring Rt = (0,t),(x,y),lp;
+ Rt;
+ ==> // characteristic : 0
+ ==> // 1 parameter : t
+ ==> // minpoly : 0
+ ==> // number of vars : 2
+ ==> // block 1 : ordering lp
+ ==> // : names x y
+ ==> // block 2 : ordering C
+ poly f = x5+y11+xy9+x3y9;
+ ideal i = jacob(f);
+ ideal j = i,i[1]*i[2]+t*x5y8; // deformed ideal, parameter t
+ vdim(std(j));
+ ==> 40
+ ring R=0,(x,y),lp;
+ ideal i=imap(Rt,i);
+ int a=random(1,30000);
+ ideal j=i,i[1]*i[2]+a*x5y8; // deformed ideal, fixed integer a
+ vdim(std(j));
+ ==> 40
+
+
+File: sing.htm, Node: T1 and T2, Next: Deformations, Prev: Parameters, Up:
Examples
+
+A.7 T1 and T2
+=============
+
+T^1 $T^1$
+, resp. T^2 $T^2$
+, of an ideal j $j$
+ usually denote the modules of infinitesimal deformations, resp. of
+obstructions. In SINGULAR there are procedures `T_1' and `T_2' in
+`sing.lib' such that `T_1(j)' and `T_2(j)' compute a standard basis of a
+presentation of these modules. If T_1 and T_2 are finite dimensional
+K-vector spaces (e.g., for isolated singularities), a basis can be
+computed by applying `kbase(T_1(j));', resp. `kbase(T_2(j));', the
+dimensions by applying `vdim'. For a complete intersection j the
+procedure `Tjurina' also computes T_1, but faster (T_2=0 in this case).
+For a non complete intersection, it is faster to use the procedure
+`T_12' instead of `T_1' and `T_2'. Type `help T_1;' (or `help T_2;' or
+`help T_12;') to obtain more detailed information about these
+procedures.
+
+We give three examples, the first being a hypersurface, the second a
+complete intersection, the third no complete intersection:
+ * load `sing.lib'
+
+ * check whether the ideal j is a complete intersection. It is, if
+ number of variables = dimension + minimal number of generators
+
+ * compute the Tjurina number
+
+ * compute a vector space basis (kbase) of T_1
+
+ * compute the Hilbert function of T_1
+
+ * create a polynomial encoding the Hilbert series
+
+ * compute the dimension of T_2
+
+ LIB "sing.lib";
+ ring R=32003,(x,y,z),ds;
+ // ---------------------------------------
+ // hypersurface case (from series T[p,q,r]):
+ int p,q,r = 3,3,4;
+ poly f = x^p+y^q+z^r+xyz;
+ tjurina(f);
+ ==> 8
+ // Tjurina number = 8
+ kbase(Tjurina(f));
+ ==> // Tjurina number = 8
+ ==> _[1]=z3
+ ==> _[2]=z2
+ ==> _[3]=yz
+ ==> _[4]=xz
+ ==> _[5]=z
+ ==> _[6]=y
+ ==> _[7]=x
+ ==> _[8]=1
+ // ---------------------------------------
+ // complete intersection case (from series P[k,l]):
+ int k,l =3,2;
+ ideal j=xy,x^k+y^l+z2;
+ dim(std(j)); // Krull dimension
+ ==> 1
+ size(minbase(j)); // minimal number of generators
+ ==> 2
+ tjurina(j); // Tjurina number
+ ==> 6
+ module T=Tjurina(j);
+ ==> // Tjurina number = 6
+ kbase(T); // a sparse output of the k-basis of T_1
+ ==> _[1]=z*gen(1)
+ ==> _[2]=gen(1)
+ ==> _[3]=y*gen(2)
+ ==> _[4]=x2*gen(2)
+ ==> _[5]=x*gen(2)
+ ==> _[6]=gen(2)
+ print(kbase(T)); // columns of matrix are a k-basis of T_1
+ ==> z,1,0,0, 0,0,
+ ==> 0,0,y,x2,x,1
+ // ---------------------------------------
+ // general case (cone over rational normal curve of degree 4):
+ ring r1=0,(x,y,z,u,v),ds;
+ matrix m[2][4]=x,y,z,u,y,z,u,v;
+ ideal i=minor(m,2); // 2x2 minors of matrix m
+ module M=T_1(i); // a presentation matrix of T_1
+ ==> // dim T_1 = 4
+ vdim(M); // Tjurina number
+ ==> 4
+ hilb(M); // display of both Hilbert series
+ ==> // 4 t^0
+ ==> // -20 t^1
+ ==> // 40 t^2
+ ==> // -40 t^3
+ ==> // 20 t^4
+ ==> // -4 t^5
+ ==>
+ ==> // 4 t^0
+ ==> // dimension (local) = 0
+ ==> // multiplicity = 4
+ intvec v1=hilb(M,1); // first Hilbert series as intvec
+ intvec v2=hilb(M,2); // second Hilbert series as intvec
+ v1;
+ ==> 4,-20,40,-40,20,-4,0
+ v2;
+ ==> 4,0
+ v1[3]; // 3rd coefficient of the 1st Hilbert series
+ ==> 40
+ module N=T_2(i);
+ ==> // dim T_2 = 3
+ // In some cases it might be useful to have a polynomial in some ring
+ // encoding the Hilbert series. This polynomial can then be
+ // differentiated, evaluated etc. It can be done as follows:
+ ring H = 0,t,ls;
+ poly h1;
+ int ii;
+ for (ii=1; ii<=size(v1); ii=ii+1)
+ {
+ h1=h1+v1[ii]*t^(ii-1);
+ }
+ h1; // 1st Hilbert series
+ ==> 4-20t+40t2-40t3+20t4-4t5
+ diff(h1,t); // differentiate h1
+ ==> -20+80t-120t2+80t3-20t4
+ subst(h1,t,1); // substitute t by 1
+ ==> 0
+
+ // The procedures T_1, T_2, T_12 may be called with two arguments and then
+ // they return a list with more information (type help T_1; etc.)
+ // e.g., T_12(i,<any>); returns a list with 9 nonempty objects where
+ // _[1] = std basis of T_1-module, _[2] = std basis of T_2-module,
+ // _[3]= vdim of T_1, _[4]= vdim of T_2
+ setring r1; // make r1 again the basering
+ list L = T_12(i,1);
+ ==> // dim T_1 = 4
+ ==> // dim T_2 = 3
+ kbase(L[1]); // kbase of T_1
+ ==> _[1]=1*gen(2)
+ ==> _[2]=1*gen(3)
+ ==> _[3]=1*gen(6)
+ ==> _[4]=1*gen(7)
+ kbase(L[2]); // kbase of T_2
+ ==> _[1]=1*gen(6)
+ ==> _[2]=1*gen(8)
+ ==> _[3]=1*gen(9)
+ L[3]; // vdim of T_1
+ ==> 4
+ L[4]; // vdim of T_2
+ ==> 3
+
+
+File: sing.htm, Node: Deformations, Next: Finite fields, Prev: T1 and T2,
Up: Examples
+
+A.8 Deformations
+================
+
+ * The libraries `sing.lib', resp. `deform.lib', contain procedures to
+ compute total and base space of the miniversal (= semiuniversal)
+ deformation of an isolated complete intersection singularity, resp.
+ arbitrary isolated singularity.
+
+ * The procedure `deform' in `sing.lib' returns a matrix whose columns
+ `h_1,..., h_r' $h_1,\ldots,h_r$
+ represent all 1st order deformations. More precisely, if I in R is
+ the ideal generated by `f_1,...,f_s', then any infinitesimal
+ deformation of R/I over K[e]/(e^2) is given by `f+eg', where
+ f=(f_1,...,f_s), g a K-linear combination of the h_i. $I \subset R$ is
the ideal generated by $f_1,...,f_s$, then any infinitesimal
+ deformation of $R/I$ over $K[\varepsilon]/(\varepsilon^2)$ is given
+ by $f+\varepsilon g$,
+ where $f=(f_1,...,f_s)$, $g$ a $K$-linear combination of the $h_i$.
+
+ * The procedure `versal' in `deform.lib' computes a formal miniversal
+ deformation up to a certain order which can be prescribed by the
+ user. For a complete intersection the 1st order part is already
+ miniversal.
+
+ * The procedure `versal' extends the basering to a new ring with
+ additional deformation parameters which contains the equations for
+ the miniversal base space and the miniversal total space.
+
+ * There are default names for the objects created, but the user may
+ also choose his own names.
+
+ * If the user sets `printlevel=2;' before running `versal', some
+ intermediate results are shown. This is useful since `versal' is
+ already complicated and might run for some time on more complicated
+ examples. (type `help versal;')
+
+We compute for the same examples as in the preceding section the
+miniversal deformations:
+
+ LIB "deform.lib";
+ ring R=32003,(x,y,z),ds;
+ //----------------------------------------------------
+ // hypersurface case (from series T[p,q,r]):
+ int p,q,r = 3,3,4;
+ poly f = x^p+y^q+z^r+xyz;
+ print(deform(f));
+ ==> z3,z2,yz,xz,z,y,x,1
+ // the miniversal deformation of f=0 is the projection from the
+ // miniversal total space to the miniversal base space:
+ // { (A,B,C,D,E,F,G,H,x,y,z) | x3+y3+xyz+z4+A+Bx+Cxz+Dy+Eyz+Fz+Gz2+Hz3
=0 }
+ // --> { (A,B,C,D,E,F,G,H) }
+ //----------------------------------------------------
+ // complete intersection case (from series P[k,l]):
+ int k,l =3,2;
+ ideal j=xy,x^k+y^l+z2;
+ print(deform(j));
+ ==> 0,0, 0,0,z,1,
+ ==> y,x2,x,1,0,0
+ versal(j); // using default names
+ ==> // smooth base space
+ ==> // ready: T_1 and T_2
+ ==>
+ ==> // Result belongs to ring Px.
+ ==> // Equations of total space of miniversal deformation are
+ ==> // given by Fs, equations of miniversal base space by Js.
+ ==> // Make Px the basering and list objects defined in Px by typing:
+ ==> setring Px; show(Px);
+ ==> listvar(matrix);
+ ==> // NOTE: rings Qx, Px, So are alive!
+ ==> // (use 'kill_rings("");' to remove)
+ setring Px;
+ show(Px); // show is a procedure from inout.lib
+ ==> // ring: (32003),(A,B,C,D,E,F,x,y,z),(ds(6),ds(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // Rs [0] matrix 2 x 1
+ ==> // Fs [0] matrix 1 x 2
+ ==> // Js [0] matrix 1 x 0
+ listvar(matrix);
+ ==> // Rs [0] matrix 2 x 1
+ ==> // Fs [0] matrix 1 x 2
+ ==> // Js [0] matrix 1 x 0
+ // ___ Equations of miniversal base space ___:
+ Js;
+ ==>
+ // ___ Equations of miniversal total space ___:
+ Fs;
+ ==> Fs[1,1]=xy+Ez+F
+ ==> Fs[1,2]=y2+z2+x3+Ay+Bx2+Cx+D
+ // the miniversal deformation of V(j) is the projection from the
+ // miniversal total space to the miniversal base space:
+ // { (A,B,C,D,E,F,x,y,z) | xy+F+Ez=0, y2+z2+x3+D+Cx+Bx2+Ay=0 }
+ // --> { (A,B,C,D,E,F) }
+ //----------------------------------------------------
+ // general case (cone over rational normal curve of degree 4):
+ ring r1=0,(x,y,z,u,v),ds;
+ matrix m[2][4]=x,y,z,u,y,z,u,v;
+ ideal i=minor(m,2); // 2x2 minors of matrix m
+ int time=timer;
+ // Def_r is the name of the miniversal base space with
+ // parameters A(1),...,A(4)
+ versal(i,0,"Def_r","A(");
+ ==> // ready: T_1 and T_2
+ ==>
+ ==> // Result belongs to ring Def_rPx.
+ ==> // Equations of total space of miniversal deformation are
+ ==> // given by Fs, equations of miniversal base space by Js.
+ ==> // Make Def_rPx the basering and list objects defined in Def_rPx by
typin\
+ g:
+ ==> setring Def_rPx; show(Def_rPx);
+ ==> listvar(matrix);
+ ==> // NOTE: rings Def_rQx, Def_rPx, Def_rSo are alive!
+ ==> // (use 'kill_rings("Def_r");' to remove)
+ "// used time:",timer-time,"sec"; // time of last command
+ ==> // used time: 1 sec
+ // the miniversal deformation of V(i) is the projection from the
+ // miniversal total space to the miniversal base space:
+ // { (A(1..4),x,y,z,u,v) |
+ // -y^2+x*z+A(2)*x-A(3)*y=0, -y*z+x*u-A(1)*x-A(3)*z=0,
+ // -y*u+x*v-A(3)*u-A(4)*z=0, -z^2+y*u-A(1)*y-A(2)*z=0,
+ // -z*u+y*v-A(2)*u-A(4)*u=0, -u^2+z*v+A(1)*u-A(4)*v=0 }
+ // --> { A(1..4) |
+ // -A(1)*A(4) = A(3)*A(4) = -A(2)*A(4)-A(4)^2 = 0 }
+ //----------------------------------------------------
+
+
+File: sing.htm, Node: Finite fields, Next: Elimination, Prev: Deformations,
Up: Examples
+
+A.9 Finite fields
+=================
+
+We define a variety in n $n$
+-space of codimension 2 defined by polynomials of degree d $d$
+ with generic coefficients over the prime field Z/p $Z/p$
+ and look for zeros on the torus. First over the prime field and then in
+the finite extension field with $p^k$
+p^k elements. In general there will be many more solutions in the
+second case. (Since the SINGULAR language is interpreted, the
+evaluation of many `for'-loops is not very fast):
+
+ int p=3; int n=3; int d=5; int k=2;
+ ring rp = p,(x(1..n)),dp;
+ int s = size(maxideal(d));
+ s;
+ ==> 21
+ // create a dense homogeneous ideal m, all generators of degree d, with
+ // generic (random) coefficients:
+ ideal m = maxideal(d)*random(p,s,n-2);
+ m;
+ ==>
m[1]=x(1)^3*x(2)^2-x(1)*x(2)^4+x(1)^4*x(3)-x(1)^3*x(2)*x(3)+x(1)*x(2)^3*x\
+ (3)+x(2)^4*x(3)+x(2)^3*x(3)^2+x(1)*x(2)*x(3)^3+x(1)*x(3)^4-x(3)^5
+ // look for zeros on the torus by checking all points (with no
component 0)
+ // of the affine n-space over the field with p elements :
+ ideal mt;
+ int i(1..n); // initialize integers i(1),...,i(n)
+ int l;
+ s=0;
+ for (i(1)=1;i(1)<p;i(1)=i(1)+1)
+ {
+ for (i(2)=1;i(2)<p;i(2)=i(2)+1)
+ {
+ for (i(3)=1;i(3)<p;i(3)=i(3)+1)
+ {
+ mt=m;
+ for (l=1;l<=n;l=l+1)
+ {
+ mt=subst(mt,x(l),i(l));
+ }
+ if (size(mt)==0)
+ {
+ "solution:",i(1..n);
+ s=s+1;
+ }
+ }
+ }
+ }
+ ==> solution: 1 1 2
+ ==> solution: 1 2 1
+ ==> solution: 1 2 2
+ ==> solution: 2 1 1
+ ==> solution: 2 1 2
+ ==> solution: 2 2 1
+ "//",s,"solutions over GF("+string(p)+")";
+ ==> // 6 solutions over GF(3)
+ // Now go to the field with p^3 elements:
+ // As long as there is no map from Z/p to the field with p^3 elements
+ // implemented, use the following trick: convert the ideal to be mapped
+ // to the new ring to a string and then execute this string in the
+ // new ring
+ string ms="ideal m="+string(m)+";";
+ ms;
+ ==> ideal
m=x(1)^3*x(2)^2-x(1)*x(2)^4+x(1)^4*x(3)-x(1)^3*x(2)*x(3)+x(1)*x(2)^\
+ 3*x(3)+x(2)^4*x(3)+x(2)^3*x(3)^2+x(1)*x(2)*x(3)^3+x(1)*x(3)^4-x(3)^5;
+ // define a ring rpk with p^k elements, call the primitive element z.
Hence
+ // 'solution exponent: 0 1 5' means that (z^0,z^1,z^5) is a solution
+ ring rpk=(p^k,z),(x(1..n)),dp;
+ rpk;
+ ==> // # ground field : 9
+ ==> // primitive element : z
+ ==> // minpoly : 1*z^2+1*z^1+2*z^0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x(1) x(2) x(3)
+ ==> // block 2 : ordering C
+ execute(ms);
+ s=0;
+ ideal mt;
+ for (i(1)=0;i(1)<p^k-1;i(1)=i(1)+1)
+ {
+ for (i(2)=0;i(2)<p^k-1;i(2)=i(2)+1)
+ {
+ for (i(3)=0;i(3)<p^k-1;i(3)=i(3)+1)
+ {
+ mt=m;
+ for (l=1;l<=n;l=l+1)
+ {
+ mt=subst(mt,x(l),z^i(l));
+ }
+ if (size(mt)==0)
+ {
+ "solution exponent:",i(1..n);
+ s=s+1;
+ }
+ }
+ }
+ }
+ ==> solution exponent: 0 0 2
+ ==> solution exponent: 0 0 4
+ ==> solution exponent: 0 0 6
+ ==> solution exponent: 0 1 0
+ ==> solution exponent: 0 3 0
+ ==> solution exponent: 0 4 0
+ ==> solution exponent: 0 4 4
+ ==> solution exponent: 0 4 5
+ ==> solution exponent: 0 4 7
+ ==> solution exponent: 1 1 3
+ ==> solution exponent: 1 1 5
+ ==> solution exponent: 1 1 7
+ ==> solution exponent: 1 2 1
+ ==> solution exponent: 1 4 1
+ ==> solution exponent: 1 5 0
+ ==> solution exponent: 1 5 1
+ ==> solution exponent: 1 5 5
+ ==> solution exponent: 1 5 6
+ ==> solution exponent: 2 2 0
+ ==> solution exponent: 2 2 4
+ ==> solution exponent: 2 2 6
+ ==> solution exponent: 2 3 2
+ ==> solution exponent: 2 5 2
+ ==> solution exponent: 2 6 1
+ ==> solution exponent: 2 6 2
+ ==> solution exponent: 2 6 6
+ ==> solution exponent: 2 6 7
+ ==> solution exponent: 3 3 1
+ ==> solution exponent: 3 3 5
+ ==> solution exponent: 3 3 7
+ ==> solution exponent: 3 4 3
+ ==> solution exponent: 3 6 3
+ ==> solution exponent: 3 7 0
+ ==> solution exponent: 3 7 2
+ ==> solution exponent: 3 7 3
+ ==> solution exponent: 3 7 7
+ ==> solution exponent: 4 0 0
+ ==> solution exponent: 4 0 1
+ ==> solution exponent: 4 0 3
+ ==> solution exponent: 4 0 4
+ ==> solution exponent: 4 4 0
+ ==> solution exponent: 4 4 2
+ ==> solution exponent: 4 4 6
+ ==> solution exponent: 4 5 4
+ ==> solution exponent: 4 7 4
+ ==> solution exponent: 5 0 5
+ ==> solution exponent: 5 1 1
+ ==> solution exponent: 5 1 2
+ ==> solution exponent: 5 1 4
+ ==> solution exponent: 5 1 5
+ ==> solution exponent: 5 5 1
+ ==> solution exponent: 5 5 3
+ ==> solution exponent: 5 5 7
+ ==> solution exponent: 5 6 5
+ ==> solution exponent: 6 1 6
+ ==> solution exponent: 6 2 2
+ ==> solution exponent: 6 2 3
+ ==> solution exponent: 6 2 5
+ ==> solution exponent: 6 2 6
+ ==> solution exponent: 6 6 0
+ ==> solution exponent: 6 6 2
+ ==> solution exponent: 6 6 4
+ ==> solution exponent: 6 7 6
+ ==> solution exponent: 7 0 7
+ ==> solution exponent: 7 2 7
+ ==> solution exponent: 7 3 3
+ ==> solution exponent: 7 3 4
+ ==> solution exponent: 7 3 6
+ ==> solution exponent: 7 3 7
+ ==> solution exponent: 7 7 1
+ ==> solution exponent: 7 7 3
+ ==> solution exponent: 7 7 5
+ "//",s,"solutions over GF("+string(p^k)+")";
+ ==> // 72 solutions over GF(9)
+
+
+File: sing.htm, Node: Elimination, Next: Free resolution, Prev: Finite
fields, Up: Examples
+
+A.10 Elimination
+================
+
+Elimination is the algebraic counterpart of the geometric concept of
+projection. If $f=(f_1,\ldots,f_n):k^r\rightarrow k^n$
+f=(f1,...,fn) : k^r -> k^n is a polynomial map, the Zariski-closure of
+the image is the zero-set of the ideal $$
+\displaylines{
+j=J \cap k[x_1,\ldots,x_n], \;\quad\hbox{\rm where}\cr
+J=(x_1-f_1(t_1,\ldots,t_r),\ldots,x_n-f_n(t_1,\ldots,t_r))\subseteq
+k[t_1,\ldots,t_r,x_1,\ldots,x_n]
+}
+$$
+
+ j = J intersected with K[x1,...,xn]
+ J=(x1-f1(t1,...,tr),...,xn-fn(t1,...,tr)) in k[t1,...tr,x1,...,xn]
+
+i.e, of the ideal j obtained from J by eliminating the variables
$t_1,\ldots,t_r$.
+t1,...,tr. This can be done by computing a standard basis of J with
+respect to a product ordering where the block of t-variables precedes
+the block of x-variables and then selecting those polynomials which do
+not contain any t. In SINGULAR the most convenient way is to use the
+`eliminate' command. In contrast to the first method, with `eliminate'
+the result needs not be a standard basis in the given ordering. Hence,
+there may be cases where the first method is the preferred one.
+
+*WARNING:* In the case of a local or a mixed ordering, elimination needs
+special care. f may be considered as a map of germs
$f:(k^r,0)\rightarrow(k^n,0)$,
+f : (k^r,0) -> (k^n,0), but even if this map germ is finite, we are in
+general not able to compute the image germ because for this we would
+need an implementation of the Weierstrass preparation theorem. What we
+can compute, and what `eliminate' actually does, is the following: let
+V(J) be the zero-set of J in $k^r\times(k^n,0)$,
+k^r x (k^n,0), then the closure of the image of V(J) under the
+projection $$\hbox{pr}:k^r\times(k^n,0)\rightarrow(k^n,0)$$
+can be computed.
+
+pr: k^r x (k^n,0) -> (k^n,0)
+can be computed. Note that this germ contains also those components of
+V(J) which meet the fiber of pr outside the origin. This is achieved by
+an ordering with the block of t-variables having a global ordering (and
+preceding the x-variables) and the x-variables having a local ordering.
+In a local situation we propose `eliminate' with ordering ls.
+
+In any case, if the input is weighted homogeneous (=quasihomogeneous),
+the weights given to the variables should be chosen accordingly.
+SINGULAR offers a function `weight' which proposes, given an ideal or
+module, integer weights for the variables, such that the ideal, resp.
+module, is as homogeneous as possible with respect to these weights.
+The function finds correct weights, if the input is weighted homogeneous
+(but is rather slow for many variables). In order to check, whether the
+input is quasihomogeneous, use the function `qhweight', which returns an
+intvec of correct weights if the input is quasihomogeneous and an intvec
+of zeros otherwise.
+
+Let us give two examples:
+ 1. First we compute the equations of the simple space curve
$\hbox{T}[7]^\prime$
+ T[7]' consisting of two tangential cusps given in parametric
+ form.
+
+ 2. We compute weights for the equations such that the equations are
+ quasihomogeneous w.r.t. these weights.
+
+ 3. Then we compute the tangent developable of the rational normal
+ curve in $P^4$.
+ P^4.
+
+ // 1. Compute equations of curve given in parametric form:
+ // Two transversal cusps in (k^3,0):
+ ring r1 = 0,(t,x,y,z),ls;
+ ideal i1 = x-t2,y-t3,z; // parametrization of the first branch
+ ideal i2 = y-t2,z-t3,x; // parametrization of the second branch
+ ideal j1 = eliminate(i1,t);
+ j1; // equations of the first branch
+ ==> j1[1]=z
+ ==> j1[2]=y2-x3
+ ideal j2 = eliminate(i2,t);
+ j2; // equations of the second branch
+ ==> j2[1]=x
+ ==> j2[2]=z2-y3
+ // Now map to a ring with only x,y,z as variables and compute the
+ // intersection of j1 and j2 there:
+ ring r2 = 0,(x,y,z),ds;
+ ideal j1= imap(r1,j1); // imap is a convenient ringmap for
+ ideal j2= imap(r1,j2); // inclusions and projections of rings
+ ideal i = intersect(j1,j2);
+ i; // equations of both branches
+ ==> i[1]=z2-y3+x3y
+ ==> i[2]=xz
+ ==> i[3]=xy2-x4
+ ==> i[4]=x3z
+ //
+ // 2. Compute the weights:
+ intvec v= qhweight(i); // compute weights
+ v;
+ ==> 4,6,9
+ //
+ // 3. Compute the tangent developable
+ // The tangent developable of a projective variety given parametrically
+ // by F=(f1,...,fn) : P^r --> P^n is the union of all tangent spaces
+ // of the image. The tangent space at a smooth point F(t1,...,tr)
+ // is given as the image of the tangent space at (t1,...,tr) under
+ // the tangent map (affine coordinates)
+ // T(t1,...,tr): (y1,...,yr) --> jacob(f)*transpose((y1,...,yr))
+ // where jacob(f) denotes the jacobian matrix of f with respect to the
+ // t's evaluated at the point (t1,...,tr).
+ // Hence we have to create the graph of this map and then to eliminate
+ // the t's and y's.
+ // The rational normal curve in P^4 is given as the image of
+ // F(s,t) = (s4,s3t,s2t2,st3,t4)
+ // each component being homogeneous of degree 4.
+ ring P = 0,(s,t,x,y,a,b,c,d,e),dp;
+ ideal M = maxideal(1);
+ ideal F = M[1..2]; // take the 1st two generators of M
+ F=F^4;
+ // simplify(...,2); deletes 0-columns
+ matrix jac = simplify(jacob(F),2);
+ ideal T = x,y;
+ ideal J = jac*transpose(T);
+ ideal H = M[5..9];
+ ideal i = H-J; // this is tricky: difference between two
+ // ideals is not defined, but between two
+ // matrices. By automatic type conversion
+ // the ideals are converted to matrices,
+ // subtracted and afterwards converted
+ // to an ideal. Note that '+' is defined
+ // and adds (concatenates) two ideals
+ i;
+ ==> i[1]=-4s3x+a
+ ==> i[2]=-3s2tx-s3y+b
+ ==> i[3]=-2st2x-2s2ty+c
+ ==> i[4]=-t3x-3st2y+d
+ ==> i[5]=-4t3y+e
+ // Now we define a ring with product ordering and weights 4
+ // for the variables a,...,e.
+ // Then we map i from P to P1 and eliminate s,t,x,y from i.
+ ring P1 = 0,(s,t,x,y,a,b,c,d,e),(dp(4),wp(4,4,4,4,4));
+ ideal i = fetch(P,i);
+ ideal j= eliminate(i,stxy); // equations of tangent developable
+ j;
+ ==> j[1]=3c2-4bd+ae
+ ==> j[2]=2bcd-3ad2-3b2e+4ace
+ ==> j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde
+ // We can use the product ordering to eliminate s,t,x,y from i
+ // by a std-basis computation.
+ // We need proc 'nselect' from elim.lib.
+ LIB "elim.lib";
+ j = std(i); // compute a std basis j
+ j = nselect(j,1,4); // select generators from j not
+ j; // containing variable 1,...,4
+ ==> j[1]=3c2-4bd+ae
+ ==> j[2]=2bcd-3ad2-3b2e+4ace
+ ==> j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde
+
+
+File: sing.htm, Node: Free resolution, Next: Computation of Ext, Prev:
Elimination, Up: Examples
+
+A.11 Free resolution
+====================
+
+In SINGULAR a free resolution of a module or ideal has its own type:
+`resolution'. It is a structure that stores all information related to
+free resolutions. This allows partial computations of resolutions via
+the command `res'. After applying `res', only a pre-format of the
+resolution is computed which allows to determine invariants like
+Betti-numbers or homological dimension. To see the differentials of the
+complex, a resolution must be converted into the type list which yields
+a list of modules: the k-th module in this list is the first
+syzygy-module (module of relations) of the (k-1)st module. There are
+the following commands to compute a resolution:
+`res'
+ *note res::
+ computes a free resolution of an ideal or module using a
+ heuristically chosen method. This is the preferred method to
+ compute free resolutions of ideals or modules.
+
+`lres'
+ *note lres::
+ computes a free resolution of an ideal or module with La Scala's
+ method. The input needs to be homogeneous.
+
+`mres'
+ *note mres::
+ computes a minimal free resolution of an ideal or module with the
+ syzygy method.
+
+`sres'
+ *note sres::
+ computes a free resolution of an ideal or module with Schreyer's
+ method. The input has to be a standard basis.
+
+`nres'
+ *note nres::
+ computes a free resolution of an ideal or module with the standard
+ basis method.
+
+`minres'
+ *note minres::
+ minimizes a free resolution of an ideal or module.
+
+`syz'
+ *note syz::
+ computes the first syzygy module.
+`res(i,r)', `lres(i,r)', `sres(i,r)', `mres(i,r)', `nres(i,r)' compute
+the first r modules of the resolution of i, resp. the full resolution if
+r=0 and the basering is not a qring. See the manual for a precise
+description of these commands.
+Note: The command `betti' does not require a minimal resolution for the
+minimal betti numbers.
+
+Now let's look at an example which uses resolutions: The Hilbert-Burch
+theorem says that the ideal i of a reduced curve in $K^3$
+K^3 has a free resolution of length 2 and that i is given by the 2x2
+minors of the 2nd matrix in the resolution. We test this for two
+transversal cusps in $K^3$.
+K^3. Afterwards we compute the resolution of the ideal j of the tangent
+developable of the rational normal curve in $P^4$
+P^4 from above. Finally we demonstrate the use of the type `resolution'
+in connection with the `lres' command.
+
+ // Two transversal cusps in (k^3,0):
+ ring r2 =0,(x,y,z),ds;
+ ideal i =z2-1y3+x3y,xz,-1xy2+x4,x3z;
+ resolution rs=mres(i,0); // computes a minimal resolution
+ rs; // the standard representation of complexes
+ ==> 1 3 2
+ ==> r2 <-- r2 <-- r2
+ ==>
+ ==> 0 1 2
+ ==>
+ list resi=rs; // convertion to a list
+ print(resi[1]); // the 1st module is i minimized
+ ==> xz,
+ ==> z2-y3+x3y,
+ ==> xy2-x4
+ print(resi[2]); // the 1st syzygy module of i
+ ==> -z,-y2+x3,
+ ==> x, 0,
+ ==> y, z
+ resi[3]; // the 2nd syzygy module of i
+ ==> _[1]=0
+ ideal j=minor(resi[2],2);
+ reduce(j,std(i)); // check whether j is contained in i
+ ==> _[1]=0
+ ==> _[2]=0
+ ==> _[3]=0
+ size(reduce(i,std(j))); // check whether i is contained in j
+ ==> 0
+ // size(<ideal>) counts the non-zero generators
+ // ---------------------------------------------
+ // The tangent developable of the rational normal curve in P^4:
+ ring P = 0,(a,b,c,d,e),dp;
+ ideal j= 3c2-4bd+ae, -2bcd+3ad2+3b2e-4ace,
+ 8b2d2-9acd2-9b2ce+9ac2e+2abde-1a2e2;
+ resolution rs=mres(j,0);
+ rs;
+ ==> 1 2 1
+ ==> P <-- P <-- P
+ ==>
+ ==> 0 1 2
+ ==>
+ list L=rs;
+ print(L[2]);
+ ==> 2bcd-3ad2-3b2e+4ace,
+ ==> -3c2+4bd-ae
+ // create an intmat with graded betti numbers
+ intmat B=betti(rs);
+ // this gives a nice output of betti numbers
+ print(B,"betti");
+ ==> 0 1 2
+ ==> ------------------------
+ ==> 0: 1 - -
+ ==> 1: - 1 -
+ ==> 2: - 1 -
+ ==> 3: - - 1
+ ==> ------------------------
+ ==> total: 1 2 1
+ // the user has access to all betti numbers
+ // the 2-nd column of B:
+ B[1..4,2];
+ ==> 0 1 1 0
+ ring cyc5=32003,(a,b,c,d,e,h),dp;
+ ideal i=
+ a+b+c+d+e,
+ ab+bc+cd+de+ea,
+ abc+bcd+cde+dea+eab,
+ abcd+bcde+cdea+deab+eabc,
+ h5-abcde;
+ resolution rs=lres(i,0); //computes the resolution according La Scala
+ rs; //the shape of the minimal resolution
+ ==> 1 5 10 10 5 1
+ ==> cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5
+ ==>
+ ==> 0 1 2 3 4 5
+ ==> resolution not minimized yet
+ ==>
+ print(betti(rs),"betti"); //shows the Betti-numbers of cyclic 5
+ ==> 0 1 2 3 4 5
+ ==> ------------------------------------------
+ ==> 0: 1 1 - - - -
+ ==> 1: - 1 1 - - -
+ ==> 2: - 1 1 - - -
+ ==> 3: - 1 2 1 - -
+ ==> 4: - 1 2 1 - -
+ ==> 5: - - 2 2 - -
+ ==> 6: - - 1 2 1 -
+ ==> 7: - - 1 2 1 -
+ ==> 8: - - - 1 1 -
+ ==> 9: - - - 1 1 -
+ ==> 10: - - - - 1 1
+ ==> ------------------------------------------
+ ==> total: 1 5 10 10 5 1
+ dim(rs); //the homological dimension
+ ==> 4
+ size(list(rs)); //gets the full (non-reduced) resolution
+ ==> 6
+ minres(rs); //minimizes the resolution
+ ==> 1 5 10 10 5 1
+ ==> cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5
+ ==>
+ ==> 0 1 2 3 4 5
+ ==>
+ size(list(rs)); //gets the minimized resolution
+ ==> 6
+
+
+File: sing.htm, Node: Computation of Ext, Next: Polar curves, Prev: Free
resolution, Up: Examples
+
+A.12 Computation of Ext
+=======================
+
+We start by showing how to calculate the n $n$
+-th Ext group of an ideal. The ingredients to do this are by the
+definition of Ext the following: calculate a (minimal) resolution at
+least up to length
+
+n $n$
+, apply the Hom-functor, and calculate the n $n$
+-th homology group, that is form the quotient $\hbox{\rm ker} / \hbox{\rm Im}$
+ker/Im in the resolution sequence.
+
+The Hom functor is given simply by transposing (hence dualizing) the
+module or the corresponding matrix with the command `transpose'. The
+image of the (n-1) $(n-1)$
+-st map is generated by the columns of the corresponding matrix. To
+calculate the kernel apply the command `syz' at the (n-1) $(n-1)$
+-st transposed entry of the resolution. Finally, the quotient is
+obtained by the command `modulo', which gives for two modules A = ker, B
+= Im the module of relations of $A/(A \cap B)$
+A/(A intersect B) in the usual way. As we have a chain complex this is
+obviously the same as ker/Im.
+
+We collect these statements in the following short procedure:
+
+ proc ext(int n, ideal I)
+ {
+ resolution rs = mres(I,n+1);
+ module tAn = transpose(rs[n+1]);
+ module tAn_1 = transpose(rs[n]);
+ module ext_n = modulo(syz(tAn),tAn_1);
+ return(ext_n);
+ }
+
+Now consider the following example:
+
+ ring r5 = 32003,(a,b,c,d,e),dp;
+ ideal I = a2b2+ab2c+b2cd, a2c2+ac2d+c2de,a2d2+ad2e+bd2e,a2e2+abe2+bce2;
+ print(ext(2,I));
+ ==> 1,0,0,0,0,0,0,
+ ==> 0,1,0,0,0,0,0,
+ ==> 0,0,1,0,0,0,0,
+ ==> 0,0,0,1,0,0,0,
+ ==> 0,0,0,0,1,0,0,
+ ==> 0,0,0,0,0,1,0,
+ ==> 0,0,0,0,0,0,1
+ ext(3,I); // too big to be displayed here
+
+The library `homolog.lib' contains several procedures for computing
+Ext-modules and related modules, which are much more general and
+sophisticated then the above one. They are used in the following
+example.
+
+If M $M$
+ is a module, then $\hbox{Ext}^1(M,M)$, resp.\ $\hbox{Ext}^2(M,M)$,
+Ext^1(M,M), resp. Ext^2(M,M), are the modules of infinitesimal
+deformations, resp. of obstructions, of
+
+M $M$
+ (like T1 and T2 for a singularity). Similar to the treatment for
+singularities, the semiuniversal deformation of M $M$
+ can be computed (if $\hbox{Ext}^1$
+Ext^1 is finite dimensional) with the help of $\hbox{Ext}^1$, $\hbox{Ext}^2$
+Ext^1, Ext^2 and the cup product. There is an extra procedure for
$\hbox{Ext}^k(R/J,R)$
+Ext^k(R/J,R) if J $J$
+ is an ideal in R $R$
+ since this is faster than the general Ext.
+
+We compute
+ * the infinitesimal deformations ($=\hbox{Ext}^1(K,K)$)
+ (=Ext^1(K,K)) and obstructions ($=\hbox{Ext}^2(K,K)$)
+ (=Ext^2(K,K)) of the residue field K=R/m $K=R/m$
+ of an ordinary cusp, $R=Loc_m K[x,y]/(x^2-y^3)$, $m=(x,y)$.
+ R=Loc_m K[x,y]/(x^2-y^3), m=(x,y). To compute $\hbox{Ext}^1(m,m)$
+ Ext^1(m,m), we have to apply `Ext(1,syz(m),syz(m))' with `syz(m)'
+ the first syzygy module of m $m$
+ , which is isomorphic to $\hbox{Ext}^2(K,K)$.
+ Ext^2(K,K).
+
+ * $\hbox{Ext}^k(R/i,R)$
+ Ext^k(R/i,R) for some ideal i $i$
+ and with an extra option.
+
+ LIB "homolog.lib";
+ ring R=0,(x,y),ds;
+ ideal i=x2-y3;
+ qring q = std(i); // defines the quotient ring Loc_m k[x,y]/(x2-y3)
+ ideal m = maxideal(1);
+ module T1K = Ext(1,m,m); // computes Ext^1(R/m,R/m)
+ ==> // dimension of Ext^1: 0
+ ==> // vdim of Ext^1: 2
+ ==>
+ print(T1K);
+ ==> 0, 0,y,x,0,y,0, x2-y3,
+ ==> -y2,x,x,0,y,0,x2-y3,0,
+ ==> 1, 0,0,0,0,0,0, 0
+ printlevel=2; // gives more explanation
+ module T2K=Ext(2,m,m); // computes Ext^2(R/m,R/m)
+ ==> // Computing Ext^2 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F2,G0)-->Hom(F3,G0) is given by:
+ ==> y2,x,
+ ==> x, y
+ ==> // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by:
+ ==> -y,x, x,0,y,0,
+ ==> x, -y2,0,x,0,y
+ ==>
+ ==> // dimension of Ext^2: 0
+ ==> // vdim of Ext^2: 2
+ ==>
+ print(std(T2K));
+ ==> -y2,0,x,0,y,
+ ==> 0, x,0,y,0,
+ ==> 1, 0,0,0,0
+ printlevel=0;
+ module E = Ext(1,syz(m),syz(m));
+ ==> // dimension of Ext^1: 0
+ ==> // vdim of Ext^1: 2
+ ==>
+ print(std(E));
+ ==> -y,x, 0, 0,0,x,0,y,
+ ==> 0, -y,-y,0,x,0,y,0,
+ ==> 0, 0, 0, 1,0,0,0,0,
+ ==> 0, 0, 1, 0,0,0,0,0,
+ ==> 0, 1, 0, 0,0,0,0,0,
+ ==> 1, 0, 0, 0,0,0,0,0
+ //The matrices which we have just computed are presentation matrices
+ //of the modules T2K and E. Hence we may ignore those columns
+ //containing 1 as an entry and see that T2K and E are isomorphic
+ //as expected, but differently presented.
+ //-------------------------------------------
+ ring S=0,(x,y,z),dp;
+ ideal i = x2y,y2z,z3x;
+ module E = Ext_R(2,i);
+ ==> // dimension of Ext^2: 1
+ ==>
+ print(E);
+ ==> 0,y,0,z2,
+ ==> z,0,0,-x,
+ ==> 0,0,x,-y
+ // if a 3-rd argument is given (of any type)
+ // a list of Ext^k(R/i,R), a SB of Ext^k(R/i,R) and a vector space basis
+ // is returned:
+ list LE = Ext_R(3,i,"");
+ ==> // dimension of Ext^3: 0
+ ==> // vdim of Ext^3: 2
+ ==>
+ LE;
+ ==> [1]:
+ ==> _[1]=y*gen(1)
+ ==> _[2]=x*gen(1)
+ ==> _[3]=z2*gen(1)
+ ==> [2]:
+ ==> _[1]=y*gen(1)
+ ==> _[2]=x*gen(1)
+ ==> _[3]=z2*gen(1)
+ ==> [3]:
+ ==> _[1,1]=z
+ ==> _[1,2]=1
+ print(LE[2]);
+ ==> y,x,z2
+ print(kbase(LE[2]));
+ ==> z,1
+
+
+File: sing.htm, Node: Polar curves, Next: Depth, Prev: Computation of Ext,
Up: Examples
+
+A.13 Polar curves
+=================
+
+The polar curve of a hypersurface given by a polynomial $f\in
k[x_1,\ldots,x_n,t]$
+f in k[x1,...,xn,t] with respect to t $t$
+ (we may consider f=0 $f=0$
+ as a family of hypersurfaces parametrized by t $t$
+) is defined as the Zariski closure of $V(\partial f/\partial
x_1,\ldots,\partial f/\partial x_n) \setminus V(f)$
+V(diff(f,x1),...,diff(f,xn)) \ V(f) if this happens to be a curve. Some
+authors consider $V(\partial f/\partial x_1,\ldots,\partial f/\partial x_n)$
+V(diff(f,x1),...,diff(f,xn)) itself as polar curve.
+
+We may consider projective hypersurfaces (in $P^n$),
+(in P^n), affine hypersurfaces (in $k^n$)
+(in k^n) or germs of hypersurfaces (in $(k^n,0)$),
+(in (k^n,0)), getting in this way projective, affine or local polar
+curves.
+
+Now let us compute this for a family of curves. We need the library
+`elim.lib' for saturation and `sing.lib' for the singular locus.
+
+ LIB "elim.lib";
+ LIB "sing.lib";
+ // Affine polar curve:
+ ring R = 0,(x,z,t),dp; // global ordering dp
+ poly f = z5+xz3+x2-tz6;
+ dim_slocus(f); // dimension of singular locus
+ ==> 1
+ ideal j = diff(f,x),diff(f,z);
+ dim(std(j)); // dim V(j)
+ ==> 1
+ dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
+ ==> 1
+ // j defines a curve, but to get the polar curve we must remove the
+ // branches contained in f=0 (they exist since dim V(j,f) = 1). This
+ // gives the polar curve set theoretically. But for the structure we
+ // may take either j:f or j:f^k for k sufficiently large. The first is
+ // just the ideal quotient, the second the iterated ideal quotient
+ // or saturation. In our case both coincide.
+ ideal q = quotient(j,ideal(f)); // ideal quotient
+ ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
+ ideal sq = std(q);
+ dim(sq);
+ ==> 1
+ // 1-dimensional, hence q defines the affine polar curve
+ //
+ // to check that q and qsat are the same, we show both inclusions, i.e.,
+ // both reductions must give the 0-ideal
+ size(reduce(qsat,sq));
+ ==> 0
+ size(reduce(q,std(qsat)));
+ ==> 0
+ qsat;
+ ==> qsat[1]=12zt+3z-10
+ ==> qsat[2]=5z2+12xt+3x
+ ==> qsat[3]=144xt2+72xt+9x+50z
+ // We see that the affine polar curve does not pass through the origin,
+ // hence we expect the local polar "curve" to be empty
+ // ------------------------------------------------
+ // Local polar curve:
+ ring r = 0,(x,z,t),ds; // local ordering ds
+ poly f = z5+xz3+x2-tz6;
+ ideal j = diff(f,x),diff(f,z);
+ dim(std(j)); // V(j) 1-dimensional
+ ==> 1
+ dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
+ ==> 1
+ ideal q = quotient(j,ideal(f)); // ideal quotient
+ q;
+ ==> q[1]=1
+ // The local polar "curve" is empty, i.e., V(j) is contained in V(f)
+ // ------------------------------------------------
+ // Projective polar curve: (we need "sing.lib" and "elim.lib")
+ ring P = 0,(x,z,t,y),dp; // global ordering dp
+ poly f = z5y+xz3y2+x2y4-tz6;
+ // but consider t as parameter
+ dim_slocus(f); // projective 1-dimensional singular locus
+ ==> 2
+ ideal j = diff(f,x),diff(f,z);
+ dim(std(j)); // V(j), projective 1-dimensional
+ ==> 2
+ dim(std(j+ideal(f))); // V(j,f) also projective
1-dimensional
+ ==> 2
+ ideal q = quotient(j,ideal(f));
+ ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
+ dim(std(qsat));
+ ==> 2
+ // projective 1-dimensional, hence q and/or qsat define the projective
+ // polar curve. In this case, q and qsat are not the same, we needed
+ // 2 quotients.
+ // Let us check both reductions:
+ size(reduce(qsat,std(q)));
+ ==> 4
+ size(reduce(q,std(qsat)));
+ ==> 0
+ // Hence q is contained in qsat but not conversely
+ q;
+ ==> q[1]=12zty+3zy-10y2
+ ==> q[2]=60z2t-36xty-9xy-50zy
+ qsat;
+ ==> qsat[1]=12zt+3z-10y
+ ==> qsat[2]=12xty+5z2+3xy
+ ==> qsat[3]=144xt2+72xt+9x+50z
+ ==> qsat[4]=z3+2xy2
+ //
+ // Now consider again the affine polar curve,
+ // homogenize it with respect to y (deg t=0) and compare:
+ // affine polar curve:
+ ideal qa = 12zt+3z-10,5z2+12xt+3x,-144xt2-72xt-9x-50z;
+ // homogenized:
+ ideal qh = 12zt+3z-10y,5z2+12xyt+3xy,-144xt2-72xt-9x-50z;
+ size(reduce(qh,std(qsat)));
+ ==> 0
+ size(reduce(qsat,std(qh)));
+ ==> 0
+ // both ideals coincide
+
+
+File: sing.htm, Node: Depth, Next: Formatting output, Prev: Polar curves,
Up: Examples
+
+A.14 Depth
+==========
+
+We compute the depth of the module of Kaehler differentials D$_k$(R)
+D_k(R) of the variety defined by the (m+1) $(m+1)$
+-minors of a generic symmetric $(n \times n)$-matrix.
+(n x n)-matrix. We do this by computing the resolution over the
+polynomial ring. Then, by the Auslander-Buchsbaum formula, the depth is
+equal to the number of variables minus the length of a minimal
+resolution. This example was suggested by U. Vetter in order to check
+whether his bound $\hbox{depth}(\hbox{D}_k(R))\geq m(m+1)/2 + m-1$
+depth(D_k(R)) >= m(m+1)/2 + m-1 could be improved.
+
+ LIB "matrix.lib"; LIB "sing.lib";
+ int n = 4;
+ int m = 3;
+ int N = n*(n+1)/2; // will become number of variables
+ ring R = 32003,x(1..N),dp;
+ matrix X = symmat(n); // proc from matrix.lib
+ // creates the symmetric generic nxn matrix
+ print(X);
+ ==> x(1),x(2),x(3),x(4),
+ ==> x(2),x(5),x(6),x(7),
+ ==> x(3),x(6),x(8),x(9),
+ ==> x(4),x(7),x(9),x(10)
+ ideal J = minor(X,m);
+ J=std(J);
+ // Kaehler differentials D_k(R)
+ // of R=k[x1..xn]/J:
+ module D = J*freemodule(N)+transpose(jacob(J));
+ ncols(D);
+ ==> 110
+ nrows(D);
+ ==> 10
+ //
+ // Note: D is a submodule with 110 generators of a free module
+ // of rank 10 over a polynomial ring in 10 variables.
+ // Compute a full resolution of D with sres.
+ // This takes about 17 sec on a Mac PB 520c and 2 sec an a HP 735
+ int time = timer;
+ module sD = std(D);
+ list Dres = sres(sD,0); // the full resolution
+ timer-time; // time used for std + sres
+ ==> 0
+ intmat B = betti(Dres);
+ print(B,"betti");
+ ==> 0 1 2 3 4 5 6
+ ==> ------------------------------------------------
+ ==> 0: 10 - - - - - -
+ ==> 1: - 10 - - - - -
+ ==> 2: - 84 144 60 - - -
+ ==> 3: - - 35 80 60 16 1
+ ==> ------------------------------------------------
+ ==> total: 10 94 179 140 60 16 1
+ N-ncols(B)+1; // the desired depth
+ ==> 4
+
+
+File: sing.htm, Node: Formatting output, Next: Cyclic roots, Prev: Depth,
Up: Examples
+
+A.15 Formatting output
+======================
+
+We show how to insert the result of a computation inside a text by using
+strings. First we compute the powers of 2 and comment the result with
+some text. Then we do the same and give the output a nice format by
+computing and adding appropriate space.
+
+ // The powers of 2:
+ int n;
+ for (n = 2; n <= 128; n = n * 2)
+ {"n = " + string (n);}
+ ==> n = 2
+ ==> n = 4
+ ==> n = 8
+ ==> n = 16
+ ==> n = 32
+ ==> n = 64
+ ==> n = 128
+ // The powers of 2 in a nice format
+ int j;
+ string space = "";
+ for (n = 2; n <= 128; n = n * 2)
+ {
+ space = "";
+ for (j = 1; j <= 5 - size (string (n)); j = j+1)
+ { space = space + " "; }
+ "n =" + space + string (n);
+ }
+ ==> n = 2
+ ==> n = 4
+ ==> n = 8
+ ==> n = 16
+ ==> n = 32
+ ==> n = 64
+ ==> n = 128
+
+
+File: sing.htm, Node: Cyclic roots, Next: G_a -Invariants, Prev: Formatting
output, Up: Examples
+
+A.16 Cyclic roots
+=================
+
+We write a procedure returning a string that enables us to create
+automatically the ideal of cyclic roots over the basering with n
+variables. The procedure assumes that the variables consist of a single
+letter each (hence no indexed variables are allowed; the procedure
+`cyclic' in `poly.lib' does not have this restriction). Then we compute
+a standard basis of this ideal and some numerical information. (This
+ideal is used as a classical benchmark for standard basis computations).
+
+ // We call the procedure 'cyclic':
+ proc cyclic (int n)
+ {
+ string vs = varstr(basering)+varstr(basering);
+ int c=find(vs,",");
+ while ( c!=0 )
+ {
+ vs=vs[1,c-1]+vs[c+1,size(vs)];
+ c=find(vs,",");
+ }
+ string t,s;
+ int i,j;
+ for ( j=1; j<=n-1; j=j+1 )
+ {
+ t="";
+ for ( i=1; i <=n; i=i+1 )
+ {
+ t = t + vs[i,j] + "+";
+ }
+ t = t[1,size(t)-1] + ","+newline;
+ s=s+t;
+ }
+ s=s+vs[1,n]+"-1";
+ return (s);
+ }
+
+ ring r=0,(a,b,c,d,e),lp; // basering, char 0, lex ordering
+ string sc=cyclic(nvars(basering));
+ sc; // the string of the ideal
+ ==> a+b+c+d+e,
+ ==> ab+bc+cd+de+ea,
+ ==> abc+bcd+cde+dea+eab,
+ ==> abcd+bcde+cdea+deab+eabc,
+ ==> abcde-1
+ execute("ideal i="+sc+";"); // this defines the ideal of cyclic roots
+ i;
+ ==> i[1]=a+b+c+d+e
+ ==> i[2]=ab+bc+cd+ae+de
+ ==> i[3]=abc+bcd+abe+ade+cde
+ ==> i[4]=abcd+abce+abde+acde+bcde
+ ==> i[5]=abcde-1
+ timer=1;
+ ideal j=std(i);
+ ==> //used time: 7.5 sec
+ size(j); // number of elements in the std basis
+ ==> 11
+ degree(j);
+ ==> // codimension = 5
+ ==> // dimension = 0
+ ==> // degree = 70
+
+
+File: sing.htm, Node: G_a -Invariants, Next: Invariants of a finite group,
Prev: Cyclic roots, Up: Examples
+
+A.17 G_a -Invariants
+====================
+
+We work in characteristic 0 and use the Lie algebra generated by one
+vector field of the form $\sum x_i \partial /\partial x_{i+1}$.
+sum x(i)*d/dx(i+1).
+ LIB "ainvar.lib";
+ int n=5;
+ int i;
+ ring s=32003,(x(1..n)),wp(1,2,3,4,5);
+ // definition of the vector field m=sum m[i,1]*d/dx(i)
+ matrix m[n][1];
+ for (i=1;i<=n-1;i=i+1)
+ {
+ m[i+1,1]=x(i);
+ }
+ // computation of the ring of invariants
+ ideal in=invariantRing(m,x(2),x(1),0);
+ in; //invariant ring is generated by 5 invariants
+ ==> in[1]=x(1)
+ ==> in[2]=x(2)^2-2*x(1)*x(3)
+ ==> in[3]=x(3)^2-2*x(2)*x(4)+2*x(1)*x(5)
+ ==> in[4]=x(2)^3-3*x(1)*x(2)*x(3)+3*x(1)^2*x(4)
+ ==>
in[5]=x(3)^3-3*x(2)*x(3)*x(4)-15997*x(1)*x(4)^2+3*x(2)^2*x(5)-6*x(1)*x(3)\
+ *x(5)
+ ring q=32003,(x,y,z,u,v,w),dp;
+ matrix m[6][1];
+ m[2,1]=x;
+ m[3,1]=y;
+ m[5,1]=u;
+ m[6,1]=v;
+ // the vector field is: xd/dy+yd/dz+ud/dv+vd/dw
+ ideal in=invariantRing(m,y,x,0);
+ in; //invariant ring is generated by 6 invariants
+ ==> in[1]=x
+ ==> in[2]=u
+ ==> in[3]=v2-2uw
+ ==> in[4]=zu-yv+xw
+ ==> in[5]=yu-xv
+ ==> in[6]=y2-2xz
+
+
+File: sing.htm, Node: Invariants of a finite group, Next: Factorization,
Prev: G_a -Invariants, Up: Examples
+
+A.18 Invariants of a finite group
+=================================
+
+Two algorithms to compute the invariant ring are implemented in
+SINGULAR, `invariant_ring' and `invariant_ring_random', both by Agnes E.
+Heydtmann (address@hidden').
+
+Bases of homogeneous invariants are generated successively and those are
+chosen as primary invariants that lower the dimension of the ideal
+generated by the previously found invariants (see paper "Generating a
+Noetherian Normalization of the Invariant Ring of a Finite Group" by
+Decker, Heydtmann, Schreyer (1997) to appear in JSC). In the
+non-modular case secondary invariants are calculated by finding a basis
+(in terms of monomials) of the basering modulo the primary invariants,
+mapping to invariants with the Reynolds operator and using those or
+their power products such that they are linearly independent modulo the
+primary invariants (see paper "Some Algorithms in Invariant Theory of
+Finite Groups" by Kemper and Steel (1997)). In the modular case they
+are generated according to "Generating Invariant Rings of Finite Groups
+over Arbitrary Fields" by Kemper (1996, to appear in JSC).
+
+We calculate now an example from Sturmfels: "Algorithms in Invariant
+Theory 2.3.7":
+
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ // the group G is generated by A in Gl(3,Q);
+ print(A);
+ ==> 0, 1,0,
+ ==> -1,0,0,
+ ==> 0, 0,-1
+ print(A*A*A*A); // the fourth power of A is 1
+ ==> 1,0,0,
+ ==> 0,1,0,
+ ==> 0,0,1
+ // Use the first method to compute the invariants of G:
+ matrix B(1..3);
+ B(1..3)=invariant_ring(A);
+ // SINGULAR returns 2 matrices, the first containing
+ // primary invariants and the second secondary
+ // invariants, i.e., module generators over a Noetherian
+ // normalization
+ // the third result are the irreducible secondary invariants
+ // if the Molien series was available
+ print(B(1));
+ ==> z2,x2+y2,x2y2
+ print(B(2));
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(B(3));
+ ==> xyz,x2z-y2z,x3y-xy3
+ // Use the second method,
+ // with random numbers between -1 and 1:
+ B(1..3)=invariant_ring_random(A,1);
+ print(B(1..3));
+ ==> z2,x2+y2,x4+y4-z4
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ ==> xyz,x2z-y2z,x3y-xy3
+
Index: test/singular_manual/res_info/singular_httex/sing.htm-3
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.htm-3
diff -N test/singular_manual/res_info/singular_httex/sing.htm-3
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_info/singular_httex/sing.htm-3 14 Jul 2010
15:42:40 -0000 1.1
@@ -0,0 +1,9645 @@
+This is sing.htm, produced by makeinfo version 4.13 from singular.texi.
+
+
+File: sing.htm, Node: Factorization, Next: Puiseux pairs, Prev: Invariants
of a finite group, Up: Examples
+
+A.19 Factorization
+==================
+
+The factorization of polynomials is implemented in the C++ libraries
+Factory (written mainly by Ruediger Stobbe) and libfac (written by
+Michael Messollen) which are part of the SINGULAR system.
+
+ ring r = 0,(x,y),dp;
+ poly f = 9x16-18x13y2-9x12y3+9x10y4-18x11y2+36x8y4
+ +18x7y5-18x5y6+9x6y4-18x3y6-9x2y7+9y8;
+ // = 9 * (x5-1y2)^2 * (x6-2x3y2-1x2y3+y4)
+ factorize(f);
+ ==> [1]:
+ ==> _[1]=9
+ ==> _[2]=x6-2x3y2-x2y3+y4
+ ==> _[3]=-x5+y2
+ ==> [2]:
+ ==> 1,1,2
+ // returns factors and multiplicities,
+ // first factor is a constant.
+ poly g = (y4+x8)*(x2+y2);
+ factorize(g);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x8+y4
+ ==> _[3]=x2+y2
+ ==> [2]:
+ ==> 1,1,1
+ // The same in characteristic 2:
+ ring s =2,(x,y),dp;
+ poly g = (y4+x8)*(x2+y2);
+ factorize(g);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x+y
+ ==> _[3]=x2+y
+ ==> [2]:
+ ==> 1,2,4
+
+
+File: sing.htm, Node: Puiseux pairs, Next: Primary decomposition, Prev:
Factorization, Up: Examples
+
+A.20 Puiseux pairs
+==================
+
+The Puiseux pairs of an irreducible and reduced curve singularity are
+its most important invariants. They can be computed from its
+Hamburger-Noether expansion. The library `hnoether.lib' written by
+Martin Lamm uses the algorithm of Antonio Campillo "Algebroid curves in
+positive characteristic" SLN 813, 1980. This algorithm has the
+advantage that it needs least possible field extensions and, moreover,
+works in any characteristic. This fact can be used to compute the
+invariants over a field of finite characteristic, say 32003, which will
+then most probably be the same in characteristic 0.
+
+We compute the Hamburger-Noether expansion of a plane curve singularity
+given by a polynomial f $f$
+ in two variables. This is a matrix which allows to compute the
+parametrization (up to a given order) and all numerical invariants like
+the
+ * characteristic exponents,
+
+ * Puiseux pairs (of a complex model),
+
+ * degree of the conductor,
+
+ * delta invariant,
+
+ * generators of the semigroup.
+Besides this, the library contains procedures to compute the Newton
+polygon of f $f$
+, the squarefree part of f $f$
+ and a procedure to convert one set of invariants to another.
+
+ LIB "hnoether.lib";
+ // ======== The irreducible case ========
+ ring s = 0,(x,y),ds;
+ poly f = y4-2x3y2-4x5y+x6-x7;
+ list hn = develop(f);
+ show(hn[1]); // Hamburger-Noether matrix
+ ==> // matrix, 3x3
+ ==> 0,x, 0,
+ ==> 0,1, x,
+ ==> 0,1/4,-1/2
+ displayHNE(hn); // Hamburger-Noether development
+ ==> HNE[1]=-y+z(0)*z(1)
+ ==> HNE[2]=-x+z(1)^2+z(1)^2*z(2)
+ ==> HNE[3]=1/4*z(2)^2-1/2*z(2)^3
+ setring s;
+ displayInvariants(hn);
+ ==> characteristic exponents : 4,6,7
+ ==> generators of semigroup : 4,6,13
+ ==> Puiseux pairs : (3,2)(7,2)
+ ==> degree of the conductor : 16
+ ==> delta invariant : 8
+ ==> sequence of multiplicities: 4,2,2,1,1
+ // invariants(hn); returns the invariants as list
+ // partial parametrization of f: param takes the first variable
+ // as infinite except the ring has more than 2 variables. Then
+ // the 3rd variable is chosen.
+ param(hn);
+ ==> // ** Warning: result is exact up to order 5 in x and 7 in y !
+ ==> _[1]=1/16x4-3/16x5+1/4x7
+ ==> _[2]=1/64x6-5/64x7+3/32x8+1/16x9-1/8x10
+ ring extring=0,(x,y,t),ds;
+ poly f=x3+2xy2+y2;
+ list hn=develop(f,-1);
+ param(hn); // partial parametrization of f
+ ==> // ** Warning: result is exact up to order 2 in x and 3 in y !
+ ==> _[1]=-t2
+ ==> _[2]=-t3
+ list hn1=develop(f,6);
+ param(hn1); // a better parametrization
+ ==> // ** Warning: result is exact up to order 6 in x and 7 in y !
+ ==> _[1]=-t2+2t4-4t6
+ ==> _[2]=-t3+2t5-4t7
+ // instead of recomputing you may extend the development:
+ list hn2=extdevelop(hn,12);
+ param(hn2); // a still better parametrization
+ ==> // ** Warning: result is exact up to order 12 in x and 13 in y !
+ ==> _[1]=-t2+2t4-4t6+8t8-16t10+32t12
+ ==> _[2]=-t3+2t5-4t7+8t9-16t11+32t13
+ //
+ // ======== The reducible case ========
+ ring r = 0,(x,y),dp;
+ poly f=x11-2y2x8-y3x7-y2x6+y4x5+2y4x3+y5x2-y6;
+ // = (x5-1y2) * (x6-2x3y2-1x2y3+y4)
+ list hn=reddevelop(f);
+ show(hn[1][1]); // Hamburger-Noether matrix of 1st branch
+ ==> // matrix, 3x3
+ ==> 0,x,0,
+ ==> 0,1,x,
+ ==> 0,1,-1
+ displayInvariants(hn);
+ ==> --- invariants of branch number 1 : ---
+ ==> characteristic exponents : 4,6,7
+ ==> generators of semigroup : 4,6,13
+ ==> Puiseux pairs : (3,2)(7,2)
+ ==> degree of the conductor : 16
+ ==> delta invariant : 8
+ ==> sequence of multiplicities: 4,2,2,1,1
+ ==>
+ ==> --- invariants of branch number 2 : ---
+ ==> characteristic exponents : 2,5
+ ==> generators of semigroup : 2,5
+ ==> Puiseux pairs : (5,2)
+ ==> degree of the conductor : 4
+ ==> delta invariant : 2
+ ==> sequence of multiplicities: 2,2,1,1
+ ==>
+ ==> -------------- contact numbers : --------------
+ ==>
+ ==> branch | 2
+ ==> -------+-----
+ ==> 1 | 2
+ ==>
+ ==> -------------- intersection multiplicities : --------------
+ ==>
+ ==> branch | 2
+ ==> -------+-----
+ ==> 1 | 12
+ ==>
+ ==> -------------- delta invariant of the curve : 22
+ param(hn[2]); // parametrization of 2nd branch
+ ==> _[1]=x2
+ ==> _[2]=x5
+
+
+File: sing.htm, Node: Primary decomposition, Next: Normalization, Prev:
Puiseux pairs, Up: Examples
+
+A.21 Primary decomposition
+==========================
+
+There are two algorithms implemented in SINGULAR which provide primary
+decomposition: `primdecGTZ', based on Gianni/Trager/Zacharias (written
+by Gerhard Pfister) and `primdecSY', based on Shimoyama/Yokoyama
+(written by Wolfram Decker and Hans Schoenemann).
+
+The result of `primdecGTZ' and `primdecSY' is returned as a list of
+pairs of ideals, where the second ideal form the prime ideal and the
+first ideal form the corresponding primary ideal.
+
+ LIB "primdec.lib";
+ ring r = 0,(a,b,c,d,e,f),dp;
+ ideal i= f3, ef2, e2f, bcf-adf, de+cf, be+af, e3;
+ primdecGTZ(i);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=f
+ ==> _[2]=e
+ ==> [2]:
+ ==> _[1]=f
+ ==> _[2]=e
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=f3
+ ==> _[2]=ef2
+ ==> _[3]=e2f
+ ==> _[4]=e3
+ ==> _[5]=de+cf
+ ==> _[6]=be+af
+ ==> _[7]=-bc+ad
+ ==> [2]:
+ ==> _[1]=f
+ ==> _[2]=e
+ ==> _[3]=-bc+ad
+ // We consider now the ideal J of the base space of the
+ // miniversal deformation of the cone over the rational
+ // normal curve computed in section *8* and compute
+ // its primary decomposition.
+ ring R = 0,(A,B,C,D),dp;
+ ideal J = CD, BD+D2, AD;
+ primdecGTZ(J);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=D
+ ==> [2]:
+ ==> _[1]=D
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=C
+ ==> _[2]=B+D
+ ==> _[3]=A
+ ==> [2]:
+ ==> _[1]=C
+ ==> _[2]=B+D
+ ==> _[3]=A
+ // We see that there are two components which are both
+ // prime, even linear subspaces, one 3-dimensional,
+ // the other 1-dimensional.
+ // (This is Pinkhams example and was the first known
+ // surface singularity with two components of
+ // different dimensions)
+ //
+ // Let us now produce an embedded component in the last
+ // example, compute the minimal associated primes and
+ // the radical. We use the Characteristic set methods
+ // from prim_dec.lib.
+ J = intersect(J,maxideal(3));
+ // The following shows that the maximal ideal defines an embedded
+ // (prime) component.
+ primdecSY(J);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=D
+ ==> [2]:
+ ==> _[1]=D
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=C
+ ==> _[2]=B+D
+ ==> _[3]=A
+ ==> [2]:
+ ==> _[1]=C
+ ==> _[2]=B+D
+ ==> _[3]=A
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=D2
+ ==> _[2]=C2
+ ==> _[3]=B2
+ ==> _[4]=AB
+ ==> _[5]=A2
+ ==> _[6]=BCD
+ ==> _[7]=ACD
+ ==> [2]:
+ ==> _[1]=D
+ ==> _[2]=C
+ ==> _[3]=B
+ ==> _[4]=A
+ minAssChar(J);
+ ==> [1]:
+ ==> _[1]=C
+ ==> _[2]=B+D
+ ==> _[3]=A
+ ==> [2]:
+ ==> _[1]=D
+ radical(J);
+ ==> _[1]=CD
+ ==> _[2]=BD+D2
+ ==> _[3]=AD
+
+
+File: sing.htm, Node: Normalization, Next: Branches of an Isolated Space
Curve Singularity, Prev: Primary decomposition, Up: Examples
+
+A.22 Normalization
+==================
+
+The normalization will be computed for a reduced ring R/I $R/I$
+. The result is a list of rings; ideals are always called `norid' in the
+rings of this list. The normalization of R/I $R/I$
+ is the product of the factor rings of the rings in the list divided out
+by the ideals `norid'.
+
+ LIB "normal.lib";
+ // ----- first example: rational quadruple point -----
+ ring R=32003,(x,y,z),wp(3,5,15);
+ ideal I=z*(y3-x5)+x10;
+ list pr=normal(I);
+ ==>
+ ==> // 'normal' created a list of 1 ring(s).
+ ==> // nor[1+1] is the delta-invariant in case of choose=wd.
+ ==> // To see the rings, type (if the name of your list is nor):
+ ==> show( nor);
+ ==> // To access the 1-st ring and map (similar for the others), type:
+ ==> def R = nor[1]; setring R; norid; normap;
+ ==> // R/norid is the 1-st ring of the normalization and
+ ==> // normap the map from the original basering to R/norid
+ def S=pr[1];
+ setring S;
+ norid;
+ ==> norid[1]=T(2)*T(3)-T(1)*T(4)
+ ==> norid[2]=T(1)^7-T(1)^2*T(3)+T(2)*T(5)
+ ==> norid[3]=T(1)^2*T(5)-T(2)*T(4)
+ ==> norid[4]=T(1)^5*T(4)-T(3)*T(4)+T(5)^2
+ ==> norid[5]=T(1)^6*T(3)-T(1)*T(3)^2+T(4)*T(5)
+ ==> norid[6]=T(1)*T(3)*T(5)-T(4)^2
+ // ----- second example: union of straight lines -----
+ ring R1=0,(x,y,z),dp;
+ ideal I=(x-y)*(x-z)*(y-z);
+ list qr=normal(I);
+ ==>
+ ==> // 'normal' created a list of 3 ring(s).
+ ==> // nor[3+1] is the delta-invariant in case of choose=wd.
+ ==> // To see the rings, type (if the name of your list is nor):
+ ==> show( nor);
+ ==> // To access the 1-st ring and map (similar for the others), type:
+ ==> def R = nor[1]; setring R; norid; normap;
+ ==> // R/norid is the 1-st ring of the normalization and
+ ==> // normap the map from the original basering to R/norid
+ def S1=qr[1]; def S2=qr[2];
+ setring S1; norid;
+ ==> norid[1]=0
+ setring S2; norid;
+ ==> norid[1]=0
+
+
+File: sing.htm, Node: Branches of an Isolated Space Curve Singularity, Next:
Kernel of module homomorphisms, Prev: Normalization, Up: Examples
+
+A.23 Branches of an Isolated Space Curve Singularity
+====================================================
+
+In this example, the number of branches of a given quasihomogeneous
+isolated space curve singularity will be computed as an example of the
+pitfalls appearing in the use of primary decomposition. When dealing
+with singularities, two situations are possible in which the primary
+decomposition algorithm might not lead to a complete decomposition:
+first of all, one of the computed components could be globally
+irreducible, but analytically reducible (this is impossible for
+quasihomogeneous singularities) and, as a second possibility, a
+component might be irreducible over the rational numbers, but reducible
+over the complex numbers.
+ ring r=0,(x,y,z),ds;
+ ideal i=x^4-y*z^2,x*y-z^3,y^2-x^3*z; // the space curve singularity
+ qhweight(i);
+ ==> 1,2,1
+ // The given space curve singularity is quasihomogeneous. Hence we can
pass
+ // to the polynomial ring.
+ ring rr=0,(x,y,z),dp;
+ ideal i=imap(r,i);
+ resolution ires=mres(i,0);
+ ires;
+ ==> 1 3 2
+ ==> rr <-- rr <-- rr
+ ==>
+ ==> 0 1 2
+ ==>
+ // From the structure of the resolution, we see that the Cohen-Macaulay
+ // type of the given singularity is 2
+ //
+ // Let us now look for the branches using the primdec library.
+ LIB "primdec.lib";
+ primdecSY(i);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=z3-xy
+ ==> _[2]=x3+x2z+xz2+xy+yz
+ ==> _[3]=x2z2+x2y+xyz+yz2+y2
+ ==> [2]:
+ ==> _[1]=z3-xy
+ ==> _[2]=x3+x2z+xz2+xy+yz
+ ==> _[3]=x2z2+x2y+xyz+yz2+y2
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=x-z
+ ==> _[2]=z2-y
+ ==> [2]:
+ ==> _[1]=x-z
+ ==> _[2]=z2-y
+ def li=_[2];
+ ideal i2=li[2]; // call the second ideal i2
+ // The curve seems to have 2 branches by what we computed using the
+ // algorithm of Shimoyama-Yokoyama.
+ // Now the same computation by the Gianni-Trager-Zacharias algorithm:
+ primdecGTZ(i);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=z8+yz6+y2z4+y3z2+y4
+ ==> _[2]=xz5+z6+yz4+y2z2+y3
+ ==> _[3]=-z3+xy
+ ==> _[4]=x2z2+xz3+xyz+yz2+y2
+ ==> _[5]=x3+x2z+xz2+xy+yz
+ ==> [2]:
+ ==> _[1]=z8+yz6+y2z4+y3z2+y4
+ ==> _[2]=xz5+z6+yz4+y2z2+y3
+ ==> _[3]=-z3+xy
+ ==> _[4]=x2z2+xz3+xyz+yz2+y2
+ ==> _[5]=x3+x2z+xz2+xy+yz
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=-z2+y
+ ==> _[2]=x-z
+ ==> [2]:
+ ==> _[1]=-z2+y
+ ==> _[2]=x-z
+ // Having computed the primary decomposition in 2 different ways and
+ // having obtained the same number of branches, we might expect that the
+ // number of branches is really 2, but we can check this by formulae
+ // for the invariants of space curve singularities:
+ //
+ // mu = tau - t + 1 (for quasihomogeneous curve singularities)
+ // where mu denotes the Milnor number, tau the Tjurina number and
+ // t the Cohen-Macaulay type
+ //
+ // mu = 2 delta - r + 1
+ // where delta denotes the delta-Invariant and r the number of branches
+ //
+ // tau can be computed by using the corresponding procedure T1 from
+ // sing.lib.
+ setring r;
+ LIB "sing.lib";
+ T_1(i);
+ ==> // dim T_1 = 13
+ ==> _[1]=gen(6)+2z*gen(5)
+ ==> _[2]=gen(4)+3x2*gen(2)
+ ==> _[3]=gen(3)+gen(1)
+ ==> _[4]=x*gen(5)-y*gen(2)-z*gen(1)
+ ==> _[5]=x*gen(1)-z2*gen(2)
+ ==> _[6]=y*gen(5)+3x2z*gen(2)
+ ==> _[7]=y*gen(2)-z*gen(1)
+ ==> _[8]=2y*gen(1)-z2*gen(5)
+ ==> _[9]=z2*gen(5)
+ ==> _[10]=z2*gen(1)
+ ==> _[11]=x3*gen(2)
+ ==> _[12]=x2z2*gen(2)
+ ==> _[13]=xz3*gen(2)
+ ==> _[14]=z4*gen(2)
+ setring rr;
+ // Hence tau is 13 and therefore mu is 12. But then it is impossible
that
+ // the singularity has two branches, since mu is even and delta is an
+ // integer!
+ // So obviously, we did not decompose completely. Because the first
branch
+ // is smooth, only the second ideal can be the one which can be
decomposed
+ // further.
+ // Let us now consider the normalization of this second ideal i2.
+ LIB "normal.lib";
+ normal(i2);
+ ==>
+ ==> // 'normal' created a list of 1 ring(s).
+ ==> // nor[1+1] is the delta-invariant in case of choose=wd.
+ ==> // To see the rings, type (if the name of your list is nor):
+ ==> show( nor);
+ ==> // To access the 1-st ring and map (similar for the others), type:
+ ==> def R = nor[1]; setring R; norid; normap;
+ ==> // R/norid is the 1-st ring of the normalization and
+ ==> // normap the map from the original basering to R/norid
+ ==> [1]:
+ ==> // characteristic : 0
+ ==> // number of vars : 1
+ ==> // block 1 : ordering dp
+ ==> // : names T(1)
+ ==> // block 2 : ordering C
+ def rno=_[1];
+ setring rno;
+ norid;
+ ==> norid[1]=0
+ // The ideal is generated by a polynomial in one variable of degree 4
which
+ // factors completely into 4 polynomials of type T(2)+a.
+ // From this, we know that the ring of the normalization is the direct
sum of
+ // 4 polynomial rings in one variable.
+ // Hence our original curve has these 4 branches plus a smooth one
+ // which we already determined by primary decomposition.
+ // Our final result is therefore: 5 branches.
+
+
+File: sing.htm, Node: Kernel of module homomorphisms, Next: Algebraic
dependence, Prev: Branches of an Isolated Space Curve Singularity, Up:
Examples
+
+A.24 Kernel of module homomorphisms
+===================================
+
+Let A $A$
+, B $B$
+ be two matrices of size $m\times r$ and $m\times s$
+m x r and m x s over the ring R $R$
+ and consider the corresponding maps $$
+R^r \buildrel{A}\over{\longrightarrow}
+R^m \buildrel{B}\over{\longleftarrow} R^s\;.
+$$
+
+ r A m
+ R -----> R
+ ^
+ |
+ |
+ s
+ R .
+
+We want to compute the kernel of the map $R^r
\buildrel{A}\over{\longrightarrow}
+R^m\longrightarrow
+R^m/\hbox{Im}(B) \;.$
+
+ r A m m
+ R -----> R -----> R /Im(B) .
+
+This can be done using the `modulo' command: $$
+\hbox{\tt modulo}(A,B)=\hbox{ker}(R^r
+\buildrel{A}\over{\longrightarrow}R^m/\hbox{Im}(B)) \; .
+$$
+
+ r A m
+ modulo(A,B)=ker(R -----> R /Im(B)) .
+
+ ring r=0,(x,y,z),(c,dp);
+ matrix A[2][2]=x,y,z,1;
+ matrix B[2][2]=x2,y2,z2,xz;
+ print(modulo(A,B));
+ ==> yz2-x2, xyz-y2, x2z-xy, x3-y2z,
+ ==> x2z-xz2,-x2z+y2z,xyz-yz2,0
+
+
+File: sing.htm, Node: Algebraic dependence, Next: Classification, Prev:
Kernel of module homomorphisms, Up: Examples
+
+A.25 Algebraic dependence
+=========================
+
+Let $g$, $f_1$, \dots, $f_r\in K[x_1,\ldots,x_n]$.
+g, f_1, ..., f_r in K[x1,...,xn]. We want to check whether
+ 1. $f_1$, \dots, $f_r$
+ f_1, ..., f_r are algebraically dependent.
+
+ Let $I=\langle Y_1-f_1,\ldots,Y_r-f_r \rangle \subseteq
+ K[x_1,\ldots,x_n,Y_1,\ldots,Y_r]$.
+
+ I=<Y_1-f_1,...,Y_r-f_r> subset K[x1,...,xn,Y_1,...,Y_r].
+
+ Then $I \cap K[Y_1,\ldots,Y_r]$
+ I intersected with K[Y_1,...,Y_r] are the algebraic relations
+ between $f_1$, \dots, $f_r$.
+ f_1, ..., f_r.
+
+ 2. $g \in K [f_1,\ldots,f_r]$.
+ g in K[f_1,...,f_r].
+
+$g \in K[f_1,\ldots,f_r]$
+ g in K[f_1,...,f_r] if and only if the normal form of g $g$
+ with respect to I $I$
+ and a block ordering with respect to $X=(x_1,\ldots,x_n)$ and
$Y=(Y_1,\ldots,Y_r)$ with $X>Y$
+ X=(x1,...,xn) and Y=(Y_1,...,Y_r) with X>Y is in K[Y] $K[Y]$
+ .
+
+Both questions can be answered using the following procedure. If the
+second argument is zero, it checks for algebraic dependence and returns
+the ideal of relations between the generators of the given ideal.
+Otherwise it checks for subring membership and returns the normal form
+of the second argument with respect to the ideal I.
+
+ proc algebraicDep(ideal J, poly g)
+ {
+ def R=basering; // give a name to the basering
+ int n=size(J);
+ int k=nvars(R);
+ int i;
+ intvec v;
+
+ // construction of the new ring:
+
+ // construct a weight vector
+ v[n+k]=0; // gives a zero vector of length n+k
+ for(i=1;i<=k;i++)
+ {
+ v[i]=1;
+ }
+ string orde="(a("+string(v)+"),dp);";
+ string ri="ring Rhelp=("+charstr(R)+"),
+ ("+varstr(R)+",Y(1.."+string(n)+")),"+orde;
+ // ring definition as a string
+ execute(ri); // execution of the string
+
+ // construction of the new ideal I=(J[1]-Y(1),...,J[n]-Y(n))
+ ideal I=imap(R,J);
+ for(i=1;i<=n;i++)
+ {
+ I[i]=I[i]-var(k+i);
+ }
+ poly g=imap(R,g);
+ if(g==0)
+ {
+ // construction of the ideal of relations by elimination
+ poly el=var(1);
+ for(i=2;i<=k;i++)
+ {
+ el=el*var(i);
+ }
+ ideal KK=eliminate(I,el);
+ keepring(Rhelp);
+ return(KK);
+ }
+ // reduction of g with respect to I
+ ideal KK=reduce(g,std(I));
+ keepring(Rhelp);
+ return(KK);
+ }
+
+ // applications of the procedure
+ ring r=0,(x,y,z),dp;
+ ideal i=xz,yz;
+ algebraicDep(i,0);
+ ==> _[1]=0
+ // Note: after call of algebraicDep(), the basering is Rhelp.
+ setring r; kill Rhelp;
+ ideal j=xy+z2,z2+y2,x2y2-2xy3+y4;
+ algebraicDep(j,0);
+ ==> _[1]=Y(1)^2-2*Y(1)*Y(2)+Y(2)^2-Y(3)
+ setring r; kill Rhelp;
+ poly g=y2z2-xz;
+ algebraicDep(i,g);
+ ==> _[1]=Y(2)^2-Y(1)
+ // this shows that g is contained in i.
+ setring r; kill Rhelp;
+ algebraicDep(j,g);
+ ==> _[1]=-z^4+z^2*Y(2)-x*z
+ // this shows that g is contained in j.
+
+
+File: sing.htm, Node: Classification, Next: Fast lexicographical GB, Prev:
Algebraic dependence, Up: Examples
+
+A.26 Classification
+===================
+
+Classification of isolated hypersurface singularities with respect to
+right equivalence is provided by the command `classify' of the library
+`classify.lib'. The classification is done using the algorithm of
+Arnold. Before entering this algorithm, a first guess based on the
+Hilbert polynomial of the Milnor algebra is made.
+
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ poly p=singularity("E[6k+2]",2)[1];
+ p=p+z^2;
+ p;
+ ==> z2+x3+xy6+y8
+ // We received an E_14 singularity in normal form
+ // from the database of normal forms. Since only the residual
+ // part is saved in the database, we added z^2 to get an E_14
+ // of embedding dimension 3.
+ //
+ // Now we apply a coordinate change in order to deal with a
+ // singularity which is not in normal form:
+ map phi=r,x+y,y+z,x;
+ poly q=phi(p);
+ // Yes, q really looks ugly, now:
+ q;
+ ==>
x2+x3+3x2y+3xy2+y3+xy6+y7+6xy5z+6y6z+15xy4z2+15y5z2+20xy3z3+20y4z3+15xy2z\
+
4+15y3z4+6xyz5+6y2z5+xz6+yz6+y8+8y7z+28y6z2+56y5z3+70y4z4+56y3z5+28y2z6+8\
+ yz7+z8
+ // Classification
+ classify(q);
+ ==> About the singularity :
+ ==> Milnor number(f) = 14
+ ==> Corank(f) = 2
+ ==> Determinacy <= 12
+ ==> Guessing type via Milnorcode: E[6k+2]=E[14]
+ ==>
+ ==> Computing normal form ...
+ ==> I have to apply the splitting lemma. This will take some time....:-)
+ ==> Arnold step number 9
+ ==> The singularity
+ ==>
x3-9/4x4+27/4x5-189/8x6+737/8x7+6x6y+15x5y2+20x4y3+15x3y4+6x2y5+xy6-24\
+
089/64x8-x7y+11/2x6y2+26x5y3+95/2x4y4+47x3y5+53/2x2y6+8xy7+y8+104535/64x9\
+
+27x8y+135/2x7y2+90x6y3+135/2x5y4+27x4y5+9/2x3y6-940383/128x10-405/4x9y-2\
+
025/8x8y2-675/2x7y3-2025/8x6y4-405/4x5y5-135/8x4y6+4359015/128x11+1701/4x\
+
10y+8505/8x9y2+2835/2x8y3+8505/8x7y4+1701/4x6y5+567/8x5y6-82812341/512x12\
+
-15333/8x11y-76809/16x10y2-25735/4x9y3-78525/16x8y4-16893/8x7y5-8799/16x6\
+ y6-198x5y7-495/4x4y8-55x3y9-33/2x2y10-3xy11-1/4y12
+ ==> is R-equivalent to E[14].
+ ==> Milnor number = 14
+ ==> modality = 1
+ ==> 2z2+x3+xy6+y8
+ // The library also provides routines to determine the corank of q
+ // and its residual part without going through the whole
+ // classification algorithm.
+ corank(q);
+ ==> 2
+ morsesplit(q);
+ ==>
y3-9/4y4+27/4y5-189/8y6+737/8y7+6y6z+15y5z2+20y4z3+15y3z4+6y2z5+yz6-24089\
+
/64y8-y7z+11/2y6z2+26y5z3+95/2y4z4+47y3z5+53/2y2z6+8yz7+z8+104535/64y9+27\
+
y8z+135/2y7z2+90y6z3+135/2y5z4+27y4z5+9/2y3z6-940383/128y10-405/4y9z-2025\
+
/8y8z2-675/2y7z3-2025/8y6z4-405/4y5z5-135/8y4z6+4359015/128y11+1701/4y10z\
+
+8505/8y9z2+2835/2y8z3+8505/8y7z4+1701/4y6z5+567/8y5z6-82812341/512y12-15\
+
333/8y11z-76809/16y10z2-25735/4y9z3-78525/16y8z4-16893/8y7z5-8799/16y6z6-\
+ 198y5z7-495/4y4z8-55y3z9-33/2y2z10-3yz11-1/4z12
+
+
+File: sing.htm, Node: Fast lexicographical GB, Next: Parallelization with
MPtcp links, Prev: Classification, Up: Examples
+
+A.27 Fast lexicographical GB
+============================
+
+Compute Groebner basis in lexicographical ordering by using the FGLM
+algorithm (`stdfglm') and Hilbert driven Groebner (`stdhilb').
+
+The command `stdfglm' applies only for zero-dimensional ideals and
+returns a reduced Groebner basis.
+
+For the ideal below, `stdfglm' is more than 100 times and `stdhilb'
+about 10 times faster than `std'.
+
+ ring r =32003,(a,b,c,d,e),lp;
+ ideal i=a+b+c+d, ab+bc+cd+ae+de, abc+bcd+abe+ade+cde,
+ abc+abce+abde+acde+bcde, abcde-1;
+ int t=timer;
+ ideal j1=stdfglm(i);
+ timer-t;
+ ==> 0
+ size(j1); // size (no. of polys) in computed GB
+ ==> 5
+ t=timer;
+ ideal j2=stdhilb(i);
+ timer-t;
+ ==> 0
+ size(j2); // size (no. of polys) in computed GB
+ ==> 158
+ // usual Groebner basis computation for lex ordering
+ t=timer;
+ ideal j0 =std(i);
+ timer-t;
+ ==> 1
+
+
+File: sing.htm, Node: Parallelization with MPtcp links, Prev: Fast
lexicographical GB, Up: Examples
+
+A.28 Parallelization with MPtcp links
+=====================================
+
+In this example, we demonstrate how MPtcp links can be used to
+parallelize computations.
+
+To compute a standard basis for a zero-dimensional ideal in the
+lexicographical ordering, one of the two powerful routines `stdhilb'
+(see *note stdhilb::) and `stdfglm' (see *note stdfglm::) should be
+used. However, a priory one can not predict which one of the two
+commands is faster. This very much depends on the (input) example.
+Therefore, we use MPtcp links to let both commands work on the problem
+independently and in parallel, so that the one which finishes first
+delivers the result.
+
+The example we use is the so-called "omdi example". See Tim Wichmann;
+Der FGLM-Algorithmus: verallgemeinert und implementiert in Singular;
+Diplomarbeit Fachbereich Mathematik, Universitaet Kaiserslautern; 1997
+for more details.
+
+ ring r=0,(a,b,c,u,v,w,x,y,z),lp;
+ ideal i=a+c+v+2x-1, ab+cu+2vw+2xy+2xz-2/3, ab2+cu2+2vw2+2xy2+2xz2-2/5,
+ ab3+cu3+2vw3+2xy3+2xz3-2/7, ab4+cu4+2vw4+2xy4+2xz4-2/9, vw2+2xyz-1/9,
+ vw4+2xy2z2-1/25, vw3+xyz2+xy2z-1/15, vw4+xyz3+xy3z-1/21;
+
+ link l_hilb,l_fglm = "MPtcp:fork","MPtcp:fork"; // 1.
+
+ open(l_fglm); open(l_hilb);
+
+ write(l_hilb, quote(system("pid"))); // 2.
+ write(l_fglm, quote(system("pid")));
+ int pid_hilb,pid_fglm = read(l_hilb),read(l_fglm);
+
+ write(l_hilb, quote(stdhilb(i))); // 3.
+ write(l_fglm, quote(stdfglm(eval(i))));
+
+ while ((! status(l_hilb, "read", "ready", 1)) && // 4.
+ (! status(l_fglm, "read", "ready", 1))) {}
+
+ if (status(l_hilb, "read", "ready"))
+ {
+ "stdhilb won !!!!"; size(read(l_hilb));
+ close(l_hilb); pid_fglm = system("sh","kill "+string(pid_fglm));
+ }
+ else // 5.
+ {
+ "stdfglm won !!!!"; size(read(l_fglm));
+ close(l_fglm); pid_hilb = system("sh","kill "+string(pid_hilb));
+ }
+ ==> stdfglm won !!!!
+ ==> 9
+Some explanatory remarks are in order:
+ 1. Instead of using links of the type `MPtcp:fork', we alternatively
+ could use `MPtcp:launch' links such that the two "competing"
+ SINGULAR processes run on different machines. This has the
+ advantage of "true" parallel computing since no resource sharing is
+ involved (as it usually is with forked processes).
+
+ 2. Unfortunately, MPtcp links do not offer means to (asynchronously)
+ interrupt or kill an attached (i.e., launched or forked) process.
+ Therefore, we explicitly need to get the process id numbers of the
+ competing SINGULAR processes, so that we can "kill" the looser
+ later.
+
+ 3. Notice how quoting is used in order to prevent local evaluation
+ (i.e., local computation of results). Since we "forked" the two
+ competing processes, the identifier `i' is defined and has
+ identical values in both child processes. Therefore, the innermost
+ `eval' can be omitted (as is done for the `l_hilb' link), and only
+ the identifier `i' needs to be communicated to the children.
+ However, when `MPtcp:launch' links are used, the inner evaluation
+ must be applied so that actual values, and not the identifiers are
+ communicated (as is done for the `l_fglm' link).
+
+ 4. We go into a "sleepy" loop and wait until one of the two children
+ finished the computation. That is, the current process checks
+ approximately once per second the status of one of the connecting
+ links, and sleeps (i.e., suspends its execution) in the
+ intermediate time.
+
+ 5. The child which has won delivers the result and is terminated with
+ the usual `close' command. The other child which is still computing
+ needs to be terminated by an explicit (i.e., system) kill command,
+ since it can not be terminated through the link while it is still
+ computing.
+
+
+File: sing.htm, Node: Polynomial data, Next: Mathematical background, Prev:
Examples, Up: Top
+
+Appendix B Polynomial data
+**************************
+
+* Menu:
+
+* Representation of mathematical objects::
+* Monomial orderings::
+
+
+File: sing.htm, Node: Representation of mathematical objects, Next: Monomial
orderings, Up: Polynomial data
+
+B.1 Representation of mathematical objects
+==========================================
+
+SINGULAR distinguishes between objects which do not belong to a ring and
+those which belong to a specific ring (see *note Rings and orderings::).
+We comment only on the latter ones.
+
+Internally all ring-dependent objects are polynomials or structures
+built from polynomials (and some additional information). Note that
+SINGULAR stores (and hence prints) a polynomial automatically w.r.t. the
+monomial ordering.
+
+Hence, in order to define such an object in SINGULAR, one has to give a
+list of polynomials in a specific format.
+
+For ideals, resp. matrices, this is straight forward: The user gives a
+list of polynomials which generate the ideal, resp. which are the
+entries of the matrix. (The number of rows and columns has to be given
+when creating the matrix.)
+
+A vector in SINGULAR is always an element of a free module over the
+basering. It is given as a list of polynomials in one of the following
+formats $[f_1,...,f_n]$ or $f_1*gen(1)+...+f_n*gen(n)$, where $gen(i)$
+[f_1,...,f_n] or f_1*gen(1)+...+f_n*gen(n), where gen(i) denotes the
+i-th canonical generator of a free module (with 1 at place i and 0
+everywhere else). Both forms are equivalent. A vector is internally
+represented in the second form with the $gen(i)$
+gen(i) being "special" ring variables, ordered accordingly to the
+monomial ordering. Therefore, the form $[f_1,...,f_n]$
+[f_1,...,f_n] is given as output only if the monomial ordering gives
+priority to the component, i.e., is of the form `(c,...)' (see *note
+Module orderings::). However, in any case the procedure `show' from the
+library `inout.lib' displays the bracket format.
+
+A vector $v=[f_1,...,f_n]$
+v=[f_1,...,f_n] should always be considered as a column vector in a free
+module of rank equal to nrows($v$)
+nrows(v) where nrows($v$)
+nrows(v) is equal to the maximal index $r$
+r such that $f_r \not= 0$.
+f_r<>0. This is due to the fact, that internally $v$
+v is a polynomial in a sparse representation, i.e., $f_i*gen(i)$
+f_i*gen(i) is not stored if $f_i=0$
+f_i=0 (for reasons of efficiency), hence the last 0-entries of $v$
+v are lost. Only more complex structures are able to keep the rank.
+
+A module $M$
+M in SINGULAR is given by a list of vectors $v_1,...,v_k$
+v_1,....v_k which generate the module as a submodule of the free module
+of rank equal to nrows($M$)
+nrows(M) which is the maximum of nrows($v_i$).
+nrows(v_i).
+
+If one wants to create a module with a larger rank than given by its
+generators, one has to use the command `attrib(M,"rank",r)' (see *note
+attrib::, *note nrows::) or to define a matrix first, then converting it
+into a module. Modules in SINGULAR are almost the same as matrices,
+they may be considered as sparse representations of matrices. A module
+of a matrix is generated by the columns of the matrix and a matrix of a
+module has as columns the generators of the module. These conversions
+preserve the rank and the number of generators, resp. the number of rows
+and columns.
+
+By the above remarks it might appear that SINGULAR is only able to
+handle submodules of a free module. However, this is not true. SINGULAR
+can compute with any finitely generated module over the basering $R$.
+R. Such a module, say $N$,
+N, is not represented by its generators but by its (generators and)
+relations. This means that $N = R^n/M$ where $n$
+N = R^n/M where n is the number of generators of $N$ and $M \subseteq R^n$
+N and M in R^n is the module of relations. In other words, defining a
+module $M$
+M as a submodule of a free module $R^n$
+R^n can also be considered as the definition of $N = R^n/M$.
+N=R^n/M.
+
+Note that most functions, when applied to a module $M$,
+M, really deal with $M$.
+M. However, there are some functions which deal with $N = R^n/M$ instead of
$M$.
+N=R^n/M instead of M.
+
+For example, `std(M)' computes a standard basis of $M$
+M (and thus gives another representation of $N$ as $N = R^n/$std($M$)).
+N as N=R^n/std(M)). However, `dim(M)', resp. `vdim(M)', returns dim$(R^n/M)$,
resp.@: dim$_k(R^n/M)$
+dim(R^n/M), resp. dim_k(R^n/M) (if M is given by a standard basis).
+
+The function `syz(M)' returns the first syzygy module of $M$,
+M, i.e., the module of relations of the given generators of $M$
+M which is equal to the second syzygy module of $N$.
+N. Refer to the description of each function in *note Functions:: to
+get information which module the function deals with.
+
+The numbering in `res' and other commands for computing resolutions
+refers to a resolution of $N = R^n/M$
+N=R^n/M (see *note res::; *note Syzygies and resolutions::).
+
+It is possible to compute in any field which is a valid ground field in
+SINGULAR. For doing so, one has to define a ring with the desired
+ground field and at least one variable. The elements of the field are of
+type number, but may also be considered as polynomials (of degree 0).
+Large computations should be faster if the elements of the field are
+defined as numbers.
+
+The above remarks do also apply to quotient rings. Polynomial data are
+stored internally in the same manner, the only difference is that this
+polynomial representation is in general not unique. `reduce(f,std(0))'
+computes a normal form of a polynomial f in a quotient ring (cf. *note
+reduce::).
+
+
+File: sing.htm, Node: Monomial orderings, Prev: Representation of
mathematical objects, Up: Polynomial data
+
+B.2 Monomial orderings
+======================
+
+* Menu:
+
+* Introduction to orderings::
+* General definitions for orderings::
+* Global orderings::
+* Local orderings::
+* Module orderings::
+* Matrix orderings::
+* Product orderings::
+* Extra weight vector::
+
+
+File: sing.htm, Node: Introduction to orderings, Next: General definitions
for orderings, Up: Monomial orderings
+
+B.2.1 Introduction to orderings
+-------------------------------
+
+SINGULAR offers a great variety of monomial orderings which provide an
+enormous functionality, if used diligently. However, this flexibility
+might also be confusing for the novice user. Therefore, we recommend to
+those not familiar with monomial orderings to generally use the ordering
+`dp' for computations in the polynomial ring $K[x_1,\ldots,x_n]$,
+K[x1,...,xn], resp. `ds' for computations in the localization
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$.
+Loc_(x)K[x1,...,xn].
+
+For inhomogeneous input ideals, standard (resp. groebner) bases
+computations are generally faster with the orderings $\hbox{Wp}(w_1, \ldots,
w_n)$
+Wp(w_1, ..., w_n) (resp. $\hbox{Ws}(w_1, \ldots, w_n)$)
+Ws(w_1, ..., w_n)) if the input is quasihomogeneous w.r.t. the weights $w_1$,
$\ldots$, $w_n$ of $x_1$, $\ldots$, $x_n$.
+w_1, ..., w_n of x_1, ..., x_n.
+
+If the output needs to be "triangular" (resp. "block-triangular"), the
+lexicographical ordering `lp' (resp. lexicographical block-orderings)
+need to be used. However, these orderings usually result in much less
+efficient computations.
+
+
+File: sing.htm, Node: General definitions for orderings, Next: Global
orderings, Prev: Introduction to orderings, Up: Monomial orderings
+
+B.2.2 General definitions for orderings
+---------------------------------------
+
+A monomial ordering (term ordering) on $K[x_1, \ldots, x_n]$ is
+a total ordering $<$ on the
+set of monomials (power products) $\{x^\alpha \mid \alpha \in \bf{N}^n\}$
+which is compatible with the
+natural semigroup structure, i.e., $x^\alpha < x^\beta$ implies $x^\gamma
+x^\alpha < x^\gamma x^\beta$ for any $\gamma \in \bf{N}^n$.
+We do not require
+$<$ to be a well ordering.
+A monomial ordering (term ordering) on K[x_1, ..., x_n] is a total
+ordering < on the set of monomials (power products) {x^a | a in N^n}
+which is compatible with the natural semigroup structure, i.e., x^a <
+x^b implies x^c*x^a < x^c*x^b for any c in N^n. We do not require < to
+be a well ordering. See the literature cited in *note References::.
+
+It is known that any monomial ordering can be represented by a matrix $M$ in
$GL(n,R)$,
+M in GL(n,R), but, of course, only integer coefficients are of relevance
+in practice.
+
+Global orderings are well orderings (i.e., \hbox{$1 < x_i$} for each variable
+$x_i$), local orderings satisfy $1 > x_i$ for each variable. If some
variables are ordered globally and others locally we
+call it a mixed ordering. Local or mixed orderings are not well orderings.
+
+Let $K$ be the ground field, \hbox{$x = (x_1, \ldots, x_n)$} the
+variables and $<$ a monomial ordering, then Loc $K[x]$ denotes the
+localization of $K[x]$ with respect to the multiplicatively closed set $$\{1 +
+g \mid g = 0 \hbox{ or } g \in K[x]\backslash \{0\} \hbox{ and }L(g) <
+1\}.$$ Here, $L(g)$
+denotes the leading monomial of $g$, i.e., the biggest monomial of $g$ with
+respect to $<$. The result of any computation which uses standard basis
+computations has to be interpreted in Loc $K[x]$.
+Global orderings are well orderings (i.e., 1 < x_i for each variable
+x_i), local orderings satisfy 1 > x_i for each variable. If some
+variables are ordered globally and others locally we call it a mixed
+ordering. Local or mixed orderings are not well orderings.
+
+If K is the ground field, x = (x_1, ..., x_n) the variables and < a
+monomial ordering, then Loc K[x] denotes the localization of K[x] with
+respect to the multiplicatively closed set {1 + g | g = 0 or g in
+K[x]\{0} and L(g) < 1}. L(g) denotes the leading monomial of g, i.e.,
+the biggest monomial of g with respect to <. The result of any
+computation which uses standard basis computations has to be interpreted
+in Loc K[x].
+
+Note that the definition of a ring includes the definition of its
+monomial ordering (see *note Rings and orderings::). SINGULAR offers the
+monomial orderings described in the following sections.
+
+
+File: sing.htm, Node: Global orderings, Next: Local orderings, Prev:
General definitions for orderings, Up: Monomial orderings
+
+B.2.3 Global orderings
+----------------------
+
+For all these orderings: Loc $K[x]$ = $K[x]$
+For all these orderings: Loc K[x] = K[x]
+
+lp:
+ lexicographical ordering:
+ x^a < x^b <==> there is an i, 1 <= i <= n :
+ a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
+ \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i <
+ \beta_i$.
+
+rp:
+ reverse lexicographical ordering:
+ x^a < x^b <==> there is an i, 1 <= i <= n :
+ a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
+ \alpha_n = \beta_n,
+ \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
+
+dp:
+ degree reverse lexicographical ordering:
+ let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
+
+ x^a < x^b <==>
+ deg(x^a) < deg(x^b),
+ or
+ deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
+ a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or
+
+\phantom{$x^\alpha < x^\beta \Leftrightarrow $}$ \deg(x^\alpha) =
+ \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n,
+ \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
+
+Dp:
+ degree lexicographical ordering:
+ let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
+
+ x^a < x^b <==>
+ deg(x^a) < deg(x^b)
+ or
+ deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
+ a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or
+
+\phantom{ $x^\alpha < x^\beta \Leftrightarrow $} $\deg(x^\alpha) =
+ \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1,
+ \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$
+
+wp:
+ weighted reverse lexicographical ordering:
+ wp(w_1, ..., w_n), w_i positive integers, let $w_1, \ldots, w_n$ be
positive integers. Then ${\tt wp}(w_1, \ldots,
+ w_n)$
+ is defined as `dp' but with deg(x^a) = w_1 a_1 + ... + w_n a_n.
+$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$
+
+Wp:
+ weighted lexicographical ordering:
+ Wp(w_1, ..., w_n), w_i positive integers, let $w_1, \ldots, w_n$ be
positive integers. Then ${\tt Wp}(w_1, \ldots,
+ w_n)$
+ is defined as `Dp' but with deg(x^a) = w_1 a_1 + ... + w_n a_n.
+$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$
+
+
+File: sing.htm, Node: Local orderings, Next: Module orderings, Prev: Global
orderings, Up: Monomial orderings
+
+B.2.4 Local orderings
+---------------------
+
+For ls, ds, Ds and, if the weights are positive integers, also for ws
+and Ws, we have Loc K[x] = K[x]_(x), Loc $K[x]$ = $K[x]_{(x)}$,
+ the localization of $K[x]$
+K[x] at the maximal ideal (x_1, ..., x_n). \ $(x_1, ..., x_n)$.
+
+ls:
+ negative lexicographical ordering:
+ x^a < x^b <==> there is an i, 1 <= i <= n :
+ a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
+ \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i >
+ \beta_i$.
+
+ds:
+ negative degree reverse lexicographical ordering:
+ let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
+
+ x^a < x^b <==>
+ deg(x^a) > deg(x^b)
+ or
+ deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
+ a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or
+
+\phantom{ $x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) =
+ \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n,
+ \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
+
+Ds:
+ negative degree lexicographical ordering:
+ let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
+ x^a < x^b <==>
+ deg(x^a) > deg(x^b)
+ or
+ deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
+ a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or
+
+\phantom{ $ x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) =
+ \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1,
+ \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$
+
+ws:
+ (general) weighted reverse lexicographical ordering:
+ ws(w_1, ..., w_n), w_1 ${\tt ws}(w_1, \ldots, w_n),\; w_1$
+ a nonzero integer, w_2,...,w_n $w_2,\ldots,w_n$
+ any integer (including 0), is defined as `ds' but with
+ deg(x^a) = w_1 a_1 + ... + w_n a_n. $\deg(x^\alpha) = w_1 \alpha_1 +
\cdots + w_n\alpha_n.$
+
+Ws:
+ (general) weighted lexicographical ordering:
+ Ws(w_1, ..., w_n), w_1 ${\tt Ws}(w_1, \ldots, w_n),\; w_1$
+ a nonzero integer, w_2,...,w_n $w_2,\ldots,w_n$
+ any integer (including 0), is defined as `Ds' but with
+ deg(x^a) = w_1 a_1 + ... + w_n a_n. $\deg(x^\alpha) = w_1 \alpha_1 +
\cdots + w_n\alpha_n.$
+
+
+File: sing.htm, Node: Module orderings, Next: Matrix orderings, Prev: Local
orderings, Up: Monomial orderings
+
+B.2.5 Module orderings
+----------------------
+
+SINGULAR offers also orderings on the set of "monomials" { x^a*gen(i) |
+a in N^n, 1 <= i <= r } in Loc K[x]^r = Loc K[x]gen(1) + ... + Loc
+K[x]gen(r), where gen(1), ..., gen(r) denote the canonical generators of
+Loc K[x]^r, the r-fold direct sum of Loc K[x]. $\{ x^a e_i \mid a \in N^n,
1 \leq i \leq r \}$ in Loc $K[x]^r$ = Loc
+$K[x]e_1
++ \ldots +$Loc $K[x]e_r$, where $e_1, \ldots, e_r$ denote the canonical
+generators of Loc $K[x]^r$, the r-fold direct sum of Loc $K[x]$.
+(The function {\tt gen(i)} yields $e_i$).
+
+We have two possibilities: either to give priority to the component of a
+vector in Loc K[x]^r Loc $K[x]^r$
+or (which is the default in SINGULAR) to give priority to the
+coefficients. The orderings `(<,c)' and `(<,C)' give priority to the
+coefficients; whereas `(c,<)' and `(C,<)' give priority to the
+components.
+Let < be any of the monomial orderings of Loc $K[x]$
+Loc K[x] as above.
+
+(<,C):
+ <_m = (<,C) denotes the module ordering (giving priority to the
+ coefficients):
+ x^a*gen(i) <_m x^b*gen(j) <==>
+ x^a < x^b
+ or
+ x^a = x^b and i < j. $<_m = (<,C)$ denotes the module ordering (giving
priority to the coefficients):
+
+\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha <
+ x^\beta$ or ($x^\alpha = x^\beta $ and $ i < j$).
+
+ *Example:*
+
+ ring r = 0, (x,y,z), ds;
+ // the same as ring r = 0, (x,y,z), (ds, C);
+ [x+y2,z3+xy];
+ ==> x*gen(1)+xy*gen(2)+y2*gen(1)+z3*gen(2)
+ [x,x,x];
+ ==> x*gen(3)+x*gen(2)+x*gen(1)
+
+(C,<):
+ <_m = (C, <) denotes the module ordering (giving priority to the
+ component):
+ x^a*gen(i) <_m x^b*gen(j) <==>
+ i<j
+ or
+ i = j and x^a < x^b. $<_m = (C, <)$ denotes the module ordering (giving
priority to the component):
+
+\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow i < j$ or ($
+ i = j $ and $ x^\alpha < x^\beta $).
+
+ *Example:*
+
+ ring r = 0, (x,y,z), (C,lp);
+ [x+y2,z3+xy];
+ ==> xy*gen(2)+z3*gen(2)+x*gen(1)+y2*gen(1)
+ [x,x,x];
+ ==> x*gen(3)+x*gen(2)+x*gen(1)
+
+(<,c):
+ <_m = (<,c) denotes the module ordering (giving priority to the
+ coefficients):
+ x^a*gen(i) <_m x^b*gen(j) <==>
+ x^a < x^b
+ or
+ x^a = x^b and i > j. $<_m = (<,c)$ denotes the module ordering (giving
priority to the coefficients):
+
+\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha <
+ x^\beta$ or ($x^\alpha = x^\beta $ and $ i > j$).
+
+ *Example:*
+
+ ring r = 0, (x,y,z), (lp,c);
+ [x+y2,z3+xy];
+ ==> xy*gen(2)+x*gen(1)+y2*gen(1)+z3*gen(2)
+ [x,x,x];
+ ==> x*gen(1)+x*gen(2)+x*gen(3)
+
+(c,<):
+ <_m = (c, <) denotes the module ordering (giving priority to the
+ component):
+ x^a*gen(i) <_m x^b*gen(j) <==>
+ i>j
+ or
+ i = j and x^a < x^b. $<_m = (c, <)$ denotes the module ordering (giving
priority to the component):
+
+\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow i > j$ or ($
+ i = j $ and $ x^\alpha < x^\beta $).
+
+ *Example:*
+
+ ring r = 0, (x,y,z), (c,lp);
+ [x+y2,z3+xy];
+ ==> [x+y2,xy+z3]
+ [x,x,x];
+ ==> [x,x,x]
+
+The output of a vector v in K[x]^r with components v_1, ..., v_r has the
+format v_1 * gen(1) + ... + v_r * gen(r) The output of a vector $v$ in
$K[x]^r$ with components $v_1,
+\ldots, v_r$ has the format $v_1 * gen(1) + \ldots + v_r * gen(r)$
+(up to permutation) unless the ordering starts with `c'. In this case a
+vector is written as [v_1, ..., v_r]. In this case a vector is written as
$[v_1, \ldots, v_r]$.
+In all cases SINGULAR can read input in both formats.
+
+
+File: sing.htm, Node: Matrix orderings, Next: Product orderings, Prev:
Module orderings, Up: Monomial orderings
+
+B.2.6 Matrix orderings
+----------------------
+
+Let $M$
+M be an invertible $(n \times n)$-matrix
+(n x n)-matrix with integer coefficients and M_1, ..., M_n the rows of
+M. $M_1, \ldots, M_n$ the rows of $M$.
+
+The M-ordering < is defined as follows:
+x^a < x^b <==> there exists an i: 1 <= i <= n : M_1*a = M_1*b, ...,
+M_(i-1)*a = M_(i-1)*b, M_i*a < M_i*b. \quad \quad $x^a < x^b \Leftrightarrow
\exists\ 1 \leq i \leq n :
+M_1 a = \; M_1 b, \ldots, M_{i-1} a = \; M_{i-1} b$ and $M_i a < \; M_i b$.
+
+Thus, x^a < x^b if and only if M*a is smaller than M*b $x^a < x^b$
+if and only if $M a$ is smaller than $M b$
+with respect to the lexicographical ordering.
+
+The following matrices represent (for 3 variables) the global and local
+orderings defined above (note that the matrix is not uniquely determined
+by the ordering):
+
+lp:
+ 1 0 0
+ 0 1 0
+ 0 0 1
+
+dp:
+ 1 1 1
+ 0 0 -1
+ 0 -1 0
+
+Dp:
+ 1 1 1
+ 1 0 0
+ 0 1 0
+
+wp(1,2,3):
+ 1 2 3
+ 0 0 -1
+ 0 -1 0
+
+Wp(1,2,3):
+ 1 2 3
+ 1 0 0
+ 0 1 0
+
+ls:
+ -1 0 0
+ 0 -1 0
+ 0 0 -1
+
+ds:
+ -1 -1 -1
+ 0 0 -1
+ 0 -1 0
+
+Ds:
+ -1 -1 -1
+ 1 0 0
+ 0 1 0
+
+ws(1,2,3):
+ -1 -2 -3
+ 0 0 -1
+ 0 -1 0
+
+Ws(1,2,3):
+ -1 -2 -3
+ 1 0 0
+ 0 1 0
+
+$\quad$ lp:
+$\left(\matrix{
+ 1 & 0 & 0 \cr
+ 0 & 1 & 0 \cr
+ 0 & 0 & 1 \cr
+ }\right)$
+\quad dp:
+$\left(\matrix{
+ 1 & 1 & 1 \cr
+ 0 & 0 &-1 \cr
+ 0 &-1 & 0 \cr
+ }\right)$
+\quad Dp:
+$\left(\matrix{
+ 1 & 1 & 1 \cr
+ 1 & 0 & 0 \cr
+ 0 & 1 & 0 \cr
+ }\right)$
+
+$\quad$ wp(1,2,3):
+$\left(\matrix{
+ 1 & 2 & 3 \cr
+ 0 & 0 &-1 \cr
+ 0 &-1 & 0 \cr
+ }\right)$
+\quad Wp(1,2,3):
+$\left(\matrix{
+ 1 & 2 & 3 \cr
+ 1 & 0 & 0 \cr
+ 0 & 1 & 0 \cr
+ }\right)$
+
+$\quad$ ls:
+$\left(\matrix{
+-1 & 0 & 0 \cr
+ 0 &-1 & 0 \cr
+ 0 & 0 &-1 \cr
+ }\right)$
+\quad ds:
+$\left(\matrix{
+-1 &-1 &-1 \cr
+ 0 & 0 &-1 \cr
+ 0 &-1 & 0 \cr
+ }\right)$
+\quad Ds:
+$\left(\matrix{
+-1 &-1 &-1 \cr
+ 1 & 0 & 0 \cr
+ 0 & 1 & 0 \cr
+ }\right)$
+
+$\quad$ ws(1,2,3):
+$\left(\matrix{
+-1 &-2 &-3 \cr
+ 0 & 0 &-1 \cr
+ 0 &-1 & 0 \cr
+ }\right)$
+\quad Ws(1,2,3):
+$\left(\matrix{
+-1 &-2 &-3 \cr
+ 1 & 0 & 0 \cr
+ 0 & 1 & 0 \cr
+ }\right)$
+
+Product orderings (see next section) represented by a matrix:
+
+(dp(3), wp(1,2,3)):
+ 1 1 1 0 0 0
+ 0 0 -1 0 0 0
+ 0 -1 0 0 0 0
+ 0 0 0 1 2 3
+ 0 0 0 0 0 -1
+ 0 0 0 0 -1 0
+
+(Dp(3), ds(3)):
+ 1 1 1 0 0 0
+ 1 0 0 0 0 0
+ 0 1 0 0 0 0
+ 0 0 0 -1 -1 -1
+ 0 0 0 0 0 -1
+ 0 0 0 0 -1 0
+$\quad$ (dp(3), wp(1,2,3)):
+$\left(\matrix{
+1& 1& 1& 0& 0& 0 \cr
+0& 0& -1& 0& 0& 0 \cr
+0& -1& 0& 0& 0& 0 \cr
+0& 0& 0& 1& 2& 3 \cr
+0& 0& 0& 0& 0& -1 \cr
+0& 0& 0& 0& -1& 0 \cr
+ }\right)$
+
+$\quad$ (Dp(3), ds(3)):
+$\left(\matrix{
+1& 1& 1& 0& 0& 0 \cr
+1& 0& 0& 0& 0& 0 \cr
+0& 1& 0& 0& 0& 0 \cr
+0& 0& 0& -1& -1& -1 \cr
+0& 0& 0& 0& 0& -1 \cr
+0& 0& 0& 0& -1& 0 \cr
+ }\right)$
+
+Orderings with extra weight vector (see below) represented by a matrix:
+
+(dp(3), a(1,2,3),dp(3)):
+ 1 1 1 0 0 0
+ 0 0 -1 0 0 0
+ 0 -1 0 0 0 0
+ 0 0 0 1 2 3
+ 0 0 0 1 1 1
+ 0 0 0 0 0 -1
+ 0 0 0 0 -1 0
+
+(a(1,2,3,4,5),Dp(3), ds(3)):
+ 1 2 3 4 5 0
+ 1 1 1 0 0 0
+ 1 0 0 0 0 0
+ 0 1 0 0 0 0
+ 0 0 0 -1 -1 -1
+ 0 0 0 0 0 -1
+ 0 0 0 0 -1 0
+$\quad$ (dp(3), a(1,2,3),dp(3)):
+$\left(\matrix{
+1& 1& 1& 0& 0& 0 \cr
+0& 0& -1& 0& 0& 0 \cr
+0& -1& 0& 0& 0& 0 \cr
+0& 0& 0& 1& 2& 3 \cr
+0& 0& 0& 1& 1& 1 \cr
+0& 0& 0& 0& 0& -1 \cr
+0& 0& 0& 0& -1& 0 \cr
+ }\right)$
+
+$\quad$ (a(1,2,3,4,5),Dp(3), ds(3)):
+$\left(\matrix{
+1& 2& 3& 4& 5& 0 \cr
+1& 1& 1& 0& 0& 0 \cr
+1& 0& 0& 0& 0& 0 \cr
+0& 1& 0& 0& 0& 0 \cr
+0& 0& 0& -1& -1& -1 \cr
+0& 0& 0& 0& 0 & -1 \cr
+0& 0& 0& 0& -1& 0 \cr
+ }\right)$
+
+
+*Example*:
+ ring r = 0, (x,y,z), M(1, 0, 0, 0, 1, 0, 0, 0, 1);
+
+which may also be written as:
+ intmat m[3][3]=1, 0, 0, 0, 1, 0, 0, 0, 1;
+ m;
+ ==> 1,0,0,
+ ==> 0,1,0,
+ ==> 0,0,1
+ ring r = 0, (x,y,z), M(m);
+ r;
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering M
+ ==> // : names x y z
+ ==> // : weights 1 0 0
+ ==> // : weights 0 1 0
+ ==> // : weights 0 0 1
+ ==> // block 2 : ordering C
+
+If the ring has $n$
+n variables and the matrix contains less than $n \times n$
+n x n entries an error message is given, if there are more entries, the
+last ones are ignored.
+
+*WARNING:* SINGULAR does not check whether the matrix has full rank.
+In such a case some computations might not terminate, others might give
+a nonsense result.
+
+Having these matrix orderings SINGULAR can compute standard bases for
+any monomial ordering which is compatible with the natural semigroup
+structure. In practice the global and local orderings together with
+block orderings should be sufficient in most cases. These orderings are
+faster than the corresponding matrix orderings, since evaluating a
+matrix product is time consuming.
+
+
+File: sing.htm, Node: Product orderings, Next: Extra weight vector, Prev:
Matrix orderings, Up: Monomial orderings
+
+B.2.7 Product orderings
+-----------------------
+
+Let x = (x_1, ..., x_n) = x(1..n) and y = (y_1, ..., y_m) = y(1..m) $x = (x_1,
\ldots, x_n)$ and $y = (y_1, \ldots, y_m)$
+be two ordered sets of variables, <_1 a monomial ordering on K[x] and
+<_2 a monomial ordering on K[y]. The product ordering (or block
+ordering) < = (<_1,<_2) on K[x,y] is the following:
+x^a y^b < x^A y^B <==>
+x^a <_1 x^A
+or
+x^a = x^A and y^b <_2 y^B. $<_1$ a monomial
+ordering on $K[x]$ and $<_2$ a monomial ordering on $K[y]$. The product
+ordering (or block ordering) $<\ := (<_1,<_2)$ on $K[x,y]$ is the following:
+
+\quad \quad $x^a y^b < x^A y^B \Leftrightarrow x^a <_1 x^A $ or ($x^a =
+x^A$ and $y^b <_2 y^B$).
+
+Inductively one defines the product ordering of more than two monomial
+orderings.
+
+In SINGULAR, any of the above global orderings, local orderings or
+matrix orderings may be combined (in an arbitrary manner and length) to
+a product ordering. E.g., `(lp(3), M(1, 2, 3, 1, 1, 1, 1, 0, 0),
+ds(4), ws(1,2,3))' defines: `lp' on the first 3 variables, the matrix
+ordering `M(1, 2, 3, 1, 1, 1, 1, 0, 0)' on the next 3 variables, `ds' on
+the next 4 variables and `ws(1,2,3)' on the last 3 variables.
+
+
+File: sing.htm, Node: Extra weight vector, Prev: Product orderings, Up:
Monomial orderings
+
+B.2.8 Extra weight vector
+-------------------------
+
+a(w_1, ..., w_n), ${\tt a}(w_1, \ldots, w_n),\; $
+w_1,...,w_n $w_1,\ldots,w_n$
+any integers (including 0), defines deg(x^a) = w_1 a_1 + ... + w_n a_n
+$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n$
+and
+deg(x^a) < deg(x^b) ==> x^a < x^b $$\deg(x^\alpha) < \deg(x^\beta)
\Rightarrow x^\alpha < x^\beta,$$
+
+deg(x^a) > deg(x^b) ==> x^a > x^b. $$\deg(x^\alpha) > \deg(x^\beta)
\Rightarrow x^\alpha > x^\beta. $$
+
+An extra weight vector does not define a monomial ordering by itself: it
+can only be used in combination with other orderings to insert an extra
+line of weights into the ordering matrix.
+
+
+*Example*:
+ ring r = 0, (x,y,z), (a(1,2,3),wp(4,5,2));
+ ring s = 0, (x,y,z), (a(1,2,3),dp);
+ ring q = 0, (a,b,c,d),(lp(1),a(1,2,3),ds);
+
+
+File: sing.htm, Node: Mathematical background, Next: SINGULAR libraries,
Prev: Polynomial data, Up: Top
+
+Appendix C Mathematical background
+**********************************
+
+This chapter introduces some of the mathematical notions and definitions
+used throughout the manual. It is mostly a collection of the most
+prominent definitions and properties. For details, please, refer to some
+articles or text books (see *note References::).
+
+* Menu:
+
+* Standard bases::
+* Hilbert function::
+* Syzygies and resolutions::
+* Characteristic sets::
+* Gauss-Manin connection::
+* Toric ideals and integer programming::
+* References::
+
+
+File: sing.htm, Node: Standard bases, Next: Hilbert function, Up:
Mathematical background
+
+C.1 Standard bases
+==================
+
+Definition
+----------
+
+Let $R = \hbox{Loc}_< K[\underline{x}]$ and let $I$ be a submodule of $R^r$.
+Note that for r=1 this means that $I$ is an ideal in $R$.
+Denote by $L(I)$ the submodule of $R^r$ generated by the leading terms
+of elements of $I$, i.e. by $\left\{L(f) \mid f \in I\right\}$.
+Then $f_1, \ldots, f_s \in I$ is called a {\bf standard basis} of $I$
+if $L(f_1), \ldots, L(f_s)$ generate $L(I)$.
+Let R = Loc K[x] and let I be a submodule of $R^r$. Denote by L(I) the
+submodule of R^r generated by the leading terms of elements in $I$, i.e.
+by { L(f) | f in I}. Then f_1, ..., f_s in I is called a *standard
+basis* of I if L(f_1), ..., L(f_s) generate L(I).
+
+Properties
+----------
+
+normal form:
+A function $\hbox{NF} : R^r \times \{G \mid G\ \hbox{ a standard
+ basis}\} \to R^r, (p,G) \mapsto \hbox{NF}(p|G)$, is called a {\bf normal
+ form} if for any $p \in R^r$ and any standard basis $G$ the following
+ holds: if $\hbox{NF}(p|G) \not= 0$ then $L(g)$ does not divide
+ $L(\hbox{NF}(p|G))$ for all $g \in G$.
+
+ \noindent
+ $\hbox{NF}(p|G)$ is called a {\bf normal form of} $p$ {\bf with
+ respect to} $G$ (note that such a function is not unique).
+ A function NF : R^r x {G | G a standard basis} -> R^r, (p,G) ->
+ NF(p|G), is called a *normal form* if for any p in R^r and any
+ standard basis G the following holds: if NF(p|G) <> 0 then L(g)
+ does not divide L(NF(p|G)) for all g in G.
+ NF(p|G) is called a *normal form* of p with respect to G (note that
+ such a function is not unique).
+
+ideal membership:
+For a standard basis $G$ of $I$ the following holds:
+ $f \in I$ if and only if $\hbox{NF}(f,G) = 0$.
+ For a standart basis G of I the following holds: f in I if and only
+ if NF(f,G) = 0.
+
+Hilbert function:
+Let \hbox{$I \subseteq K[\underline{x}]^r$} be a homogeneous module, then the
Hilbert function
+ $H_I$ of $I$ (see below)
+ and the Hilbert function $H_{L(I)}$ of the leading module $L(I)$
+ coincide, i.e.,
+ $H_I=H_{L(I)}$.
+ Let I in K[x]^r be a homogeneous ideal, then the Hilbert function
+ H_I of I and the Hilbert function H_L(I) of the leading ideal L(I)
+ coincide.
+
+
+File: sing.htm, Node: Hilbert function, Next: Syzygies and resolutions,
Prev: Standard bases, Up: Mathematical background
+
+C.2 Hilbert function
+====================
+
+Let M $=\bigoplus_i M_i$ be a graded module over $K[x_1,..,x_n]$ with
+respect to weights $(w_1,..w_n)$.
+The {\bf Hilbert function} of $M$, $H_M$, is defined (on the integers) by
+$$H_M(k) :=dim_K M_k.$$
+The {\bf Hilbert-Poincare series} of $M$ is the power series
+$$\hbox{HP}_M(t) :=\sum_{i=-\infty}^\infty
+H_M(i)t^i=\sum_{i=-\infty}^\infty dim_K M_i \cdot t^i.$$
+It turns out that $\hbox{HP}_M(t)$ can be written in two useful ways
+for weights $(1,..,1)$:
+$$\hbox{HP}_M(t)={Q(t)\over (1-t)^n}={P(t)\over (1-t)^{dim(M)}}$$
+where $Q(t)$ and $P(t)$ are polynomials in ${\bf Z}[t]$.
+$Q(t)$ is called the {\bf first Hilbert series},
+and $P(t)$ the {\bf second Hilbert series}.
+If \hbox{$P(t)=\sum_{k=0}^N a_k t^k$}, and \hbox{$d = dim(M)$},
+then \hbox{$H_M(s)=\sum_{k=0}^N a_k$ ${d+s-k-1}\choose{d-1}$}
+(the {\bf Hilbert polynomial}) for $s \ge N$.
+Let M =(+) M_i be a graded module over K[x_1,...,x_n] with respect to
+weights (w_1,..w_n). The Hilbert function of M H_M is defined by
+ H_M(k)=dim_K M_k.
+The Hilbert-Poincare series of M is the power series
+ HP_M(t)=sum_i dim_K (M_i)*t^i.
+It turns out that HP_M(t) can be written in two useful ways for weights
+$(1,..,1)$:
+ H_M(t)=Q(t)/(1-t)^n=P(t)/(1-t)^dim(M).
+where Q(t) and P(t) are polynomials in Z[t]. Q(t) is called the first
+Hilbert series, and P(t) the second Hilbert series. If P(t)=sum_(k=0)^N
+a_k t^k, and d=dim(M), then
+ H_M(s)=sum_(k=0)^N a_k binomial(d+s-k-1,d-1) (the Hilbert polynomial)
+for s >= N.
+Generalizing these to quasihomogeneous modules we get
+$$\hbox{HP}_M(t)={Q(t)\over {\Pi_{i=1}^n(1-t^{w_i})}}$$
+where $Q(t)$ is a polynomial in ${\bf Z}[t]$.
+$Q(t)$ is called the {\bf first (weighted) Hilbert series} of M.
+Generalizing these to quasihomogeneous modules we get
+ H_M(t)=Q(t)/Prod((1-t)^(w_i)).
+where Q(t) is a polynomial in Z[t]. Q(t) is called the first (weighted)
+Hilbert series of M.
+
+
+File: sing.htm, Node: Syzygies and resolutions, Next: Characteristic sets,
Prev: Hilbert function, Up: Mathematical background
+
+C.3 Syzygies and resolutions
+============================
+
+Syzygies
+--------
+
+Let $R$ be a quotient of $\hbox{Loc}_< K[\underline{x}]$ and let
\hbox{$I=(g_1, ..., g_s)$} be a submodule of $R^r$.
+Then the {\bf module of syzygies} (or {\bf 1st syzygy module}, {\bf module of
relations}) of $I$, syz($I$), is defined to be the kernel of the map \hbox{$R^s
\rightarrow R^r,\; \sum_{i=1}^s w_ie_i \mapsto \sum_{i=1}^s w_ig_i$.}
+Let R be a quotient of Loc K[x] and let I=(g_1, ..., g_s) be a submodule
+of R^r. Then the *module of syzygies* (or *1st syzygy module*, *module
+of relations*) of I, syz(I), is defined to be the kernel of the map
+ R^s -> R^r,
+ w_1*e_1 + ... + w_s*e_s -> w_1*g_1 + ... + w_s*g_s.
+
+The *k-th syzygy module* is defined inductively to be the module of
+syzygies of the $(k-1)$-st
+(k-1)-st syzygy module.
+
+Note, that the syzygy modules of $I$ depend on a choice of generators $g_1,
..., g_s$.
+But one can show that they depend on $I$ uniquely up to direct summands.
+Note, that the syzygy modules of I depend on a choice of generators g_1,
+..., g_s. But one can show that they depend on I uniquely up to direct
+summands.
+
+`*Example:*'
+
+ ring R= 0,(u,v,x,y,z),dp;
+ ideal i=ux, vx, uy, vy;
+ print(syz(i));
+ ==> -y,0, -v,0,
+ ==> 0, -y,u, 0,
+ ==> x, 0, 0, -v,
+ ==> 0, x, 0, u
+
+Free resolutions
+----------------
+
+Let $I=(g_1,...,g_s)\subseteq R^r$ and $M= R^r/I$.
+A {\bf free resolution of $M$} is a long exact sequence
+$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
+\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow M\longrightarrow
+0,$$
+Let I=(g_1,...,g_s) in R^r and M=R^r/I. A free resolution of M is a
+long exact sequence
+ ...-> F2 -A2-> F1 -A1-> F0->M->0,
+
+where the columns of the matrix $A_1$
+A_1 generate I $I$
+. Note, that resolutions need not to be finite (i.e., of finite length).
+The Hilbert Syzygy Theorem states, that for $R=\hbox{Loc}_< K[\underline{x}]$
+R=Loc K[x] there exists a ("minimal") resolution of length not exceeding
+the number of variables.
+
+`*Example:*'
+
+ ring R= 0,(u,v,x,y,z),dp;
+ ideal I = ux, vx, uy, vy;
+ resolution resI = mres(I,0); resI;
+ ==> 1 4 4 1
+ ==> R <-- R <-- R <-- R
+ ==>
+ ==> 0 1 2 3
+ ==>
+ // The matrix A_1 is given by
+ print(matrix(resI[1]));
+ ==> vy,uy,vx,ux
+ // We see that the columns of A_1 generate I.
+ // The matrix A_2 is given by
+ print(matrix(resI[3]));
+ ==> u,
+ ==> -v,
+ ==> -x,
+ ==> y
+
+Betti numbers and regularity
+----------------------------
+
+Let $R$ be a graded ring (e.g., $R = \hbox{Loc}_< K[\underline{x}]$) and
+let $I \subset R^r$ be a graded submodule. Let
+$$
+ R^r = \bigoplus_a R\cdot e_{a,0} \buildrel A_1 \over \longleftarrow
+ \bigoplus_a R\cdot e_{a,1} \longleftarrow \ldots \longleftarrow
+ \bigoplus_a R\cdot e_{a,n} \longleftarrow 0
+$$
+be a minimal free resolution of $R^n/I$ considered with homogeneous maps
+of degree 0. Then the {\bf graded Betti number} $b_{i,j}$ of $R^r/I$ is
+the minimal number of generators $e_{a,j}$ in degree $i+j$ of the $j$-th
+syzygy module of $R^r/I$ (i.e., the $(j-1)$-st syzygy module of
+$I$). Note, that by definition the $0$-th syzygy module of $R^r/I$ is $R^r$
+and the 1st syzygy module of $R^r/I$ is $I$.
+Let R be a graded ring (e.g., R = K[x]) and let I in R^r be a graded
+submodule. Let
+ R^r = (+) K[x]e(a,0) <-- (+) K[x]e(a,1)
+ <-- ... <-- (+) K[x]e(a,n) <-- 0
+be a minimal free resolution of R^n/I considered with homogeneous maps
+of degree 0. Then the *graded Betti number* b_i,j of R^r/I is the
+minimal number of generators e_a,j in degree i+j of the j-th syzygy
+module of R^r/I (i.e., the (j-1)-st syzygy module of I). Note, that by
+definition the 0th syzygy module of R^r/I is R^r and the 1st syzygy
+module of R^r/I is I.
+
+The *regularity* of I $I$
+ is the smallest integer s $s$
+
+such that $$
+ \hbox{deg}(e_{a,j}) \le s+j-1 \quad \hbox{for all $j$.}
+$$
+ deg(e(a,j)) <= s+j-1 for all j.
+
+`*Example:*'
+
+ ring R= 0,(u,v,x,y,z),dp;
+ ideal I = ux, vx, uy, vy;
+ resolution resI = mres(I,0); resI;
+ ==> 1 4 4 1
+ ==> R <-- R <-- R <-- R
+ ==>
+ ==> 0 1 2 3
+ ==>
+ // the betti number:
+ print(betti(resI), "betti");
+ ==> 0 1 2 3
+ ==> ------------------------------
+ ==> 0: 1 - - -
+ ==> 1: - 4 4 1
+ ==> ------------------------------
+ ==> total: 1 4 4 1
+ // the regularity:
+ regularity(resI);
+ ==> 2
+
+
+File: sing.htm, Node: Characteristic sets, Next: Gauss-Manin connection,
Prev: Syzygies and resolutions, Up: Mathematical background
+
+C.4 Characteristic sets
+=======================
+
+Let $<$ be the lexicographical ordering on $R=K[x_1,...,x_n]$ with $x_1
+< ... < x_n$.
+For $f \in R$ let lvar($f$) (the leading variable of $f$) be the largest
+variable in $f$,
+i.e., if $f=a_s(x_1,...,x_{k-1})x_k^s+...+a_0(x_1,...,x_{k-1})$ for some
+$k \leq n$ then lvar$(f)=x_k$.
+
+Moreover, let
+\hbox{ini}$(f):=a_s(x_1,...,x_{k-1})$. The pseudo remainder
+$r=\hbox{prem}(g,f)$ of $g$ with respect to $f$ is
+defined by the equality $\hbox{ini}(f)^a\cdot g = qf+r$ with
+$\hbox{deg}_{lvar(f)}(r)<\hbox{deg}_{lvar(f)}(f)$ and $a$
+minimal.
+
+A set $T=\{f_1,...,f_r\} \subset R$ is called triangular if
+$\hbox{lvar}(f_1)<...<\hbox{lvar}(f_r)$. Moreover, let $ U \subset T $,
+then $(T,U)$ is called a triangular system, if $T$ is a triangular set
+such that $\hbox{ini}(T)$ does not vanish on $V(T) \setminus V(U)
+(=:V(T\setminus U))$.
+
+$T$ is called irreducible if for every $i$ there are no
+$d_i$,$f_i'$,$f_i''$ such that
+$$ \hbox{lvar}(d_i)<\hbox{lvar}(f_i) =
+\hbox{lvar}(f_i')=\hbox{lvar}(f_i''),$$
+$$ 0 \not\in \hbox{prem}(\{ d_i, \hbox{ini}(f_i'),
+\hbox{ini}(f_i'')\},\{ f_1,...,f_{i-1}\}),$$
+$$\hbox{prem}(d_if_i-f_i'f_i'',\{f_1,...,f_{i-1}\})=0.$$
+Furthermore, $(T,U)$ is called irreducible if $T$ is irreducible.
+
+The main result on triangular sets is the following:
+let $G=\{g_1,...,g_s\} \subset R$ then there are irreducible triangular sets
$T_1,...,T_l$
+such that $V(G)=\bigcup_{i=1}^{l}(V(T_i\setminus I_i))$
+where $I_i=\{\hbox{ini}(f) \mid f \in T_i \}$. Such a set
+$\{T_1,...,T_l\}$ is called an {\bf irreducible characteristic series} of
+the ideal $(G)$.
+Let > be the lexicographical ordering on R=K[x_1,...,x_n] with
+x_1<...<x_n . For f in R let lvar(f) (the leading variable of f) be the
+largest variable in lead(f) (the leading term of f with respect to >),
+i.e., if f=a_s(x_1,...,x_(k-1))x_k^s+...+a_0(x_1,...,x_(k-1)) for some
+k<=n then lvar(f)=x_k.
+
+Moreover, let ini(f):=a_s(x_1,...,x_(k-1)). The pseudo remainder
+r=prem(g,f) of g with respect to f is defined by ini(f)^a*g=q*f+r with
+the property deg_(lvar(f))(r)<deg_(lvar(f))(f), `a' minimal.
+
+A set T={f_1,...,f_r} in R is called triangular if
+lvar(f_1)<...<lvar(f_r).
+
+(T,U) is called a triangular system, if U is a subset of T and if T is a
+triangular set such that ini(T) does not vanish on the zero-set of T \
+zero-set of U ( =:Zero(T\U)).
+
+T is called irreducible if for every i there are no d_i,f_i',f_i" with
+the property:
+ lvar(d_i)<lvar(f_i)
+ lvar(f_i')=lvar(f_i")=lvar(f_i)
+ 0 not in prem({ d_i, ini(f_i'), ini(f_i")},{ f_1,...,f_(i-1)})
+such that prem(d_i*f_i-f_i'*f_i",{f_1,...,f_(i-1)})=0.
+
+(T,U) is called irreducible if T is irreducible.
+
+The main result on triangular sets is the following: let G={g_1,...,g_s}
+then there are irreducible triangular sets T_1,...,T_l such that
+Zero(G)=Union(i=1,...,l: Zero(T_i\I_i)) where I_i={ini(f), f in T_i }.
+Such a set {T_1,...,T_l} is called an *irreducibel characteristic
+series* of the ideal (G).
+
+`*Example:*'
+
+ ring R= 0,(x,y,z,u),dp;
+ ideal i=-3zu+y2-2x+2,
+ -3x2u-4yz-6xz+2y2+3xy,
+ -3z2u-xu+y2z+y;
+ print(char_series(i));
+ ==> _[1,1],3x2z-y2+2yz,3x2u-3xy-2y2+2yu,
+ ==> x, -y+2z, -2y2+3yu-4
+
+
+File: sing.htm, Node: Gauss-Manin connection, Next: Toric ideals and integer
programming, Prev: Characteristic sets, Up: Mathematical background
+
+C.5 Gauss-Manin connection
+==========================
+
+Let $f\colon(C^{n+1},0)\rightarrow(C,0)$ be a complex isolated hypersurface
singularity given by a polynomial with algebraic coefficients which we also
denote by $f$.
+Let $O=C[x_0,\ldots,x_n]_{(x_0,\ldots,x_n)}$ be the local ring at the origin
and $J_f$ the Jacobian ideal of $f$.
+
+A {\bf Milnor representative} of $f$ defines a differentiable fibre bundle
over the punctured disc with fibres of homotopy type of $\mu$ $n$-spheres.
+The $n$-th cohomology bundle is a flat vector bundle of dimension $n$ and
carries a natural flat connection with covariant derivative $\partial_t$.
+The {\bf monodromy operator} is the action of a positively oriented generator
of the fundamental group of the puctured disc on the Milnor fibre.
+Sections in the cohomology bundle of {\bf moderate growth} at $0$ form a
regular $D=C\{t\}[\partial_t]$-module $G$, the {\bf Gauss-Manin connection}.
+
+By integrating along flat multivalued families of cycles, one can consider
fibrewise global holomorphic differential forms as elements of $G$.
+This factors through an inclusion of the {\bf Brieskorn lattice}
$H'':=\Omega^{n+1}_{C^{n+1},0}/df\wedge d\Omega^{n-1}_{C^{n+1},0}$ in $G$.
+
+The $D$-module structure defines the {\bf V-filtration} $V$ on $G$ by
$V^\alpha:=\sum_{\beta\ge\alpha}C\{t\}ker(t\partial_t-\beta)^{n+1}$.
+The Brieskorn lattice defines the {\bf Hodge filtration} $F$ on $G$ by
$F_k=\partial_t^kH''$ which comes from the {\bf mixed Hodge structure} on the
Milnor fibre.
+Note that $F_{-1}=H'$.
+
+The induced V-filtration on the Brieskorn lattice determines the {\bf
singularity spectrum} $Sp$ by $Sp(\alpha):=\dim_CGr_V^\alpha Gr^F_0G$.
+The spectrum consists of $\mu$ rational numbers $\alpha_1,\dots,\alpha_\mu$
such that $e^{2\pi i\alpha_1},\dots,e^{2\pi i\alpha_\mu}$ are the eigenvalues
of the monodromy.
+These {\bf spectral numbers} lie in the open interval $(-1,n)$, symmetric
about the midpoint $(n-1)/2$.
+
+The spectrum is constant under $\mu$-constant deformations and has the
following semicontinuity property:
+The number of spectral numbers in an interval $(a,a+1]$ of all singularities
of a small deformation of $f$ is greater or equal to that of f in this interval.
+For semiquasihomogeneous singularities, this also holds for intervals of the
form $(a,a+1)$.
+
+Two given isolated singularities $f$ and $g$ determine two spectra and from
these spectra we get an integer.
+This integer is the maximal positive integer $k$ such that the semicontinuity
holds for the spectrum of $f$ and $k$ times the spectrum of $g$.
+These numbers give bounds for the maximal number of isolated singularities of
a specific type on a hypersurface $X\subset{P}^n$ of degree $d$:
+such a hypersurface has a smooth hyperplane section, and the complement is a
small deformation of a cone over this hyperplane section.
+The cone itself being a $\mu$-constant deformation of $x_0^d+\dots+x_n^d=0$,
the singularities are bounded by the spectrum of $x_0^d+\dots+x_n^d$.
+
+Using the library {\tt gaussman.lib} one can compute the {\bf monodromy}, the
V-filtration on $H''/H'$, and the spectrum.
+
+Let f:(C^(n+1),0)-->(C,0) be a complex isolated hypersurface singularity
+given by a polynomial with algebraic coefficients which we also denote
+by f. Let O=C[x_0,...,x_n]_(x_0,...,x_n) be the local ring at the
+origin and J_f the Jacobian ideal of f.
+
+A *Milnor representative* of f defines a differentiable fibre bundle
+over the punctured disc with fibres of homotopy type of mu n-spheres.
+The n-th cohomology bundle is a flat vector bundle of dimension n and
+carries a natural flat connection with covariant derivative d_t. The
+*monodromy operator* is the action of a positively oriented generator of
+the fundamental group of the puctured disc on the Milnor fibre.
+Sections in the cohomology bundle of *moderate growth* at 0 form a
+regular D=C{t}[d_t]-module G, the *Gauss-Manin connection*.
+
+By integrating along flat multivalued families of cycles, one can
+consider fibrewise global holomorphic differential forms as elements of
+G. This factors through an inclusion of the *Brieskorn lattice*
+H":=Omega^(n+1)_(C^(n+1),0)/df*dOmega^(n-1)_(C^(n+1),0) in G.
+
+The D-module structure defines the *V-filtration* V on G by
+V^a:=sum_(b>=a)C{t}ker(t*d_t-b)^(n+1). The Brieskorn lattice defines
+the *Hodge filtration* F on G by F_k=d_t^kH" which comes from the *mixed
+Hodge structure* on the Milnor fibre. Note that F_(-1)=H'.
+
+The induced V-filtration on the Brieskorn lattice determines the
+*singularity spectrum* Sp by Sp(a):=dim_CGr_V^a Gr^F_0G. The spectrum
+consists of mu rational numbers a_1,...,a_mu such that
+exp(2*pi*i*a_1),...,exp(2*pi*i*a_mu) are the eigenvalues of the
+monodromy. These *spectral numbers* lie in the open interval (-1,n),
+symmetric about the midpoint (n-1)/2.
+
+The spectrum is constant under mu-constant deformations and has the
+following semicontinuity property: The number of spectral numbers in an
+interval (a,a+1] of all singularities of a small deformation of f is
+greater or equal to that of f in this interval. For
+semiquasihomogeneous singularities, this also holds for intervals of the
+form (a,a+1).
+
+Two given isolated singularities f and g determine two spectra and from
+these spectra we get an integer. This integer is the maximal positive
+integer k such that the semicontinuity holds for the spectrum of f and k
+times the spectrum of g. These numbers give bounds for the maximal
+number of isolated singularties of a specific type on a hypersurface X
+in P^n of degree d: such a hypersurface has a smooth hyperplane section,
+and the complement is a small deformation of a cone over this hyperplane
+section. The cone itself being a mu-constant deformation of
+x_0^d+...+x_n^d=0, the singularities are bounded by the spectrum of
+x_0^d+...+x_n^d.
+
+Using the library `gaussman.lib' one can compute the *monodromy*, the
+V-filtration on H"/H', and the spectrum.
+
+Let us consider as an example f=x^5+x^2y^2+y^5 $f=x^5+x^2y^2+y^5$
+. First, we compute a matrix M $M$
+ such that $\exp(2\pi iM)$
+exp(-2*pi*i*M) is a monodromy matrix of f $f$
+ and the Jordan normal form of M $M$
+:
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly f=x5+x2y2+y5;
+ list l=monodromy(f);
+ matrix M=jordanmatrix(l[1],l[2],l[3]);
+ print(M);
+ ==> 1/2,0, 0, 0, 0, 0, 0,0, 0, 0, 0,
+ ==> 1, 1/2,0, 0, 0, 0, 0,0, 0, 0, 0,
+ ==> 0, 0, 7/10,0, 0, 0, 0,0, 0, 0, 0,
+ ==> 0, 0, 0, 7/10,0, 0, 0,0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 9/10,0, 0,0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 9/10,0,0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0, 1,0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0, 0,11/10,0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0, 0,0, 11/10,0, 0,
+ ==> 0, 0, 0, 0, 0, 0, 0,0, 0, 13/10,0,
+ ==> 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10
+
+Now, we compute the V-filtration on H''/H' $H''/H'$
+ and the spectrum:
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly f=x5+x2y2+y5;
+ list l=vfilt(f);
+ print(l[1]);
+ ==> -1/2,
+ ==> -3/10,
+ ==> -1/10,
+ ==> 0,
+ ==> 1/10,
+ ==> 3/10,
+ ==> 1/2
+ print(l[2]);
+ ==> 1,2,2,1,2,2,1
+ print(l[3]);
+ ==> [1]:
+ ==> _[1]=gen(11)
+ ==> [2]:
+ ==> _[1]=gen(10)
+ ==> _[2]=gen(6)
+ ==> [3]:
+ ==> _[1]=gen(9)
+ ==> _[2]=gen(4)
+ ==> [4]:
+ ==> _[1]=gen(5)
+ ==> [5]:
+ ==> _[1]=gen(3)
+ ==> _[2]=gen(8)
+ ==> [6]:
+ ==> _[1]=gen(2)
+ ==> _[2]=gen(7)
+ ==> [7]:
+ ==> _[1]=gen(1)
+ print(l[4]);
+ ==> y5,
+ ==> y4,
+ ==> y3,
+ ==> y2,
+ ==> xy,
+ ==> y,
+ ==> x4,
+ ==> x3,
+ ==> x2,
+ ==> x,
+ ==> 1
+Here `l[1]' contains the spectral numbers, `l[2]' the corresponding
+multiplicities, `l[3]' a C $C$
+-basis of the V-filtration on H''/H' $H''/H'$
+ in terms of the monomial basis of $O/J_f\cong H''/H'$
+O/J_f~=H"/H' in `l[4]'.
+
+If the principal part of $f$ is $C$-nondegenerate, one can compute the
spectrum using the library {\tt spectrum.lib}.
+In this case, the V-filtration on $H''$ coincides with the Newton-filtration
on $H''$ which allows to compute the spectrum more efficiently.
+
+If the principal part of f is C-nondegenerate, one can compute the
+spectrum using the library `spectrum.lib'. In this case, the
+V-filtration on H" coincides with the Newton-filtration on H" which
+allows to compute the spectrum more efficiently.
+
+Let us calculate one specific example, the maximal number of triple
+points of type $\tilde{E}_6$ on a surface $X\subset{P}^3$
+E~_6 on a surface X in P^3 of degree seven. This calculation can be
+done over the rationals. So choose a local ordering on Q[x,y,z] $Q[x,y,z]$
+. Here we take the negative degree lexicographical ordering which is
+denoted `ds' in SINGULAR:
+
+ ring r=0,(x,y,z),ds;
+ LIB "spectrum.lib";
+ poly f=x^7+y^7+z^7;
+ list s1=spectrumnd( f );
+ s1;
+ ==> [1]:
+ ==> _[1]=-4/7
+ ==> _[2]=-3/7
+ ==> _[3]=-2/7
+ ==> _[4]=-1/7
+ ==> _[5]=0
+ ==> _[6]=1/7
+ ==> _[7]=2/7
+ ==> _[8]=3/7
+ ==> _[9]=4/7
+ ==> _[10]=5/7
+ ==> _[11]=6/7
+ ==> _[12]=1
+ ==> _[13]=8/7
+ ==> _[14]=9/7
+ ==> _[15]=10/7
+ ==> _[16]=11/7
+ ==> [2]:
+ ==> 1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1
+
+The command `spectrumnd(f)' computes the spectrum of f $f$
+ and returns a list with six entries: The Milnor number $\mu(f)$, the
geometric genus $p_g(f)$
+mu(f), the geometric genus p_g(f) and the number of different spectrum
+numbers. The other three entries are of type `intvec'. They contain
+the numerators, denominators and multiplicities of the spectrum numbers.
+So $x^7+y^7+z^7=0$
+x^7+y^7+z^7=0 has Milnor number 216 and geometrical genus 35. Its
+spectrum consists of the 16 different rationals
+${3 \over 7}, {4 \over 7}, {5 \over 7}, {6 \over 7}, {1 \over 1},
+{8 \over 7}, {9 \over 7}, {10 \over 7}, {11 \over 7}, {12 \over 7},
+{13 \over 7}, {2 \over 1}, {15 \over 7}, {16 \over 7}, {17 \over 7},
+{18 \over 7}$
+3/7, 4/7, 5/7, 6/7, 1, 8/7, 9/7, 10/7, 11/7, 12/7, 13/7, 2, 15/7, 16/7,
+17/7, 18/7
+appearing with multiplicities
+1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1.
+
+The singularities of type $\tilde{E}_6$ form a
+$\mu$-constant one parameter family given by
+$x^3+y^3+z^3+\lambda xyz=0,\quad \lambda^3\neq-27$.
+The singularities of type E~_6 form a mu-constant one parameter family
+given by x^3+y^3+z^3+lambda xyz=0, lambda^3 <> -27. Therefore they have
+all the same spectrum, which we compute for $x^3+y^3+z^3$.
+x^3+y^3+z^3.
+
+ poly g=x^3+y^3+z^3;
+ list s2=spectrumnd(g);
+ s2;
+ ==> [1]:
+ ==> 8
+ ==> [2]:
+ ==> 1
+ ==> [3]:
+ ==> 4
+ ==> [4]:
+ ==> 1,4,5,2
+ ==> [5]:
+ ==> 1,3,3,1
+ ==> [6]:
+ ==> 1,3,3,1
+Evaluating semicontinuity is very easy:
+ semicont(s1,s2);
+ ==> 18
+
+This tells us that there are at most 18 singularities of type $\tilde{E}_6$ on
a septic in $P^3$. But $x^7+y^7+z^7$
+E~_6 on a septic in P^3. But x^7+y^7+z^7 is semiquasihomogeneous (sqh),
+so we can also apply the stronger form of semicontinuity:
+
+ semicontsqh(s1,s2);
+ ==> 17
+
+So in fact a septic has at most 17 triple points of type $\tilde{E}_6$.
+E~_6.
+
+Note that `spectrumnd(f)' works only if f $f$
+ has nondegenerate principal part. In fact `spectrumnd' will detect a
+degenerate principal part in many cases and print out an error message.
+However if it is known in advance that f $f$
+ has nondegenerate principal part, then the spectrum may be computed
+much faster using `spectrumnd(f,1)'.
+
+
+File: sing.htm, Node: Toric ideals and integer programming, Next:
References, Prev: Gauss-Manin connection, Up: Mathematical background
+
+C.6 Toric ideals and integer programming
+========================================
+
+* Menu:
+
+* Toric ideals:: Definition and computation.
+* Integer programming:: An algorithm using toric ideals.
+* Relevant References::
+
+
+File: sing.htm, Node: Toric ideals, Next: Integer programming, Up: Toric
ideals and integer programming
+
+C.6.1 Toric ideals
+------------------
+
+Let $A$ denote an $m\times n$ matrix with integral coefficients. For $u
+\in Z\!\!\! Z^n$, we define $u^+,u^-$ to be the uniquely determined
+vectors with nonnegative coefficients and disjoint support (i.e.,
+$u_i^+=0$ or $u_i^-=0$ for each component $i$) such that
+$u=u^+-u^-$. For $u\geq 0$ component-wise, let $x^u$ denote the monomial
+$x_1^{u_1}\cdot\ldots\cdot x_n^{u_n}\in K[x_1,\ldots,x_n]$.
+
+The ideal
+$$ I_A:=<x^{u^+}-x^{u^-} | u\in\ker(A)\cap Z\!\!\! Z^n>\ \subset
+K[x_1,\ldots,x_n] $$
+is called a \bf toric ideal. \rm
+
+The first problem in computing toric ideals is to find a finite
+generating set: Let $v_1,\ldots,v_r$ be a lattice basis of $\ker(A)\cap
+Z\!\!\! Z^n$ (i.e, a basis of the $Z\!\!\! Z$-module). Then
+$$ I_A:=I:(x_1\cdot\ldots\cdot x_n)^\infty $$
+where
+$$ I=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
+
+Let A denote an mxn matrix with integral coefficients. For u in Z^n, we
+define u+,u- to be the uniquely determined vectors with nonnegative
+coefficients and disjoint support (i.e., u+[i]=0 or u-[i]=0 for each
+component i) such that u = u+ - u-. For u>=0 component-wise, let x^u
+denote the monomial x(1)^u[1] *...* x(n)^u[n] in K[x(1),...,x(n)].
+
+The ideal in K[x(1),...,x(n)]
+ I(A):= < x^u+ - x^u- | u in ker(A), u in Z^n >
+is called a *toric ideal*.
+
+The first problem in computing toric ideals is to find a finite
+generating set: Let v(1),...,v(r) be a lattice basis of ker(A) as a
+subset of Z^n (i.e., a basis of the Z-module). Then
+ I(A):= sat( I, x[1] *...* x[n])
+where
+ I= < x^v(i)+ - x^v(i)- | i=1,...,r >.
+
+The required lattice basis can be computed using the LLL-algorithm
+(*note [Coh93]::). For the computation of the saturation, there are
+various possibilities described in the section Algorithms.
+menu entry Algorithms.
+
+* Menu:
+
+* Algorithms:: Various algorithms for computing toric ideals.
+* Buchberger algorithm:: Specializing it for toric ideals.
+
+
+File: sing.htm, Node: Algorithms, Next: Buchberger algorithm, Up: Toric
ideals
+
+C.6.2 Algorithms
+----------------
+
+The following algorithms are implemented in *note toric_lib::.
+
+* Menu:
+
+* Conti and Traverso::
+* Pottier::
+* Hosten and Sturmfels::
+* Di Biase and Urbanke::
+* Bigatti and La Scala and Robbiano::
+
+
+File: sing.htm, Node: Conti and Traverso, Next: Pottier, Up: Algorithms
+
+C.6.2.1 The algorithm of Conti and Traverso
+...........................................
+
+The algorithm of Conti and Traverso (*note [CoTr91]::) computes $I_A$ via the
+extended matrix $B=(I_m|A)$,
+where $I_m$ is the $m\times m$ unity matrix. A lattice basis of $B$ is
+given by the set of vectors $(a^j,-e_j)\in Z\!\!\! Z^{m+n}$, where $a^j$
+is the $j$-th row of $A$ and $e_j$ the $j$-th coordinate vector. We
+look at the ideal in $K[y_1,\ldots,y_m,x_1,\ldots,x_n]$ corresponding to
+these vectors, namely
+$$ I_1=<y^{a_j^+}- x_j y^{a_j^-} | j=1,\ldots, n>.$$
+We introduce a further variable $t$ and adjoin the binomial $t\cdot
+y_1\cdot\ldots\cdot y_m -1$ to the generating set of $I_1$, obtaining
+an ideal $I_2$ in the polynomial ring $K[t,
+y_1,\ldots,y_m,x_1,\ldots,x_n]$. $I_2$ is saturated w.r.t. all
+variables because all variables are invertible modulo $I_2$. Now $I_A$
+can be computed from $I_2$ by eliminating the variables
+$t,y_1,\ldots,y_m$.
+computes I(A) via the extended matrix B= ( I | A ), where I is the mxm
+unity matrix. A lattice basis of B is given by the set of vectors
+(a^j,-e_j) in Z^(m+n), where a^j is the j-th row of A and e_j the j-th
+coordinate vector. We look at the ideal in
+K[y(1),...,y(m),x(1),...,x(n)] corresponding to these vectors, namely
+ I1= < y^(a_j)+ - x(j) * y^(a_j)- | j=1,...,n >.
+We introduce a further variable t and adjoin the binomial t * y(1) *...*
+y(m) -1 to the generating set of I1, obtaining an ideal I2 in the
+polynomial ring K[t,y(1),...,y(m),x(1),...,x(n)]. I2 is saturated w.r.t.
+all variables because all variables are invertible modulo I2. Now I(A)
+can be computed from I2 by eliminating the variables t,y(1),...,y(m).
+
+Because of the big number of auxiliary variables needed to compute a
+toric ideal, this algorithm is rather slow in practice. However, it has
+a special importance in the application to integer programming (*note
+Integer programming::).
+
+
+File: sing.htm, Node: Pottier, Next: Hosten and Sturmfels, Prev: Conti and
Traverso, Up: Algorithms
+
+C.6.2.2 The algorithm of Pottier
+................................
+
+The algorithm of Pottier (*note [Pot94]::) starts by computing a lattice
+basis $v_1,\ldots,v_r$ for the integer kernel of $A$ using the
+LLL-algorithm. The ideal corresponding to the lattice basis vectors
+$$ I_1=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
+is saturated -- as in the algorithm of Conti and Traverso -- by
+inversion of all variables: One adds an auxiliary variable $t$ and the
+generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ to obtain an ideal $I_2$
+in $K[t,x_1,\ldots,x_n]$ from which one computes $I_A$ by elimination of
+$t$.
+basis v(1),...,v(r) for the integer kernel of A using the LLL-algorithm.
+The ideal corresponding to the lattice basis vectors
+ I1= < x^v(i)+ - x^v(i)- | i=1,...,r >
+is saturated - as in the algorithm of Conti and Traverso - by inversion
+of all variables: One adds an auxiliary variable t and the generator t *
+x(1) *...* x(n) -1 to obtain an ideal I2 in K[t,x(1),...,x(n)] from
+which one computes I(A) by elimination of t.
+
+
+File: sing.htm, Node: Hosten and Sturmfels, Next: Di Biase and Urbanke,
Prev: Pottier, Up: Algorithms
+
+C.6.2.3 The algorithm of Hosten and Sturmfels
+.............................................
+
+The algorithm of Hosten and Sturmfels (*note [HoSt95]::) allows to compute
$I_A$ without any auxiliary variables, provided that $A$ contains a vector $w$
+with positive coefficients in its row space. This is a real restriction,
+i.e., the algorithm will not necessarily work in the general case.
+
+A lattice basis $v_1,\ldots,v_r$ is again computed via the
+LLL-algorithm. The saturation step is performed in the following way:
+First note that $w$ induces a positive grading w.r.t. which the ideal
+$$ I=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
+corresponding to our lattice basis is homogeneous. We use the following
+lemma:
+
+Let $I$ be a homogeneous ideal w.r.t. the weighted reverse
+lexicographical ordering with weight vector $w$ and variable order $x_1
+> x_2 > \ldots > x_n$. Let $G$ denote a Groebner basis of $I$ w.r.t. to
+this ordering. Then a Groebner basis of $(I:x_n^\infty)$ is obtained by
+dividing each element of $G$ by the highest possible power of $x_n$.
+
+From this fact, we can successively compute
+$$ I_A= I:(x_1\cdot\ldots\cdot x_n)^\infty
+=(((I:x_1^\infty):x_2^\infty):\ldots :x_n^\infty); $$
+in the $i$-th step we take $x_i$ as the cheapest variable and apply the
+lemma with $x_i$ instead of $x_n$.
+
+This procedure involves $n$ Groebner basis computations. Actually, this
+number can be reduced to at most $n/2$
+compute I(A) without any auxiliary variables, provided that A contains a
+vector w with positive coefficients in its row space. This is a real
+restriction, i.e., the algorithm will not necessarily work in the
+general case.
+
+A lattice basis v(1),...,v(r) is again computed via the LLL-algorithm.
+The saturation step is performed in the following way: First note that w
+induces a positive grading w.r.t. which the ideal
+ I= < x^v(i)+ - x^v(i)- | i=1,...,r >
+corresponding to our lattice basis is homogeneous. We use the following
+lemma:
+
+Let I be a homogeneous ideal w.r.t. the weighted reverse lexicographical
+ordering with weight vector w and variable order x(1) > x(2) > ... >
+x(n). Let G denote a Groebner basis of I w.r.t. to this ordering. Then
+a Groebner basis of sat(I,x(n)) is obtained by dividing each element of
+G by the highest possible power of x(n).
+
+From this fact, we can successively compute
+ I(A)= sat(I, x(1) *...* x(n))
+ = sat(...(sat(sat(I,x(1)), x(2)), ..., x(n)));
+in the i-th step we take x(i) as the cheapest variable and apply the
+lemma with x(i) instead of x(n).
+
+This procedure involves n Groebner basis computations. Actually, this
+number can be reduced to at most n/2 (*note [HoSh98]::), and the single
+computations - except from the first one - show to be easy and fast in
+practice.
+
+
+File: sing.htm, Node: Di Biase and Urbanke, Next: Bigatti and La Scala and
Robbiano, Prev: Hosten and Sturmfels, Up: Algorithms
+
+C.6.2.4 The algorithm of Di Biase and Urbanke
+.............................................
+
+Like the algorithm of Hosten and Sturmfels, the algorithm of Di Biase
+and Urbanke (*note [DBUr95]::) performs up to $n/2$ Groebner basis
+computations. It needs no auxiliary variables, but a supplementary
+precondition; namely, the existence of a vector without zero components
+in the kernel of $A$.
+
+The main idea comes from the following observation:
+
+Let $B$ be an integer matrix, $u_1,\ldots,u_r$ a lattice basis of the
+integer kernel of $B$. Assume that all components of $u_1$ are
+positive. Then
+$$ I_B=<x^{u_i^+}-x^{u_i^-}|i=1,\ldots,r>, $$
+i.e., the ideal on the right is already saturated w.r.t. all variables.
+
+The algorithm starts by finding a lattice basis $v_1,\ldots,v_r$ of the
+kernel of $A$ such that $v_1$ has no zero component. Let
+$\{i_1,\ldots,i_l\}$ be the set of indices $i$ with
+$v_{1,i}<0$. Multiplying the components $i_1,\ldots,i_l$ of
+$v_1,\ldots,v_r$ and the columns $i_1,\ldots,i_l$ of $A$ by $-1$ yields
+a matrix $B$ and a lattice basis $u_1,\ldots,u_r$ of the kernel of $B$
+that fulfill the assumption of the observation above. We are then able
+to compute a generating set of $I_A$ by applying the following
+``variable flip'' successively to $i=i_1,\ldots,i_l$:
+
+Let $>$ be an elimination ordering for $x_i$. Let $A_i$ be the matrix
+obtained by multiplying the $i$-th column of $A$ with $-1$. Let
+$$\{x_i^{r_j} x^{a_j} - x^{b_j} | j\in J \}$$
+be a Groebner basis of $I_{A_i}$ w.r.t. $>$ (where $x_i$ is neither
+involved in $x^{a_j}$ nor in $x^{b_j}$). Then
+$$\{x^{a_j} - x_i^{r_j} x^{b_j} | j\in J \}$$
+is a generating set for $I_A$.
+to n/2 Groebner basis computations. It needs no auxiliary variables, but
+a supplementary precondition; namely, the existence of a vector without
+zero components in the kernel of A.
+
+The main idea comes from the following observation:
+
+Let B be an integer matrix, u(1),...,u(r) a lattice basis of the integer
+kernel of B. Assume that all components of u(1) are positive. Then
+ I(B)= < x^u(i)+ - x^u(i)- | i=1,...,r >,
+i.e., the ideal on the right is already saturated w.r.t. all variables.
+
+The algorithm starts by finding a lattice basis v(1),...,v(r) of the
+kernel of A such that v(1) has no zero component. Let { i1,...,il } be
+the set of indices i with v(1)_i <0. Multiplying the components
+i1,...,il of v(1),...,v(r) and the columns i1,...,il of A by -1 yields a
+matrix B and a lattice basis u(1),...,u(r) of the kernel of B that
+fulfill the assumption of the observation above. We are then able to
+compute a generating set of I(A) by applying the following "variable
+flip" successively to i=i1,...,il:
+
+Let > be an elimination ordering for x(i). Let A(i) be the matrix
+obtained by multiplying the i-th column of A with -1. Let
+ { x(i)^r(j) * x^a(j) - x^b(j) | j in J }
+be a Groebner basis of I(A(i)) w.r.t. > (where x(i) is neither involved
+in x^a(j) nor in x^b(j)). Then
+ { x^a(j) - x(i)^r(j) * x^b(j) | j in J }
+is a generating set for I(A).
+
+
+File: sing.htm, Node: Bigatti and La Scala and Robbiano, Prev: Di Biase and
Urbanke, Up: Algorithms
+
+C.6.2.5 The algorithm of Bigatti, La Scala and Robbiano
+.......................................................
+
+The algorithm of Bigatti, La Scala and Robbiano (*note [BLR98]::)
+combines the ideas of the algorithms of Pottier and of Hosten and
+Sturmfels. The computations are performed on a graded ideal with one
+auxiliary variable $u$ and one supplementary generator $x_1\cdot\ldots\cdot
x_n -
+u$ (instead of the generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ in
+the algorithm of Pottier). The algorithm uses a quite unusual technique to
+get rid of the variable $u$ again.
+variable u and one supplementary generator x(1) *...* x(n) -u (instead
+of the generator t * x(1) *...* x(n) -1 in the algorithm of Pottier).
+The algorithm uses a quite unusual technique to get rid of the variable
+u again.
+
+There is another algorithm of the authors which tries to parallelize the
+computations (but which is not implemented in this library).
+
+
+File: sing.htm, Node: Buchberger algorithm, Prev: Algorithms, Up: Toric
ideals
+
+C.6.3 The Buchberger algorithm for toric ideals
+-----------------------------------------------
+
+Toric ideals have a very special structure that allows us to improve the
+Buchberger algorithm in many respects: They are prime ideals and
+generated by binomials. Pottier used this fact to describe all
+operations of the Buchberger algorithm on the ideal generators in terms
+of vector additions and subtractions. Some other strategies like
+multiple reduction (*note [CoTr91]::) or the use of bit vectors to
+represent the support of a monomial (*note [Big97]::) may be applied to
+more general ideals, but show to be especially useful in the toric case.
+
+
+File: sing.htm, Node: Integer programming, Next: Relevant References, Prev:
Toric ideals, Up: Toric ideals and integer programming
+
+C.6.4 Integer programming
+-------------------------
+
+Let $A$ be an $m\times n$ matrix with integral coefficients, $b\in
+Z\!\!\! Z^m$ and $c\in Z\!\!\! Z^n$. The problem
+$$ \min\{c^T x | x\in Z\!\!\! Z^n, Ax=b, x\geq 0\hbox{
+component-wise}\} $$
+is called an instance of the \bf integer programming problem \rm or
+\bf IP problem. \rm
+
+The IP problem is very hard; namely, it is NP-complete.
+
+For the following discussion let $c\geq 0$ (component-wise). We
+consider $c$ as a weight vector; because of its non-negativity, $c$ can
+be refined into a monomial ordering $>_c$. It turns out that we can
+solve such an IP instance with the help of toric ideals:
+
+First we assume that an initial solution $v$ (i.e., $v\in Z\!\!\!
+Z^n, v\geq 0, Av=b$) is already known. We obtain the optimal solution
+$v_0$ (i.e., with $c^T v_0$ minimal) by the following procedure:
+
+Let A be an mxn matrix with integral coefficients, b in Z^m and c in
+Z^n. The problem
+ min { c*x | x in Z^n, A*x=b, x>=0 component-wise }
+is called an instance of the *integer programming problem* or *IP
+problem*.
+
+The IP problem is very hard; namely, it is NP-complete.
+
+For the following discussion let c>=0 (component-wise). We consider c as
+a weight vector; because of its non-negativity, c can be refined into a
+monomial ordering >_c. It turns out that we can solve such an IP
+instance with the help of toric ideals:
+
+First we assume that an initial solution v (i.e., v in Z^n, v>=0, A*v=b)
+is already known. We obtain the optimal solution v(opt) (i.e., with
+c*v(opt) minimal) by the following procedure:
+
+ * (1) Compute the toric ideal I(A) using one of the algorithms in the
+ previous section.
+
+ * (2) Compute the reduced Groebner basis G(c) of I(A) w.r.t. >_c $>_c$
+ .
+
+ * (3) Reduce x^v $x^v$
+ modulo G(c) using the Hironaka division algorithm. If the result
+ of this reduction is x^(v_0) $x^(v_0)$
+ , then v_0 $v_0$
+ is an optimal solution of the given instance.
+
+If no initial solution is known, we are nevertheless able to solve the
+problem with similar techniques. For this purpose we replace our
+instance by an extended instance with the matrix used in the
+Conti-Traverso algorithm. Indeed, the Conti-Traverso algorithm offers
+the possibility to verify solvability of a given instance and to find an
+initial solution in the case of existence (but none of the other
+algorithms does!). Details can be found in [CoTr91] and [The99].
+
+An implementation of the above algorithm and some examples can be found
+in *note intprog_lib::.
+
+Classical methods for solving IP instances like Branch-and-Bound methods
+seem to be faster in general than the methods using toric ideals. But
+the latter have one great advantage: If one wants to solve various
+instances that differ only by the vector b $b$
+, one has to perform steps (1) and (2) above only once. As the running
+time of step (3) is very short, solving all the instances is not much
+harder than solving one single instance.
+
+For a detailed discussion see [The99].
+
+
+File: sing.htm, Node: Relevant References, Prev: Integer programming, Up:
Toric ideals and integer programming
+
+C.6.5 Relevant References
+-------------------------
+
+ * [Big97] Bigatti, A.M.: Computation of Hilbert-Poincare
+ series. Journal of Pure and Applied Algebra (1997) 199, 237-253
+
+ * [BLR98] Bigatti, A.M.; La Scala, R.; Robbiano, L.: Computing
+ toric ideals. Journal of Symbolic Computation (to appear)
+
+ * [Coh93] Cohen, H.: A Course in Computational Algebraic Number
+ Theory. Springer (1997)
+
+ * [CoTr91] Conti, P.; Traverso, C.: Buchberger algorithm and
+ integer programming. Proceedings AAECC-9 (new Orleans),
+ Springer LNCS (1991) 539, 130-139
+
+ * [DBUr95] Di Biase, F.; Urbanke, R.: An algorithm to calculate
+ the kernel of certain polynomial ring homomorphisms.
+ Experimental Mathematics (1995) 4, 227-234
+
+ * [HoSh98] Hosten, S.; Shapiro, J.: Primary decomposition of
+ lattice basis ideals. (to appear)
+
+ * [HoSt95] Hosten, S.; Sturmfels, B.: GRIN: An implementation
+ of Groebner bases for integer programming. in Balas, E.;
+ Clausen, J. (editors): Integer Programming and Combinatorial
+ Optimization. Springer LNCS (1995) 920, 267-276
+
+ * [Pot94] Pottier, L.: Groebner bases of toric ideals.
+ Rapport de recherche 2224 (1997), INRIA Sophia Antipolis
+
+ * [Stu96] Sturmfels, B.: Groebner Bases and Convex Polytopes.
+ University Lecture Series, Volume 8 (1996), American Mathematical
+ Society
+
+ * [The99] Theis, C.: Der Buchberger-Algorithmus fuer torische
+ Ideale und seine Anwendung in der ganzzahligen Optimierung.
+ Diplomarbeit, Universitaet des Saarlandes (1999), Saarbruecken
+ (Germany)
+
+
+File: sing.htm, Node: References, Prev: Toric ideals and integer
programming, Up: Mathematical background
+
+C.7 References
+==============
+
+The Centre for Computer Algebra Kaiserslautern publishes a series of
+preprints which are electronically available at
+`http://www.mathematik.uni-kl.de/~zca/Reports_on_ca'. Other sources to
+check are `http://symbolicnet.mcs.kent.edu/', `http://www.can.nl/',...
+and the following list of books:
+
+Text books on computational algebraic geometry
+----------------------------------------------
+
+ * Adams, W.; Loustaunau, P.: An Introduction to Gro"bner Bases.
+ Providence, RI, AMS, 1996
+
+ * Becker, T.; Weisspfenning, V.: Gro"bner Bases - A Computational
+ Approach to Commutative Algebra. Springer, 1993
+
+ * Cohen, H.: A Course in Computational Algebraic Number Theory,
+ Springer, 1995
+
+ * Cox, D.; Little, J.; O'Shea, D.: Ideals, Varieties and Algorithms.
+ Springer, 1996
+
+ * Eisenbud, D.: Commutative Algebra with a View Toward Algebraic
+ Geometry. Springer, 1995
+
+ * Greuel, G.-M.; Pfister, G.: A SINGULAR Introduction to Commuative
+ Algebra, Springer, 2002
+
+ * Mishra, B.: Algorithmic Algebra, Texts and Monographs in Computer
+ Science. Springer, 1993
+
+ * Sturmfels, B.: Algorithms in Invariant Theory. Springer 1993
+
+ * Vasconcelos, W.: Computational Methods in Commutative Algebra and
+ Algebraic Geometry. Springer, 1998
+
+Descriptions of algorithms
+--------------------------
+
+ * Bareiss, E.: Sylvester's identity and multistep integer-preserving
+ Gaussian elimination. Math. Comp. 22 (1968), 565-578
+
+ * Campillo, A.: Algebroid curves in positive characteristic. SLN 813,
+ 1980
+
+ * Chou, S.: Mechanical Geometry Theorem Proving. D.Reidel Publishing
+ Company, 1988
+
+ * Decker, W.; Greuel, G.-M.; Pfister, G.: Primary decomposition:
+ algorithms and comparisons. Preprint, Univ. Kaiserslautern, 1998.
+ To appear in: Greuel, G.-M.; Matzat, B. H.; Hiss, G. (Eds.),
+ Algorithmic Algebra and Number Theory. Springer Verlag, Heidelberg,
+ 1998
+
+ * Decker, W.; Greuel, G.-M.; de Jong, T.; Pfister, G.: The
+ normalization: a new algorithm, implementation and comparisons.
+ Preprint, Univ. Kaiserslautern, 1998
+
+ * Decker, W.; Heydtmann, A.; Schreyer, F. O.: Generating a Noetherian
+ Normalization of the Invariant Ring of a Finite Group, 1997, to
+ appear in Journal of Symbolic Computation
+
+ * Faug\`ere,
+ Faugere, J. C.; Gianni, P.; Lazard, D.; Mora, T.: Efficient
+ computation of zero-dimensional Gro"bner bases by change of
+ ordering. Journal of Symbolic Computation, 1989
+
+ * Gra"be, H.-G.: On factorized Gro"bner bases, Univ. Leipzig, Inst.
+ fu"r Informatik, 1994
+
+ * Grassmann, H.; Greuel, G.-M.; Martin, B.; Neumann, W.; Pfister, G.;
+ Pohl, W.; Scho"nemann, H.; Siebert, T.: On an implementation of
+ standard bases and syzygies in SINGULAR. Proceedings of the
+ Workshop Computational Methods in Lie theory in AAECC (1995)
+
+ * Greuel, G.-M.; Pfister, G.: Advances and improvements in the theory
+ of standard bases and syzygies. Arch. d. Math. 63(1995)
+
+ * Kemper; Generating Invariant Rings of Finite Groups over Arbitrary
+ Fields. 1996, to appear in Journal of Symbolic Computation
+
+ * Kemper and Steel: Some Algorithms in Invariant Theory of Finite
+ Groups. 1997
+
+ * Lee, H.R.; Saunders, B.D.: Fraction Free Gaussian Elimination for
+ Sparse Matrices. Journal of Symbolic Computation (1995) 19, 393-402
+
+ * Scho"nemann, H.: Algorithms in SINGULAR, Reports on Computer
+ Algebra 2(1996), Kaiserslautern
+
+ * Siebert, T.: On strategies and implementations for computations of
+ free resolutions. Reports on Computer Algebra 8(1996),
+ Kaiserslautern
+
+ * Wang, D.: Characteristic Sets and Zero Structure of Polynomial
+ Sets. Lecture Notes, RISC Linz, 1989
+
+
+File: sing.htm, Node: SINGULAR libraries, Next: Release Notes, Prev:
Mathematical background, Up: Top
+
+Appendix D SINGULAR libraries
+*****************************
+
+SINGULAR comes with a set of standard libraries. Their content is
+described in the following subsections.
+
+Use the *note LIB:: command for loading of single libraries, and the
+command `LIB "all.lib";' for loading all libraries.
+
+* Menu:
+
+* standard_lib:: extensions of Singular kernel
+* General purpose::
+* Linear algebra::
+* Commutative algebra::
+* Singularities::
+* Invariant theory::
+* Symbolic-numerical solving::
+* Visualization::
+* Coding theory::
+
+
+File: sing.htm, Node: standard_lib, Next: General purpose, Prev: SINGULAR
libraries, Up: SINGULAR libraries
+
+D.1 standard_lib
+================
+
+The library `standard.lib' provides extensions to the set of built-in
+commands and is automatically loaded during the start of SINGULAR,
+unless SINGULAR is started up with the `--no-stdlib' command line option
+(see *note Command line options::).
+
+*Library:*
+ standard.lib
+
+*Purpose:*
+ Procedures which are always loaded at Start-up
+
+*Procedures:*
+
+* Menu:
+
+* stdfglm:: standard basis of ideal via fglm [and ordering ord]
+* stdhilb:: standard basis of ideal using the Hilbert function
+* groebner:: standard basis using a heuristically chosen method
+* quot:: quotient using heuristically chosen method
+* res:: free resolution of ideal or module
+* sprintf:: returns formatted string
+* fprintf:: writes formatted string to link
+* printf:: displays formatted string
+
+
+File: sing.htm, Node: General purpose, Next: Linear algebra, Prev:
standard_lib, Up: SINGULAR libraries
+
+D.2 General purpose
+===================
+
+* Menu:
+
+* all_lib:: load all other libraries
+* general_lib:: procedures of general type
+* inout_lib:: procedures for manipulating in- and output
+* poly_lib:: procedures for manipulating polynomials and ideals
+* random_lib:: procedures of random/sparse matrix and poly operations
+* ring_lib:: procedures for manipulating rings and maps
+
+
+File: sing.htm, Node: all_lib, Next: general_lib, Prev: General purpose,
Up: General purpose
+
+D.2.1 all_lib
+-------------
+
+The library `all.lib' provides a convenient way to load all libraries of
+the SINGULAR distribution.
+
+*Example:*
+ option(loadLib);
+ LIB "all.lib";
+ ==> // ** loaded all.lib (1.35.2.4,2003/02/25)
+ ==> // ** loaded makedbm.lib (1.11,2000/12/22)
+ ==> // ** loaded brnoeth.lib (1.11.2.5,2002/10/18)
+ ==> // ** loaded paramet.lib (1.11.2.1,2002/10/21)
+ ==> // ** loaded surf.lib (1.19.2.6,2002/07/17)
+ ==> // ** loaded latex.lib (1.19.2.1,2002/02/20)
+ ==> // ** loaded graphics.lib (1.10,2001/02/19)
+ ==> // ** loaded zeroset.lib (1.7.2.2,2002/02/20)
+ ==> // ** loaded ntsolve.lib (1.12.2.1,2002/04/12)
+ ==> // ** loaded triang.lib (1.7,2001/02/19)
+ ==> // ** loaded solve.lib (1.21.2.13,2002/10/21)
+ ==> // ** loaded presolve.lib (1.17.2.6,2003/03/26)
+ ==> // ** loaded stratify.lib (1.7.2.4,2002/04/11)
+ ==> // ** loaded rinvar.lib (1.7.2.3,2002/02/20)
+ ==> // ** loaded finvar.lib (1.32.2.2,2002/08/13)
+ ==> // ** loaded ainvar.lib (1.6.2.2,2002/04/12)
+ ==> // ** loaded spectrum.lib (1.12.2.3,2002/03/06)
+ ==> // ** loaded spcurve.lib (1.15.2.1,2002/02/20)
+ ==> // ** loaded sing.lib (1.24.2.5,2003/04/15)
+ ==> // ** loaded qhmoduli.lib (1.0,2000/12/12)
+ ==> // ** loaded mondromy.lib (1.22.2.2,2002/02/20)
+ ==> // ** loaded hnoether.lib (1.29.2.14,2002/10/21)
+ ==> // ** loaded gaussman.lib (1.33.2.26,2003/02/10)
+ ==> // ** loaded equising.lib (1.7.2.5,2003/02/25)
+ ==> // ** loaded deform.lib (1.25.2.2,2003/02/24)
+ ==> // ** loaded classify.lib (1.48.2.4,2002/04/11)
+ ==> // ** loaded toric.lib (1.11,2001/02/06)
+ ==> // ** loaded intprog.lib (1.5,2001/02/06)
+ ==> // ** loaded reesclos.lib (1.50,2001/08/06)
+ ==> // ** loaded primitiv.lib (1.15,2001/02/05)
+ ==> // ** loaded primdec.lib (1.98.2.14,2003/04/07)
+ ==> // ** loaded normal.lib (1.34.2.17,2002/10/21)
+ ==> // ** loaded mregular.lib (1.6.2.1,2002/02/20)
+ ==> // ** loaded mprimdec.lib (1.1.2.3,2002/03/19)
+ ==> // ** loaded homolog.lib (1.15.2.2,2002/10/07)
+ ==> // ** loaded elim.lib (1.14.2.4,2003/04/16)
+ ==> // ** loaded algebra.lib (1.9.2.3,2002/04/11)
+ ==> // ** loaded linalg.lib (1.10.2.15,2003/04/04)
+ ==> // ** loaded matrix.lib (1.26.2.2,2002/10/07)
+ ==> // ** loaded ring.lib (1.17.2.1,2002/02/20)
+ ==> // ** loaded random.lib (1.16.2.1,2002/02/20)
+ ==> // ** loaded poly.lib (1.33.2.6,2003/02/10)
+ ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
+ ==> // ** loaded general.lib (1.38.2.9,2003/04/04)
+
+
+File: sing.htm, Node: general_lib, Next: inout_lib, Prev: all_lib, Up:
General purpose
+
+D.2.2 general_lib
+-----------------
+
+*Library:*
+ general.lib
+
+*Purpose:*
+ Elementary Computations of General Type
+
+*Procedures:*
+
+* Menu:
+
+* A_Z:: string a,b,... of n comma separated letters
+* ASCII:: string of printable ASCII characters (number n to m)
+* absValue:: absolute value of c
+* binomial:: n choose m (type int), [type string/type number]
+* deleteSublist:: delete entries given by iv from list l
+* factorial:: n factorial (=n!) (type int), [type string/number]
+* fibonacci:: nth Fibonacci number [char p]
+* kmemory:: active [allocated] memory in kilobyte
+* killall:: kill all user-defined variables
+* number_e:: compute exp(1) up to n decimal digits
+* number_pi:: compute pi (area of unit circle) up to n digits
+* primes:: intvec of primes p, n<=p<=m
+* product:: multiply components of vector/ideal/...[indices v]
+* sort:: sort generators according to monomial ordering
+* sum:: add components of vector/ideal/...[with indices v]
+* watchdog:: only wait for result of command cmd for i seconds
+* which:: search for command and return absolute path, if found
+* primecoeffs:: primefactors <= min(p,32003) of coeffs of J
+* primefactors:: primefactors <= min(p,32003) of n
+* timeStd:: std(i) if computation finished after d seconds else i
+* timeFactorize:: works as timeStd with factorization
+* factorH:: factorizes with good choice of principal variable
+
+
+File: sing.htm, Node: A_Z, Next: ASCII, Up: general_lib
+
+D.2.2.1 A_Z
+...........
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ A_Z("a",n); a any letter, n integer (-26<= n <=26, !=0)
+
+*Return:*
+ string of n small (if a is small) or capital (if a is capital)
+ letters, comma separated, beginning with a, in alphabetical order
+ (or revers alphabetical order if n<0)
+
+*Example:*
+ LIB "general.lib";
+ A_Z("c",5);
+ ==> c,d,e,f,g
+ A_Z("Z",-5);
+ ==> Z,Y,X,W,V
+ string sR = "ring R = (0,"+A_Z("A",6)+"),("+A_Z("a",10)+"),dp;";
+ sR;
+ ==> ring R = (0,A,B,C,D,E,F),(a,b,c,d,e,f,g,h,i,j),dp;
+ execute(sR);
+ R;
+ ==> // characteristic : 0
+ ==> // 6 parameter : A B C D E F
+ ==> // minpoly : 0
+ ==> // number of vars : 10
+ ==> // block 1 : ordering dp
+ ==> // : names a b c d e f g h i j
+ ==> // block 2 : ordering C
+
+
+File: sing.htm, Node: ASCII, Next: absValue, Prev: A_Z, Up: general_lib
+
+D.2.2.2 ASCII
+.............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ ASCII([n,m]); n,m= integers (32 <= n <= m <= 126)
+
+*Return:*
+ string of printable ASCII characters (no native language support)
+ ASCII(): string of all ASCII characters with its numbers, ASCII(n):
+ n-th ASCII character
+ ASCII(n,m): n-th up to m-th ASCII character (inclusive)
+
+*Example:*
+ LIB "general.lib";
+ ASCII();"";
+ ==> ! " # $ % & ' ( ) * + , -
.
+ ==> 32 33 34 35 36 37 38 39 40 41 42 43 44 45
46
+ ==> / 0 1 2 3 4 5 6 7 8 9 : ; <
=
+ ==> 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61
+ ==> > ? @ A B C D E F G H I J K
L
+ ==> 62 63 64 65 66 67 68 69 70 71 72 73 74 75
76
+ ==> M N O P Q R S T U V W X Y Z
[
+ ==> 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91
+ ==> \ ] ^ _ ` a b c d e f g h i
j
+ ==> 92 93 94 95 96 97 98 99 100 101 102 103 104 105
10
+ ==> k l m n o p q r s t u v w x
y
+ ==> 107 108 109 110 111 112 113 114 115 116 117 118 119 120
121
+ ==> z { | } ~
+ ==> 122 123 124 125 126
+ ==>
+ ASCII(42);
+ ==> *
+ ASCII(32,126);
+ ==> !"#$%&'()*+,-./0123456789:;<=>address@hidden
+ ijklmnopqrstuvwxyz{|}~
+
+
+File: sing.htm, Node: absValue, Next: binomial, Prev: ASCII, Up:
general_lib
+
+D.2.2.3 absValue
+................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ absValue(c); c int, number or poly
+
+*Return:*
+ absValue(c); the absolute value of c
+
+*Note:*
+ absValue(c)=c if c>=0; absValue=-c if c<=0.
+ So the function can be applied to any type, for which comparison
+ operators are defined.
+
+*Example:*
+ LIB "general.lib";
+ ring r1 = 0,x,dp;
+ absValue(-2002);
+ ==> 2002
+ poly f=-4;
+ absValue(f);
+ ==> 4
+
+* Menu:
+
+See also:
+* boolean expressions::
+
+*See also:* *note boolean expressions::.
+
+
+File: sing.htm, Node: binomial, Next: deleteSublist, Prev: absValue, Up:
general_lib
+
+D.2.2.4 binomial
+................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ binomial(n,k[,p]); n,k,p integers
+
+*Return:*
+ binomial(n,k); binomial coefficient n choose k
+ - of type string (computed in characteristic 0)
+ binomial(n,k,p); n choose k, computed in characteristic 0 or
+ prime(p)
+ - of type number if a basering, say R, is present and p=0=char(R)
+ or if prime(p)=char(R)
+ - of type string else
+
+*Note:*
+ In any characteristic, binomial(n,k) = coefficient of x^k in
+ (1+x)^n
+
+*Example:*
+ LIB "general.lib";
+ binomial(200,100);""; //type string, computed in char 0
+ ==> 90548514656103281165404177077484163874504589675413336841320
+ ==>
+ binomial(200,100,3);""; //type string, computed in char 3
+ ==> 0
+ ==>
+ int n,k = 200,100;
+ ring r = 0,x,dp;
+ number b1 = binomial(n,k,0); //type number, computed in ring r
+ poly b2 = coeffs((x+1)^n,x)[k+1,1]; //coefficient of x^k in (x+1)^n
+ b1-b2; //b1 and b2 should coincide
+ ==> 0
+
+* Menu:
+
+See also:
+* prime::
+
+*See also:* *note prime::.
+
+
+File: sing.htm, Node: deleteSublist, Next: factorial, Prev: binomial, Up:
general_lib
+
+D.2.2.5 deleteSublist
+.....................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ deleteSublist(v,l); intvec v; list l
+ where the entries of the integer vector v correspond to the
+ positions of the elements to be deleted
+
+*Return:*
+ list without the deleted elements
+
+*Example:*
+ LIB "general.lib";
+ list l=1,2,3,4,5;
+ intvec v=1,3,4;
+ l=deleteSublist(v,l);
+ l;
+ ==> [1]:
+ ==> 2
+ ==> [2]:
+ ==> 5
+
+
+File: sing.htm, Node: factorial, Next: fibonacci, Prev: deleteSublist, Up:
general_lib
+
+D.2.2.6 factorial
+.................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ factorial(n[,p]); n,p integers
+
+*Return:*
+ factorial(n): n! (computed in characteristic 0), of type string.
+ factorial(n,p): n! computed in characteristic 0 or prime(p)
+ - of type number if a basering is present and 0=p=char(basering) or
+ if prime(p)=char(basering)
+ - of type string else
+
+*Example:*
+ LIB "general.lib";
+ factorial(37);""; //37! of type string (as long integer)
+ ==> 13763753091226345046315979581580902400000000
+ ==>
+ ring r1 = 0,x,dp;
+ number p = factorial(37,0); //37! of type number, computed in r
+ p;
+ ==> 13763753091226345046315979581580902400000000
+
+* Menu:
+
+See also:
+* prime::
+
+*See also:* *note prime::.
+
+
+File: sing.htm, Node: fibonacci, Next: kmemory, Prev: factorial, Up:
general_lib
+
+D.2.2.7 fibonacci
+.................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ fibonacci(n); n,p integers
+
+*Return:*
+ fibonacci(n): nth Fibonacci number, f(0)=f(1)=1, f(i+1)=f(i-1)+f(i)
+
+ - computed in characteristic 0, of type string
+ fibonacci(n,p): f(n) computed in characteristic 0 or prime(p)
+ - of type number if a basering is present and p=0=char(basering) or
+ if prime(p)=char(basering)
+ - of type string else
+
+*Example:*
+ LIB "general.lib";
+ fibonacci(42); ""; //f(42) of type string (as long integer)
+ ==> 267914296
+ ==>
+ ring r = 2,x,dp;
+ number b = fibonacci(42,2); //f(42) of type number, computed in r
+ b;
+ ==> 0
+
+* Menu:
+
+See also:
+* prime::
+
+*See also:* *note prime::.
+
+
+File: sing.htm, Node: kmemory, Next: killall, Prev: fibonacci, Up:
general_lib
+
+D.2.2.8 kmemory
+...............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ kmemory([n,[v]]); n,v integers
+
+*Return:*
+ memory in kilobyte of type int
+ n=0: memory used by active variables (same as no parameters)
+ n=1: total memory allocated by Singular
+ n=2: difference between top and init memory address (sbrk memory)
+ n!=0,1,2: 0
+
+*Display:*
+ detailed information about allocated and used memory if v!=0
+
+*Note:*
+ kmemory uses internal function 'memory' to compute kilobyte, and is
+ the same as 'memory' for n!=0,1,2
+
+*Example:*
+ LIB "general.lib";
+ kmemory();
+ ==> 152
+ kmemory(1,1);
+ ==> // total memory allocated, at the moment, by SINGULAR (kilobyte):
+ ==> 650
+
+
+File: sing.htm, Node: killall, Next: number_e, Prev: kmemory, Up:
general_lib
+
+D.2.2.9 killall
+...............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ killall(); (no parameter)
+ killall("type_name");
+ killall("not", "type_name");
+
+*Return:*
+ killall(); kills all user-defined variables except loaded
+ procedures, no return value.
+ - killall("type_name"); kills all user-defined variables, of type
+ "type_name"
+ - killall("not", "type_name"); kills all user-defined variables,
+ except those of type "type_name" and except loaded procedures
+ - killall("not", "name_1", "name_2", ...); kills all user-defined
+ variables, except those of name "name_i" and except loaded
+ procedures
+
+*Note:*
+ killall should never be used inside a procedure
+
+*Example:*
+ LIB "general.lib";
+ ring rtest; ideal i=x,y,z; string str="hi"; int j = 3;
+ export rtest,i,str,j; //this makes the local variables global
+ ==> // ** `rtest` is already global
+ ==> // ** `i` is already global
+ ==> // ** `str` is already global
+ ==> // ** `j` is already global
+ listvar();
+ ==> // j [0] int 3
+ ==> // str [0] string hi
+ ==> // rtest [0] *ring
+ ==> // i [0] ideal, 3 generator(s)
+ ==> // LIB [0] string standard.lib,general..., 74
char(s)
+ killall("ring"); // kills all rings
+ ==> // ** killing the basering for level 0
+ listvar();
+ ==> // j [0] int 3
+ ==> // str [0] string hi
+ ==> // LIB [0] string standard.lib,general..., 74
char(s)
+ killall("not", "int"); // kills all variables except int's (and
procs)
+ listvar();
+ ==> // j [0] int 3
+ ==> // LIB [0] string standard.lib,general..., 74
char(s)
+ killall(); // kills all vars except loaded procs
+ listvar();
+ ==> // j [0] int 3
+ ==> // LIB [0] string standard.lib,general..., 74
char(s)
+
+
+File: sing.htm, Node: number_e, Next: number_pi, Prev: killall, Up:
general_lib
+
+D.2.2.10 number_e
+.................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ number_e(n); n integer
+
+*Return:*
+ Euler number e=exp(1) up to n decimal digits (no rounding)
+ - of type string if no basering of char 0 is defined
+ - of type number if a basering of char 0 is defined
+
+*Display:*
+ decimal format of e if printlevel > 0 (default:printlevel=0 )
+
+*Note:*
+ procedure uses algorithm of A.H.J. Sale
+
+*Example:*
+ LIB "general.lib";
+ number_e(30);"";
+ ==> 2.71828182845904523536028747135
+ ==>
+ ring R = 0,t,lp;
+ number e = number_e(30);
+ e;
+ ==> 13591409142295226176801437356763/5000000000000000000000000000000
+
+
+File: sing.htm, Node: number_pi, Next: primes, Prev: number_e, Up:
general_lib
+
+D.2.2.11 number_pi
+..................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ number_pi(n); n positive integer
+
+*Return:*
+ pi (area of unit circle) up to n decimal digits (no rounding)
+ - of type string if no basering of char 0 is defined,
+ - of type number, if a basering of char 0 is defined
+
+*Display:*
+ decimal format of pi if printlevel > 0 (default:printlevel=0 )
+
+*Note:*
+ procedure uses algorithm of S. Rabinowitz
+
+*Example:*
+ LIB "general.lib";
+ number_pi(11);"";
+ ==> 3.1415926535
+ ==>
+ ring r = (real,10),t,dp;
+ number pi = number_pi(11); pi;
+ ==> 3.1415926536
+
+
+File: sing.htm, Node: primes, Next: product, Prev: number_pi, Up:
general_lib
+
+D.2.2.12 primes
+...............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ primes(n,m); n,m integers
+
+*Return:*
+ intvec, consisting of all primes p, prime(n)<=p<=m, in increasing
+ order if n<=m, resp. prime(m)<=p<=n, in decreasing order if m<n.
+
+*Note:*
+ prime(n); returns the biggest prime number <= min(n,32003) if n>=2,
+ else 2
+
+*Example:*
+ LIB "general.lib";
+ primes(50,100);"";
+ ==> 47,53,59,61,67,71,73,79,83,89,97
+ ==>
+ intvec v = primes(37,1); v;
+ ==> 37,31,29,23,19,17,13,11,7,5,3,2
+
+
+File: sing.htm, Node: product, Next: sort, Prev: primes, Up: general_lib
+
+D.2.2.13 product
+................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ product(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list,
+ v intvec (default: v=1..number of entries of id)
+
+*Assume:*
+ list members can be multiplied.
+
+*Return:*
+ The product of all entries of id [with index given by v] of type
+ depending on the entries of id.
+
+*Note:*
+ If id is not a list, id is treated as a list of polys resp.
+ integers. A module m is identified with the corresponding matrix M
+ (columns of M generate m).
+ If v is outside the range of id, we have the empty product and the
+ result will be 1 (of type int).
+
+*Example:*
+ LIB "general.lib";
+ ring r= 0,(x,y,z),dp;
+ ideal m = maxideal(1);
+ product(m);
+ ==> xyz
+ product(m[2..3]);
+ ==> yz
+ matrix M[2][3] = 1,x,2,y,3,z;
+ product(M);
+ ==> 6xyz
+ intvec v=2,4,6;
+ product(M,v);
+ ==> xyz
+ intvec iv = 1,2,3,4,5,6,7,8,9;
+ v=1..5,7,9;
+ product(iv,v);
+ ==> 7560
+ intmat A[2][3] = 1,1,1,2,2,2;
+ product(A,3..5);
+ ==> 4
+
+
+File: sing.htm, Node: sort, Next: sum, Prev: product, Up: general_lib
+
+D.2.2.14 sort
+.............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ sort(id[v,o,n]); id = ideal/module/intvec/list(of intvec's or
+ int's)
+ sort may be called with 1, 2 or 3 arguments in the following way:
+ sort(id[v,n]); v=intvec of positive integers, n=integer,
+ sort(id[o,n]); o=string (any allowed ordstr of a ring), n=integer
+
+*Return:*
+ a list l of two elements:
+
+ l[1]: object of same type as input but sorted in the following
way:
+ - if id=ideal/module: generators of id are sorted w.r.t.
intvec v
+ (id[v[1]] becomes 1-st, id[v[2]] 2-nd element, etc.). If no
v is
+ present, id is sorted w.r.t. ordering o (if o is given) or
w.r.t.
+ actual monomial ordering (if no o is given):
+ NOTE: generators with SMALLER(!) leading term come FIRST
+ (e.g. sort(id); sorts backwards to actual monomial ordering)
+ - if id=list of intvec's or int's: consider a list element, say
+ id[1]=3,2,5, as exponent vector of the monomial x^3*y^2*z^5;
+ the corresponding monomials are ordered w.r.t. intvec v
(s.a.).
+ If no v is present, the monomials are sorted w.r.t. ordering
o
+ (if o is given) or w.r.t. lexicographical ordering (if no o
is
+ given). The corresponding ordered list of exponent vectors is
+ returned.
+ (e.g. sort(id); sorts lexicographically, smaller int's come
first)
+ WARNING: Since negative exponents create the 0 polynomial in
+ Singular, id should not contain negative integers: the result
+ might not be as expected
+ - if id=intvec: id is treated as list of integers
+ - if n!=0 the ordering is inverse, i.e. w.r.t. v(size(v)..1)
+ default: n=0
+ l[2]: intvec, describing the permutation of the input (hence
l[2]=v
+ if v is given (with positive integers))
+
+*Note:*
+ If v is given id may be any simply indexed object (e.g. any list or
+ string); if v[i]<0 and i<=size(id) v[i] is set internally to i;
+ entries of v must be pairwise distinct to get a permutation if id.
+ Zero generators of ideal/module are deleted
+
+*Example:*
+ LIB "general.lib";
+ ring r0 = 0,(x,y,z,t),lp;
+ ideal i = x3,z3,xyz;
+ sort(i); //sorts using lex ordering, smaller polys come first
+ ==> [1]:
+ ==> _[1]=z3
+ ==> _[2]=xyz
+ ==> _[3]=x3
+ ==> [2]:
+ ==> 2,3,1
+ sort(i,3..1);
+ ==> [1]:
+ ==> _[1]=xyz
+ ==> _[2]=z3
+ ==> _[3]=x3
+ ==> [2]:
+ ==> 3,2,1
+ sort(i,"ls")[1]; //sort w.r.t. negative lex ordering
+ ==> _[1]=x3
+ ==> _[2]=xyz
+ ==> _[3]=z3
+ intvec v =1,10..5,2..4;v;
+ ==> 1,10,9,8,7,6,5,2,3,4
+ sort(v)[1]; // sort v lexicographically
+ ==> 1,2,3,4,5,6,7,8,9,10
+ sort(v,"Dp",1)[1]; // sort v w.r.t (total sum, reverse lex)
+ ==> 10,9,8,7,6,5,4,3,2,1
+
+
+File: sing.htm, Node: sum, Next: watchdog, Prev: sort, Up: general_lib
+
+D.2.2.15 sum
+............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ sum(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list, v
+ intvec (default: v=1..number of entries of id)
+
+*Assume:*
+ list members can be added.
+
+*Return:*
+ The sum of all entries of id [with index given by v] of type
+ depending on the entries of id.
+
+*Note:*
+ If id is not a list, id is treated as a list of polys resp.
+ integers. A module m is identified with the corresponding matrix M
+ (columns of M generate m).
+ If v is outside the range of id, we have the empty sum and the
+ result will be 0 (of type int).
+
+*Example:*
+ LIB "general.lib";
+ ring r= 0,(x,y,z),dp;
+ vector pv = [xy,xz,yz,x2,y2,z2];
+ sum(pv);
+ ==> x2+xy+y2+xz+yz+z2
+ sum(pv,2..5);
+ ==> x2+y2+xz+yz
+ matrix M[2][3] = 1,x,2,y,3,z;
+ intvec w=2,4,6;
+ sum(M,w);
+ ==> x+y+z
+ intvec iv = 1,2,3,4,5,6,7,8,9;
+ sum(iv,2..4);
+ ==> 9
+
+
+File: sing.htm, Node: watchdog, Next: which, Prev: sum, Up: general_lib
+
+D.2.2.16 watchdog
+.................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Return:*
+ Result of cmd, if the result can be computed in i seconds.
+ Otherwise the computation is interrupted after i seconds, the
+ string "Killed" is returned and the global variable
+ 'watchdog_interrupt' is defined.
+
+*Note:*
+ * the MP package must be enabled
+ * the current basering should not be watchdog_rneu, since
+ watchdog_rneu will be killed
+ * if there are variable names of the structure x(i) all polynomials
+ have to be put into eval(...) in order to be interpreted correctly
+ * a second Singular process is started by this procedure
+
+*Example:*
+ LIB "general.lib";
+ ring r=0,(x,y,z),dp;
+ poly f=x^30+y^30;
+ watchdog(1,"factorize(eval("+string(f)+"))");
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16
+ ==> _[3]=x8-x6y2+x4y4-x2y6+y8
+ ==> _[4]=x4-x2y2+y4
+ ==> _[5]=x2+y2
+ ==> [2]:
+ ==> 1,1,1,1,1
+ watchdog(100,"factorize(eval("+string(f)+"))");
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16
+ ==> _[3]=x8-x6y2+x4y4-x2y6+y8
+ ==> _[4]=x4-x2y2+y4
+ ==> _[5]=x2+y2
+ ==> [2]:
+ ==> 1,1,1,1,1
+
+
+File: sing.htm, Node: which, Next: primecoeffs, Prev: watchdog, Up:
general_lib
+
+D.2.2.17 which
+..............
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ which(command); command = string expression
+
+*Return:*
+ Absolute pathname of command, if found in search path. Empty
+ string, otherwise.
+
+*Note:*
+ Based on the Unix command 'which'.
+
+*Example:*
+ LIB "general.lib";
+ which("sh");
+ ==> /bin/sh
+
+
+File: sing.htm, Node: primecoeffs, Next: primefactors, Prev: which, Up:
general_lib
+
+D.2.2.18 primecoeffs
+....................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ primecoeffs(J[,q]); J any type which can be converted to a matrix
+ e.g. ideal, matrix, vector, module, int, intvec
+ q = intger
+
+*Compute:*
+ primefactors <= min(p,32003) of coeffs of J (default p = 32003)
+
+*Return:*
+ a list, say l, of two intvectors:
+ l[1] : the different primefactors of all coefficients of J l[2] :
+ the different remaining factors
+
+*Note:*
+ the procedure works for small integers only, just by testing all
+ primes (not to be considerd as serious prime factorization!)
+
+*Example:*
+ LIB "general.lib";
+ primecoeffs(intvec(7*8*121,7*8));"";
+ ==> [1]:
+ ==> 2,7,11
+ ==> [2]:
+ ==> 1
+ ==>
+ ring r = 0,(b,c,t),dp;
+ ideal I = -13b6c3t+4b5c4t,-10b4c2t-5b4ct2;
+ primecoeffs(I);
+ ==> [1]:
+ ==> 2,5,13
+ ==> [2]:
+ ==> _[1]=1
+
+
+File: sing.htm, Node: primefactors, Next: timeStd, Prev: primecoeffs, Up:
general_lib
+
+D.2.2.19 primefactors
+.....................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ primefactors(n [,p]); n = int or number, p = integer
+
+*Compute:*
+ primefactors <= min(p,32003) of n (default p = 32003)
+
+*Return:*
+ a list, say l,
+ l[1] : primefactors <= min(p,32003) of n
+ l[2] : l[2][i] = multiplicity of l[1][i]
+ l[3] : remaining factor ( n=product{ (l[1][i]^l[2][i])*l[3]} )
+ type(l[3])=typeof(n)
+
+*Note:*
+ If n is a long integer (of type number) then the procedure finds
+ primefactors <= min(p,32003) but n may be larger as 2147483647
+ (max. integer representation)
+
+*Warning:*
+ the procedure works for small integers only, just by testing all
+ primes (not to be considerd as serious prime factorization!)
+
+*Example:*
+ LIB "general.lib";
+ primefactors(7*8*121);
+ ==> [1]:
+ ==> 2,7,11
+ ==> [2]:
+ ==> 3,1,2
+ ==> [3]:
+ ==> 1
+ ring r = 0,x,dp;
+ primefactors(123456789100);
+ ==> [1]:
+ ==> 2,5
+ ==> [2]:
+ ==> 2,2
+ ==> [3]:
+ ==> 1234567891
+
+
+File: sing.htm, Node: timeStd, Next: timeFactorize, Prev: primefactors,
Up: general_lib
+
+D.2.2.20 timeStd
+................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ timeStd(i,d), i ideal, d integer
+
+*Return:*
+ std(i) if the standard basis computation finished after d-1 seconds
+ and i otherwise
+
+*Example:*
+ LIB "general.lib";
+ ring r=32003,(a,b,c,d,e),dp;
+ int n=6;
+ ideal i=
+ a^n-b^n,
+ b^n-c^n,
+ c^n-d^n,
+ d^n-e^n,
+ a^(n-1)*b+b^(n-1)*c+c^(n-1)*d+d^(n-1)*e+e^(n-1)*a;
+ ideal j=timeStd(i,2);
+ j;
+ ==> j[1]=a6-b6
+ ==> j[2]=b6-c6
+ ==> j[3]=c6-d6
+ ==> j[4]=d6-e6
+ ==> j[5]=a5b+b5c+c5d+d5e+ae5
+
+
+File: sing.htm, Node: timeFactorize, Next: factorH, Prev: timeStd, Up:
general_lib
+
+D.2.2.21 timeFactorize
+......................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ timeFactorize(p,d) poly p , integer d
+
+*Return:*
+ factorize(p) if the factorization finished after d-1
+ seconds otherwise f is considered to be irreducible
+
+*Example:*
+ LIB "general.lib";
+ ring r=0,(x,y),dp;
+ poly p=((x2+y3)^2+xy6)*((x3+y2)^2+x10y);
+ p=p^2;
+ list l=timeFactorize(p,2);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==>
x22y14+2x21y14+4x23y11+x20y14+2x25y8+4x22y11+6x24y8+4x26y5+2x18y13+\
+
x28y2+4x17y13+4x15y15+8x19y10+2x16y13+8x14y15+2x12y17+4x21y7+8x18y10+16x1\
+
6y12+4x13y15+4x11y17+12x20y7+8x18y9+16x15y12+8x13y14+2x10y17+8x22y4+24x17\
+
y9+4x15y11+x14y12+8x12y14+2x24y+16x19y6+12x14y11+2x13y12+4x11y14+4x21y3+8\
+
x16y8+4x15y9+x12y12+8x10y14+6x8y16+2x18y5+2x17y6+4x14y9+16x12y11+4x9y14+1\
+
2x7y16+4x5y18+6x16y6+8x14y8+16x11y11+24x9y13+6x6y16+8x4y18+x2y20+4x18y3+2\
+
4x13y8+12x11y10+24x8y13+16x6y15+4x3y18+2xy20+x20+16x15y5+36x10y10+8x8y12+\
+
16x5y15+4x3y17+y20+4x17y2+24x12y7+24x7y12+2x5y14+4x2y17+6x14y4+16x9y9+6x4\
+ y14+4x11y6+4x6y11+x8y8
+ ==> [2]:
+ ==> 1,1
+
+
+File: sing.htm, Node: factorH, Prev: timeFactorize, Up: general_lib
+
+D.2.2.22 factorH
+................
+
+Procedure from library `general.lib' (*note general_lib::).
+
+*Usage:*
+ factorH(p) p poly
+
+*Return:*
+ factorize(p)
+
+*Note:*
+ changes variables to become the last variable the principal one in
+ the multivariate factorization and factorizes then the polynomial
+
+*Example:*
+ LIB "general.lib";
+ system("random",992851144);
+ ring r=32003,(x,y,z,w,t),lp;
+ poly p=y2w9+yz7t-yz5w4-z2w4t4-w8t3;
+ //factorize(p); //fast
+ //system("random",992851262);
+ //factorize(p); //slow
+ //system("random",992851262);
+ factorH(p);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=y2w9+yz7t-yz5w4-z2w4t4-w8t3
+ ==> [2]:
+ ==> 1,1
+
+
+File: sing.htm, Node: inout_lib, Next: poly_lib, Prev: general_lib, Up:
General purpose
+
+D.2.3 inout_lib
+---------------
+
+*Library:*
+ inout.lib
+
+*Purpose:*
+ Printing and Manipulating In- and Output
+
+*Procedures:*
+
+* Menu:
+
+* allprint:: print list if ALLprint is defined, with pause if >0
+* lprint:: display poly/... fitting to pagewidth [size n]
+* pmat:: print form-matrix [first n chars of each column]
+* rMacaulay:: read Macaulay_1 output and return its Singular format
+* show:: display any object in a compact format
+* showrecursive:: display id recursively with respect to variables in p
+* split:: split given string into lines of length n
+* tab:: string of n space tabs
+* writelist:: write a list into a file and keep the list structure
+* pause:: stop the computation until user input
+
+
+File: sing.htm, Node: allprint, Next: lprint, Up: inout_lib
+
+D.2.3.1 allprint
+................
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ allprint(L); L list
+
+*Display:*
+ prints L[1], L[2], ... if an integer with name ALLprint is defined.
+
+ makes "pause", if ALLprint > 0
+ listvar(matrix), if ALLprint = 2
+
+*Return:*
+ no return value
+
+*Example:*
+ LIB "inout.lib";
+ ring S;
+ matrix M=matrix(freemodule(2),3,3);
+ int ALLprint; export ALLprint;
+ ==> // ** `ALLprint` is already global
+ allprint("M =",M);
+ ==> M =
+ ==> 1,0,0,
+ ==> 0,1,0,
+ ==> 0,0,0
+ kill ALLprint;
+
+
+File: sing.htm, Node: lprint, Next: pmat, Prev: allprint, Up: inout_lib
+
+D.2.3.2 lprint
+..............
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ lprint(id[,n]); id poly/ideal/vector/module/matrix, n integer
+
+*Return:*
+ string of id in a format fitting into lines of size n, such that no
+ monomial is destroyed, i.e. the new line starts with + or -;
+ (default: n = pagewidth).
+
+*Note:*
+ id is printed columnwise, each column separated by a blank line;
+ hence lprint(transpose(id)); displays a matrix id in a format which
+ can be used as input.
+
+*Example:*
+ LIB "inout.lib";
+ ring r= 0,(x,y,z),ds;
+ poly f=((x+y)*(x-y)*(x+z)*(y+z)^2);
+ lprint(f,40);
+ ==> x3y2-xy4+2x3yz+x2y2z-2xy3z-y4z+x3z2
+ ==> +2x2yz2-xy2z2-2y3z2+x2z3-y2z3
+ module m = [f*(x-y)],[0,f*(x-y)];
+ string s=lprint(m); s;"";
+ ==>
x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2
+ ==> +2y4z2+x3z3-x2yz3-xy2z3+y3z3,
+ ==> 0,
+ ==>
+ ==> 0,
+ ==>
x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2
+ ==> +2y4z2+x3z3-x2yz3-xy2z3+y3z3
+ ==>
+ execute("matrix M[2][2]="+s+";"); //use the string s as input
+ module m1 = transpose(M); //should be the same as m
+ print(m-m1);
+ ==> 0,0,
+ ==> 0,0
+
+
+File: sing.htm, Node: pmat, Next: rMacaulay, Prev: lprint, Up: inout_lib
+
+D.2.3.3 pmat
+............
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ pmat(M,[n]); M matrix, n integer
+
+*Display:*
+ display M in array format if it fits into pagewidth; if n is given,
+ only the first n characters of each column are shown
+
+*Return:*
+ no return value
+
+*Example:*
+ LIB "inout.lib";
+ ring r=0,(x,y,z),ls;
+ ideal i= x,z+3y,x+y,z;
+ matrix m[3][3]=i^2;
+ pmat(m);
+ ==> x2, xz+3xy, xy+x2,
+ ==> xz, z2+6yz+9y2, yz+3y2+xz+3xy,
+ ==> z2+3yz, y2+2xy+x2, yz+xz
+ pmat(m,3);
+ ==> x2 xz+ xy+
+ ==> xz z2+ yz+
+ ==> z2+ y2+ yz+
+
+
+File: sing.htm, Node: rMacaulay, Next: show, Prev: pmat, Up: inout_lib
+
+D.2.3.4 rMacaulay
+.................
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ rMacaulay(s[,n]); s string, n integer
+
+*Return:*
+ A string which should be readable by Singular if s is a string
+ which was produced by Macaulay. If a second argument is present the
+ first n lines of the file are deleted (which is useful if the file
+ was produced e.g. by the putstd command of Macaulay).
+
+*Note:*
+ This does not always work with 'cut and paste' since the character
+ \ is treated differently
+
+*Example:*
+ LIB "inout.lib";
+ // Assume there exists a file 'Macid' with the following ideal in
+ // Macaulay format:"
+ // x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2] \
+ // -4/71x[0]x[1]x[2]
+ // Read this file into Singular and assign it to the string s1 by:
+ // string s1 = read("Macid");
+ // This is equivalent to";
+ string s1 =
+
"x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2]-4/71x[0]x[1]x[2]";
+ rMacaulay(s1);
+ ==>
x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)-4/71*\
+ x(0)*x(1)*x(2)
+ // You may wish to assign s1 to a Singular ideal id:
+ string sid = "ideal id =",rMacaulay(s1),";";
+ ring r = 0,x(0..3),dp;
+ execute(sid);
+ id; "";
+ ==>
id[1]=x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)\
+ -4/71*x(0)*x(1)*x(2)
+ ==>
+ // Now treat a matrix in Macaulay format. Using the execute
+ // command, this could be assinged to a Singular matrix as above.
+ string s2 = "
+ 0 0 0 0 0
+ a3 0 0 0 0
+ 0 b3 0 0 0
+ 0 0 c3 0 0
+ 0 0 0 d3 0
+ 0 0 0 0 e3 ";
+ rMacaulay(s2);
+ ==> 0, 0, 0, 0, 0,
+ ==> a3,0, 0, 0, 0,
+ ==> 0, b3,0, 0, 0,
+ ==> 0, 0, c3,0, 0,
+ ==> 0, 0, 0, d3,0,
+ ==> 0, 0, 0, 0, e3
+
+
+File: sing.htm, Node: show, Next: showrecursive, Prev: rMacaulay, Up:
inout_lib
+
+D.2.3.5 show
+............
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ show(id); id any object of basering or of type ring/qring
+ show(R,s); R=ring, s=string (s = name of an object belonging to R)
+
+*Display:*
+ display id/s in a compact format together with some information
+
+*Return:*
+ no return value
+
+*Note:*
+ objects of type string, int, intvec, intmat belong to any ring. id
+ may be a ring or a qring. In this case the minimal polynomial is
+ displayed, and, for a qring, also the defining ideal.
+ id may be of type list but the list must not contain a ring.
+ show(R,s) does not work inside a procedure!
+
+*Example:*
+ LIB "inout.lib";
+ ring r;
+ show(r);
+ ==> // ring: (32003),(x,y,z),(dp(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ideal i=x^3+y^5-6*z^3,xy,x3-y2;
+ show(i,3); // introduce 3 space tabs before information
+ ==> // ideal, 3 generator(s)
+ ==> y5+x3-6z3,
+ ==> xy,
+ ==> x3-y2
+ vector v=x*gen(1)+y*gen(3);
+ module m=v,2*v+gen(4);
+ list L = i,v,m;
+ show(L);
+ ==> // list, 3 element(s):
+ ==> [1]:
+ ==> // ideal, 3 generator(s)
+ ==> y5+x3-6z3,
+ ==> xy,
+ ==> x3-y2
+ ==> [2]:
+ ==> // vector
+ ==> [x,0,y]
+ ==> [3]:
+ ==> // module, 2 generator(s)
+ ==> [x,0,y]
+ ==> [2x,0,2y,1]
+ ring S=(0,T),(a,b,c,d),ws(1,2,3,4);
+ minpoly = T^2+1;
+ ideal i=a2+b,c2+T^2*d2; i=std(i);
+ qring Q=i;
+ show(Q);
+ ==> // qring: (0,T),(a,b,c,d),(ws(1,2,3,4),C);
+ ==> // minpoly = (T2+1)
+ ==> // quotient ring from ideal:
+ ==> _[1]=a2+b
+ ==> _[2]=c2-d2
+ map F=r,a2,b^2,3*c3;
+ show(F);
+ ==> // i-th variable of preimage ring is mapped to @map[i]
+ ==> // @map [1] map from r
+ ==> @map[1]=a2
+ ==> @map[2]=b2
+ ==> @map[3]=3*c3
+ // Apply 'show' to i (which does not belong to the basering) by typing
+ // ring r; ideal i=xy,x3-y2; ring Q; show(r,"i");
+
+
+File: sing.htm, Node: showrecursive, Next: split, Prev: show, Up: inout_lib
+
+D.2.3.6 showrecursive
+.....................
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ showrecursive(id,p[ord]); id= any object of basering, p= product of
+ variables and ord=string (any allowed ordstr)
+
+*Display:*
+ display 'id' in a recursive format as a polynomial in the variables
+ occurring in p with coefficients in the remaining variables. This
+ is done by mapping to a ring with parameters [and ordering 'ord',
+ if a 3rd argument is present (default: ord="dp")] and applying
+ procedure 'show'
+
+*Return:*
+ no return value
+
+*Example:*
+ LIB "inout.lib";
+ ring r=2,(a,b,c,d,x,y),ds;
+ poly f=y+ax2+bx3+cx2y2+dxy3;
+ showrecursive(f,x);
+ ==> // poly, 4 monomial(s)
+ ==> (b)*x3+(a+cy2)*x2+(dy3)*x+(y)
+ showrecursive(f,xy,"lp");
+ ==> // poly, 5 monomial(s)
+ ==> (b)*x3+(c)*x2y2+(a)*x2+(d)*xy3+y
+
+
+File: sing.htm, Node: split, Next: tab, Prev: showrecursive, Up: inout_lib
+
+D.2.3.7 split
+.............
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ split(s[,n]); s string, n integer
+
+*Return:*
+ same string, split into lines of length n separated by \ (default:
+ n=pagewidth)
+
+*Note:*
+ may be used in connection with lprint
+
+*Example:*
+ LIB "inout.lib";
+ ring r= 0,(x,y,z),ds;
+ poly f = (x+y+z)^4;
+ split(string(f),50);
+ ==> x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x\
+ ==> 2z2+12xyz2+6y2z2+4xz3+4yz3+z4
+ split(lprint(f));
+ ==>
x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x2z2+12xyz2+6y2z2+4xz3+4\
+ yz3\
+ ==> +z4
+
+
+File: sing.htm, Node: tab, Next: writelist, Prev: split, Up: inout_lib
+
+D.2.3.8 tab
+...........
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ tab(n); n integer
+
+*Return:*
+ string of n space tabs
+
+*Example:*
+ LIB "inout.lib";
+ for(int n=0; n<=5; n=n+1)
+ { tab(5-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
+ ==> *+*
+ ==> * + *
+ ==> * + *
+ ==> * + *
+ ==> * + *
+ ==> * + *
+
+
+File: sing.htm, Node: writelist, Next: pause, Prev: tab, Up: inout_lib
+
+D.2.3.9 writelist
+.................
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ writelist(file,name,L); file,name strings (file-name, list-name), L
+ a list.
+
+*Create:*
+ a file with name `file`, write the content of the list L into it
+ and call the list `name`, keeping the list structure
+
+*Return:*
+ no return value
+
+*Note:*
+ The syntax of writelist uses and is similar to the syntax of the
+ write command of Singular which does not manage lists properly. If
+ (file,name) = ("listfile","L1"), writelist creates (resp. appends
+ if listfile exists) a file with name listfile and stores there the
+ list L under the name L1. The Singular command
+ execute(read("listfile")); assigns the content of L (stored in
+ listfile) to a list L1.
+ On a UNIX system, write(">file",...) overwrites an existing file
+ `file` while write("file",...) and write(">>file",...) append.
+
+*Example:*
+ LIB "inout.lib";
+ ring r;
+ ideal i=x,y,z;
+ list k="Hi",nameof(basering),i,37;
+ writelist("zumSpass","lustig",k);
+ read("zumSpass");
+ ==> list lustig;
+ ==> lustig[1]=
+ ==> Hi;
+ ==> lustig[2]=
+ ==> r;
+ ==> lustig[3]=
+ ==> x,y,z;
+ ==> lustig[4]=
+ ==> 37;
+ ==>
+ list L=res(i,0); //resolution of the ideal i
+ writelist("res_list","res-name",L); "";
+ ==>
+ read("res_list");
+ ==> list res-name;
+ ==> res-name[1]=
+ ==> z,y,x;
+ ==> res-name[2]=
+ ==> -y*gen(1)+z*gen(2),-x*gen(1)+z*gen(3),-x*gen(2)+y*gen(3);
+ ==> res-name[3]=
+ ==> x*gen(1)-y*gen(2)+z*gen(3);
+ ==>
+ // execute(read("res_list")); would create a list with name res-name,
+ // which is the resolution of i (the same content as L)
+ system("sh","/bin/rm res_list zumSpass");
+ ==> 0
+ // Under UNIX, this removes the files 'res_list' and 'zumSpass'
+ // Type help system; to get more information about the shell escape
+ // If your operating system does not accept the shell escape, you
+ // must remove the just created files 'zumSpass' and 'res_list' directly
+
+
+File: sing.htm, Node: pause, Prev: writelist, Up: inout_lib
+
+D.2.3.10 pause
+..............
+
+Procedure from library `inout.lib' (*note inout_lib::).
+
+*Usage:*
+ pause([ prompt ]) prompt string
+
+*Return:*
+ none
+
+*Purpose:*
+ interrupt the execution of commands until user input
+
+*Note:*
+ pause is useful in procedures in connection with printlevel to
+ interrupt the computation and to display intermediate results.
+
+*Example:*
+ LIB "inout.lib";
+ // can only be shown interactively, try the following commands:
+ // pause("press <return> to continue");
+ // pause();
+ // In the following pocedure TTT, xxx is printed and the execution of
+ // TTT is stopped until the return-key is pressed, if printlevel>0.
+ // xxx may be any result of a previous computation or a comment, etc:
+ //
+ // proc TTT
+ // { int pp = printlevel-voice+2; //pp=0 if printlevel=0 and if TTT is
+ // .... //not called from another procedure
+ // if( pp>0 )
+ // {
+ // print( xxx );
+ // pause("press <return> to continue");
+ // }
+ // ....
+ // }
+
+* Menu:
+
+See also:
+* printlevel::
+* read::
+
+*See also:* *note printlevel::; *note read::.
+
+
+File: sing.htm, Node: poly_lib, Next: random_lib, Prev: inout_lib, Up:
General purpose
+
+D.2.4 poly_lib
+--------------
+
+*Library:*
+ poly.lib
+
+*Purpose:*
+ Procedures for Manipulating Polys, Ideals, Modules
+
+*Authors:*
+ O. Bachmann, G.-M: Greuel, A. Fruehbis
+
+*Procedures:*
+
+* Menu:
+
+* cyclic:: ideal of cyclic n-roots
+* katsura:: katsura [i] ideal
+* freerank:: rank of coker(input) if coker is free else -1
+* is_homog:: int, =1 resp. =0 if input is homogeneous resp. not
+* is_zero:: int, =1 resp. =0 if coker(input) is 0 resp. not
+* lcm:: lcm of given generators of ideal
+* maxcoef:: maximal length of coefficient occurring in poly/...
+* maxdeg:: int/intmat = degree/s of terms of maximal order
+* maxdeg1:: int = [weighted] maximal degree of input
+* mindeg:: int/intmat = degree/s of terms of minimal order
+* mindeg1:: int = [weighted] minimal degree of input
+* normalize:: normalize poly/... such that leading coefficient is 1
+* rad_con:: check radical containment of poly p in ideal I
+* content:: content of polynomial/vector f
+* numerator:: numerator of number n
+* denominator:: denominator of number n
+* mod2id:: conversion of a module M to an ideal
+* id2mod:: conversion inverse to mod2id
+* substitute:: substitute in I variables by polynomials
+* subrInterred:: interred w.r.t. a subset of variables
+* hilbPoly:: Hilbert polynomial of basering/I
+
+
+File: sing.htm, Node: cyclic, Next: katsura, Up: poly_lib
+
+D.2.4.1 cyclic
+..............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ cyclic(n); n integer
+
+*Return:*
+ ideal of cyclic n-roots from 1-st n variables of basering
+
+*Example:*
+ LIB "poly.lib";
+ ring r=0,(u,v,w,x,y,z),lp;
+ cyclic(nvars(basering));
+ ==> _[1]=u+v+w+x+y+z
+ ==> _[2]=uv+uz+vw+wx+xy+yz
+ ==> _[3]=uvw+uvz+uyz+vwx+wxy+xyz
+ ==> _[4]=uvwx+uvwz+uvyz+uxyz+vwxy+wxyz
+ ==> _[5]=uvwxy+uvwxz+uvwyz+uvxyz+uwxyz+vwxyz
+ ==> _[6]=uvwxyz-1
+ homog(cyclic(5),z);
+ ==> _[1]=u+v+w+x+y
+ ==> _[2]=uv+uy+vw+wx+xy
+ ==> _[3]=uvw+uvy+uxy+vwx+wxy
+ ==> _[4]=uvwx+uvwy+uvxy+uwxy+vwxy
+ ==> _[5]=uvwxy-z5
+
+
+File: sing.htm, Node: katsura, Next: freerank, Prev: cyclic, Up: poly_lib
+
+D.2.4.2 katsura
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ katsura([n]): n integer
+
+*Return:*
+ katsura(n) : n-th katsura ideal of
+ (1) newly created and set ring (32003, x(0..n), dp), if
+ nvars(basering) < n
+ (2) basering, if nvars(basering) >= n
+ katsura() : katsura ideal of basering
+
+*Example:*
+ LIB "poly.lib";
+ ring r; basering;
+ ==> // characteristic : 32003
+ ==> // number of vars : 3
+ ==> // block 1 : ordering dp
+ ==> // : names x y z
+ ==> // block 2 : ordering C
+ katsura();
+ ==> _[1]=x+2y+2z-1
+ ==> _[2]=x2+2y2+2z2-x
+ ==> _[3]=2xy+2yz-y
+ katsura(4); basering;
+ ==> _[1]=x(0)+2*x(1)+2*x(2)+2*x(3)-1
+ ==> _[2]=x(0)^2+2*x(1)^2+2*x(2)^2+2*x(3)^2-x(0)
+ ==> _[3]=2*x(0)*x(1)+2*x(1)*x(2)+2*x(2)*x(3)-x(1)
+ ==> _[4]=x(1)^2+2*x(0)*x(2)+2*x(1)*x(3)-x(2)
+ ==> // characteristic : 32003
+ ==> // number of vars : 5
+ ==> // block 1 : ordering dp
+ ==> // : names x(0) x(1) x(2) x(3) x(4)
+ ==> // block 2 : ordering C
+
+
+File: sing.htm, Node: freerank, Next: is_homog, Prev: katsura, Up: poly_lib
+
+D.2.4.3 freerank
+................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ freerank(M[,any]); M=poly/ideal/vector/module/matrix
+
+*Compute:*
+ rank of module presented by M in case it is free.
+ By definition this is vdim(coker(M)/m*coker(M)) if coker(M) is
+ free, where m = maximal ideal of the variables of the basering and
+ M is considered as matrix.
+ (the 0-module is free of rank 0)
+
+*Return:*
+ rank of coker(M) if coker(M) is free and -1 else;
+ in case of a second argument return a list:
+ L[1] = rank of coker(M) or -1
+ L[2] = minbase(M)
+
+*Note:*
+ freerank(syz(M)); computes the rank of M if M is free (and -1 else)
+
+*Example:*
+ LIB "poly.lib";
+ ring r;
+ ideal i=x;
+ module M=[x,0,1],[-x,0,-1];
+ freerank(M); // should be 2, coker(M) is not free
+ ==> 2
+ freerank(syz (M),"");
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> _[1]=gen(2)+gen(1)
+ // [1] should be 1, coker(syz(M))=M is free of rank 1
+ // [2] should be gen(2)+gen(1) (minimal relation of M)
+ freerank(i);
+ ==> -1
+ freerank(syz(i)); // should be 1, coker(syz(i))=i is free of rank 1
+ ==> 1
+
+
+File: sing.htm, Node: is_homog, Next: is_zero, Prev: freerank, Up: poly_lib
+
+D.2.4.4 is_homog
+................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ is_homog(id); id poly/ideal/vector/module/matrix
+
+*Return:*
+ integer which is 1 if input is homogeneous (resp. weighted
+ homogeneous if the monomial ordering consists of one block of type
+ ws,Ws,wp or Wp, assuming that all weights are positive) and 0
+ otherwise
+
+*Note:*
+ A vector is homogeneous, if the components are homogeneous of same
+ degree, a module/matrix is homogeneous if all column vectors are
+ homogeneous
+ //*** ergaenzen, wenn Matrizen-Spalten Gewichte haben
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),wp(1,2,3);
+ is_homog(x5-yz+y3);
+ ==> 0
+ ideal i = x6+y3+z2, x9-z3;
+ is_homog(i);
+ ==> 1
+ ring s = 0,(a,b,c),ds;
+ vector v = [a2,0,ac+bc];
+ vector w = [a3,b3,c4];
+ is_homog(v);
+ ==> 1
+ is_homog(w);
+ ==> 0
+
+
+File: sing.htm, Node: is_zero, Next: lcm, Prev: is_homog, Up: poly_lib
+
+D.2.4.5 is_zero
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ is_zero(M[,any]); M=poly/ideal/vector/module/matrix
+
+*Return:*
+ integer, 1 if coker(M)=0 resp. 0 if coker(M)!=0, where M is
+ considered as matrix.
+ If a second argument is given, return a list:
+ L[1] = 1 if coker(M)=0 resp. 0 if coker(M)!=0
+ L[2] = dim(M)
+
+*Example:*
+ LIB "poly.lib";
+ ring r;
+ module m = [x],[y],[1,z];
+ is_zero(m,1);
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> 2
+ qring q = std(ideal(x2+y3+z2));
+ ideal j = x2+y3+z2-37;
+ is_zero(j);
+ ==> 1
+
+
+File: sing.htm, Node: lcm, Next: maxcoef, Prev: is_zero, Up: poly_lib
+
+D.2.4.6 lcm
+...........
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ lcm(p[,q]); p int/intvec q a list of integers or
+ p poly/ideal q a list of polynomials
+
+*Return:*
+ the least common multiple of the common entries of p and q:
+ - of type int if p is an int/intvec
+ - of type poly if p is a poly/ideal
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),lp;
+ poly p = (x+y)*(y+z);
+ poly q = (z4+2)*(y+z);
+ lcm(p,q);
+ ==> xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz
+ ideal i=p,q,y+z;
+ lcm(i,p);
+ ==> xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz
+ lcm(2,3,6);
+ ==> 6
+ lcm(2..6);
+ ==> 60
+
+
+File: sing.htm, Node: maxcoef, Next: maxdeg, Prev: lcm, Up: poly_lib
+
+D.2.4.7 maxcoef
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ maxcoef(f); f poly/ideal/vector/module/matrix
+
+*Return:*
+ maximal length of coefficient of f of type int (by counting the
+ length of the string of each coefficient)
+
+*Example:*
+ LIB "poly.lib";
+ ring r= 0,(x,y,z),ds;
+ poly g = 345x2-1234567890y+7/4z;
+ maxcoef(g);
+ ==> 10
+ ideal i = g,10/1234567890;
+ maxcoef(i);
+ ==> 11
+ // since i[2]=1/123456789
+
+
+File: sing.htm, Node: maxdeg, Next: maxdeg1, Prev: maxcoef, Up: poly_lib
+
+D.2.4.8 maxdeg
+..............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ maxdeg(id); id poly/ideal/vector/module/matrix
+
+*Return:*
+ int/intmat, each component equals maximal degree of monomials in
+ the corresponding component of id, independent of ring ordering
+ (maxdeg of each var is 1).
+ Of type int if id is of type poly, of type intmat else
+
+*Note:*
+ proc maxdeg1 returns 1 integer, the absolute maximum; moreover, it
+ has an option for computing weighted degrees
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),wp(1,2,3);
+ poly f = x+y2+z3;
+ deg(f); //deg; returns weighted degree (in case of 1 block)!
+ ==> 9
+ maxdeg(f);
+ ==> 3
+ matrix m[2][2]=f+x10,1,0,f^2;
+ maxdeg(m);
+ ==> 10,0,
+ ==> -1,6
+
+
+File: sing.htm, Node: maxdeg1, Next: mindeg, Prev: maxdeg, Up: poly_lib
+
+D.2.4.9 maxdeg1
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ maxdeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
+
+*Return:*
+ integer, maximal [weighted] degree of monomials of id independent
+ of ring ordering, maxdeg1 of i-th variable is v[i] (default:
+ v=1..1).
+
+*Note:*
+ This proc returns one integer while maxdeg returns, in general, a
+ matrix of integers. For one polynomial and if no intvec v is given
+ maxdeg is faster
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),wp(1,2,3);
+ poly f = x+y2+z3;
+ deg(f); //deg returns weighted degree (in case of 1 block)!
+ ==> 9
+ maxdeg1(f);
+ ==> 3
+ intvec v = ringweights(r);
+ maxdeg1(f,v); //weighted maximal degree
+ ==> 9
+ matrix m[2][2]=f+x10,1,0,f^2;
+ maxdeg1(m,v); //absolute weighted maximal degree
+ ==> 18
+
+
+File: sing.htm, Node: mindeg, Next: mindeg1, Prev: maxdeg1, Up: poly_lib
+
+D.2.4.10 mindeg
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ mindeg(id); id poly/ideal/vector/module/matrix
+
+*Return:*
+ minimal degree/s of monomials of id, independent of ring ordering
+ (mindeg of each variable is 1) of type int if id of type poly, else
+ of type intmat.
+
+*Note:*
+ proc mindeg1 returns one integer, the absolute minimum; moreover it
+ has an option for computing weighted degrees.
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),ls;
+ poly f = x5+y2+z3;
+ ord(f); // ord returns weighted order of leading term!
+ ==> 3
+ mindeg(f); // computes minimal degree
+ ==> 2
+ matrix m[2][2]=x10,1,0,f^2;
+ mindeg(m); // computes matrix of minimum degrees
+ ==> 10,0,
+ ==> -1,4
+
+
+File: sing.htm, Node: mindeg1, Next: normalize, Prev: mindeg, Up: poly_lib
+
+D.2.4.11 mindeg1
+................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ mindeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
+
+*Return:*
+ integer, minimal [weighted] degree of monomials of id independent
+ of ring ordering, mindeg1 of i-th variable is v[i] (default
+ v=1..1).
+
+*Note:*
+ This proc returns one integer while mindeg returns, in general, a
+ matrix of integers. For one polynomial and if no intvec v is given
+ mindeg is faster.
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),ls;
+ poly f = x5+y2+z3;
+ ord(f); // ord returns weighted order of leading term!
+ ==> 3
+ intvec v = 1,-3,2;
+ mindeg1(f,v); // computes minimal weighted degree
+ ==> -6
+ matrix m[2][2]=x10,1,0,f^2;
+ mindeg1(m,1..3); // computes absolute minimum of weighted degrees
+ ==> -1
+
+
+File: sing.htm, Node: normalize, Next: rad_con, Prev: mindeg1, Up: poly_lib
+
+D.2.4.12 normalize
+..................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ normalize(id); id=poly/vector/ideal/module
+
+*Return:*
+ object of same type with leading coefficient equal to 1
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(x,y,z),ls;
+ poly f = 2x5+3y2+4z3;
+ normalize(f);
+ ==> z3+3/4y2+1/2x5
+ module m=[9xy,0,3z3],[4z,6y,2x];
+ normalize(m);
+ ==> _[1]=z3*gen(3)+3xy*gen(1)
+ ==> _[2]=z*gen(1)+3/2y*gen(2)+1/2x*gen(3)
+ ring s = 0,(x,y,z),(c,ls);
+ module m=[9xy,0,3z3],[4z,6y,2x];
+ normalize(m);
+ ==> _[1]=[xy,0,1/3z3]
+ ==> _[2]=[z,3/2y,1/2x]
+
+
+File: sing.htm, Node: rad_con, Next: content, Prev: normalize, Up: poly_lib
+
+D.2.4.13 rad_con
+................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ rad_con(g,I); g polynomial, I ideal
+
+*Return:*
+ 1 (TRUE) (type int) if g is contained in the radical of I
+ 0 (FALSE) (type int) otherwise
+
+*Example:*
+ LIB "poly.lib";
+ ring R=0,(x,y,z),dp;
+ ideal I=x2+y2,z2;
+ poly f=x4+y4;
+ rad_con(f,I);
+ ==> 0
+ ideal J=x2+y2,z2,x4+y4;
+ poly g=z;
+ rad_con(g,I);
+ ==> 1
+
+
+File: sing.htm, Node: content, Next: numerator, Prev: rad_con, Up: poly_lib
+
+D.2.4.14 content
+................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ content(f); f polynomial/vector
+
+*Return:*
+ number, the content (greatest common factor of coefficients) of the
+ polynomial/vector f
+
+*Example:*
+ LIB "poly.lib";
+ ring r=0,(x,y,z),(c,lp);
+ content(3x2+18xy-27xyz);
+ ==> 3
+ vector v=[3x2+18xy-27xyz,15x2+12y4,3];
+ content(v);
+ ==> 3
+
+
+File: sing.htm, Node: numerator, Next: denominator, Prev: content, Up:
poly_lib
+
+D.2.4.15 numerator
+..................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ numerator(n); n number
+
+*Return:*
+ number, the numerator of n
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,x, dp;
+ number n = 3/2;
+ numerator(n);
+ ==> 3
+
+* Menu:
+
+See also:
+* cleardenom::
+* content::
+* denominator::
+
+*See also:* *note cleardenom::; *note content::; *note denominator::.
+
+
+File: sing.htm, Node: denominator, Next: mod2id, Prev: numerator, Up:
poly_lib
+
+D.2.4.16 denominator
+....................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ denominator(n); n number
+
+*Return:*
+ number, the denominator of n
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,x, dp;
+ number n = 3/2;
+ denominator(n);
+ ==> 2
+
+* Menu:
+
+See also:
+* cleardenom::
+* content::
+* denominator::
+
+*See also:* *note cleardenom::; *note content::; *note denominator::.
+
+
+File: sing.htm, Node: mod2id, Next: id2mod, Prev: denominator, Up: poly_lib
+
+D.2.4.17 mod2id
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ mod2id(M,vpos); M matrix, vpos intvec
+
+*Assume:*
+ vpos is an integer vector such that gen(i) corresponds to
+ var(vpos[i]).
+ The basering contains variables var(vpos[i]) which do not occur in
+ M.
+
+*Return:*
+ ideal I in which each gen(i) from the module is replaced by
+ var(vpos[i]) and all monomials var(vpos[i])*var(vpos[j]) have been
+ added to the generating set of I.
+
+*Note:*
+ This procedure should be used in the following situation: one wants
+ to pass to a ring with new variables, say e(1),..,e(s), which
+ correspond to the components gen(1),..,gen(s) of the module M such
+ that e(i)*e(j)=0 for all i,j.
+ The new ring should already exist and be the current ring
+
+*Example:*
+ LIB "poly.lib";
+ ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
+ module mo=x*gen(1)+y*gen(2);
+ intvec iv=2,1;
+ mod2id(mo,iv);
+ ==> _[1]=e(2)^2
+ ==> _[2]=e(1)*e(2)
+ ==> _[3]=e(1)^2
+ ==> _[4]=e(1)*y+e(2)*x
+
+
+File: sing.htm, Node: id2mod, Next: substitute, Prev: mod2id, Up: poly_lib
+
+D.2.4.18 id2mod
+...............
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ id2mod(I,vpos); I ideal, vpos intvec
+
+*Return:*
+ module corresponding to the ideal by replacing var(vpos[i]) by
+ gen(i) and omitting all generators var(vpos[i])*var(vpos[j])
+
+*Note:*
+ * This procedure only makes sense if the ideal contains all
+ var(vpos[i])*var(vpos[j]) as monomial generators and all other
+ generators of I are linear combinations of the var(vpos[i]) over
+ the ring in the other variables.
+ * This is the inverse procedure to mod2id and should be applied
+ only to ideals created by mod2id using the same intvec vpos
+ (possibly after a standard basis computation)
+
+*Example:*
+ LIB "poly.lib";
+ ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
+ ideal i=e(2)^2,e(1)*e(2),e(1)^2,e(1)*y+e(2)*x;
+ intvec iv=2,1;
+ id2mod(i,iv);
+ ==> _[1]=x*gen(1)+y*gen(2)
+
+
+File: sing.htm, Node: substitute, Next: subrInterred, Prev: id2mod, Up:
poly_lib
+
+D.2.4.19 substitute
+...................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ - case 1: typeof(#[1])==poly:
+ substitute (I,v,f[,v1,f1,v2,f2,...]); I object of basering which
+ can be mapped, v,v1,v2,.. ring variables, f,f1,f2,... poly
+ - case 2: typeof(#[1])==ideal: substitute1 (I,v,f); I object of
+ basering which can be mapped, v ideal of ring variables, f ideal
+
+*Return:*
+ object of same type as I,
+ - case 1: ring variable v,v1,v2,... substituted by polynomials
+ f,f1,f2,..., in this order
+ - case 2: ring variables in v substituted by polynomials in f: v[i]
+ is substituted by f[i], i=1,...,i=min(size(v),ncols(f))
+
+*Note:*
+ this procedure extends the built-in command subst which substitutes
+ ring variables only by monomials
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(b,c,t),dp;
+ ideal I = -bc+4b2c2t,bc2t-5b2c;
+ substitute(I,c,b+c,t,0,b,b-1);
+ ==> _[1]=-b2-bc+2b+c-1
+ ==> _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5
+ ideal v = c,t,b;
+ ideal f = b+c,0,b-1;
+ substitute(I,v,f);
+ ==> _[1]=-b2-bc+2b+c-1
+ ==> _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5
+
+
+File: sing.htm, Node: subrInterred, Next: hilbPoly, Prev: substitute, Up:
poly_lib
+
+D.2.4.20 subrInterred
+.....................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ subrInterred(mon,sm,iv);
+ sm: ideal in a ring r with n + s variables,
+ e.g. x_1,..,x_n and t_1,..,t_s
+ mon: ideal with monomial generators (not divisible by any of the
+ t_i) such that sm is contained in the module
+ k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]
+ iv: intvec listing the variables which are supposed to be used as
+ x_i
+
+*Return:*
+ list l:
+ l[1]=the monomials from mon in the order used
+ l[2]=their coefficients after interreduction
+ l[3]=l[1]*l[2]
+
+*Purpose:*
+ Do interred only w.r.t. a subset of variables.
+ The procedure returns an interreduced system of generators of sm
+ considered as a k[t_1,..,t_s]-submodule of the free module
+ k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]).
+
+*Example:*
+ LIB "poly.lib";
+ ring r=0,(x,y,z),dp;
+ ideal i=x^2+x*y^2,x*y+x^2*y,z;
+ ideal j=x^2+x*y^2,x*y,z;
+ ideal mon=x^2,z,x*y;
+ intvec iv=1,3;
+ subrInterred(mon,i,iv);
+ ==> [1]:
+ ==> _[1,1]=z
+ ==> _[1,2]=xy
+ ==> _[1,3]=x2
+ ==> [2]:
+ ==> _[1]=gen(1)
+ ==> _[2]=y2*gen(2)-gen(2)
+ ==> _[3]=y*gen(2)+gen(3)
+ ==> [3]:
+ ==> _[1,1]=z
+ ==> _[1,2]=xy3-xy
+ ==> _[1,3]=xy2+x2
+ subrInterred(mon,j,iv);
+ ==> [1]:
+ ==> _[1,1]=z
+ ==> _[1,2]=xy
+ ==> _[1,3]=x2
+ ==> [2]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=gen(3)
+ ==> [3]:
+ ==> _[1,1]=z
+ ==> _[1,2]=xy
+ ==> _[1,3]=x2
+
+
+File: sing.htm, Node: hilbPoly, Prev: subrInterred, Up: poly_lib
+
+D.2.4.21 hilbPoly
+.................
+
+Procedure from library `poly.lib' (*note poly_lib::).
+
+*Usage:*
+ hilbPoly(I) I a homogeneous ideal
+
+*Return:*
+ the Hilbert polynomial of basering/I as an intvec v=v_0,...,v_r
+ such that the Hilbert polynomial is (v_0+v_1*t+...v_r*t^r)/r!
+
+*Example:*
+ LIB "poly.lib";
+ ring r = 0,(b,c,t,h),dp;
+ ideal I=
+ bct-t2h+2th2+h3,
+ bt3-ct3-t4+b2th+c2th-2bt2h+2ct2h+2t3h-bch2-2bth2+2cth2+2th3,
+ b2c2+bt2h-ct2h-t3h+b2h2+2bch2+c2h2-2bth2+2cth2+t2h2-2bh3+2ch3+2th3+3h4,
+ c2t3+ct4-c3th-2c2t2h-2ct3h-t4h+bc2h2-2c2th2-bt2h2+4t3h2+2bth3-2cth3-t2h3
+ +bh4-6th4-2h5;
+ hilbPoly(I);
+ ==> -11,10
+
+
+File: sing.htm, Node: random_lib, Next: ring_lib, Prev: poly_lib, Up:
General purpose
+
+D.2.5 random_lib
+----------------
+
+*Library:*
+ random.lib
+
+*Purpose:*
+ Creating Random and Sparse Matrices, Ideals, Polys
+
+*Procedures:*
+
+* Menu:
+
+* genericid:: generic sparse linear combinations of generators of i
+* randomid:: random linear combinations of generators of id
+* randommat:: nxm matrix of random linear combinations of id
+* sparseid:: ideal of k random sparse poly's of degree d [u<=d<=o]
+* sparsematrix:: nxm sparse matrix of polynomials of degree<=o
+* sparsemat:: nxm sparse integer matrix with random coefficients
+* sparsepoly:: random sparse polynomial with terms of degree in [u,o]
+* sparsetriag:: nxm sparse lower-triag intmat with random coefficients
+* triagmatrix:: nxm sparse lower-triag matrix of poly's of degree<=o
+* randomLast:: random transformation of the last variable
+* randomBinomial:: binomial ideal, k random generators of degree >=u
+
+
+File: sing.htm, Node: genericid, Next: randomid, Up: random_lib
+
+D.2.5.1 genericid
+.................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ genericid(id,[,p,b]); id ideal/module, k,p,b integers
+
+*Return:*
+ system of generators of id which are generic, sparse, triagonal
+ linear combinations of given generators with coefficients in [1,b]
+ and sparseness p percent, bigger p being sparser (default: p=75,
+ b=30000)
+
+*Note:*
+ For performance reasons try small bound b in characteristic 0
+
+*Example:*
+ LIB "random.lib";
+ ring r=0,(t,x,y,z),ds;
+ ideal i= x3+y4,z4+yx,t+x+y+z;
+ genericid(i,0,10);
+ ==> _[1]=3t+3x+3y+3z+2xy+x3+y4+2z4
+ ==> _[2]=4t+4x+4y+4z+xy+z4
+ ==> _[3]=t+x+y+z
+ module m=[x,0,0,0],[0,y2,0,0],[0,0,z3,0],[0,0,0,t4];
+ print(genericid(m));
+ ==> x, 0, 0, 0,
+ ==> 17904y2,y2, 0, 0,
+ ==> 0, 24170z3,z3,0,
+ ==> 0, 0, 0, t4
+
+
+File: sing.htm, Node: randomid, Next: randommat, Prev: genericid, Up:
random_lib
+
+D.2.5.2 randomid
+................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ randomid(id,[k,b]); id ideal/module, b,k integers
+
+*Return:*
+ ideal/module having k generators which are random linear
+ combinations of generators of id with coefficients in the interval
+ [-b,b] (default: b=30000, k=size(id))
+
+*Note:*
+ For performance reasons try small bound b in characteristic 0
+
+*Example:*
+ LIB "random.lib";
+ ring r=0,(x,y,z),dp;
+ randomid(maxideal(2),2,9);
+ ==> _[1]=-5x2-9xy+6y2-8xz-8yz+4z2
+ ==> _[2]=-9xy+2y2+xz+yz-z2
+ module m=[x,0,1],[0,y2,0],[y,0,z3];
+ show(randomid(m));
+ ==> // module, 3 generator(s)
+ ==> [1369x-11685y,-4481y2,-11685z3+1369]
+ ==> [-642x-13756y,25342y2,-13756z3-642]
+ ==> [2536x-6355y,8285y2,-6355z3+2536]
+
+
+File: sing.htm, Node: randommat, Next: sparseid, Prev: randomid, Up:
random_lib
+
+D.2.5.3 randommat
+.................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ randommat(n,m[,id,b]); n,m,b integers, id ideal
+
+*Return:*
+ nxm matrix, entries are random linear combinations of elements of
+ id and coefficients in [-b,b]
+ [default: (id,b) = (maxideal(1),30000)]
+
+*Note:*
+ For performance reasons try small bound b in char 0
+
+*Example:*
+ LIB "random.lib";
+ ring r=0,(x,y,z),dp;
+ matrix A=randommat(3,3,maxideal(2),9);
+ print(A);
+ ==> 9x2-2xy-8y2-9xz+yz+4z2, 9x2-4xy+y2-5xz+6yz-z2, 8x2+xy-9y2+2yz-8z2,
+ ==> -x2+5xy-8y2-7xz+4yz-3z2,x2+xy-4y2-xz+5z2,
5x2-8xy+8y2+6xz+yz+7z2,
+ ==> 4x2-5xy-6y2-4yz-5z2,
-4x2-6xy-4y2-8xz+3yz+5z2,2x2+3xy+y2+4xz-3yz+2z2
+ A=randommat(2,3);
+ print(A);
+ ==> 15276x+9897y+7526z, 6495x-24178y+11295z,-5745x-14754y+15979z,
+ ==> 20788x-28366y-20283z,24911x-10978y+3341z,12412x+11216y+15344z
+
+
+File: sing.htm, Node: sparseid, Next: sparsematrix, Prev: randommat, Up:
random_lib
+
+D.2.5.4 sparseid
+................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ sparseid(k,u[,o,p,b]); k,u,o,p,b integers
+
+*Return:*
+ ideal having k generators, each of degree d, u<=d<=o, p percent of
+ terms in degree d are 0, the remaining have random coefficients in
+ the interval [1,b], (default: o=u=d, p=75, b=30000)
+
+*Example:*
+ LIB "random.lib";
+ ring r = 0,(a,b,c,d),ds;
+ sparseid(2,3);"";
+ ==> _[1]=12773a3+24263a2c+20030abc+17904b2c+26359c3
+ ==> _[2]=24004a3+6204b2c+24170bc2+19505c2d+21962bd2
+ ==>
+ sparseid(3,0,4,90,9);
+ ==> _[1]=1+4a2+8b2c+3c3+4a3b+4a2b2+5abc2+3ac3
+ ==> _[2]=a+a2+7ab2+6a2c+3c3+5a3b+9ab3+2c4+3c3d+8ad3
+ ==> _[3]=5a+ab+2ac2+2b3c+8abcd
+
+
+File: sing.htm, Node: sparsematrix, Next: sparsemat, Prev: sparseid, Up:
random_lib
+
+D.2.5.5 sparsematrix
+....................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ sparsematrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers
+
+*Return:*
+ nxm matrix, about pe percent of the entries are 0, the remaining
+ are random polynomials of degree d, u<=d<=o, with pp percent of the
+ terms being 0, the remaining have random coefficients in the
+ interval [1,b] [default: (pe,u,pp,b) = (0,50,75,100)]
+
+*Example:*
+ LIB "random.lib";
+ ring r = 0,(a,b,c,d),dp;
+ // sparse matrix of sparse polys of degree <=2:
+ print(sparsematrix(3,4,2));"";
+ ==> 14ab+20bc+79cd+30b, 32a2+97bc+5b, 0, 0,
+ ==> 0, 0, 6c2+16b+64c+76,0,
+ ==> 17a2+30ab+94bc+19b+45d,88a2+44bc+13d2+31a,59ac, 0
+ ==>
+ // dense matrix of sparse linear forms:
+ print(sparsematrix(3,3,1,1,0,55,9));
+ ==> 9b+7c+8d,9b+9d,5a,
+ ==> 7c+d, a+6b, 2b+2d,
+ ==> 9a+5b+9c,2a+9d,2d
+
+
+File: sing.htm, Node: sparsemat, Next: sparsepoly, Prev: sparsematrix, Up:
random_lib
+
+D.2.5.6 sparsemat
+.................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ sparsemat(n,m[,p,b]); n,m,p,b integers
+
+*Return:*
+ nxm integer matrix, p percent of the entries are 0, the remaining
+ are random coefficients >=1 and <= b; [defaults: (p,b) = (75,1)]
+
+*Example:*
+ LIB "random.lib";
+ sparsemat(5,5);"";
+ ==> 0,0,0,0,0,
+ ==> 0,1,0,0,1,
+ ==> 0,0,0,1,0,
+ ==> 0,1,0,0,0,
+ ==> 0,1,0,1,1
+ ==>
+ sparsemat(5,5,95);"";
+ ==> 1,0,0,0,0,
+ ==> 0,0,0,0,0,
+ ==> 0,0,0,0,0,
+ ==> 0,0,0,0,0,
+ ==> 0,0,0,1,0
+ ==>
+ sparsemat(5,5,5);"";
+ ==> 1,1,1,1,1,
+ ==> 1,1,1,1,1,
+ ==> 1,1,1,1,1,
+ ==> 1,0,1,1,1,
+ ==> 1,1,1,1,0
+ ==>
+ sparsemat(5,5,50,100);
+ ==> 0,17,24,80,0,
+ ==> 0,13,30,45,0,
+ ==> 19,0,0,0,0,
+ ==> 93,0,23,0,69,
+ ==> 0,88,44,31,0
+
+
+File: sing.htm, Node: sparsepoly, Next: sparsetriag, Prev: sparsemat, Up:
random_lib
+
+D.2.5.7 sparsepoly
+..................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ sparsepoly(u[,o,p,b]); u,o,p,b integers
+
+*Return:*
+ poly having only terms in degree d, u<=d<=o, p percent of the terms
+ in degree d are 0, the remaining have random coefficients in [1,b),
+ (defaults: o=u=d, p=75, b=30000)
+
+*Example:*
+ LIB "random.lib";
+ ring r=0,(x,y,z),dp;
+ sparsepoly(5);"";
+ ==> 24263xy4+24170x4z+21962x3yz+26642xy3z+5664xy2z2+17904xz4
+ ==>
+ sparsepoly(3,5,90,9);
+ ==> 8x3z2+2y3z2+3xyz3+2xy3+yz3+xy2
+
+
+File: sing.htm, Node: sparsetriag, Next: triagmatrix, Prev: sparsepoly,
Up: random_lib
+
+D.2.5.8 sparsetriag
+...................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ sparsetriag(n,m[,p,b]); n,m,p,b integers
+
+*Return:*
+ nxm lower triagonal integer matrix, diagonal entries equal to 1,
+ about p percent of lower diagonal entries are 0, the remaining are
+ random integers >=1 and <= b; [defaults: (p,b) = (75,1)]
+
+*Example:*
+ LIB "random.lib";
+ sparsetriag(5,7);"";
+ ==> 1,0,0,0,0,0,0,
+ ==> 0,1,0,0,0,0,0,
+ ==> 0,1,1,0,0,0,0,
+ ==> 0,0,0,1,0,0,0,
+ ==> 1,1,0,0,1,0,0
+ ==>
+ sparsetriag(7,5,90);"";
+ ==> 1,0,0,0,0,
+ ==> 0,1,0,0,0,
+ ==> 0,1,1,0,0,
+ ==> 0,0,0,1,0,
+ ==> 0,0,0,0,1,
+ ==> 0,0,0,1,0,
+ ==> 0,1,0,0,0
+ ==>
+ sparsetriag(5,5,0);"";
+ ==> 1,0,0,0,0,
+ ==> 1,1,0,0,0,
+ ==> 1,1,1,0,0,
+ ==> 1,1,1,1,0,
+ ==> 1,1,1,1,1
+ ==>
+ sparsetriag(5,5,50,100);
+ ==> 1,0,0,0,0,
+ ==> 73,1,0,0,0,
+ ==> 0,79,1,0,0,
+ ==> 14,0,0,1,0,
+ ==> 0,48,23,0,1
+
+
+File: sing.htm, Node: triagmatrix, Next: randomLast, Prev: sparsetriag,
Up: random_lib
+
+D.2.5.9 triagmatrix
+...................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ triagmatrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers
+
+*Return:*
+ nxm lower triagonal matrix, diagonal entries equal to 1, about p
+ percent of lower diagonal entries are 0, the remaining are random
+ polynomials of degree d, u<=d<=o, with pp percent of the terms
+ being 0, the remaining have random coefficients in the interval
+ [1,b] [default: (pe,u,pp,b) = (0,50,75,100)]
+
+*Example:*
+ LIB "random.lib";
+ ring r = 0,(a,b,c,d),dp;
+ // sparse triagonal matrix of sparse polys of degree <=2:
+ print(triagmatrix(3,4,2));"";
+ ==> 1, 0,0,0,
+ ==> 52ac+54cd+14c, 1,0,0,
+ ==> 17a2+19b2+45ac+94bc+50b+87c+54d+21,0,1,0
+ ==>
+ // dense triagonal matrix of sparse linear forms:
+ print(triagmatrix(3,3,1,1,0,55,9));
+ ==> 1, 0, 0,
+ ==> 7a+8d, 1, 0,
+ ==> 9b+7c+4d,7b+9d,1
+
+
+File: sing.htm, Node: randomLast, Next: randomBinomial, Prev: triagmatrix,
Up: random_lib
+
+D.2.5.10 randomLast
+...................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ randomLast(b); b int
+
+*Return:*
+ ideal = maxideal(1), but the last variable is exchanged by a random
+ linear combination of all variables, with coefficients in the
+ interval [-b,b].
+
+*Example:*
+ LIB "random.lib";
+ ring r = 0,(x,y,z),lp;
+ ideal i = randomLast(10);
+ i;
+ ==> i[1]=x
+ ==> i[2]=y
+ ==> i[3]=-x+z
+
+
+File: sing.htm, Node: randomBinomial, Prev: randomLast, Up: random_lib
+
+D.2.5.11 randomBinomial
+.......................
+
+Procedure from library `random.lib' (*note random_lib::).
+
+*Usage:*
+ randomBinomial(k,u[,o,b]); k,u,o,b integers
+
+*Return:*
+ binomial ideal, k homogeneous generators of degree d, u<=d<=o, with
+ randomly chosen monomials and coefficients in the interval [-b,b]
+ (default: u=o, b=10).
+
+*Example:*
+ LIB "random.lib";
+ ring r = 0,(x,y,z),lp;
+ ideal i = randomBinomial(4,5,6);
+ i;
+ ==> i[1]=-x4z-xz4
+ ==> i[2]=8x2y3+8xy3z
+ ==> i[3]=-4x2y2z2-4xy5
+ ==> i[4]=5x3yz2+5xz5
+
+
+File: sing.htm, Node: ring_lib, Prev: random_lib, Up: General purpose
+
+D.2.6 ring_lib
+--------------
+
+*Library:*
+ ring.lib
+
+*Purpose:*
+ Manipulating Rings and Maps
+
+*Procedures:*
+
+* Menu:
+
+* changechar:: make a copy R of basering [ring r] with new char c
+* changeord:: make a copy R of basering [ring r] with new ord o
+* changevar:: make a copy R of basering [ring r] with new vars v
+* defring:: define a ring R in specified char c, n vars v, ord o
+* defrings:: define ring Sn in n vars, char 32003 [p], ord ds
+* defringp:: define ring Pn in n vars, char 32003 [p], ord dp
+* extendring:: extend given ring by n vars v, ord o and name it R
+* fetchall:: fetch all objects of ring R to basering
+* imapall:: imap all objects of ring R to basering
+* mapall:: map all objects of ring R via ideal i to basering
+* ord_test:: test whether ordering of R is global, local or mixed
+* ringtensor:: create ring R, tensor product of rings s,t,...
+* ringweights:: intvec of weights of ring variables of ring r
+
+
+File: sing.htm, Node: changechar, Next: changeord, Up: ring_lib
+
+D.2.6.1 changechar
+..................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ changechar(newr,c[,r]); newr,c=strings, r=ring
+
+*Create:*
+ create a new ring with name `newr` and make it the basering if r is
+ an existing ring [default: r=basering].
+ The new ring differs from the old ring only in the characteristic.
+ If, say, (newr,c) = ("R","0,A") and the ring r exists, the new
+ basering will have name R, characteristic 0 and one parameter A.
+
+*Return:*
+ No return value
+
+*Note:*
+ Works for qrings if map from old_char to new_char is implemented
+ This proc uses 'execute' or calls a procedure using 'execute'. If
+ you use it in your own proc, let the local names of your proc start
+ with @.
+
+*Example:*
+ LIB "ring.lib";
+ ring r=0,(x,y,u,v),(dp(2),ds);
+ changechar("R","2,A"); R;"";
+ ==> // basering is now R
+ ==> // characteristic : 2
+ ==> // 1 parameter : A
+ ==> // minpoly : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names x y
+ ==> // block 2 : ordering ds
+ ==> // : names u v
+ ==> // block 3 : ordering C
+ ==>
+ changechar("R1","32003",R); R1;
+ ==> // basering is now R1
+ ==> // characteristic : 32003
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names x y
+ ==> // block 2 : ordering ds
+ ==> // : names u v
+ ==> // block 3 : ordering C
+ kill R,R1;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::R,Top::R1;
+ } else {
+ kill Ring::R,Ring::R1;
+ }
+ }
+
+
+File: sing.htm, Node: changeord, Next: changevar, Prev: changechar, Up:
ring_lib
+
+D.2.6.2 changeord
+.................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ changeord(newr,o[,r]); newr,o=strings, r=ring/qring
+
+*Create:*
+ create a new ring with name `newr` and make it the basering if r is
+ an existing ring/qring [default: r=basering].
+ The new ring differs from the old ring only in the ordering. If,
+ say, (newr,o) = ("R","wp(2,3),dp") and the ring r exists and has
+ >=3 variables, the new basering will have name R and ordering
+ wp(2,3),dp.
+
+*Return:*
+ No return value
+
+*Note:*
+ This proc uses 'execute' or calls a procedure using 'execute'. If
+ you use it in your own proc, let the local names of your proc start
+ with @.
+
+*Example:*
+ LIB "ring.lib";
+ ring r=0,(x,y,u,v),(dp(2),ds);
+ changeord("R","wp(2,3),dp"); R; "";
+ ==> // basering is now R
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering wp
+ ==> // : names x y
+ ==> // : weights 2 3
+ ==> // block 2 : ordering dp
+ ==> // : names u v
+ ==> // block 3 : ordering C
+ ==>
+ ideal i = x^2,y^2-u^3,v;
+ qring Q = std(i);
+ changeord("Q'","lp",Q); Q';
+ ==> // basering is now Q'
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering lp
+ ==> // : names x y u v
+ ==> // block 2 : ordering C
+ ==> // quotient ring from ideal
+ ==> _[1]=v
+ ==> _[2]=x2
+ ==> _[3]=y2-u3
+ kill R,Q,Q';
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::R,Top::Q';
+ } else {
+ kill Ring::R,Ring::Q';
+ }
+ }
+
+
+File: sing.htm, Node: changevar, Next: defring, Prev: changeord, Up:
ring_lib
+
+D.2.6.3 changevar
+.................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ changevar(newr,vars[,r]); newr,vars=strings, r=ring/qring
+
+*Create:*
+ creates a new ring with name `newr` and makes it the basering if r
+ is an existing ring/qring [default: r=basering].
+ The new ring differs from the old ring only in the variables. If,
+ say, (newr,vars) = ("R","t()") and the ring r exists and has n
+ variables, the new basering will have name R and variables
+ t(1),...,t(n).
+ If vars = "a,b,c,d", the new ring will have the variables a,b,c,d.
+
+*Return:*
+ No return value
+
+*Note:*
+ This procedure is useful in connection with the procedure
+ ringtensor, when a conflict between variable names must be avoided.
+ This proc uses 'execute' or calls a procedure using 'execute'. If
+ you use it in your own proc, let the local names of your proc start
+ with @.
+
+*Example:*
+ LIB "ring.lib";
+ ring r=0,(x,y,u,v),(dp(2),ds);
+ ideal i = x^2,y^2-u^3,v;
+ qring Q = std(i);
+ setring(r);
+ changevar("R","A()"); R; "";
+ ==> // basering is now R
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names A(1) A(2)
+ ==> // block 2 : ordering ds
+ ==> // : names A(3) A(4)
+ ==> // block 3 : ordering C
+ ==>
+ changevar("Q'","a,b,c,d",Q); Q';
+ ==> // basering is now Q'
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names a b
+ ==> // block 2 : ordering ds
+ ==> // : names c d
+ ==> // block 3 : ordering C
+ ==> // quotient ring from ideal
+ ==> _[1]=d
+ ==> _[2]=a2
+ ==> _[3]=b2-c3
+ kill R,Q,Q';
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::R,Top::Q';
+ } else {
+ kill Ring::R,Ring::Q';
+ }
+ }
+
+
+File: sing.htm, Node: defring, Next: defrings, Prev: changevar, Up:
ring_lib
+
+D.2.6.4 defring
+...............
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ defring(s1,s2,n,s3,s4); s1..s4=strings, n=integer
+
+*Create:*
+ Define a ring with name 's1', characteristic 's2', ordering 's4'
+ and n variables with names derived from s3 and make it the
+ basering. If s3 is a single letter, say s3="a", and if n<=26 then
+ a and the following n-1 letters from the alphabet (cyclic order)
+ are taken as variables. If n>26 or if s3 is a single letter
+ followed by (, say s3="T(", the variables are T(1),...,T(n).
+
+*Return:*
+ No return value
+
+*Note:*
+ This proc is useful for defining a ring in a procedure. This proc
+ uses 'execute' or calls a procedure using 'execute'. If you use it
+ in your own proc, let the local names of your proc start with @.
+
+*Example:*
+ LIB "ring.lib";
+ defring("r","0",5,"u","ls"); r; "";
+ ==> // basering is now: r
+ ==> // characteristic : 0
+ ==> // number of vars : 5
+ ==> // block 1 : ordering ls
+ ==> // : names u v w x y
+ ==> // block 2 : ordering C
+ ==>
+ defring("R","2,A",10,"x(","dp(3),ws(1,2,3),ds"); R;
+ ==> // basering is now: R
+ ==> // characteristic : 2
+ ==> // 1 parameter : A
+ ==> // minpoly : 0
+ ==> // number of vars : 10
+ ==> // block 1 : ordering dp
+ ==> // : names x(1) x(2) x(3)
+ ==> // block 2 : ordering ws
+ ==> // : names x(4) x(5) x(6)
+ ==> // : weights 1 2 3
+ ==> // block 3 : ordering ds
+ ==> // : names x(7) x(8) x(9) x(10)
+ ==> // block 4 : ordering C
+ kill r,R;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::r,Top::R;
+ } else {
+ kill Ring::r,Ring::R;
+ }
+ }
+
+
+File: sing.htm, Node: defrings, Next: defringp, Prev: defring, Up: ring_lib
+
+D.2.6.5 defrings
+................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ defrings(n,[p]); n,p integers
+
+*Create:*
+ Defines a ring with name Sn, characteristic p, ordering ds and n
+ variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes
+ it the basering (default: p=32003)
+
+*Return:*
+ No return value
+
+*Example:*
+ LIB "ring.lib";
+ defrings(5,0); S5; "";
+ ==> // basering is now: ring S5=0,(x,y,z,a,b),ds;
+ ==> // characteristic : 0
+ ==> // number of vars : 5
+ ==> // block 1 : ordering ds
+ ==> // : names x y z a b
+ ==> // block 2 : ordering C
+ ==>
+ defrings(30); S30;
+ ==> // basering is now: ring S30=32003,x(1..30),ds;
+ ==> // characteristic : 32003
+ ==> // number of vars : 30
+ ==> // block 1 : ordering ds
+ ==> // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7)
x(8) x(\
+ 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20)
x(21\
+ ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30)
+ ==> // block 2 : ordering C
+ kill S5, S30;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::S5,Top::S30;
+ } else {
+ kill Ring::S5,Ring::S30;
+ }
+ }
+
+
+File: sing.htm, Node: defringp, Next: extendring, Prev: defrings, Up:
ring_lib
+
+D.2.6.6 defringp
+................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ defringp(n,[p]); n,p=integers
+
+*Create:*
+ defines a ring with name Pn, characteristic p, ordering dp and n
+ variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes
+ it the basering (default: p=32003)
+
+*Return:*
+ No return value
+
+*Example:*
+ LIB "ring.lib";
+ defringp(5,0); P5; "";
+ ==> // basering is now: ring P5=0,(x,y,z,a,b),dp;
+ ==> // characteristic : 0
+ ==> // number of vars : 5
+ ==> // block 1 : ordering dp
+ ==> // : names x y z a b
+ ==> // block 2 : ordering C
+ ==>
+ defringp(30); P30;
+ ==> // basering is now: ring P30=32003,x(1..30),dp;
+ ==> // characteristic : 32003
+ ==> // number of vars : 30
+ ==> // block 1 : ordering dp
+ ==> // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7)
x(8) x(\
+ 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20)
x(21\
+ ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30)
+ ==> // block 2 : ordering C
+ kill P5, P30;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::P5,Top::P30;
+ } else {
+ kill Ring::P5,Ring::P30;
+ }
+ }
+
+
+File: sing.htm, Node: extendring, Next: fetchall, Prev: defringp, Up:
ring_lib
+
+D.2.6.7 extendring
+..................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ extendring(na,n,va,o[iv,i,r]); na,va,o=strings,
+ n,i=integers, r=ring, iv=intvec of positive integers or iv=0
+
+*Create:*
+ Define a ring with name `na` which extends the ring r by adding n
+ new variables in front of [after, if i!=0] the old variables and
+ make it the basering [default: (i,r)=(0,basering)].
+ - The characteristic is the characteristic of r.
+ - The new vars are derived from va. If va is a single letter, say
+ va="T", and if n<=26 then T and the following n-1 letters from
+ T..Z..T (resp. T(1..n) if n>26) are taken as additional variables.
+ If va is a single letter followed by (, say va="x(", the new
+ variables are x(1),...,x(n).
+ - The ordering is the product ordering between the ordering of r
+ and an ordering derived from `o` [and iv].
+ - If o contains a 'c' or a 'C' in front resp. at the end this is
+ taken for the whole ordering in front resp. at the end. If o does
+ not contain a 'c' or a 'C' the same rule applies to ordstr(r).
+ - If no intvec iv is given, or if iv=0, o may be any allowed
+ ordstr, like "ds" or "dp(2),wp(1,2,3),Ds(2)" or "ds(a),dp(b),ls" if
+ a and b are globally (!) defined integers and if a+b+1<=n. If,
+ however, a and b are local to a proc calling extendring, the intvec
+ iv must be used to let extendring know the values of a and b
+ - If an intvec iv !=0 is given, iv[1],iv[2],... is taken for the
+ 1st, 2nd,... block of o, if o contains no substring "w" or "W" i.e.
+ no weighted ordering (in the above case o="ds,dp,ls" and iv=a,b).
+ If o contains a weighted ordering (only one (!) weighted block is
+ allowed) iv[1] is taken as size for the weight-vector, the next
+ iv[1] values of iv are taken as weights and the remaining values of
+ iv as block-size for the remaining non-weighted blocks. e.g.
+ o="dp,ws,Dp,ds", iv=3,2,3,4,2,5 creates the ordering
+ dp(2),ws(2,3,4),Dp(5),ds
+
+*Return:*
+ No return value
+
+*Note:*
+ This proc is useful for adding deformation parameters.
+ This proc uses 'execute' or calls a procedure using 'execute'. If
+ you use it in your own proc, let the local names of your proc start
+ with @ (see the file HelpForProc)
+
+*Example:*
+ LIB "ring.lib";
+ ring r=0,(x,y,z),ds;
+ show(r);"";
+ ==> // ring: (0),(x,y,z),(ds(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==>
+ //blocksize is derived from no of vars:
+ int t=5;
+ extendring("R1",t,"a","dp"); //t global: "dp" -> "dp(5)"
+ ==> // basering is now R1
+ show(R1); "";
+ ==> // ring: (0),(a,b,c,d,e,x,y,z),(dp(5),ds(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==>
+ extendring("R2",4,"T(","c,dp",1,r); //"dp" -> "c,..,dp(4)"
+ ==> // basering is now R2
+ show(R2);"";
+ ==> // ring: (0),(x,y,z,T(1),T(2),T(3),T(4)),(c,ds(3),dp(4));
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==>
+ //no intvec given, blocksize given: given blocksize is used:
+ extendring("R3",4,"T(","dp(2)",0,r); // "dp(2)" -> "dp(2)"
+ ==> // basering is now R3
+ show(R3);"";
+ ==> // ring: (0),(T(1),T(2),T(3),T(4),x,y,z),(dp(2),ds(5),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==>
+ //intvec given: weights and blocksize is derived from given intvec
+ //(no specification of a blocksize in the given ordstr is allowed!)
+ //if intvec does not cover all given blocks, the last block is used
+ //for the remaining variables, if intvec has too many components,
+ //the last ones are ignored
+ intvec v=3,2,3,4,1,3;
+ extendring("R4",10,"A","ds,ws,Dp,dp",v,0,r);
+ ==> // basering is now R4
+ //v covers 3 blocks: v[1] (=3) : no of components of ws
+ //next v[1] values (=v[2..4]) give weights
+ //remaining components of v are used for the remaining blocks
+ show(R4);
+ ==> // ring:
(0),(A,B,C,D,E,F,G,H,I,J,x,y,z),(ds(1),ws(2,3,4),Dp(3),dp(3),ds(\
+ 3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ kill r,R1,R2,R3,R4;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::R1,Top::R2,Top::R3,Top::R4;
+ } else {
+ kill Ring::R1,Ring::R2,Ring::R3,Ring::R4;
+ }
+ }
+
+
+File: sing.htm, Node: fetchall, Next: imapall, Prev: extendring, Up:
ring_lib
+
+D.2.6.8 fetchall
+................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ fetchall(R[,s]); R=ring/qring, s=string
+
+*Create:*
+ fetch all objects of ring R (of type
+ poly/ideal/vector/module/number/ matrix) into the basering.
+ If no 3rd argument is present, the names are the same as in R. If,
+ say, f is a poly in R and the 3rd argument is the string "R", then
+ f is mapped to f_R etc.
+
+*Return:*
+ no return value
+
+*Note:*
+ As fetch, this procedure maps the 1st, 2nd, ... variable of R to
+ the 1st, 2nd, ... variable of the basering.
+ The 3rd argument is useful in order to avoid conflicts of names,
+ the empty string is allowed
+
+*Caution:*
+ fetchall does not work inside a procedure.
+ It does not work if R contains a map.
+
+*Example:*
+ LIB "ring.lib";
+ // The example is not shown since fetchall does not work in a procedure;
+ // (and hence not in the example procedure). Try the following commands:
+ // ring R=0,(x,y,z),dp;
+ // ideal j=x,y2,z2;
+ // matrix M[2][3]=1,2,3,x,y,z;
+ // j; print(M);
+ // ring S=0,(a,b,c),ds;
+ // fetchall(R); //map from R to S: x->a, y->b, z->c;
+ // names(S);
+ // j; print(M);
+ // fetchall(S,"1"); //identity map of S: copy objects, change names
+ // names(S);
+ // kill R,S;
+
+
+File: sing.htm, Node: imapall, Next: mapall, Prev: fetchall, Up: ring_lib
+
+D.2.6.9 imapall
+...............
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ imapall(R[,s]); R=ring/qring, s=string
+
+*Create:*
+ map all objects of ring R (of type poly/ideal/vector/module/number/
+ matrix) into the basering, by applying imap to all objects of R.
+ If no 3rd argument is present, the names are the same as in R. If,
+ say, f is a poly in R and the 3rd argument is the string "R", then
+ f is mapped to f_R etc.
+
+*Return:*
+ no return value
+
+*Note:*
+ As imap, this procedure maps the variables of R to the variables
+ with the same name in the basering, the other variables are mapped
+ to 0. The 3rd argument is useful in order to avoid conflicts of
+ names, the empty string is allowed
+
+*Caution:*
+ imapall does not work inside a procedure
+ It does not work if R contains a map
+
+*Example:*
+ LIB "ring.lib";
+ // The example is not shown since imapall does not work in a procedure
+ // (and hence not in the example procedure). Try the following commands:
+ // ring R=0,(x,y,z,u),dp;
+ // ideal j=x,y,z,u2+ux+z;
+ // matrix M[2][3]=1,2,3,x,y,uz;
+ // j; print(M);
+ // ring S=0,(a,b,c,x,z,y),ds;
+ // imapall(R); //map from R to S: x->x, y->y, z->z, u->0
+ // names(S);
+ // j; print(M);
+ // imapall(S,"1"); //identity map of S: copy objects, change names
+ // names(S);
+ // kill R,S;
+
+
+File: sing.htm, Node: mapall, Next: ord_test, Prev: imapall, Up: ring_lib
+
+D.2.6.10 mapall
+...............
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ mapall(R,i[,s]); R=ring/qring, i=ideal of basering, s=string
+
+*Create:*
+ map all objects of ring R (of type poly/ideal/vector/module/number/
+ matrix, map) into the basering, by mapping the j-th variable of R
+ to the j-th generator of the ideal i. If no 3rd argument is
+ present, the names are the same as in R. If, say, f is a poly in R
+ and the 3rd argument is the string "R", then f is mapped to f_R
+ etc.
+
+*Return:*
+ no return value.
+
+*Note:*
+ This procedure has the same effect as defining a map, say psi, by
+ map psi=R,i; and then applying psi to all objects of R. In
+ particular, maps from R to some ring S are composed with psi,
+ creating thus a map from the basering to S.
+ mapall may be combined with copyring to change vars for all
+ objects. The 3rd argument is useful in order to avoid conflicts of
+ names, the empty string is allowed.
+
+*Caution:*
+ mapall does not work inside a procedure.
+
+*Example:*
+ LIB "ring.lib";
+ // The example is not shown since mapall does not work in a procedure
+ // (and hence not in the example procedure). Try the following commands:
+ // ring R=0,(x,y,z),dp;
+ // ideal j=x,y,z;
+ // matrix M[2][3]=1,2,3,x,y,z;
+ // map phi=R,x2,y2,z2;
+ // ring S=0,(a,b,c),ds;
+ // ideal i=c,a,b;
+ // mapall(R,i); //map from R to S: x->c, y->a, z->b
+ // names(S);
+ // j; print(M); phi; //phi maps R to S: x->c2, y->a2, z->b2
+ // ideal i1=a2,a+b,1;
+ // mapall(R,i1,""); //map from R to S: x->a2, y->a+b, z->1
+ // names(S);
+ // j_; print(M_); phi_;
+ // changevar("T","x()",R); //change vars in R and call result T
+ // mapall(R,maxideal(1)); //identity map from R to T
+ // names(T);
+ // j; print(M); phi;
+ // kill R,S,T;
+
+
+File: sing.htm, Node: ord_test, Next: ringtensor, Prev: mapall, Up:
ring_lib
+
+D.2.6.11 ord_test
+.................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ ord_test(r); r ring
+
+*Return:*
+ int 1 (resp. -1, resp. 0) if ordering of r is global (resp. local,
+ resp. mixed)
+
+*Example:*
+ LIB "ring.lib";
+ ring R = 0,(x,y),dp;
+ ring S = 0,(u,v),ls;
+ ord_test(R);
+ ==> 1
+ ord_test(S);
+ ==> -1
+ ord_test(R+S);
+ ==> 0
+
+
+File: sing.htm, Node: ringtensor, Next: ringweights, Prev: ord_test, Up:
ring_lib
+
+D.2.6.12 ringtensor
+...................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ ringtensor(s,r1,r2,...); s=string, r1,r2,...=rings
+
+*Create:*
+ A new base ring with name `s` if r1,r2,... are existing rings. If,
+ say, s = "R" and the rings r1,r2,... exist, the new ring will have
+ name R, variables from all rings r1,r2,... and as monomial ordering
+ the block (product) ordering of r1,r2,... . Hence, R is the tensor
+ product of the rings r1,r2,... with ordering matrix equal to the
+ direct sum of the ordering matrices of r1,r2,...
+
+*Return:*
+ no return value
+
+*Note:*
+ The characteristic of the new ring will be that of r1. The names of
+ variables in the rings r1,r2,... should differ (if a name, say x,
+ occurs in r1 and r2, then, in the new ring r, x always refers to
+ the variable with name x in r1, there is no access to x in r2).
+ The procedure works also for quotient rings ri, if the
+ characteristic of ri is compatible with the characteristic of r1
+ (i.e. if imap from ri to r1 is implemented)
+ This proc uses 'execute' or calls a procedure using 'execute'. If
+ you use it in your own proc, let the local names of your proc start
+ with @ (see the file HelpForProc)
+
+*Example:*
+ LIB "ring.lib";
+ ring r=32003,(x,y,u,v),dp;
+ ring s=0,(a,b,c),wp(1,2,3);
+ ring t=0,x(1..5),(c,ls);
+ ringtensor("R",r,s,t);
+ ==> // basering is now R
+ type R;
+ ==> // R [0] *ring
+ ==> // characteristic : 32003
+ ==> // number of vars : 12
+ ==> // block 1 : ordering dp
+ ==> // : names x y u v
+ ==> // block 2 : ordering wp
+ ==> // : names a b c
+ ==> // : weights 1 2 3
+ ==> // block 3 : ordering ls
+ ==> // : names x(1) x(2) x(3) x(4) x(5)
+ ==> // block 4 : ordering C
+ setring s;
+ ideal i = a2+b3+c5;
+ changevar("S","x,y,z"); //change vars of sand make S the basering
+ ==> // basering is now S
+ qring qS =std(fetch(s,i)); //create qring of S mod i (mapped to S)
+ changevar("T","d,e,f,g,h",t); //change vars of t and make T the basering
+ ==> // basering is now T
+ qring qT=std(d2+e2-f3); //create qring of T mod d2+e2-f3
+ ringtensor("Q",s,qS,t,qT);
+ ==> // basering is now Q
+ type Q;
+ ==> // Q [0] *qring
+ ==> // characteristic : 0
+ ==> // number of vars : 16
+ ==> // block 1 : ordering wp
+ ==> // : names a b c
+ ==> // : weights 1 2 3
+ ==> // block 2 : ordering wp
+ ==> // : names x y z
+ ==> // : weights 1 2 3
+ ==> // block 3 : ordering ls
+ ==> // : names x(1) x(2) x(3) x(4) x(5)
+ ==> // block 4 : ordering ls
+ ==> // : names d e f g h
+ ==> // block 5 : ordering C
+ ==> // quotient ring from ideal
+ ==> _[1]=f3-e2-d2
+ ==> _[2]=z5+y3+x2
+ kill R,Q,S,T;
+ if(system("with","Namespaces")) {
+ if( nameof(Current) == "Ring" ) {
+ kill Top::R,Top::Q,Top::S,Top::T;
+ } else {
+ kill Ring::R,Ring::Q,Ring::S,Ring::T;
+ }
+ }
+
+
+File: sing.htm, Node: ringweights, Prev: ringtensor, Up: ring_lib
+
+D.2.6.13 ringweights
+....................
+
+Procedure from library `ring.lib' (*note ring_lib::).
+
+*Usage:*
+ ringweights(P); P=name of an existing ring (true name, not a
+ string)
+
+*Return:*
+ intvec consisting of the weights of the variables of P, as they
+ appear when typing P;.
+
+*Note:*
+ This is useful when enlarging P but keeping the weights of the old
+ variables.
+
+*Example:*
+ LIB "ring.lib";
+ ring r0 = 0,(x,y,z),dp;
+ ringweights(r0);
+ ==> 1,1,1
+ ring r1 = 0,x(1..5),(ds(3),wp(2,3));
+ ringweights(r1);"";
+ ==> 1,1,1,2,3
+ ==>
+ // an example for enlarging the ring, keeping the first weights:
+ intvec v = ringweights(r1),6,2,3,4,5;
+ ring R = 0,x(1..10),(a(v),dp);
+ ordstr(R);
+ ==> a(1,1,1,2,3,6,2,3,4,5),dp(10),C
+
+
+File: sing.htm, Node: Linear algebra, Next: Commutative algebra, Prev:
General purpose, Up: SINGULAR libraries
+
+D.3 Linear algebra
+==================
+
+* Menu:
+
+* matrix_lib:: procedures for matrix operations
+* linalg_lib:: procedures for algorithmic linear algebra
+
+
+File: sing.htm, Node: matrix_lib, Next: linalg_lib, Prev: Linear algebra,
Up: Linear algebra
+
+D.3.1 matrix_lib
+----------------
+
+*Library:*
+ matrix.lib
+
+*Purpose:*
+ Elementary Matrix Operations
+
+*Procedures:*
+
+* Menu:
+
+* compress:: matrix, zero columns from A deleted
+* concat:: matrix, concatenation of matrices A1,A2,...
+* diag:: matrix, nxn diagonal matrix with entries poly p
+* dsum:: matrix, direct sum of matrices A1,A2,...
+* flatten:: ideal, generated by entries of matrix A
+* genericmat:: generic nxm matrix [entries from id]
+* is_complex:: 1 if list c is a complex, 0 if not
+* outer:: matrix, outer product of matrices A and B
+* power:: matrix/intmat, n-th power of matrix/intmat A
+* skewmat:: generic skew-symmetric nxn matrix [entries from id]
+* submat:: submatrix of A with rows/cols specified by intvec r/c
+* symmat:: generic symmetric nxn matrix [entries from id]
+* tensor:: matrix, tensor product of matrices A nd B
+* unitmat:: unit square matrix of size n
+* gauss_col:: transform a matrix into col-reduced Gauss normal form
+* gauss_row:: transform a matrix into row-reduced Gauss normal form
+* addcol:: add p*(c1-th col) to c2-th column of matrix A, p poly
+* addrow:: add p*(r1-th row) to r2-th row of matrix A, p poly
+* multcol:: multiply c-th column of A with poly p
+* multrow:: multiply r-th row of A with poly p
+* permcol:: permute i-th and j-th columns
+* permrow:: permute i-th and j-th rows
+* rowred:: reduction of matrix A with elementary row-operations
+* colred:: reduction of matrix A with elementary col-operations
+* rm_unitrow:: remove unit rows and associated columns of A
+* rm_unitcol:: remove unit columns and associated rows of A
+* headStand:: A[n-i+1,m-j+1]=headStand(A[i,j])
+
+
+File: sing.htm, Node: compress, Next: concat, Up: matrix_lib
+
+D.3.1.1 compress
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ compress(A); A matrix/ideal/module/intmat/intvec
+
+*Return:*
+ same type, zero columns/generators from A deleted
+ (if A=intvec, zero elements are deleted)
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=0,(x,y,z),ds;
+ matrix A[3][4]=1,0,3,0,x,0,z,0,x2,0,z2,0;
+ print(A);
+ ==> 1, 0,3, 0,
+ ==> x, 0,z, 0,
+ ==> x2,0,z2,0
+ print(compress(A));
+ ==> 1, 3,
+ ==> x, z,
+ ==> x2,z2
+ module m=module(A); show(m);
+ ==> // module, 4 generator(s)
+ ==> [1,x,x2]
+ ==> [0]
+ ==> [3,z,z2]
+ ==> [0]
+ show(compress(m));
+ ==> // module, 2 generator(s)
+ ==> [1,x,x2]
+ ==> [3,z,z2]
+ intmat B[3][4]=1,0,3,0,4,0,5,0,6,0,7,0;
+ compress(B);
+ ==> 1,3,
+ ==> 4,5,
+ ==> 6,7
+ intvec C=0,0,1,2,0,3;
+ compress(C);
+ ==> 1,2,3
+
+
+File: sing.htm, Node: concat, Next: diag, Prev: compress, Up: matrix_lib
+
+D.3.1.2 concat
+..............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ concat(A1,A2,..); A1,A2,... matrices
+
+*Return:*
+ matrix, concatenation of A1,A2,.... Number of rows of result matrix
+ is max(nrows(A1),nrows(A2),...)
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=0,(x,y,z),ds;
+ matrix A[3][3]=1,2,3,x,y,z,x2,y2,z2;
+ matrix B[2][2]=1,0,2,0; matrix C[1][4]=4,5,x,y;
+ print(A);
+ ==> 1, 2, 3,
+ ==> x, y, z,
+ ==> x2,y2,z2
+ print(B);
+ ==> 1,0,
+ ==> 2,0
+ print(C);
+ ==> 4,5,x,y
+ print(concat(A,B,C));
+ ==> 1, 2, 3, 1,0,4,5,x,y,
+ ==> x, y, z, 2,0,0,0,0,0,
+ ==> x2,y2,z2,0,0,0,0,0,0
+
+
+File: sing.htm, Node: diag, Next: dsum, Prev: concat, Up: matrix_lib
+
+D.3.1.3 diag
+............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ diag(p,n); p poly, n integer
+ diag(A); A matrix
+
+*Return:*
+ diag(p,n): diagonal matrix, p times unit matrix of size n.
+ diag(A) : n*m x n*m diagonal matrix with entries all the entries of
+ the nxm matrix A, taken from the 1st row, 2nd row etc of A
+
+*Example:*
+ LIB "matrix.lib";
+ ring r = 0,(x,y,z),ds;
+ print(diag(xy,4));
+ ==> xy,0, 0, 0,
+ ==> 0, xy,0, 0,
+ ==> 0, 0, xy,0,
+ ==> 0, 0, 0, xy
+ matrix A[3][2] = 1,2,3,4,5,6;
+ print(A);
+ ==> 1,2,
+ ==> 3,4,
+ ==> 5,6
+ print(diag(A));
+ ==> 1,0,0,0,0,0,
+ ==> 0,2,0,0,0,0,
+ ==> 0,0,3,0,0,0,
+ ==> 0,0,0,4,0,0,
+ ==> 0,0,0,0,5,0,
+ ==> 0,0,0,0,0,6
+
+
+File: sing.htm, Node: dsum, Next: flatten, Prev: diag, Up: matrix_lib
+
+D.3.1.4 dsum
+............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ dsum(A1,A2,..); A1,A2,... matrices
+
+*Return:*
+ matrix, direct sum of A1,A2,...
+
+*Example:*
+ LIB "matrix.lib";
+ ring r = 0,(x,y,z),ds;
+ matrix A[3][3] = 1,2,3,4,5,6,7,8,9;
+ matrix B[2][2] = 1,x,y,z;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(B);
+ ==> 1,x,
+ ==> y,z
+ print(dsum(A,B));
+ ==> 1,2,3,0,0,
+ ==> 4,5,6,0,0,
+ ==> 7,8,9,0,0,
+ ==> 0,0,0,1,x,
+ ==> 0,0,0,y,z
+
+
+File: sing.htm, Node: flatten, Next: genericmat, Prev: dsum, Up: matrix_lib
+
+D.3.1.5 flatten
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ flatten(A); A matrix
+
+*Return:*
+ ideal, generated by all entries from A
+
+*Example:*
+ LIB "matrix.lib";
+ ring r = 0,(x,y,z),ds;
+ matrix A[2][3] = 1,2,x,y,z,7;
+ print(A);
+ ==> 1,2,x,
+ ==> y,z,7
+ flatten(A);
+ ==> _[1]=1
+ ==> _[2]=2
+ ==> _[3]=x
+ ==> _[4]=y
+ ==> _[5]=z
+ ==> _[6]=7
+
+
+File: sing.htm, Node: genericmat, Next: is_complex, Prev: flatten, Up:
matrix_lib
+
+D.3.1.6 genericmat
+..................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ genericmat(n,m[,id]); n,m=integers, id=ideal
+
+*Return:*
+ nxm matrix, with entries from id.
+
+*Note:*
+ if id has less than nxm elements, the matrix is filled with 0's,
+ (default: id=maxideal(1)).
+ genericmat(n,m); creates the generic nxm matrix
+
+*Example:*
+ LIB "matrix.lib";
+ ring R = 0,x(1..16),lp;
+ print(genericmat(3,3)); // the generic 3x3 matrix
+ ==> x(1),x(2),x(3),
+ ==> x(4),x(5),x(6),
+ ==> x(7),x(8),x(9)
+ ring R1 = 0,(a,b,c,d),dp;
+ matrix A = genericmat(3,4,maxideal(1)^3);
+ print(A);
+ ==> a3, a2b,a2c,a2d,
+ ==> ab2,abc,abd,ac2,
+ ==> acd,ad2,b3, b2c
+ int n,m = 3,2;
+ ideal i = ideal(randommat(1,n*m,maxideal(1),9));
+ print(genericmat(n,m,i)); // matrix of generic linear forms
+ ==> 4a-8b-2c-3d,-a+b-4c+5d,
+ ==> -8a-9b+c+7d,a-9b+9c+4d,
+ ==> 6a-5b+9c, 2a+8c+d
+
+
+File: sing.htm, Node: is_complex, Next: outer, Prev: genericmat, Up:
matrix_lib
+
+D.3.1.7 is_complex
+..................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ is_complex(c); c = list of size-compatible modules or matrices
+
+*Return:*
+ 1 if c[i]*c[i+1]=0 for all i, 0 if not, hence checking whether the
+ list of matrices forms a complex.
+
+*Note:*
+ Ideals are treated internally as 1-line matrices.
+ If printlevel > 0, the position where c is not a complex is shown.
+
+*Example:*
+ LIB "matrix.lib";
+ ring r = 32003,(x,y,z),ds;
+ ideal i = x4+y5+z6,xyz,yx2+xz2+zy7;
+ list L = nres(i,0);
+ is_complex(L);
+ ==> 1
+ L[4] = matrix(i);
+ is_complex(L);
+ ==> 0
+
+
+File: sing.htm, Node: outer, Next: power, Prev: is_complex, Up: matrix_lib
+
+D.3.1.8 outer
+.............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ outer(A,B); A,B matrices
+
+*Return:*
+ matrix, outer (tensor) product of A and B
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),ds;
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ matrix B[2][2]=x,y,0,z;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(B);
+ ==> x,y,
+ ==> 0,z
+ print(outer(A,B));
+ ==> x, y, 2x,2y,3x,3y,
+ ==> 0, z, 0, 2z,0, 3z,
+ ==> 4x,4y,5x,5y,6x,6y,
+ ==> 0, 4z,0, 5z,0, 6z,
+ ==> 7x,7y,8x,8y,9x,9y,
+ ==> 0, 7z,0, 8z,0, 9z
+
+
+File: sing.htm, Node: power, Next: skewmat, Prev: outer, Up: matrix_lib
+
+D.3.1.9 power
+.............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ power(A,n); A a square-matrix of type intmat or matrix, n=integer
+
+*Return:*
+ intmat resp. matrix, the n-th power of A
+
+*Note:*
+ for A=intmat and big n the result may be wrong because of int
+ overflow
+
+*Example:*
+ LIB "matrix.lib";
+ intmat A[3][3]=1,2,3,4,5,6,7,8,9;
+ print(power(A,3));"";
+ ==> 468 576 684
+ ==> 1062 1305 1548
+ ==> 1656 2034 2412
+ ==>
+ ring r=0,(x,y,z),dp;
+ matrix B[3][3]=0,x,y,z,0,0,y,z,0;
+ print(power(B,3));"";
+ ==> yz2, xy2+x2z,y3+xyz,
+ ==> y2z+xz2,yz2, 0,
+ ==> y3+xyz, y2z+xz2,yz2
+ ==>
+
+
+File: sing.htm, Node: skewmat, Next: submat, Prev: power, Up: matrix_lib
+
+D.3.1.10 skewmat
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ skewmat(n[,id]); n integer, id ideal
+
+*Return:*
+ skew-symmetric nxn matrix, with entries from id
+ (default: id=maxideal(1))
+ skewmat(n); creates the generic skew-symmetric matrix
+
+*Note:*
+ if id has less than n*(n-1)/2 elements, the matrix is
+ filled with 0's,
+
+*Example:*
+ LIB "matrix.lib";
+ ring R=0,x(1..5),lp;
+ print(skewmat(4)); // the generic skew-symmetric matrix
+ ==> 0, x(1), x(2),x(3),
+ ==> -x(1),0, x(4),x(5),
+ ==> -x(2),-x(4),0, 0,
+ ==> -x(3),-x(5),0, 0
+ ring R1 = 0,(a,b,c),dp;
+ matrix A=skewmat(4,maxideal(1)^2);
+ print(A);
+ ==> 0, a2, ab, ac,
+ ==> -a2,0, b2, bc,
+ ==> -ab,-b2,0, c2,
+ ==> -ac,-bc,-c2,0
+ int n=3;
+ ideal i = ideal(randommat(1,n*(n-1) div 2,maxideal(1),9));
+ print(skewmat(n,i)); // skew matrix of generic linear forms
+ ==> 0, 4a+b-8c, -a+6b+c,
+ ==> -4a-b+8c,0, -8a+2b-9c,
+ ==> a-6b-c, 8a-2b+9c,0
+ kill R1;
+
+
+File: sing.htm, Node: submat, Next: symmat, Prev: skewmat, Up: matrix_lib
+
+D.3.1.11 submat
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ submat(A,r,c); A=matrix, r,c=intvec
+
+*Return:*
+ matrix, submatrix of A with rows specified by intvec r and columns
+ specified by intvec c.
+
+*Example:*
+ LIB "matrix.lib";
+ ring R=32003,(x,y,z),lp;
+ matrix A[4][4]=x,y,z,0,1,2,3,4,5,6,7,8,9,x2,y2,z2;
+ print(A);
+ ==> x,y, z, 0,
+ ==> 1,2, 3, 4,
+ ==> 5,6, 7, 8,
+ ==> 9,x2,y2,z2
+ intvec v=1,3,4;
+ matrix B=submat(A,v,1..3);
+ print(B);
+ ==> x,y, z,
+ ==> 5,6, 7,
+ ==> 9,x2,y2
+
+
+File: sing.htm, Node: symmat, Next: tensor, Prev: submat, Up: matrix_lib
+
+D.3.1.12 symmat
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ symmat(n[,id]); n integer, id ideal
+
+*Return:*
+ symmetric nxn matrix, with entries from id (default:
+ id=maxideal(1))
+
+*Note:*
+ if id has less than n*(n+1)/2 elements, the matrix is filled with
+ 0's, symmat(n); creates the generic symmetric matrix
+
+*Example:*
+ LIB "matrix.lib";
+ ring R=0,x(1..10),lp;
+ print(symmat(4)); // the generic symmetric matrix
+ ==> x(1),x(2),x(3),x(4),
+ ==> x(2),x(5),x(6),x(7),
+ ==> x(3),x(6),x(8),x(9),
+ ==> x(4),x(7),x(9),x(10)
+ ring R1 = 0,(a,b,c),dp;
+ matrix A=symmat(4,maxideal(1)^3);
+ print(A);
+ ==> a3, a2b,a2c,ab2,
+ ==> a2b,abc,ac2,b3,
+ ==> a2c,ac2,b2c,bc2,
+ ==> ab2,b3, bc2,c3
+ int n=3;
+ ideal i = ideal(randommat(1,n*(n+1) div 2,maxideal(1),9));
+ print(symmat(n,i)); // symmetric matrix of generic linear forms
+ ==> 4a-8b-2c,-a+b-4c, -8a-9b+c,
+ ==> -a+b-4c, a-9b+9c, 6a-5b+9c,
+ ==> -8a-9b+c,6a-5b+9c,2a+8c
+ kill R1;
+
+
+File: sing.htm, Node: tensor, Next: unitmat, Prev: symmat, Up: matrix_lib
+
+D.3.1.13 tensor
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ tensor(A,B); A,B matrices
+
+*Return:*
+ matrix, tensor product of A and B
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),(c,ds);
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ matrix B[2][2]=x,y,0,z;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(B);
+ ==> x,y,
+ ==> 0,z
+ print(tensor(A,B));
+ ==> x, y, 2x,2y,3x,3y,
+ ==> 0, z, 0, 2z,0, 3z,
+ ==> 4x,4y,5x,5y,6x,6y,
+ ==> 0, 4z,0, 5z,0, 6z,
+ ==> 7x,7y,8x,8y,9x,9y,
+ ==> 0, 7z,0, 8z,0, 9z
+
+
+File: sing.htm, Node: unitmat, Next: gauss_col, Prev: tensor, Up:
matrix_lib
+
+D.3.1.14 unitmat
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ unitmat(n); n integer >= 0
+
+*Return:*
+ nxn unit matrix
+
+*Note:*
+ needs a basering, diagonal entries are numbers (=1) in the basering
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ print(xyz*unitmat(4));
+ ==> xyz,0, 0, 0,
+ ==> 0, xyz,0, 0,
+ ==> 0, 0, xyz,0,
+ ==> 0, 0, 0, xyz
+ print(unitmat(5));
+ ==> 1,0,0,0,0,
+ ==> 0,1,0,0,0,
+ ==> 0,0,1,0,0,
+ ==> 0,0,0,1,0,
+ ==> 0,0,0,0,1
+
+
+File: sing.htm, Node: gauss_col, Next: gauss_row, Prev: unitmat, Up:
matrix_lib
+
+D.3.1.15 gauss_col
+..................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ gauss_col(A[,e]); A a matrix, e any type
+
+*Return:*
+ - a matrix B, if called with one argument; B is the complete
+ column- reduced upper-triangular normal form of A if A is constant,
+ (resp. as far as this is possible if A is a polynomial matrix; no
+ division by polynomials).
+ - a list L of two matrices, if called with two arguments; L
+ satisfies L[1] = A * L[2] with L[1] the column-reduced form of A
+ and L[2] the transformation matrix.
+
+*Note:*
+ * The procedure just applies interred to A with ordering (C,dp).
+ The transformation matrix is obtained by applying 'lift'. This
+ should be faster than the procedure colred.
+ * It should only be used with exact coefficient field (there is no
+ pivoting and rounding error treatment).
+ * Parameters are allowed. Hence, if the entries of A are
+ parameters, B is the column-reduced form of A over the rational
+ function field.
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=(0,a,b),(A,B,C),dp;
+ matrix m[8][6]=
+ 0, 2*C, 0, 0, 0, 0,
+ 0, -4*C,a*A, 0, 0, 0,
+ b*B, -A, 0, 0, 0, 0,
+ -A, B, 0, 0, 0, 0,
+ -4*C, 0, B, 2, 0, 0,
+ 2*A, B, 0, 0, 0, 0,
+ 0, 3*B, 0, 0, 2b, 0,
+ 0, AB, 0, 2*A,A, 2a;"";
+ ==>
+ list L=gauss_col(m,1);
+ print(L[1]);
+ ==> 0,0,2*C, 0, 0,0,
+ ==> A,0,-4*C,0, 0,0,
+ ==> 0,0,-A, (1/2b)*B,0,0,
+ ==> 0,0,B, -1/2*A, 0,0,
+ ==> 0,1,0, 0, 0,0,
+ ==> 0,0,B, A, 0,0,
+ ==> 0,0,0, 0, 1,0,
+ ==> 0,0,0, 0, 0,1
+ print(L[2]);
+ ==> 0, 0, 0, 1/2, 0, 0,
+ ==> 0, 0, 1, 0, 0, 0,
+ ==> 1/(a), 0, 0, 0, 0, 0,
+ ==> -1/(2a)*B, 1/2, 0, C, 0, 0,
+ ==> 0, 0, -3/(2b)*B, 0, 1/(2b), 0,
+ ==> 1/(2a2)*AB,-1/(2a)*A,(-2b+3)/(4ab)*AB,-1/(a)*AC,-1/(4ab)*A,1/(2a)
+ ring S=0,x,(c,dp);
+ matrix A[5][4] =
+ 3, 1, 1, 1,
+ 13, 8, 6,-7,
+ 14,10, 6,-7,
+ 7, 4, 3,-3,
+ 2, 1, 0, 3;
+ print(gauss_col(A));
+ ==> 8/9,-5/9,-1/3,7/9,
+ ==> 1, 0, 0, 0,
+ ==> 0, 1, 0, 0,
+ ==> 0, 0, 1, 0,
+ ==> 0, 0, 0, 1
+
+* Menu:
+
+See also:
+* colred::
+
+*See also:* *note colred::.
+
+
+File: sing.htm, Node: gauss_row, Next: addcol, Prev: gauss_col, Up:
matrix_lib
+
+D.3.1.16 gauss_row
+..................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ gauss_row(A [,e]); A matrix, e any type
+
+*Return:*
+ - a matrix B, if called with one argument; B is the complete row-
+ reduced lower-triangular normal form of A if A is constant, (resp.
+ as far as this is possible if A is a polynomial matrix; no division
+ by polynomials).
+ - a list L of two matrices, if called with two arguments; L
+ satisfies L[1] = L[2] * A with L[1] the row-reduced form of A and
+ L[2] the transformation matrix.
+
+*Note:*
+ * This procedure just applies gauss_col to the transposed matrix.
+ The transformation matrix is obtained by applying lift. This
+ should be faster than the procedure rowred.
+ * It should only be used with exact coefficient field (there is no
+ pivoting and rounding error treatment).
+ * Parameters are allowed. Hence, if the entries of A are
+ parameters, B is the row-reduced form of A over the rational
+ function field.
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=(0,a,b),(A,B,C),dp;
+ matrix m[6][8]=
+ 0, 0, b*B, -A,-4C,2A,0, 0,
+ 2C,-4C,-A,B, 0, B, 3B,AB,
+ 0,a*A, 0, 0, B, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 2A,
+ 0, 0, 0, 0, 0, 0, 2b, A,
+ 0, 0, 0, 0, 0, 0, 0, 2a;"";
+ ==>
+ print(gauss_row(m));"";
+ ==> 0, A, 0, 0, 0,0,0,0,
+ ==> 0, 0, 0, 0, 1,0,0,0,
+ ==> 2*C,-4*C,-A, B, 0,B,0,0,
+ ==> 0, 0, (1/2b)*B,-1/2*A,0,A,0,0,
+ ==> 0, 0, 0, 0, 0,0,1,0,
+ ==> 0, 0, 0, 0, 0,0,0,1
+ ==>
+ ring S=0,x,dp;
+ matrix A[4][5] = 3, 1,1,-1,2,
+ 13, 8,6,-7,1,
+ 14,10,6,-7,1,
+ 7, 4,3,-3,3;
+ list L=gauss_row(A,1);
+ print(L[1]);
+ ==> 1/2,-7/3,-19/6,5/6,
+ ==> 1, 0, 0, 0,
+ ==> 0, 1, 0, 0,
+ ==> 0, 0, 1, 0,
+ ==> 0, 0, 0, 1
+ print(L[2]);
+ ==> 0, -6, -5, 1,
+ ==> -1/2,2/3, -1/6,-1/6,
+ ==> 1/2, -5/3,-5/6,1/6,
+ ==> 0, 13/3,11/3,-1/3
+
+* Menu:
+
+See also:
+* rowred::
+
+*See also:* *note rowred::.
+
+
+File: sing.htm, Node: addcol, Next: addrow, Prev: gauss_row, Up: matrix_lib
+
+D.3.1.17 addcol
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ addcol(A,c1,p,c2); A matrix, p poly, c1, c2 positive integers
+
+*Return:*
+ matrix, A being modified by adding p times column c1 to column c2
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(addcol(A,1,xy,2));
+ ==> 1,xy+2, 3,
+ ==> 4,4xy+5,6,
+ ==> 7,7xy+8,9
+
+
+File: sing.htm, Node: addrow, Next: multcol, Prev: addcol, Up: matrix_lib
+
+D.3.1.18 addrow
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ addcol(A,r1,p,r2); A matrix, p poly, r1, r2 positive integers
+
+*Return:*
+ matrix, A being modified by adding p times row r1 to row r2
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(addrow(A,1,xy,3));
+ ==> 1, 2, 3,
+ ==> 4, 5, 6,
+ ==> xy+7,2xy+8,3xy+9
+
+
+File: sing.htm, Node: multcol, Next: multrow, Prev: addrow, Up: matrix_lib
+
+D.3.1.19 multcol
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ addcol(A,c,p); A matrix, p poly, c positive integer
+
+*Return:*
+ matrix, A being modified by multiplying column c with p
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(multcol(A,2,xy));
+ ==> 1,2xy,3,
+ ==> 4,5xy,6,
+ ==> 7,8xy,9
+
+
+File: sing.htm, Node: multrow, Next: permcol, Prev: multcol, Up: matrix_lib
+
+D.3.1.20 multrow
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ multrow(A,r,p); A matrix, p poly, r positive integer
+
+*Return:*
+ matrix, A being modified by multiplying row r with p
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,2,3,4,5,6,7,8,9;
+ print(A);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(multrow(A,2,xy));
+ ==> 1, 2, 3,
+ ==> 4xy,5xy,6xy,
+ ==> 7, 8, 9
+
+
+File: sing.htm, Node: permcol, Next: permrow, Prev: multrow, Up: matrix_lib
+
+D.3.1.21 permcol
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ permcol(A,c1,c2); A matrix, c1,c2 positive integers
+
+*Return:*
+ matrix, A being modified by permuting column c1 and c2
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,x,3,4,y,6,7,z,9;
+ print(A);
+ ==> 1,x,3,
+ ==> 4,y,6,
+ ==> 7,z,9
+ print(permcol(A,2,3));
+ ==> 1,3,x,
+ ==> 4,6,y,
+ ==> 7,9,z
+
+
+File: sing.htm, Node: permrow, Next: rowred, Prev: permcol, Up: matrix_lib
+
+D.3.1.22 permrow
+................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ permrow(A,r1,r2); A matrix, r1,r2 positive integers
+
+*Return:*
+ matrix, A being modified by permuting row r1 and r2
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=32003,(x,y,z),lp;
+ matrix A[3][3]=1,2,3,x,y,z,7,8,9;
+ print(A);
+ ==> 1,2,3,
+ ==> x,y,z,
+ ==> 7,8,9
+ print(permrow(A,2,1));
+ ==> x,y,z,
+ ==> 1,2,3,
+ ==> 7,8,9
+
+
+File: sing.htm, Node: rowred, Next: colred, Prev: permrow, Up: matrix_lib
+
+D.3.1.23 rowred
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ rowred(A[,e]); A matrix, e any type
+
+*Return:*
+ - a matrix B, being the row reduced form of A, if rowred is called
+ with one argument.
+ (as far as this is possible over the polynomial ring; no division
+ by polynomials)
+ - a list L of two matrices, such that L[1] = L[2] * A with L[1] the
+ row-reduced form of A and L[2] the transformation matrix (if rowred
+ is called with two arguments).
+
+*Note:*
+ * This procedure is designed for teaching purposes mainly.
+ * The straight forward Gaussian algorithm is implemented in the
+ library (no standard basis computation).
+ The transformation matrix is obtained by concatenating a unit
+ matrix to A. proc gauss_row should be faster.
+ * It should only be used with exact coefficient field (there is no
+ pivoting) over the polynomial ring (ordering lp or dp).
+ * Parameters are allowed. Hence, if the entries of A are parameters
+ the computation takes place over the field of rational functions.
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=(0,a,b),(A,B,C),dp;
+ matrix m[6][8]=
+ 0, 0, b*B, -A,-4C,2A,0, 0,
+ 2C,-4C,-A,B, 0, B, 3B,AB,
+ 0,a*A, 0, 0, B, 0, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 2A,
+ 0, 0, 0, 0, 0, 0, 2b, A,
+ 0, 0, 0, 0, 0, 0, 0, 2a;"";
+ ==>
+ print(rowred(m));"";
+ ==> 0, 0, 0, 0, 1,0, 0,0,
+ ==> 0, 0, 0, 0, 0,0, 1,0,
+ ==> 0, 0, 0, 0, 0,0, 0,1,
+ ==> 0, 0, (b)*B,-A,0,2*A,0,0,
+ ==> 2*C,-4*C, -A, B, 0,B, 0,0,
+ ==> 0, (a)*A,0, 0, 0,0, 0,0
+ ==>
+ list L=rowred(m,1);
+ print(L[1]);
+ ==> 0, 0, 0, 0, 1,0, 0,0,
+ ==> 0, 0, 0, 0, 0,0, 1,0,
+ ==> 0, 0, 0, 0, 0,0, 0,1,
+ ==> 0, 0, (b)*B,-A,0,2*A,0,0,
+ ==> 2*C,-4*C, -A, B, 0,B, 0,0,
+ ==> 0, (a)*A,0, 0, 0,0, 0,0
+ print(L[2]);
+ ==> 0,0,0,1/2, 0, -1/(2a)*A,
+ ==> 0,0,0,0, 1/(2b), -1/(4ab)*A,
+ ==> 0,0,0,0, 0, 1/(2a),
+ ==> 1,0,0,2*C, 0, -2/(a)*AC,
+ ==> 0,1,0,0, -3/(2b)*B,(-2b+3)/(4ab)*AB,
+ ==> 0,0,1,-1/2*B,0, 1/(2a)*AB
+
+* Menu:
+
+See also:
+* gauss_row::
+
+*See also:* *note gauss_row::.
+
+
+File: sing.htm, Node: colred, Next: rm_unitrow, Prev: rowred, Up:
matrix_lib
+
+D.3.1.24 colred
+...............
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ colred(A[,e]); A matrix, e any type
+
+*Return:*
+ - a matrix B, being the column reduced form of A, if colred is
+ called with one argument.
+ (as far as this is possible over the polynomial ring; no division
+ by polynomials)
+ - a list L of two matrices, such that L[1] = A * L[2] with L[1] the
+ column-reduced form of A and L[2] the transformation matrix (if
+ colred is called with two arguments).
+
+*Note:*
+ * This procedure is designed for teaching purposes mainly.
+ * It applies rowred to the transposed matrix. proc gauss_col
+ should be faster.
+ * It should only be used with exact coefficient field (there is no
+ pivoting) over the polynomial ring (ordering lp or dp).
+ * Parameters are allowed. Hence, if the entries of A are parameters
+ the computation takes place over the field of rational functions.
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=(0,a,b),(A,B,C),dp;
+ matrix m[8][6]=
+ 0, 2*C, 0, 0, 0, 0,
+ 0, -4*C,a*A, 0, 0, 0,
+ b*B, -A, 0, 0, 0, 0,
+ -A, B, 0, 0, 0, 0,
+ -4*C, 0, B, 2, 0, 0,
+ 2*A, B, 0, 0, 0, 0,
+ 0, 3*B, 0, 0, 2b, 0,
+ 0, AB, 0, 2*A,A, 2a;"";
+ ==>
+ print(colred(m));"";
+ ==> 0,0,0,0, 2*C, 0,
+ ==> 0,0,0,0, -4*C,(a)*A,
+ ==> 0,0,0,(b)*B,-A, 0,
+ ==> 0,0,0,-A, B, 0,
+ ==> 1,0,0,0, 0, 0,
+ ==> 0,0,0,2*A, B, 0,
+ ==> 0,1,0,0, 0, 0,
+ ==> 0,0,1,0, 0, 0
+ ==>
+ list L=colred(m,1);
+ print(L[1]);
+ ==> 0,0,0,0, 2*C, 0,
+ ==> 0,0,0,0, -4*C,(a)*A,
+ ==> 0,0,0,(b)*B,-A, 0,
+ ==> 0,0,0,-A, B, 0,
+ ==> 1,0,0,0, 0, 0,
+ ==> 0,0,0,2*A, B, 0,
+ ==> 0,1,0,0, 0, 0,
+ ==> 0,0,1,0, 0, 0
+ print(L[2]);
+ ==> 0, 0, 0, 1, 0, 0,
+ ==> 0, 0, 0, 0, 1, 0,
+ ==> 0, 0, 0, 0, 0, 1,
+ ==> 1/2, 0, 0, 2*C, 0, -1/2*B,
+ ==> 0, 1/(2b), 0, 0, -3/(2b)*B, 0,
+ ==> -1/(2a)*A,-1/(4ab)*A,1/(2a),-2/(a)*AC,(-2b+3)/(4ab)*AB,1/(2a)*AB
+
+* Menu:
+
+See also:
+* gauss_col::
+
+*See also:* *note gauss_col::.
+
+
+File: sing.htm, Node: rm_unitrow, Next: rm_unitcol, Prev: colred, Up:
matrix_lib
+
+D.3.1.25 rm_unitrow
+...................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ rm_unitrow(A); A matrix (being col-reduced)
+
+*Return:*
+ matrix, obtained from A by deleting unit rows (having just one 1
+ and else 0 as entries) and associated columns
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=0,(A,B,C),dp;
+ matrix m[8][6]=
+ 0,0, 0, 0, 2C, 0,
+ 0,0, 0, 0, -4C,A,
+ A,-C2,0, B, -A, 0,
+ 0,0, 1/2B,-A,B, 0,
+ 1,0, 0, 0, 0, 0,
+ 0,0, 0, 2A,B, 0,
+ 0,1, 0, 0, 0, 0,
+ 0,0, 1, 0, 0, 0;
+ print(rm_unitrow(m));
+ ==> 0, 2C, 0,
+ ==> 0, -4C,A,
+ ==> B, -A, 0,
+ ==> -A,B, 0,
+ ==> 2A,B, 0
+
+
+File: sing.htm, Node: rm_unitcol, Next: headStand, Prev: rm_unitrow, Up:
matrix_lib
+
+D.3.1.26 rm_unitcol
+...................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+*Usage:*
+ rm_unitcol(A); A matrix (being row-reduced)
+
+*Return:*
+ matrix, obtained from A by deleting unit columns (having just one 1
+ and else 0 as entries) and associated rows
+
+*Example:*
+ LIB "matrix.lib";
+ ring r=0,(A,B,C),dp;
+ matrix m[6][8]=
+ 0, 0, A, 0, 1,0, 0,0,
+ 0, 0, -C2, 0, 0,0, 1,0,
+ 0, 0, 0,1/2B, 0,0, 0,1,
+ 0, 0, B, -A, 0,2A, 0,0,
+ 2C,-4C, -A, B, 0,B, 0,0,
+ 0, A, 0, 0, 0,0, 0,0;
+ print(rm_unitcol(m));
+ ==> 0, 0, B, -A,2A,
+ ==> 2C,-4C,-A,B, B,
+ ==> 0, A, 0, 0, 0
+
+
+File: sing.htm, Node: headStand, Prev: rm_unitcol, Up: matrix_lib
+
+D.3.1.27 headStand
+..................
+
+Procedure from library `matrix.lib' (*note matrix_lib::).
+
+
+File: sing.htm, Node: linalg_lib, Prev: matrix_lib, Up: Linear algebra
+
+D.3.2 linalg_lib
+----------------
+
+*Library:*
+ linalg.lib
+
+*Purpose:*
+ Algorithmic Linear Algebra
+
+*Authors:*
+ Ivor Saynisch (address@hidden)
+ Mathias Schulze (address@hidden)
+
+*Procedures:*
+
+* Menu:
+
+* inverse:: matrix, the inverse of A
+* inverse_B:: list(matrix Inv,poly p),Inv*A=p*En ( using busadj(A) )
+* inverse_L:: list(matrix Inv,poly p),Inv*A=p*En ( using lift )
+* sym_gauss:: symmetric gaussian algorithm
+* orthogonalize:: Gram-Schmidt orthogonalization
+* diag_test:: test whether A can be diagonalized
+* busadj:: coefficients of Adj(E*t-A) and coefficients of det(E*t-A)
+* charpoly:: characteristic polynomial of A ( using busadj(A) )
+* adjoint:: adjoint of A ( using busadj(A) )
+* det_B:: determinant of A ( using busadj(A) )
+* gaussred:: gaussian reduction: P*A=U*S, S a row reduced form of A
+* gaussred_pivot:: gaussian reduction: P*A=U*S, uses row pivoting
+* gauss_nf:: gaussian normal form of A
+* mat_rk:: rank of constant matrix A
+* U_D_O:: P*A=U*D*O, P,D,U,O=permutation,diag,lower-,upper-triang
+* pos_def:: test symmetric matrix for positive definiteness
+* hessenberg:: Hessenberg form of M
+* evnf:: eigenvalues normal form of (e[,m])
+* eigenvals:: eigenvalues with multiplicities of M
+* minipoly:: minimal polynomial of M
+* jordan:: Jordan data of M
+* jordanbasis:: Jordan basis and weight filtration of M
+* jordanmatrix:: Jordan matrix with Jordan data (e,s,m)
+* jordannf:: Jordan normal form of M
+
+
+File: sing.htm, Node: inverse, Next: inverse_B, Up: linalg_lib
+
+D.3.2.1 inverse
+...............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ inverse(A [,opt]); A a square matrix, opt integer
+
+*Return:*
+
+ a matrix:
+ - the inverse matrix of A, if A is invertible;
+ - the 1x1 0-matrix if A is not invertible (in the polynomial
ring!).
+ There are the following options:
+ - opt=0 or not given: heuristically best option from below
+ - opt=1 : apply std to (transpose(E,A)), ordering (C,dp).
+ - opt=2 : apply interred (transpose(E,A)), ordering (C,dp).
+ - opt=3 : apply lift(A,E), ordering (C,dp).
+
+*Note:*
+ parameters and minpoly are allowed; opt=2 is only correct for
+ matrices with entries in a field
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x,y,z),lp;
+ matrix A[3][3]=
+ 1,4,3,
+ 1,5,7,
+ 0,4,17;
+ print(inverse(A));"";
+ matrix B[3][3]=
+ y+1, x+y, y,
+ z, z+1, z,
+ y+z+2,x+y+z+2,y+z+1;
+ print(inverse(B));
+ print(B*inverse(B));
+
+* Menu:
+
+See also:
+* inverse_B::
+* inverse_L::
+
+*See also:* *note inverse_B::; *note inverse_L::.
+
+
+File: sing.htm, Node: inverse_B, Next: inverse_L, Prev: inverse, Up:
linalg_lib
+
+D.3.2.2 inverse_B
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ inverse_B(A); A = square matrix
+
+*Return:*
+ list Inv with
+ - Inv[1] = matrix I and
+ - Inv[2] = poly p
+ such that I*A = unitmat(n)*p;
+
+*Note:*
+ p=1 if 1/det(A) is computable and p=det(A) if not;
+ the computation uses busadj.
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x,y),lp;
+ matrix A[3][3]=x,y,1,1,x2,y,x,6,0;
+ print(A);
+ list Inv=inverse_B(A);
+ print(Inv[1]);
+ print(Inv[2]);
+ print(Inv[1]*A);
+
+* Menu:
+
+See also:
+* inverse::
+* inverse_L::
+
+*See also:* *note inverse::; *note inverse_L::.
+
+
+File: sing.htm, Node: inverse_L, Next: sym_gauss, Prev: inverse_B, Up:
linalg_lib
+
+D.3.2.3 inverse_L
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ inverse_L(A); A = square matrix
+
+*Return:*
+ list Inv representing a left inverse of A, i.e
+ - Inv[1] = matrix I and
+ - Inv[2] = poly p
+ such that I*A = unitmat(n)*p;
+
+*Note:*
+ p=1 if 1/det(A) is computable and p=det(A) if not;
+ the computation computes first det(A) and then uses lift
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x,y),lp;
+ matrix A[3][3]=x,y,1,1,x2,y,x,6,0;
+ print(A);
+ list Inv=inverse_L(A);
+ print(Inv[1]);
+ print(Inv[2]);
+ print(Inv[1]*A);
+
+* Menu:
+
+See also:
+* inverse::
+* inverse_B::
+
+*See also:* *note inverse::; *note inverse_B::.
+
+
+File: sing.htm, Node: sym_gauss, Next: orthogonalize, Prev: inverse_L, Up:
linalg_lib
+
+D.3.2.4 sym_gauss
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ sym_gauss(A); A = symmetric matrix
+
+*Return:*
+ matrix, diagonalisation with symmetric gauss algorithm
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),lp;
+ matrix A[2][2]=1,4,4,15;
+ print(A);
+ print(sym_gauss(A));
+
+
+File: sing.htm, Node: orthogonalize, Next: diag_test, Prev: sym_gauss, Up:
linalg_lib
+
+D.3.2.5 orthogonalize
+.....................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ orthogonalize(A); A = constant matrix
+
+*Return:*
+ matrix, orthogonal basis of the column space of A
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),lp;
+ matrix A[4][4]=5,6,12,4,7,3,2,6,12,1,1,2,6,4,2,10;
+ print(A);
+ print(orthogonalize(A));
+
+
+File: sing.htm, Node: diag_test, Next: busadj, Prev: orthogonalize, Up:
linalg_lib
+
+D.3.2.6 diag_test
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ diag_test(A); A = const square matrix
+
+*Return:*
+ int, 1 if A is diagonalisable, 0 if not
+ -1 no statement is possible, since A does not split.
+
+*Note:*
+ The test works only for split matrices, i.e if eigenvalues of A are
+ in the ground field.
+ Does not work with parameters (uses factorize,gcd).
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),dp;
+ matrix A[4][4]=6,0,0,0,0,0,6,0,0,6,0,0,0,0,0,6;
+ print(A);
+ diag_test(A);
+
+
+File: sing.htm, Node: busadj, Next: charpoly, Prev: diag_test, Up:
linalg_lib
+
+D.3.2.7 busadj
+..............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ busadj(A); A = square matrix (of size nxn)
+
+*Return:*
+ list L:
+
+ L[1] contains the (n+1) coefficients of the characteristic
+ polynomial X of A, i.e.
+ X = L[1][1]+..+L[1][k]*t^(k-1)+..+(L[1][n+1])*t^n
+ L[2] contains the n (nxn)-matrices Hk which are the coefficients
of
+ the busadjoint bA = adjoint(E*t-A) of A, i.e.
+ bA = (Hn-1)*t^(n-1)+...+Hk*t^k+...+H0, ( Hk=L[2][k+1] )
+
+*Example:*
+ LIB "linalg.lib";
+ ring r = 0,(t,x),lp;
+ matrix A[2][2] = 1,x2,x,x2+3x;
+ print(A);
+ list L = busadj(A);
+ poly X = L[1][1]+L[1][2]*t+L[1][3]*t2; X;
+ matrix bA[2][2] = L[2][1]+L[2][2]*t;
+ print(bA); //the busadjoint of A;
+ print(bA*(t*unitmat(2)-A));
+
+
+File: sing.htm, Node: charpoly, Next: adjoint, Prev: busadj, Up: linalg_lib
+
+D.3.2.8 charpoly
+................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ charpoly(A[,v]); A square matrix, v string, name of a variable
+
+*Return:*
+ poly, the characteristic polynomial det(E*v-A)
+ (default: v=name of last variable)
+
+*Note:*
+ A must be independent of the variable v. The computation uses det.
+ If printlevel>0, det(E*v-A) is diplayed recursively.
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x,t),dp;
+ matrix A[3][3]=1,x2,x,x2,6,4,x,4,1;
+ print(A);
+ charpoly(A,"t");
+
+
+File: sing.htm, Node: adjoint, Next: det_B, Prev: charpoly, Up: linalg_lib
+
+D.3.2.9 adjoint
+...............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ adjoint(A); A = square matrix
+
+*Return:*
+ adjoint matrix of A, i.e. Adj*A=det(A)*E
+
+*Note:*
+ computation uses busadj(A)
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(t,x),lp;
+ matrix A[2][2]=1,x2,x,x2+3x;
+ print(A);
+ matrix Adj[2][2]=adjoint(A);
+ print(Adj); //Adj*A=det(A)*E
+ print(Adj*A);
+
+
+File: sing.htm, Node: det_B, Next: gaussred, Prev: adjoint, Up: linalg_lib
+
+D.3.2.10 det_B
+..............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ det_B(A); A any matrix
+
+*Return:*
+ returns the determinant of A
+
+*Note:*
+ the computation uses the busadj algorithm
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),dp;
+ matrix A[10][10]=random(2,10,10)+unitmat(10)*x;
+ print(A);
+ det_B(A);
+
+
+File: sing.htm, Node: gaussred, Next: gaussred_pivot, Prev: det_B, Up:
linalg_lib
+
+D.3.2.11 gaussred
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ gaussred(A); A any constant matrix
+
+*Return:*
+ list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A)
+ gives a row reduced matrix S, a permutation matrix P and a
+ normalized lower triangular matrix U, with P*A=U*S
+
+*Note:*
+ This procedure is designed for teaching purposes mainly. The
+ straight forward implementation in the interpreted library is not
+ very efficient (no standard basis computation).
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),dp;
+ matrix A[5][4]=1,3,-1,4,2,5,-1,3,1,3,-1,4,0,4,-3,1,-3,1,-5,-2;
+ print(A);
+ list Z=gaussred(A); //construct P,U,S s.t. P*A=U*S
+ print(Z[1]); //P
+ print(Z[2]); //U
+ print(Z[3]); //S
+ print(Z[4]); //rank
+ print(Z[1]*A); //P*A
+ print(Z[2]*Z[3]); //U*S
+
+
+File: sing.htm, Node: gaussred_pivot, Next: gauss_nf, Prev: gaussred, Up:
linalg_lib
+
+D.3.2.12 gaussred_pivot
+.......................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ gaussred_pivot(A); A any constant matrix
+
+*Return:*
+ list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A)
+ gives n row reduced matrix S, a permutation matrix P and a
+ normalized lower triangular matrix U, with P*A=U*S
+
+*Note:*
+ with row pivoting
+
+*Example:*
+ LIB "linalg.lib";
+ ring r=0,(x),dp;
+ matrix A[5][4] = 1, 3,-1,4,
+ 2, 5,-1,3,
+ 1, 3,-1,4,
+ 0, 4,-3,1,
+ -3,1,-5,-2;
+ list Z=gaussred_pivot(A); //construct P,U,S s.t. P*A=U*S
+ print(Z[1]); //P
+ print(Z[2]); //U
+ print(Z[3]); //S
+ print(Z[4]); //rank
+ print(Z[1]*A); //P*A
+ print(Z[2]*Z[3]); //U*S
+
+
+File: sing.htm, Node: gauss_nf, Next: mat_rk, Prev: gaussred_pivot, Up:
linalg_lib
+
+D.3.2.13 gauss_nf
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ gauss_nf(A); A any constant matrix
+
+*Return:*
+ matrix; gauss normal form of A (uses gaussred)
+
+*Example:*
+ LIB "linalg.lib";
+ ring r = 0,(x),dp;
+ matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7;
+ print(gauss_nf(A));
+
+
+File: sing.htm, Node: mat_rk, Next: U_D_O, Prev: gauss_nf, Up: linalg_lib
+
+D.3.2.14 mat_rk
+...............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ mat_rk(A); A any constant matrix
+
+*Return:*
+ int, rank of A
+
+*Example:*
+ LIB "linalg.lib";
+ ring r = 0,(x),dp;
+ matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7;
+ mat_rk(A);
+
+
+File: sing.htm, Node: U_D_O, Next: pos_def, Prev: mat_rk, Up: linalg_lib
+
+D.3.2.15 U_D_O
+..............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ U_D_O(A); constant invertible matrix A
+
+*Return:*
+ list Z: Z[1]=P , Z[2]=U , Z[3]=D , Z[4]=O
+ gives a permutation matrix P,
+ a normalized lower triangular matrix U ,
+ a diagonal matrix D, and
+ a normalized upper triangular matrix O
+ with P*A=U*D*O
+
+*Note:*
+ Z[1]=-1 means that A is not regular (proc uses gaussred)
+
+*Example:*
+ LIB "linalg.lib";
+ ring r = 0,(x),dp;
+ matrix A[5][5] = 10, 4, 0, -9, 8,
+ -3, 6, -6, -4, 9,
+ 0, 3, -1, -9, -8,
+ -4,-2, -6, -10,10,
+ -9, 5, -1, -6, 5;
+ list Z = U_D_O(A); //construct P,U,D,O s.t. P*A=U*D*O
+ print(Z[1]); //P
+ print(Z[2]); //U
+ print(Z[3]); //D
+ print(Z[4]); //O
+ print(Z[1]*A); //P*A
+ print(Z[2]*Z[3]*Z[4]); //U*D*O
+
+
+File: sing.htm, Node: pos_def, Next: hessenberg, Prev: U_D_O, Up:
linalg_lib
+
+D.3.2.16 pos_def
+................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ pos_def(A); A = constant, symmetric square matrix
+
+*Return:*
+ int:
+ 1 if A is positive definit ,
+ 0 if not,
+ -1 if unknown
+
+*Example:*
+ LIB "linalg.lib";
+ ring r = 0,(x),dp;
+ matrix A[5][5] = 20, 4, 0, -9, 8,
+ 4, 12, -6, -4, 9,
+ 0, -6, -2, -9, -8,
+ -9, -4, -9, -20, 10,
+ 8, 9, -8, 10, 10;
+ pos_def(A);
+ matrix B[3][3] = 3, 2, 0,
+ 2, 12, 4,
+ 0, 4, 2;
+ pos_def(B);
+
+
+File: sing.htm, Node: hessenberg, Next: evnf, Prev: pos_def, Up: linalg_lib
+
+D.3.2.17 hessenberg
+...................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ hessenberg(M); matrix M
+
+*Assume:*
+ M constant square matrix
+
+*Return:*
+ matrix H; Hessenberg form of M
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ print(hessenberg(M));
+
+
+File: sing.htm, Node: evnf, Next: eigenvals, Prev: hessenberg, Up:
linalg_lib
+
+D.3.2.18 evnf
+.............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ evnf(e[,m]); ideal e, intvec m
+
+*Assume:*
+ ncols(e)==size(m)
+
+*Return:*
+ order eigenvalues e with multiplicities m
+
+
+File: sing.htm, Node: eigenvals, Next: minipoly, Prev: evnf, Up: linalg_lib
+
+D.3.2.19 eigenvals
+..................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ eigenvals(M); matrix M
+
+*Assume:*
+ eigenvalues of M in basefield
+
+*Return:*
+
+ list l;
+ ideal l[1];
+ number l[1][i]; i-th eigenvalue of M
+ intvec l[2];
+ int l[2][i]; multiplicity of i-th eigenvalue of M
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ eigenvals(M);
+
+
+File: sing.htm, Node: minipoly, Next: jordan, Prev: eigenvals, Up:
linalg_lib
+
+D.3.2.20 minipoly
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ minpoly(M); matrix M
+
+*Assume:*
+ eigenvalues of M in basefield
+
+*Return:*
+
+ list l; minimal polynomial of M
+ ideal l[1];
+ number l[1][i]; i-th root of minimal polynomial of M
+ intvec l[2];
+ int l[2][i]; multiplicity of i-th root of minimal polynomial of M
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ minipoly(M);
+
+
+File: sing.htm, Node: jordan, Next: jordanbasis, Prev: minipoly, Up:
linalg_lib
+
+D.3.2.21 jordan
+...............
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ jordan(M); matrix M
+
+*Assume:*
+ eigenvalues of M in basefield
+
+*Return:*
+
+ list l; Jordan data of M
+ ideal l[1];
+ number l[1][i]; eigenvalue of i-th Jordan block of M
+ intvec l[2];
+ int l[2][i]; size of i-th Jordan block of M
+ intvec l[3];
+ int l[3][i]; multiplicity of i-th Jordan block of M
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ jordan(M);
+
+
+File: sing.htm, Node: jordanbasis, Next: jordanmatrix, Prev: jordan, Up:
linalg_lib
+
+D.3.2.22 jordanbasis
+....................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ jordanbasis(M); matrix M
+
+*Assume:*
+ eigenvalues of M in basefield
+
+*Return:*
+
+ list l:
+ module l[1]; inverse(l[1])*M*l[1] in Jordan normal form
+ intvec l[2];
+ int l[2][i]; weight filtration index of l[1][i]
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ list l=jordanbasis(M);
+ print(l[1]);
+ print(l[2]);
+ print(inverse(l[1])*M*l[1]);
+
+
+File: sing.htm, Node: jordanmatrix, Next: jordannf, Prev: jordanbasis, Up:
linalg_lib
+
+D.3.2.23 jordanmatrix
+.....................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ jordanmatrix(e,s,m); ideal e, intvec s, intvec m
+
+*Assume:*
+ ncols(e)==size(s)==size(m)
+
+*Return:*
+
+ matrix J; Jordan matrix with list(e,s,m)==jordan(J)
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ ideal e=ideal(2,3);
+ intvec s=1,2;
+ intvec m=1,1;
+ print(jordanmatrix(e,s,m));
+
+
+File: sing.htm, Node: jordannf, Prev: jordanmatrix, Up: linalg_lib
+
+D.3.2.24 jordannf
+.................
+
+Procedure from library `linalg.lib' (*note linalg_lib::).
+
+*Usage:*
+ jordannf(M); matrix M
+
+*Assume:*
+ eigenvalues of M in basefield
+
+*Return:*
+ matrix J; Jordan normal form of M
+
+*Example:*
+ LIB "linalg.lib";
+ ring R=0,x,dp;
+ matrix M[3][3]=3,2,1,0,2,1,0,0,3;
+ print(M);
+ print(jordannf(M));
+
+
+File: sing.htm, Node: Commutative algebra, Next: Singularities, Prev:
Linear algebra, Up: SINGULAR libraries
+
+D.4 Commutative algebra
+=======================
+
+* Menu:
+
+* algebra_lib:: procedures for computing with algebras and maps
+* elim_lib:: procedures for elimination, saturation and blowing up
+* homolog_lib:: procedures for homological algebra
+* mprimdec_lib:: procedures for primary decomposition of modules
+* mregular_lib:: procedures for Castelnuovo-Mumford regularity
+* normal_lib:: procedure for normalization
+* primdec_lib:: procedures for primary decomposition
+* primitiv_lib:: procedures for finding a primitive element
+* reesclos_lib:: Rees Algebra and integral closure of an ideal
+* intprog_lib:: Integer Programming
+* toric_lib:: toric ideals
+
+
+File: sing.htm, Node: algebra_lib, Next: elim_lib, Prev: Commutative
algebra, Up: Commutative algebra
+
+D.4.1 algebra_lib
+-----------------
+
+*Library:*
+ algebra.lib
+
+*Purpose:*
+ Compute with Algebras and Algebra Maps
+
+*Authors:*
+ Gert-Martin Greuel, address@hidden,
+ Agnes Eileen Heydtmann, address@hidden,
+ Gerhard Pfister, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* algebra_containment:: query of algebra containment
+* module_containment:: query of module containment over a subalgebra
+* inSubring:: test whether poly p is in subring generated by I
+* algDependent:: computes algebraic relations between generators of I
+* alg_kernel:: computes the kernel of the ring map phi
+* is_injective:: test for injectivity of ring map phi
+* is_surjective:: test for surjectivity of ring map phi
+* is_bijective:: test for bijectivity of ring map phi
+* noetherNormal:: noether normalization of ideal id
+* mapIsFinite:: query for finiteness of map phi:R -> basering/I
+* finitenessTest:: find variables which occur as pure power in lead(i)
+
+
+File: sing.htm, Node: algebra_containment, Next: module_containment, Up:
algebra_lib
+
+D.4.1.1 algebra_containment
+...........................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ algebra_containment(p,A[,k]); p poly, A ideal, k integer.
+ A = A[1],...,A[m] generators of subalgebra of the basering
+
+*Return:*
+
+ - k=0 (or if k is not given) an integer:
+ 1 : if p is contained in the subalgebra K[A[1],...,A[m]]
+ 0 : if p is not contained in K[A[1],...,A[m]]
+ - k=1 : a list, say l, of size 2, l[1] integer, l[2] ring,
satisfying
+ l[1]=1 if p is in the subalgebra K[A[1],...,A[m]] and then the
ring
+ l[2] contains poly check = h(y(1),...,y(m)) if
p=h(A[1],...,A[m])
+ l[1]=0 if p is in not the subalgebra K[A[1],...,A[m]] and then
+ l[2] contains the poly check = h(x,y(1),...,y(m)) if p
satisfies
+ the nonlinear relation p = h(x,A[1],...,A[m]) where
+ x = x(1),...,x(n) denote the variables of the basering
+
+*Display:*
+ if k=0 and printlevel >= voice+1 (default) display the poly check
+
+*Note:*
+ The proc inSubring uses a different algorithm which is sometimes
+ faster.
+
+*Theory:*
+ The ideal of algebraic relations of the algebra generators
+ A[1],..., A[m] is computed introducing new variables y(i) and the
+ product order with x(i) >> y(i).
+ p reduces to a polynomial only in the y(i) <=> p is contained in
+ the subring generated by the polynomials A[1],...,A[m].
+
+*Example:*
+ LIB "algebra.lib";
+ int p = printlevel; printlevel = 1;
+ ring R = 0,(x,y,z),dp;
+ ideal A=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3;
+ poly p1=z;
+ poly p2=
+ x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4;
+ algebra_containment(p1,A);
+ ==> // x(3)
+ ==> 0
+ algebra_containment(p2,A);
+ ==> //
y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y\
+ (5)*y(7)^2
+ ==> 1
+ list L = algebra_containment(p2,A,1);
+ ==>
+ ==> // 'algebra_containment' created a ring as 2nd element of the list.
+ ==> // The ring contains the poly check which defines the algebraic
relation.
+ ==> // To access to the ring and see check you must give the ring a name,
+ ==> // e.g.:
+ ==> def S = l[2]; setring S; check;
+ ==>
+ L[1];
+ ==> 1
+ def S = L[2]; setring S;
+ check;
+ ==>
y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y(5)\
+ *y(7)^2
+ printlevel = p;
+
+
+File: sing.htm, Node: module_containment, Next: inSubring, Prev:
algebra_containment, Up: algebra_lib
+
+D.4.1.2 module_containment
+..........................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ module_containment(p,P,M[,k]); p poly, P ideal, M ideal, k int
+ P = P[1],...,P[n] generators of a subalgebra of the basering,
+ M = M[1],...,M[m] generators of a module over the subalgebra K[P]
+
+*Assume:*
+ ncols(P) = nvars(basering), the P[i] are algebraically independent
+
+*Return:*
+
+ - k=0 (or if k is not given), an integer:
+ 1 : if p is contained in the module <M[1],...,M[m]> over
K[P]
+ 0 : if p is not contained in <M[1],...,M[m]>
+ - k=1, a list, say l, of size 2, l[1] integer, l[2] ring:
+ l[1]=1 : if p is in <M[1],...,M[m]> and then the ring l[2]
contains
+ the polynomial check = h(y(1),...,y(m),z(1),...,z(n)) if
+ p = h(M[1],...,M[m],P[1],...,P[n])
+ l[1]=0 : if p is in not in <M[1],...,M[m]>, then l[2] contains
the
+ poly check = h(x,y(1),...,y(m),z(1),...,z(n)) if p satisfies
+ the nonlinear relation p = h(x,M[1],...,M[m],P[1],...,P[n])
where
+ x = x(1),...,x(n) denote the variables of the basering
+
+*Display:*
+ the polynomial h(y(1),...,y(m),z(1),...,z(n)) if k=0, resp. a
+ comment how to access the relation check if k=1, provided
+ printlevel >= voice+1 (default).
+
+*Theory:*
+ The ideal of algebraic relations of all the generators p1,...,pn,
+ s1,...,st given by P and S is computed introducing new variables
+ y(j), z(i) and the product order: x^a*y^b*z^c > x^d*y^e*z^f if x^a
+ > x^d with respect to the lp ordering or else if z^c > z^f with
+ respect to the dp ordering or else if y^b > y^e with respect to the
+ lp ordering again. p reduces to a polynomial only in the y(j) and
+ z(i), linear in the z(i) <=> p is contained in the module.
+
+*Example:*
+ LIB "algebra.lib";
+ int p = printlevel; printlevel = 1;
+ ring R=0,(x,y,z),dp;
+ ideal P = x2+y2,z2,x4+y4; //algebra generators
+ ideal M = 1,x2z-1y2z,xyz,x3y-1xy3; //module generators
+ poly p1=
+ x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4;
+ module_containment(p1,P,M);
+ ==> // y(2)*z(2)*z(3)^2+z(1)^3*z(2)^2
+ ==> 1
+ poly p2=z;
+ list l = module_containment(p2,P,M,1);
+ ==>
+ ==> // 'module_containment' created a ring as 2nd element of the list. The
+ ==> // ring contains the poly check which defines the algebraic relation
+ ==> // for p. To access to the ring and see check you must give the ring
+ ==> // a name, e.g.:
+ ==> def S = l[2]; setring S; check;
+ ==>
+ l[1];
+ ==> 0
+ def S = l[2]; setring S; check;
+ ==> x(3)
+ printlevel=p;
+
+
+File: sing.htm, Node: inSubring, Next: algDependent, Prev:
module_containment, Up: algebra_lib
+
+D.4.1.3 inSubring
+.................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ inSubring(p,i); p poly, i ideal
+
+*Return:*
+
+ a list l of size 2, l[1] integer, l[2] string
+ l[1]=1 iff p is in the subring generated by i=i[1],...,i[k],
+ and then l[2] = y(0)-h(y(1),...,y(k)) if p =
h(i[1],...,i[k])
+ l[1]=0 iff p is in not the subring generated by i,
+ and then l[2] = h(y(0),y(1),...,y(k) where p satisfies the
+ nonlinear relation h(p,i[1],...,i[k])=0.
+
+*Note:*
+ the proc algebra_containment tests the same with a different
+ algorithm, which is often faster
+
+*Example:*
+ LIB "algebra.lib";
+ ring q=0,(x,y,z,u,v,w),dp;
+ poly p=xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2;
+ ideal I =x-w,u2w+1,yz-v;
+ inSubring(p,I);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> y(1)*y(2)*y(3)+y(2)^2-y(0)+1
+
+
+File: sing.htm, Node: algDependent, Next: alg_kernel, Prev: inSubring, Up:
algebra_lib
+
+D.4.1.4 algDependent
+....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ algDependent(f[,c]); f ideal (say, f = f1,...,fm), c integer
+
+*Return:*
+
+ a list l of size 2, l[1] integer, l[2] ring:
+ - l[1] = 1 if f1,...,fm are algebraic dependent, 0 if not
+ - l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if
the
+ basering has n variables. It contains the ideal 'ker',
depending
+ only on the y(i) and generating the algebraic relations
between the
+ f[i], i.e. substituting y(i) by fi yields 0. Of course, ker is
+ nothing but the kernel of the ring map
+ K[y(1),...,y(m)] --> basering, y(i) -> fi.
+
+*Note:*
+ Three different algorithms are used depending on c = 1,2,3. If c
+ is not given or c=0, a heuristically best method is chosen. The
+ basering may be a quotient ring.
+ To access to the ring l[2] and see ker you must give the ring a
+ name, e.g. def S=l[2]; setring S; ker;
+
+*Display:*
+ The above comment is displayed if printlevel >= 0 (default).
+
+*Example:*
+ LIB "algebra.lib";
+ int p = printlevel; printlevel = 1;
+ ring R = 0,(x,y,z,u,v,w),dp;
+ ideal I = xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2,
+ x-w, u2w+1, yz-v;
+ list l = algDependent(I);
+ ==>
+ ==> // The 2nd element of the list l is a ring with variables
x(1),...,x(n),
+ ==> // and y(1),...,y(m) if the basering has n variables and if the ideal
+ ==> // is f[1],...,f[m]. The ring contains the ideal ker which depends
only
+ ==> // on the y(i) and generates the relations between the f[i].
+ ==> // I.e. substituting y(i) by f[i] yields 0.
+ ==> // To access to the ring and see ker you must give the ring a name,
+ ==> // e.g.:
+ ==> def S = l[2]; setring S; ker;
+ ==>
+ l[1];
+ ==> 1
+ def S = l[2]; setring S;
+ ker;
+ ==> ker[1]=y(2)*y(3)*y(4)+y(3)^2-y(1)+1
+ printlevel = p;
+
+
+File: sing.htm, Node: alg_kernel, Next: is_injective, Prev: algDependent,
Up: algebra_lib
+
+D.4.1.5 alg_kernel
+..................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ alg_kernel(phi,pr[,s,c]); phi map to basering, pr preimage ring, s
+ string (name of kernel in pr), c integer.
+
+*Return:*
+ a string, the kernel of phi as string.
+ If, moreover, a string s is given, the algorithm creates, in the
+ preimage ring pr the kernel of phi with name s.
+ Three different algorithms are used depending on c = 1,2,3. If c
+ is not given or c=0, a heuristically best method is chosen.
+ (algorithm 1 uses the preimage command)
+
+*Note:*
+ Since the kernel of phi lives in pr, it cannot be returned to the
+ basering. If s is given, the user has access to it in pr via s.
+ The basering may be a quotient ring.
+
+*Example:*
+ LIB "algebra.lib";
+ ring r = 0,(a,b,c),ds;
+ ring s = 0,(x,y,z,u,v,w),dp;
+ ideal I = x-w,u2w+1,yz-v;
+ map phi = r,I; // a map from r to s:
+ alg_kernel(phi,r); // a,b,c ---> x-w,u2w+1,yz-v
+ ==> 0
+ ring S = 0,(a,b,c),ds;
+ ring R = 0,(x,y,z),dp;
+ qring Q = std(x-y);
+ ideal i = x, y, x2-y3;
+ map phi = S,i; // a map to a quotient ring
+ alg_kernel(phi,S,"ker",3); // uses algorithm 3
+ ==> a-b,b^3-b^2+c
+ setring S; // you have access to kernel in preimage
+ ker;
+ ==> ker[1]=a-b
+ ==> ker[2]=c-b2+b3
+
+
+File: sing.htm, Node: is_injective, Next: is_surjective, Prev: alg_kernel,
Up: algebra_lib
+
+D.4.1.6 is_injective
+....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ is_injective(phi,pr[,c,s]); phi map, pr preimage ring, c int, s
+ string
+
+*Return:*
+
+ - 1 (type int) if phi is injective, 0 if not (if s is not given).
+ - If s is given, return a list l of size 2, l[1] int, l[2] ring:
+ l[1] is 1 if phi is injective, 0 if not
+ l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if
the
+ basering has n variables and the map m components, it contains
the
+ ideal 'ker', depending only on the y(i), the kernel of the
given map
+
+*Note:*
+ Three different algorithms are used depending on c = 1,2,3. If c
+ is not given or c=0, a heuristically best method is chosen. The
+ basering may be a quotient ring. However, if the preimage ring is a
+ quotient ring, say pr = P/I, consider phi as a map from P and then
+ the algorithm returns 1 if the kernel of phi is 0 mod I. To access
+ to the ring l[2] and see ker you must give the ring a name, e.g.
+ def S=l[2]; setring S; ker;
+
+*Display:*
+ The above comment is displayed if printlevel >= 0 (default).
+
+*Example:*
+ LIB "algebra.lib";
+ int p = printlevel;
+ ring r = 0,(a,b,c),ds;
+ ring s = 0,(x,y,z,u,v,w),dp;
+ ideal I = x-w,u2w+1,yz-v;
+ map phi = r,I; // a map from r to s:
+ is_injective(phi,r); // a,b,c ---> x-w,u2w+1,yz-v
+ ==> 1
+ ring R = 0,(x,y,z),dp;
+ ideal i = x, y, x2-y3;
+ map phi = R,i; // a map from R to itself, z --> x2-y3
+ list l = is_injective(phi,R,"");
+ ==>
+ ==> // The 2nd element of the list is a ring with variables x(1),...,x(n),
+ ==> // y(1),...,y(m) if the basering has n variables and the map is
+ ==> // F[1],...,F[m].
+ ==> // It contains the ideal ker, the kernel of the given map y(i) -->
F[i].
+ ==> // To access to the ring and see ker you must give the ring a name,
+ ==> // e.g.:
+ ==> def S = l[2]; setring S; ker;
+ ==>
+ l[1];
+ ==> 0
+ def S = l[2]; setring S;
+ ker;
+ ==> ker[1]=y(2)^3-y(1)^2+y(3)
+
+
+File: sing.htm, Node: is_surjective, Next: is_bijective, Prev:
is_injective, Up: algebra_lib
+
+D.4.1.7 is_surjective
+.....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ is_surjective(phi); phi map to basering, or ideal defining it
+
+*Return:*
+ an integer, 1 if phi is surjective, 0 if not
+
+*Note:*
+ The algorithm returns 1 iff all the variables of the basering are
+ contained in the polynomial subalgebra generated by the polynomials
+ defining phi. Hence, if the basering has local or mixed ordering or
+ if the preimage ring is a quotient ring (in which case the map may
+ not be well defined) then the return value 1 means
+ "surjectivity" in this sense.
+
+*Example:*
+ LIB "algebra.lib";
+ ring R = 0,(x,y,z),dp;
+ ideal i = x, y, x2-y3;
+ map phi = R,i; // a map from R to itself, z->x2-y3
+ is_surjective(phi);
+ ==> 0
+ qring Q = std(ideal(z-x37));
+ map psi = R, x,y,x2-y3; // the same map to the quotient ring
+ is_surjective(psi);
+ ==> 1
+ ring S = 0,(a,b,c),dp;
+ map psi = R,ideal(a,a+b,c-a2+b3); // a map from R to S,
+ is_surjective(psi); // x->a, y->a+b, z->c-a2+b3
+ ==> 1
+
+
+File: sing.htm, Node: is_bijective, Next: noetherNormal, Prev:
is_surjective, Up: algebra_lib
+
+D.4.1.8 is_bijective
+....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ is_bijective(phi,pr); phi map to basering, pr preimage ring
+
+*Return:*
+ an integer, 1 if phi is bijective, 0 if not
+
+*Note:*
+ The algorithm checks first injectivity and then surjectivity To
+ interpret this for local/mixed orderings, or for quotient rings
+ type help is_surjective; and help is_injective;
+
+*Display:*
+ A comment if printlevel >= voice-1 (default)
+
+*Example:*
+ LIB "algebra.lib";
+ int p = printlevel; printlevel = 1;
+ ring R = 0,(x,y,z),dp;
+ ideal i = x, y, x2-y3;
+ map phi = R,i; // a map from R to itself, z->x2-y3
+ is_bijective(phi,R);
+ ==> // map not injective
+ ==> 0
+ qring Q = std(z-x2+y3);
+ is_bijective(ideal(x,y,x2-y3),Q);
+ ==> 1
+ ring S = 0,(a,b,c,d),dp;
+ map psi = R,ideal(a,a+b,c-a2+b3,0); // a map from R to S,
+ is_bijective(psi,R); // x->a, y->a+b, z->c-a2+b3
+ ==> // map injective, but not surjective
+ ==> 0
+ qring T = std(d,c-a2+b3);
+ ==> // ** _ is no standardbasis
+ map chi = Q,a,b,a2-b3; // amap between two quotient rings
+ is_bijective(chi,Q);
+ ==> 1
+ printlevel = p;
+
+
+File: sing.htm, Node: noetherNormal, Next: mapIsFinite, Prev: is_bijective,
Up: algebra_lib
+
+D.4.1.9 noetherNormal
+.....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ noetherNormal(id[,p]); id ideal, p integer
+
+*Return:*
+
+ a list l two ideals, say I,J:
+ - I is generated by a subset of the variables with size(I) =
dim(id)
+ - J defines a map (coordinate change in the basering), such that:
+ if we define map phi=basering,J;
+ then k[var(1),...,var(n)]/phi(id) is finite over k[I].
+ If p is given, 0<=p<=100, a sparse coordinate change with p
percent
+ of the matrix entries being 0 (default: p=0 i.e. dense)
+
+*Note:*
+ Designed for characteristic 0.It works also in char k > 0 if it
+ terminates,but may result in an infinite loop in small
+ characteristic
+
+*Example:*
+ LIB "algebra.lib";
+ ring r=0,(x,y,z),dp;
+ ideal i= xy,xz;
+ noetherNormal(i);
+ ==> [1]:
+ ==> _[1]=x
+ ==> _[2]=2x+y
+ ==> _[3]=3x+4y+z
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=z
+
+
+File: sing.htm, Node: mapIsFinite, Next: finitenessTest, Prev:
noetherNormal, Up: algebra_lib
+
+D.4.1.10 mapIsFinite
+....................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ mapIsFinite(phi,R[,J]); R a ring, phi: R --> basering a map J an
+ ideal in the basering, J = 0 if not given
+
+*Return:*
+ 1 if R --> basering/J is finite and 0 else
+
+*Example:*
+ LIB "algebra.lib";
+ ring r = 0,(a,b,c),dp;
+ ring s = 0,(x,y,z),dp;
+ ideal i= xy;
+ map phi= r,(xy)^3+x2+z,y2-1,z3;
+ mapIsFinite(phi,r,i);
+ ==> 1
+
+
+File: sing.htm, Node: finitenessTest, Prev: mapIsFinite, Up: algebra_lib
+
+D.4.1.11 finitenessTest
+.......................
+
+Procedure from library `algebra.lib' (*note algebra_lib::).
+
+*Usage:*
+ finitenessTest(J[,v]); J ideal, v intvec (say v1,...,vr with vi>0)
+
+*Return:*
+
+ a list l with l[1] integer, l[2], l[3], l[4] ideals
+ - l[1] = 1 if var(v1),...,var(vr) are in l[2] and 0 else
+ - l[2] (resp. l[3]) contains those variables which occur,
+ (resp. occur not) as pure power in the leading term of one of
the
+ generators of J,
+ - l[4] contains those J[i] for which the leading term is a pure
power
+ of a variable (which is then in l[2])
+ (default: v = [1,2,..,nvars(basering)])
+
+*Theory:*
+ If J is a standard basis of an ideal generated by x_1 - f_1(y),...,
+ x_n - f_n with y_j ordered lexicographically and y_j >> x_i, then,
+ if y_i appears as pure power in the leading term of J[k]. J[k]
+ defines an integral relation for y_i over the y_(i+1),... and the
+ f's. Moreover, in this situation, if l[2] = y_1,...,y_r, then
+ K[y_1,...y_r] is finite over K[f_1..f_n]. If J contains furthermore
+ polynomials h_j(y), then K[y_1,...y_z]/<h_j> is finite over
+ K[f_1..f_n].
+
+*Example:*
+ LIB "algebra.lib";
+ ring s = 0,(x,y,z,a,b,c),(lp(3),dp);
+ ideal i= a -(xy)^3+x2-z, b -y2-1, c -z3;
+ ideal j = a -(xy)^3+x2-z, b -y2-1, c -z3, xy;
+ finitenessTest(std(i),1..3);
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=z
+ ==> [3]:
+ ==> _[1]=x
+ ==> _[2]=a
+ ==> _[3]=b
+ ==> _[4]=c
+ ==> [4]:
+ ==> _[1]=z3-c
+ ==> _[2]=y2-b+1
+ finitenessTest(std(j),1..3);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> _[1]=x
+ ==> _[2]=y
+ ==> _[3]=z
+ ==> [3]:
+ ==> _[1]=a
+ ==> _[2]=b
+ ==> _[3]=c
+ ==> [4]:
+ ==> _[1]=z3-c
+ ==> _[2]=y2-b+1
+ ==> _[3]=x2-z+a
+
+
+File: sing.htm, Node: elim_lib, Next: homolog_lib, Prev: algebra_lib, Up:
Commutative algebra
+
+D.4.2 elim_lib
+--------------
+
+*Library:*
+ elim.lib
+
+*Purpose:*
+ Elimination, Saturation and Blowing up
+
+*Procedures:*
+
+* Menu:
+
+* blowup0:: create presentation of blownup ring of ideal j
+* elim:: variable n..m eliminated from id (ideal/module)
+* elim1:: p=product of vars to be eliminated from id
+* nselect:: select generators not containing n-th [..m-th] variable
+* sat:: saturated quotient of ideal/module id by ideal j
+* select:: select generators containing all variables n...m
+* select1:: select generators containing one variable n...m
+
+
+File: sing.htm, Node: blowup0, Next: elim, Up: elim_lib
+
+D.4.2.1 blowup0
+...............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ blowup0(j[,s1,s2]); j ideal, s1,s2 nonempty strings
+
+*Create:*
+ Create a presentation of the blowup ring of j
+
+*Return:*
+ no return value
+
+*Note:*
+ s1 and s2 are used to give names to the blownup ring and the
+ blownup ideal (default: s1="j", s2="A")
+ Assume R = char,x(1..n),ord is the basering of j, and s1="j",
+ s2="A" then the procedure creates a new ring with name Bl_jR
+ (equal to R[A,B,...])
+ Bl_jR = char,(A,B,...,x(1..n)),(dp(k),ord)
+ with k=ncols(j) new variables A,B,... and ordering wp(d1..dk) if j
+ is homogeneous with deg(j[i])=di resp. dp otherwise for these vars.
+ If k>26 or size(s2)>1, say s2="A()", the new vars are
+ A(1),...,A(k). Let j_ be the kernel of the ring map Bl_jR -> R
+ defined by A(i)->j[i], x(i)->x(i), then the quotient ring Bl_jR/j_
+ is the blowup ring of j in R (being isomorphic to R+j+j^2+...).
+ Moreover the procedure creates a std basis of j_ with name j_ in
+ Bl_jR.
+ This proc uses 'execute' or calls a procedure using 'execute'.
+
+*Display:*
+ printlevel >=0: explain created objects (default)
+
+*Example:*
+ LIB "elim.lib";
+ ring R=0,(x,y),dp;
+ poly f=y2+x3; ideal j=jacob(f);
+ blowup0(j);
+ ==>
+ ==> // The proc created the ring Bl_jR (equal to R[A,B])
+ ==> // it contains the ideal j_ , such that
+ ==> // Bl_jR/j_ is the blowup ring
+ ==> // show(Bl_jR); shows this ring.
+ ==> // Make Bl_jR the basering and see j_ by typing:
+ ==> setring Bl_jR;
+ ==> j_;
+ show(Bl_jR);
+ ==> // ring: (0),(A,B,x,y),(wp(2,1),dp(2),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // j_ [0] ideal, 1 generator(s)
+ setring Bl_jR;
+ j_;"";
+ ==> j_[1]=2Ay-3Bx2
+ ==>
+ ring r=32003,(x,y,z),ds;
+ blowup0(maxideal(1),"m","T()");
+ ==>
+ ==> // The proc created the ring Bl_mr (equal to r[T(1..3)])
+ ==> // it contains the ideal m_ , such that
+ ==> // Bl_mr/m_ is the blowup ring
+ ==> // show(Bl_mr); shows this ring.
+ ==> // Make Bl_mr the basering and see m_ by typing:
+ ==> setring Bl_mr;
+ ==> m_;
+ show(Bl_mr);
+ ==> // ring: (32003),(T(1),T(2),T(3),x,y,z),(wp(1,1,1),ds(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // m_ [0] ideal, 3 generator(s)
+ setring Bl_mr;
+ m_;
+ ==> m_[1]=T(1)y-T(2)x
+ ==> m_[2]=T(1)z-T(3)x
+ ==> m_[3]=T(2)z-T(3)y
+ kill Bl_jR, Bl_mr;
+
+
+File: sing.htm, Node: elim, Next: elim1, Prev: blowup0, Up: elim_lib
+
+D.4.2.2 elim
+............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ elim(id,n,m); id ideal/module, n,m integers
+
+*Returns:*
+ ideal/module obtained from id by eliminating variables n..m
+
+*Note:*
+ no special monomial ordering is required, result is a SB with
+ respect to ordering dp (resp. ls) if the first var not to be
+ eliminated belongs to a -p (resp. -s) block ordering
+ This proc uses 'execute' or calls a procedure using 'execute'.
+
+*Example:*
+ LIB "elim.lib";
+ ring r=0,(x,y,u,v,w),dp;
+ ideal i=x-u,y-u2,w-u3,v-x+y3;
+ elim(i,3,4);
+ ==> _[1]=y2-xw
+ ==> _[2]=xy-w
+ ==> _[3]=x2-y
+ module m=i*gen(1)+i*gen(2);
+ m=elim(m,3,4);show(m);
+ ==> // module, 6 generator(s)
+ ==> [y2-xw]
+ ==> [0,y2-xw]
+ ==> [xy-w]
+ ==> [0,xy-w]
+ ==> [x2-y]
+ ==> [0,x2-y]
+
+* Menu:
+
+See also:
+* elim1::
+* eliminate::
+
+*See also:* *note elim1::; *note eliminate::.
+
+
+File: sing.htm, Node: elim1, Next: nselect, Prev: elim, Up: elim_lib
+
+D.4.2.3 elim1
+.............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ elim1(id,p); id ideal/module, p product of vars to be eliminated
+
+*Return:*
+ ideal/module obtained from id by eliminating vars occurring in poly
+
+*Note:*
+ no special monomial ordering is required, result is a SB with
+ respect to ordering dp (resp. ls) if the first var not to be
+ eliminated belongs to a -p (resp. -s) block ordering
+ This proc uses 'execute' or calls a procedure using 'execute'.
+
+*Example:*
+ LIB "elim.lib";
+ ring r=0,(x,y,t,s,z),dp;
+ ideal i=x-t,y-t2,z-t3,s-x+y3;
+ elim1(i,ts);
+ ==> _[1]=y2-xz
+ ==> _[2]=xy-z
+ ==> _[3]=x2-y
+ module m=i*gen(1)+i*gen(2);
+ m=elim1(m,st); show(m);
+ ==> // module, 6 generator(s)
+ ==> [y2-xz]
+ ==> [0,y2-xz]
+ ==> [xy-z]
+ ==> [0,xy-z]
+ ==> [x2-y]
+ ==> [0,x2-y]
+
+* Menu:
+
+See also:
+* elim::
+* eliminate::
+
+*See also:* *note elim::; *note eliminate::.
+
+
+File: sing.htm, Node: nselect, Next: sat, Prev: elim1, Up: elim_lib
+
+D.4.2.4 nselect
+...............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ nselect(id,n[,m]); id a module or ideal, n, m integers
+
+*Return:*
+ generators of id not containing the variable n [up to m]
+
+*Example:*
+ LIB "elim.lib";
+ ring r=0,(x,y,t,s,z),(c,dp);
+ ideal i=x-y,y-z2,z-t3,s-x+y3;
+ nselect(i,3);
+ ==> _[1]=x-y
+ ==> _[2]=-z2+y
+ ==> _[3]=y3-x+s
+ module m=i*(gen(1)+gen(2));
+ show(m);
+ ==> // module, 4 generator(s)
+ ==> [x-y,x-y]
+ ==> [-z2+y,-z2+y]
+ ==> [-t3+z,-t3+z]
+ ==> [y3-x+s,y3-x+s]
+ show(nselect(m,3,4));
+ ==> // module, 2 generator(s)
+ ==> [x-y,x-y]
+ ==> [-z2+y,-z2+y]
+
+* Menu:
+
+See also:
+* select::
+* select1::
+
+*See also:* *note select::; *note select1::.
+
+
+File: sing.htm, Node: sat, Next: select, Prev: nselect, Up: elim_lib
+
+D.4.2.5 sat
+...........
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ sat(id,j); id=ideal/module, j=ideal
+
+*Return:*
+ list of an ideal/module [1] and an integer [2]:
+ [1] = saturation of id with respect to j (= union_(k=1...) of
+ id:j^k) [2] = saturation exponent (= min( k | id:j^k = id:j^(k+1)
+ ))
+
+*Note:*
+ [1] is a standard basis in the basering
+
+*Display:*
+ saturation exponent during computation if printlevel >=1
+
+*Example:*
+ LIB "elim.lib";
+ int p = printlevel;
+ ring r = 2,(x,y,z),dp;
+ poly F = x5+y5+(x-y)^2*xyz;
+ ideal j = jacob(F);
+ sat(j,maxideal(1));
+ ==> [1]:
+ ==> _[1]=x3+x2y+xy2+y3
+ ==> _[2]=y4+x2yz+y3z
+ ==> _[3]=x2y2+x2yz+y3z
+ ==> [2]:
+ ==> 4
+ printlevel = 2;
+ sat(j,maxideal(2));
+ ==> // compute quotient 1
+ ==> // compute quotient 2
+ ==> // compute quotient 3
+ ==> // saturation becomes stable after 2 iteration(s)
+ ==>
+ ==> [1]:
+ ==> _[1]=x3+x2y+xy2+y3
+ ==> _[2]=y4+x2yz+y3z
+ ==> _[3]=x2y2+x2yz+y3z
+ ==> [2]:
+ ==> 2
+ printlevel = p;
+
+
+File: sing.htm, Node: select, Next: select1, Prev: sat, Up: elim_lib
+
+D.4.2.6 select
+..............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ select(id,n[,m]); id ideal/module, n, m integers
+
+*Return:*
+ generators of id containing the variable n [all variables up to m]
+
+*Note:*
+ use 'select1' for selecting generators containing at least one of
+ the variables between n and m
+
+*Example:*
+ LIB "elim.lib";
+ ring r=0,(x,y,t,s,z),(c,dp);
+ ideal i=x-y,y-z2,z-t3,s-x+y3;
+ ideal j=select(i,1);
+ j;
+ ==> j[1]=x-y
+ ==> j[2]=y3-x+s
+ module m=i*(gen(1)+gen(2));
+ m;
+ ==> m[1]=[x-y,x-y]
+ ==> m[2]=[-z2+y,-z2+y]
+ ==> m[3]=[-t3+z,-t3+z]
+ ==> m[4]=[y3-x+s,y3-x+s]
+ select(m,1,2);
+ ==> _[1]=[x-y,x-y]
+ ==> _[2]=[y3-x+s,y3-x+s]
+
+* Menu:
+
+See also:
+* nselect::
+* select1::
+
+*See also:* *note nselect::; *note select1::.
+
+
+File: sing.htm, Node: select1, Prev: select, Up: elim_lib
+
+D.4.2.7 select1
+...............
+
+Procedure from library `elim.lib' (*note elim_lib::).
+
+*Usage:*
+ select1(id,n[,m]); id ideal/module, n, m integers
+
+*Return:*
+ generators of id containing the variable n
+ [at least one of the variables up to m]
+
+*Note:*
+ use 'select' for selecting generators containing all the variables
+ between n and m
+
+*Example:*
+ LIB "elim.lib";
+ ring r=0,(x,y,t,s,z),(c,dp);
+ ideal i=x-y,y-z2,z-t3,s-x+y3;
+ ideal j=select1(i,1);
+ j;
+ ==> j[1]=x-y
+ ==> j[2]=y3-x+s
+ module m=i*(gen(1)+gen(2));
+ m;
+ ==> m[1]=[x-y,x-y]
+ ==> m[2]=[-z2+y,-z2+y]
+ ==> m[3]=[-t3+z,-t3+z]
+ ==> m[4]=[y3-x+s,y3-x+s]
+ select1(m,1,2);
+ ==> _[1]=[x-y,x-y]
+ ==> _[2]=[-z2+y,-z2+y]
+ ==> _[3]=[y3-x+s,y3-x+s]
+
+* Menu:
+
+See also:
+* nselect::
+* select::
+
+*See also:* *note nselect::; *note select::.
+
+
+File: sing.htm, Node: homolog_lib, Next: mprimdec_lib, Prev: elim_lib, Up:
Commutative algebra
+
+D.4.3 homolog_lib
+-----------------
+
+*Library:*
+ homolog.lib
+
+*Purpose:*
+ Procedures for Homological Algebra
+
+*Authors:*
+ Gert-Martin Greuel, address@hidden,
+ Bernd Martin, address@hidden
+ Christoph Lossen, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* cup:: cup: Ext^1(M',M') x Ext^1() -> Ext^2()
+* cupproduct:: cup: Ext^p(M',N') x Ext^q(N',P') -> Ext^p+q(M',P')
+* depth:: depth(I,M'), I ideal, M module, M'=coker(M)
+* Ext_R:: Ext^k(M',R), M module, R basering, M'=coker(M)
+* Ext:: Ext^k(M',N'), M,N modules, M'=coker(M), N'=coker(N)
+* fitting:: n-th Fitting ideal of M'=coker(M), M module, n int
+* flatteningStrat:: Flattening stratification of M'=coker(M), M module
+* Hom:: Hom(M',N'), M,N modules, M'=coker(M), N'=coker(N)
+* homology:: ker(B)/im(A), homology of complex R^k-A->M'-B->N'
+* isCM:: test if coker(M) is Cohen-Macaulay, M module
+* isFlat:: test if coker(M) is flat, M module
+* isLocallyFree:: test if coker(M) is locally free of constant rank r
+* isReg:: test if I is coker(M)-sequence, I ideal, M module
+* kernel:: ker(M'-A->N') M,N modules, A matrix
+* kohom:: Hom(R^k,A), A matrix over basering R
+* kontrahom:: Hom(A,R^k), A matrix over basering R
+* KoszulHomology:: n-th Koszul homology H_n(I,coker(M)), I=ideal
+* tensorMod:: Tensor product of modules M'=coker(M), N'=coker(N)
+* Tor:: Tor_k(M',N'), M,N modules, M'=coker(M), N'=coker(N)
+
+
+File: sing.htm, Node: cup, Next: cupproduct, Up: homolog_lib
+
+D.4.3.1 cup
+...........
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ cup(M,[,any,any]); M=module
+
+*Compute:*
+ cup-product Ext^1(M',M') x Ext^1(M',M') --> Ext^2(M',M'), where
+ M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M))).
+ If called with >= 2 arguments: compute symmetrized cup-product
+
+*Assume:*
+ all Ext's are finite dimensional
+
+*Return:*
+ - if called with 1 argument: matrix, the columns of the output
+ present the coordinates of b_i&b_j with respect to a kbase of
+ Ext^2, where b_1,b_2,... is a kbase of Ext^1 and & denotes cup
+product;
+ - if called with 2 arguments: matrix, the columns of the output
+ present the coordinates of (1/2)(b_i&b_j + b_j&b_i) with respect to
+ a kbase of Ext^2;
+ - if called with 3 arguments: list,
+
+ L[1] = matrix see above (symmetric case, for >=2 arguments)
+ L[2] = matrix of kbase of Ext^1
+ L[3] = matrix of kbase of Ext^2
+
+*Note:*
+ printlevel >=1; shows what is going on.
+ printlevel >=2; shows result in another representation.
+ For computing cupproduct of M itself, apply proc to syz(M)!
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ ring rr = 32003,(x,y,z),(dp,C);
+ ideal I = x4+y3+z2;
+ qring o = std(I);
+ module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2];
+ print(cup(M));
+ ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
+ ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
+ print(cup(M,1));
+ ==> 0,1,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,1,0,0,0,0,0,0
+ // 2nd EXAMPLE (shows what is going on)
+ printlevel = 3;
+ ring r = 0,(x,y),(dp,C);
+ ideal i = x2-y3;
+ qring q = std(i);
+ module M = [-x,y],[-y2,x];
+ print(cup(M));
+ ==> // vdim (Ext^1) = 2
+ ==> // kbase of Ext^1(M,M)
+ ==> // - the columns present the kbase elements in Hom(F(1),F(0))
+ ==> // - F(*) a free resolution of M
+ ==> -1,0,
+ ==> 0, y,
+ ==> 0, 1,
+ ==> -1,0
+ ==> // lift kbase of Ext^1:
+ ==> // - the columns present liftings of kbase elements into
Hom(F(2),F(1))
+ ==> // - F(*) a free resolution of M
+ ==> 1,0,
+ ==> 0,y,
+ ==> 0,1,
+ ==> 1,0
+ ==> // vdim (Ext^2) = 2
+ ==> // kbase of Ext^2(M,M)
+ ==> // - the columns present the kbase elements in Hom(F(2),F(0))
+ ==> // - F(*) is a a free resolution of M
+ ==> -1,0,
+ ==> 0, y,
+ ==> 0, 1,
+ ==> -1,0
+ ==> // matrix of cup-products (in Ext^2)
+ ==> 0,-1,0, 0,y,
+ ==> 0,0, -y,y,0,
+ ==> 0,0, -1,1,0,
+ ==> 0,-1,0, 0,y
+ ==> ////// end level 2 //////
+ ==> // the associated matrices of the bilinear mapping 'cup'
+ ==> // corresponding to the kbase elements of Ext^2(M,M) are shown,
+ ==> // i.e. the rows of the final matrix are written as matrix of
+ ==> // a bilinear form on Ext^1 x Ext^1
+ ==> //-----component 1:
+ ==> 0,1,
+ ==> 0,0
+ ==> //-----component 2:
+ ==> 0, 0,
+ ==> -1,1
+ ==> ////// end level 3 //////
+ ==> 0,1,0, 0,0,
+ ==> 0,0,-1,1,0
+ printlevel = p;
+
+
+File: sing.htm, Node: cupproduct, Next: depth, Prev: cup, Up: homolog_lib
+
+D.4.3.2 cupproduct
+..................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ cupproduct(M,N,P,p,q[,any]); M,N,P modules, p,q integers
+
+*Compute:*
+ cup-product Ext^p(M',N') x Ext^q(N',P') --> Ext^p+q(M',P'), where
+ M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M)))
+
+*Assume:*
+ all Ext's are of finite dimension
+
+*Return:*
+ - if called with 5 arguments: matrix of the associated linear map
+ Ext^p (tensor) Ext^q -> Ext^p+q, i.e. the columns of <matrix>
+ present the coordinates of the cup products (b_i & c_j) with
+ respect to a kbase of Ext^p+q (b_i resp. c_j are the choosen bases
+ of Ext^p, resp. Ext^q).
+ - if called with 6 arguments: list L,
+
+ L[1] = matrix (see above)
+ L[2] = matrix of kbase of Ext^p(M',N')
+ L[3] = matrix of kbase of Ext^q(N',P')
+ L[4] = matrix of kbase of Ext^p+q(N',P')
+
+*Note:*
+ printlevel >=1; shows what is going on.
+ printlevel >=2; shows the result in another representation.
+ For computing the cupproduct of M,N itself, apply proc to syz(M),
+ syz(N)!
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ ring rr = 32003,(x,y,z),(dp,C);
+ ideal I = x4+y3+z2;
+ qring o = std(I);
+ module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2];
+ print(cupproduct(M,M,M,1,3));
+ ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
+ ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
+ printlevel = 3;
+ list l = (cupproduct(M,M,M,1,3,"any"));
+ ==> // vdim Ext(M,N) = 4
+ ==> // kbase of Ext^p(M,N)
+ ==> // - the columns present the kbase elements in Hom(F(p),G(0))
+ ==> // - F(*),G(*) are free resolutions of M and N
+ ==> 0, 0, 1, 0,
+ ==> 0, y, 0, 0,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, y,
+ ==> 0, -1,0, 0,
+ ==> 0, 0, x2,0,
+ ==> 0, 0, 0, -x2,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, -1,
+ ==> -1,0, 0, 0,
+ ==> 0, 1, 0, 0,
+ ==> 0, 0, 1, 0,
+ ==> -1,0, 0, 0,
+ ==> 0, 0, 0, x2y,
+ ==> 0, 0, x2,0,
+ ==> 0, -y,0, 0
+ ==> // vdim Ext(N,P) = 4
+ ==> // kbase of Ext(N,P):
+ ==> 0, 0, 1, 0,
+ ==> 0, 0, 0, y,
+ ==> 1, 0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, -1,0, 0,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, -x2,
+ ==> 0, 0, -x2,0,
+ ==> 0, 0, 0, -1,
+ ==> 0, 0, 1, 0,
+ ==> 0, 1, 0, 0,
+ ==> 1, 0, 0, 0,
+ ==> -1,0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, 0, x2, 0,
+ ==> 0, 0, 0, -x2y
+ ==> // kbase of Ext^q(N,P)
+ ==> // - the columns present the kbase elements in Hom(G(q),H(0))
+ ==> // - G(*),H(*) are free resolutions of N and P
+ ==> 0, 0, 1, 0,
+ ==> 0, 0, 0, y,
+ ==> 1, 0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, -1,0, 0,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, -x2,
+ ==> 0, 0, -x2,0,
+ ==> 0, 0, 0, -1,
+ ==> 0, 0, 1, 0,
+ ==> 0, 1, 0, 0,
+ ==> 1, 0, 0, 0,
+ ==> -1,0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, 0, x2, 0,
+ ==> 0, 0, 0, -x2y
+ ==> // vdim Ext(M,P) = 4
+ ==> // kbase of Ext^p+q(M,P)
+ ==> // - the columns present the kbase elements in Hom(F(p+q),H(0))
+ ==> // - F(*),H(*) are free resolutions of M and P
+ ==> 0, 0, 1, 0,
+ ==> 0, 0, 0, y,
+ ==> 1, 0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, -1,0, 0,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, -x2,
+ ==> 0, 0, -x2,0,
+ ==> 0, 0, 0, -1,
+ ==> 0, 0, 1, 0,
+ ==> 0, 1, 0, 0,
+ ==> 1, 0, 0, 0,
+ ==> -1,0, 0, 0,
+ ==> 0, -y,0, 0,
+ ==> 0, 0, x2, 0,
+ ==> 0, 0, 0, -x2y
+ ==> // lifting of kbase of Ext^p(M,N)
+ ==> // - the columns present liftings of kbase elements in
Hom(F(p+q),G(q))
+ ==> 1,0, 0, 0,
+ ==> 0,-y,0, 0,
+ ==> 0,0, x2,0,
+ ==> 0,0, 0, x2y,
+ ==> 0,1, 0, 0,
+ ==> 1,0, 0, 0,
+ ==> 0,0, 0, -x2,
+ ==> 0,0, x2,0,
+ ==> 0,0, -1,0,
+ ==> 0,0, 0, y,
+ ==> 1,0, 0, 0,
+ ==> 0,y, 0, 0,
+ ==> 0,0, 0, -1,
+ ==> 0,0, -1,0,
+ ==> 0,-1,0, 0,
+ ==> 1,0, 0, 0
+ ==> // matrix of cup-products (in Ext^p+q)
+ ==> 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0,
+ ==> 0,0, 0, 0, y, 0, 0, y, 0, 0, -y, 0, 0, y, 0, 0, 0,
+ ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
+ ==> 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0,
+ ==> 0,0, 1, 0, 0, -1,0, 0, 0, 0, 0, 0, x2, 0, 0, x2, 0,
+ ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
+ ==> 0,0, 0, 0, -x2, 0, 0, -x2, 0, 0, x2, 0, 0, -x2, 0, 0, 0,
+ ==> 0,0, 0, x2, 0, 0, 0, 0, -x2y,-x2,0, 0, 0, 0, -x2y,0, 0,
+ ==> 0,0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0,
+ ==> 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0,
+ ==> 0,0, -1,0, 0, 1, 0, 0, 0, 0, 0, 0, -x2,0, 0, -x2,0,
+ ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
+ ==> 0,-1,0, 0, 0, 0, -y,0, 0, 0, 0, -x2,0, 0, 0, 0, x2y,
+ ==> 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0,
+ ==> 0,0, 0, -x2,0, 0, 0, 0, x2y, x2, 0, 0, 0, 0, x2y, 0, 0,
+ ==> 0,0, 0, 0, -x2y,0, 0, -x2y,0, 0, x2y,0, 0, -x2y,0, 0, 0
+ ==> ////// end level 2 //////
+ ==> // the associated matrices of the bilinear mapping 'cup'
+ ==> // corresponding to the kbase elements of Ext^p+q(M,P) are shown,
+ ==> // i.e. the rows of the final matrix are written as matrix of
+ ==> // a bilinear form on Ext^p x Ext^q
+ ==> //----component 1:
+ ==> 0,1,0,0,
+ ==> 0,0,0,0,
+ ==> 0,0,0,0,
+ ==> 0,0,0,0
+ ==> //----component 2:
+ ==> 0,0,-1,0,
+ ==> 0,1,0, 0,
+ ==> 0,0,0, 0,
+ ==> 0,0,0, 0
+ ==> //----component 3:
+ ==> 0,0,0,-1,
+ ==> 0,0,0,0,
+ ==> 0,1,0,0,
+ ==> 0,0,0,0
+ ==> //----component 4:
+ ==> 0,0,0, 0,
+ ==> 1,0,0, 1,
+ ==> 0,0,-1,0,
+ ==> 0,1,0, 0
+ ==> ////// end level 3 //////
+ show(l[1]);show(l[2]);
+ ==> // matrix, 4x17
+ ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
+ ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
+ ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
+ ==> // matrix, 16x4
+ ==> 0, 0, 1, 0,
+ ==> 0, y, 0, 0,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, y,
+ ==> 0, -1,0, 0,
+ ==> 0, 0, x2,0,
+ ==> 0, 0, 0, -x2,
+ ==> 1, 0, 0, 0,
+ ==> 0, 0, 0, -1,
+ ==> -1,0, 0, 0,
+ ==> 0, 1, 0, 0,
+ ==> 0, 0, 1, 0,
+ ==> -1,0, 0, 0,
+ ==> 0, 0, 0, x2y,
+ ==> 0, 0, x2,0,
+ ==> 0, -y,0, 0
+ printlevel = p;
+
+
+File: sing.htm, Node: depth, Next: Ext_R, Prev: cupproduct, Up: homolog_lib
+
+D.4.3.3 depth
+.............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ depth(M,[I]); M module, I ideal
+
+*Return:*
+ int,
+ - if called with 1 argument: the depth of M'=coker(M) w.r.t. the
+ maxideal in the basering (which is then assumed to be local)
+ - if called with 2 arguments: the depth of M'=coker(M) w.r.t. the
+ ideal I.
+
+*Note:*
+ procedure makes use of KoszulHomology.
+
+*Example:*
+ LIB "homolog.lib";
+ ring R=0,(x,y,z),dp;
+ ideal I=x2,xy,yz;
+ module M=0;
+ depth(M,I); // depth(<x2,xy,yz>,Q[x,y,z])
+ ==> 2
+ ring r=0,(x,y,z),ds; // local ring
+ matrix M[2][2]=x,xy,1+yz,0;
+ print(M);
+ ==> x, xy,
+ ==> 1+yz,0
+ depth(M); // depth(maxideal,coker(M))
+ ==> 2
+ ideal I=x;
+ depth(M,I); // depth(<x>,coker(M))
+ ==> 0
+ I=x+z;
+ depth(M,I); // depth(<x+z>,coker(M))
+ ==> 1
+
+
+File: sing.htm, Node: Ext_R, Next: Ext, Prev: depth, Up: homolog_lib
+
+D.4.3.4 Ext_R
+.............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ Ext_R(v,M[,p]); v int resp. intvec , M module, p int
+
+*Compute:*
+ A presentation of Ext^k(M',R); for k=v[1],v[2],..., M'=coker(M).
+ Let
+
+ 0 <-- M' <-- F0 <-M-- F1 <-- F2 <-- ...
+
+ be a free resolution of M'. If
+
+ 0 --> F0* -A1-> F1* -A2-> F2* -A3-> ...
+
+ is the dual sequence, Fi*=Hom(Fi,R), then Ext^k = ker(Ak+1)/im(Ak)
+ is presented as in the following exact sequences:
+
+ R^p --syz(Ak+1)-> Fk* ---Ak+1----> Fk+1* ,
+ R^q ----Ext^k---> R^p --syz(Ak+1)-> Fk*/im(Ak).
+
+ Hence, Ext^k=modulo(syz(Ak+1),Ak) presents Ext^k(M',R).
+
+*Return:*
+ - module Ext, a presentation of Ext^k(M',R) if v is of type int
+ - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.
+ - In case of a third argument of type int return a list l:
+
+ l[1] = module Ext^k resp. list of Ext^k
+ l[2] = SB of Ext^k resp. list of SB of Ext^k
+ l[3] = matrix resp. list of matrices, each representing a kbase of
Ext^k
+ (if finite dimensional)
+
+*Display:*
+ printlevel >=0: (affine) dimension of Ext^k for each k (default)
+ printlevel >=1: Ak, Ak+1 and kbase of Ext^k in Fk*
+
+*Note:*
+ In order to compute Ext^k(M,R) use the command Ext_R(k,syz(M)); or
+ the 2 commands: list L=mres(M,2); Ext_R(k,L[2]);
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 0,(x,y,z),dp;
+ ideal i = x2y,y2z,z3x;
+ module E = Ext_R(1,i); //computes Ext^1(r/i,r)
+ ==> // Computing Ext^1:
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
+ ==> // then F1*-->F2* is given by:
+ ==> x2, -yz,0,
+ ==> 0, z3, -xy,
+ ==> xz2,0, -y2
+ ==> // and F0*-->F1* is given by:
+ ==> y2z,
+ ==> x2y,
+ ==> xz3
+ ==>
+ ==> // dimension of Ext^1: -1
+ ==>
+ is_zero(E);
+ ==> 1
+ qring R = std(x2+yz);
+ intvec v = 0,2;
+ printlevel = 2; //shows what is going on
+ ideal i = x,y,z; //computes Ext^i(r/(x,y,z),r/(x2+yz)), i=0,2
+ list L = Ext_R(v,i,1); //over the qring R=r/(x2+yz), std and kbase
+ ==> // Computing Ext^0:
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
+ ==> // then F0*-->F1* is given by:
+ ==> z,
+ ==> y,
+ ==> x
+ ==> // and F-1*-->F0* is given by:
+ ==> 0
+ ==>
+ ==> // dimension of Ext^0: -1
+ ==>
+ ==> // columns of matrix are kbase of Ext^0 in F0*:
+ ==> 0
+ ==>
+ ==> // Computing Ext^2:
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
+ ==> // then F2*-->F3* is given by:
+ ==> x,-y,z, 0,
+ ==> z,x, 0, z,
+ ==> 0,0, x, y,
+ ==> 0,0, -z,x
+ ==> // and F1*-->F2* is given by:
+ ==> y,-z,0,
+ ==> x,0, -z,
+ ==> 0,x, -y,
+ ==> 0,z, x
+ ==>
+ ==> // dimension of Ext^2: 0
+ ==> // vdim of Ext^2: 1
+ ==>
+ ==> // columns of matrix are kbase of Ext^2 in F2*:
+ ==> x,
+ ==> -z,
+ ==> 0,
+ ==> 0
+ ==>
+ printlevel = p;
+
+
+File: sing.htm, Node: Ext, Next: fitting, Prev: Ext_R, Up: homolog_lib
+
+D.4.3.5 Ext
+...........
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ Ext(v,M,N[,any]); v int resp. intvec, M,N modules
+
+*Compute:*
+ A presentation of Ext^k(M',N'); for k=v[1],v[2],... where
+ M'=coker(M) and N'=coker(N). Let
+
+ 0 <-- M' <-- F0 <-M-- F1 <-- F2 <--... ,
+ 0 <-- N' <-- G0 <--N- G1
+
+ be a free resolution of M', resp. a presentation of N'. Consider
+ the commutative diagram
+
+ 0 0 0
+ |^ |^ |^
+ --> Hom(Fk-1,N') -Ak-> Hom(Fk,N') -Ak+1-> Hom(Fk+1,N')
+ |^ |^ |^
+ --> Hom(Fk-1,G0) -Ak-> Hom(Fk,G0) -Ak+1-> Hom(Fk+1,G0)
+ |^ |^
+ |C |B
+ Hom(Fk,G1) ------> Hom(Fk+1,G1)
+
+ (Ak,Ak+1 induced by M and B,C induced by N).
+
+ Let K=modulo(Ak+1,B), J=module(Ak)+module(C) and Ext=modulo(K,J),
+ then we have exact sequences
+
+ R^p --K-> Hom(Fk,G0) --Ak+1-> Hom(Fk+1,G0)/im(B),
+
+ R^q -Ext-> R^p --K-> Hom(Fk,G0)/(im(Ak)+im(C)).
+
+ Hence, Ext presents Ext^k(M',N').
+
+*Return:*
+ - module Ext, a presentation of Ext^k(M',N') if v is of type int
+ - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.
+ - In case of a third argument of any type return a list l:
+
+ l[1] = module Ext/list of Ext^k
+ l[2] = SB of Ext/list of SB of Ext^k
+ l[3] = matrix/list of matrices, each representing a kbase of
Ext^k
+ (if finite dimensional)
+
+*Display:*
+ printlevel >=0: dimension, vdim of Ext^k for each k (default).
+ printlevel >=1: matrices Ak, Ak+1 and kbase of Ext^k in Hom(Fk,G0)
+ (if finite dimensional)
+
+*Note:*
+ In order to compute Ext^k(M,N) use the command
+ Ext(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2);
+ Ext(k,P[2],Q[2]);
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 0,(x,y),dp;
+ ideal i = x2-y3;
+ ideal j = x2-y5;
+ list E = Ext(0..2,i,j); // Ext^k(r/i,r/j) for k=0,1,2 over r
+ ==> // Computing Ext^0 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F0,G0)-->Hom(F1,G0) is given by:
+ ==> y3-x2
+ ==> // and Hom(F-1,G0) + Hom(F0,G1)-->Hom(F0,G0) is given by:
+ ==> 0,-y5+x2
+ ==>
+ ==> // dimension of Ext^0: -1
+ ==>
+ ==> // Computing Ext^1 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F1,G0)-->Hom(F2,G0) is given by:
+ ==> 0
+ ==> // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by:
+ ==> y3-x2,-y5+x2
+ ==>
+ ==> // dimension of Ext^1: 0
+ ==> // vdim of Ext^1: 10
+ ==>
+ ==> // Computing Ext^2 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F2,G0)-->Hom(F3,G0) is given by:
+ ==> 1
+ ==> // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by:
+ ==> 0,-y5+x2
+ ==>
+ ==> // dimension of Ext^2: -1
+ ==>
+ qring R = std(i);
+ ideal j = fetch(r,j);
+ module M = [-x,y],[-y2,x];
+ printlevel = 2;
+ module E1 = Ext(1,M,j); // Ext^1(R^2/M,R/j) over R=r/i
+ ==> // Computing Ext^1 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F1,G0)-->Hom(F2,G0) is given by:
+ ==> x, -y,
+ ==> y2,-x
+ ==> // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by:
+ ==> x, -y,-y5+x2,0,
+ ==> y2,-x,0, -y5+x2
+ ==>
+ ==> // dimension of Ext^1: -1
+ ==>
+ list l = Ext(4,M,M,1); // Ext^4(R^2/M,R^2/M) over R=r/i
+ ==> // Computing Ext^4 (help Ext; gives an explanation):
+ ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
+ ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
+ ==> // then Hom(F4,G0)-->Hom(F5,G0) is given by:
+ ==> x, -y,0, 0,
+ ==> y2,-x,0, 0,
+ ==> 0, 0, x, -y,
+ ==> 0, 0, y2,-x
+ ==> // and Hom(F3,G0) + Hom(F4,G1)-->Hom(F4,G0) is given by:
+ ==> x, -y,0, 0, -x,0, -y2,0,
+ ==> y2,-x,0, 0, 0, -x,0, -y2,
+ ==> 0, 0, x, -y,y, 0, x, 0,
+ ==> 0, 0, y2,-x,0, y, 0, x
+ ==>
+ ==> // dimension of Ext^4: 0
+ ==> // vdim of Ext^4: 2
+ ==>
+ ==> // columns of matrix are kbase of Ext^4 in Hom(F4,G0)
+ ==> 1,0,
+ ==> 0,y,
+ ==> 0,1,
+ ==> 1,0
+ ==>
+ ==> // element 1 of kbase of Ext^4 in Hom(F4,G0)
+ ==> // as matrix: F4-->G0
+ ==> 1,0,
+ ==> 0,1
+ ==> // element 2 of kbase of Ext^4 in Hom(F4,G0)
+ ==> // as matrix: F4-->G0
+ ==> 0,y,
+ ==> 1,0
+ ==>
+ printlevel = p;
+
Index: test/singular_manual/res_info/singular_httex/sing.htm-4
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.htm-4
diff -N test/singular_manual/res_info/singular_httex/sing.htm-4
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_info/singular_httex/sing.htm-4 14 Jul 2010
15:42:40 -0000 1.1
@@ -0,0 +1,10280 @@
+This is sing.htm, produced by makeinfo version 4.13 from singular.texi.
+
+
+File: sing.htm, Node: fitting, Next: flatteningStrat, Prev: Ext, Up:
homolog_lib
+
+D.4.3.6 fitting
+...............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ fitting (M,n); M module, n int
+
+*Return:*
+ ideal, (standard basis of) n-th Fitting ideal of M'=coker(M).
+
+*Example:*
+ LIB "homolog.lib";
+ ring R=0,x(0..4),dp;
+ matrix M[2][4]=x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4);
+ print(M);
+ ==> x(0),x(1),x(2),x(3),
+ ==> x(1),x(2),x(3),x(4)
+ fitting(M,-1);
+ ==> _[1]=0
+ fitting(M,0);
+ ==> _[1]=x(3)^2-x(2)*x(4)
+ ==> _[2]=x(2)*x(3)-x(1)*x(4)
+ ==> _[3]=x(1)*x(3)-x(0)*x(4)
+ ==> _[4]=x(2)^2-x(0)*x(4)
+ ==> _[5]=x(1)*x(2)-x(0)*x(3)
+ ==> _[6]=x(1)^2-x(0)*x(2)
+ fitting(M,1);
+ ==> _[1]=x(4)
+ ==> _[2]=x(3)
+ ==> _[3]=x(2)
+ ==> _[4]=x(1)
+ ==> _[5]=x(0)
+ fitting(M,2);
+ ==> _[1]=1
+
+
+File: sing.htm, Node: flatteningStrat, Next: Hom, Prev: fitting, Up:
homolog_lib
+
+D.4.3.7 flatteningStrat
+.......................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ flatteningStrat(M); M module
+
+*Return:*
+ list of ideals.
+ The list entries L[1],...,L[r] describe the flattening
+ stratification of M'=coker(M): setting L[0]=0, L[r+1]=1, the
+ flattening stratification is given by the open sets
+ Spec(A/V(L[i-1])) \ V(L[i]), i=1,...,r+1 (A = basering).
+
+*Note:*
+ for more information see the book 'A Singular Introduction to
+ Commutative Algebra' (by Greuel/Pfister, Springer 2002).
+
+*Example:*
+ LIB "homolog.lib";
+ ring A = 0,x(0..4),dp;
+ // presentation matrix:
+ matrix M[2][4] = x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4);
+ list L = flatteningStrat(M);
+ L;
+ ==> [1]:
+ ==> _[1]=x(3)^2-x(2)*x(4)
+ ==> _[2]=x(2)*x(3)-x(1)*x(4)
+ ==> _[3]=x(1)*x(3)-x(0)*x(4)
+ ==> _[4]=x(2)^2-x(0)*x(4)
+ ==> _[5]=x(1)*x(2)-x(0)*x(3)
+ ==> _[6]=x(1)^2-x(0)*x(2)
+ ==> [2]:
+ ==> _[1]=x(4)
+ ==> _[2]=x(3)
+ ==> _[3]=x(2)
+ ==> _[4]=x(1)
+ ==> _[5]=x(0)
+
+
+File: sing.htm, Node: Hom, Next: homology, Prev: flatteningStrat, Up:
homolog_lib
+
+D.4.3.8 Hom
+...........
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ Hom(M,N,[any]); M,N=modules
+
+*Compute:*
+ A presentation of Hom(M',N'), M'=coker(M), N'=coker(N) as follows:
+ let
+
+ F1 --M-> F0 -->M' --> 0, G1 --N-> G0 --> N' --> 0
+
+ be presentations of M' and N'. Consider
+
+ 0 0
+ |^ |^
+ 0 --> Hom(M',N') ----> Hom(F0,N') ----> Hom(F1,N')
+ |^ |^
+ (A: induced by M) Hom(F0,G0) --A-> Hom(F1,G0)
+ |^ |^
+ (B,C:induced by N) |C |B
+ Hom(F0,G1) ----> Hom(F1,G1)
+
+ Let D=modulo(A,B) and Hom=modulo(D,C), then we have exact sequences
+
+ R^p --D-> Hom(F0,G0) --A-> Hom(F1,G0)/im(B),
+
+ R^q -Hom-> R^p --D-> Hom(F0,G0)/im(C) --A-> Hom(F1,G0)/im(B).
+
+ Hence Hom presents Hom(M',N')
+
+*Return:*
+ module Hom, a presentation of Hom(M',N'), resp., in case of 3
+ arguments, a list l (of size <=3):
+
+ - l[1] = Hom
+ - l[2] = SB of Hom
+ - l[3] = kbase of coker(Hom) (if finite dimensional, not 0),
+ represented by elements in Hom(F0,G0) via mapping D
+
+*Display:*
+ printlevel >=0: (affine) dimension of Hom (default)
+ printlevel >=1: D and C and kbase of coker(Hom) in Hom(F0,G0)
+ printlevel >=2: elements of kbase of coker(Hom) as matrix :F0->G0
+
+*Note:*
+ DISPLAY is as described only for a direct call of 'Hom'. Calling
+ 'Hom' from another proc has the same effect as decreasing
+ printlevel by 1.
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ printlevel= 1; //in 'example proc' printlevel has to be increased by 1
+ ring r = 0,(x,y),dp;
+ ideal i = x2-y3,xy;
+ qring q = std(i);
+ ideal i = fetch(r,i);
+ module M = [-x,y],[-y2,x],[x3];
+ module H = Hom(M,i);
+ ==> // dimension of Hom: 0
+ ==> // vdim of Hom: 5
+ ==>
+ ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
+ ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
+ ==> y,x, 0,
+ ==> x,y2,x2
+ ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
+ ==> -y3+x2,0, xy,0,
+ ==> 0, -y3+x2,0, xy
+ ==>
+ print(H);
+ ==> 0, x, 0,y2,0,
+ ==> y, 0, 0,-x,x2,
+ ==> -1,-1,x,0, 0
+ printlevel= 2;
+ list L = Hom(M,i,1);"";
+ ==> // dimension of Hom: 0
+ ==> // vdim of Hom: 5
+ ==>
+ ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
+ ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
+ ==> y,x, 0,
+ ==> x,y2,x2
+ ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
+ ==> -y3+x2,0, xy,0,
+ ==> 0, -y3+x2,0, xy
+ ==>
+ ==> // element 1 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
+ ==> y2,xy
+ ==> // element 2 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
+ ==> y,x
+ ==> // element 3 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
+ ==> x2,xy2
+ ==> // element 4 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
+ ==> x,y2
+ ==> // element 5 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
+ ==> 0,x2
+ ==>
+ printlevel=1;
+ ring s = 3,(x,y,z),(c,dp);
+ ideal i = jacob(ideal(x2+y5+z4));
+ qring rq=std(i);
+ matrix M[2][2]=xy,x3,5y,4z,x2;
+ matrix N[3][2]=x2,x,y3,3xz,x2z,z;
+ print(M);
+ ==> xy,x3,
+ ==> -y,z
+ print(N);
+ ==> x2, x,
+ ==> y3, 0,
+ ==> x2z,z
+ list l=Hom(M,N,1);
+ ==> // dimension of Hom: 0
+ ==> // vdim of Hom: 16
+ ==>
+ ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
+ ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
+ ==> 0,0, 0,0, 0, 0,0, 1,
+ ==> 0,0, 0,0, 0, 0,y3z2,0,
+ ==> 0,0, 0,0, 0, 1,0, 0,
+ ==> 0,0, 0,y3,y2z2,0,0, 0,
+ ==> 0,0, 1,0, 0, 0,0, 0,
+ ==> z,y3,0,0, 0, 0,0, 0
+ ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
+ ==> x2, 0, x,0,
+ ==> 0, x2, 0,x,
+ ==> y3, 0, 0,0,
+ ==> 0, y3, 0,0,
+ ==> x2z,0, z,0,
+ ==> 0, x2z,0,z
+ ==>
+ ==> // columns of matrix are kbase of Hom in Hom(F0,G0)
+ ==> 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0,
+ ==> 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,y3z2,
+ ==> 0, 0, 0, 0,0,0, y2z2,yz2,z2,y2z,yz,z,y2,y,1,0,
+ ==> 0, 0, 0, 0,0,y2z2,0, 0, 0, 0, 0, 0,0, 0,0,0,
+ ==> 0, y3,y2,y,1,0, 0, 0, 0, 0, 0, 0,0, 0,0,0,
+ ==> y3,0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0
+ printlevel = p;
+
+
+File: sing.htm, Node: homology, Next: isCM, Prev: Hom, Up: homolog_lib
+
+D.4.3.9 homology
+................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ homology(A,B,M,N);
+
+*Compute:*
+ Let M and N be submodules of R^m and R^n presenting M'=R^m/M,
+ N'=R^n/N (R=basering) and let A,B matrices inducing maps
+
+ R^k --A--> R^m --B--> R^n.
+
+ Compute a presentation of the module
+
+ ker(B)/im(A) := ker(M'/im(A) --B--> N'/im(BM)+im(BA)).
+
+ If B induces a map M'->N' (i.e BM=0) and if im(A) is contained in
+ ker(B) (that is, BA=0) then ker(B)/im(A) is the homology of the
+ complex
+
+ R^k--A-->M'--B-->N'.
+
+*Return:*
+ module H, a presentation of ker(B)/im(A).
+
+*Note:*
+ homology returns a free module of rank m if ker(B)=im(A).
+
+*Example:*
+ LIB "homolog.lib";
+ ring r;
+ ideal id=maxideal(4);
+ qring qr=std(id);
+ module N=maxideal(3)*freemodule(2);
+ module M=maxideal(2)*freemodule(2);
+ module B=[2x,0],[x,y],[z2,y];
+ module A=M;
+ module H=homology(A,B,M,N);
+ H=std(H);
+ // dimension of homology:
+ dim(H);
+ ==> 0
+ // vector space dimension:
+ vdim(H);
+ ==> 19
+ ring s=0,x,ds;
+ qring qs=std(x4);
+ module A=[x];
+ module B=A;
+ module M=[x3];
+ module N=M;
+ homology(A,B,M,N);
+ ==> _[1]=gen(1)
+
+
+File: sing.htm, Node: isCM, Next: isFlat, Prev: homology, Up: homolog_lib
+
+D.4.3.10 isCM
+.............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ isCM(M); M module
+
+*Return:*
+ 1 if M'=coker(M) is Cohen-Macaulay;
+ 0 if this is not the case.
+
+*Assume:*
+ basering is local.
+
+*Example:*
+ LIB "homolog.lib";
+ ring R=0,(x,y,z),ds; // local ring R = Q[x,y,z]_<x,y,z>
+ module M=xz,yz,z2;
+ isCM(M); // test if R/<xz,yz,z2> is Cohen-Macaulay
+ ==> 0
+ M=x2+y2,z7; // test if R/<x2+y2,z7> is Cohen-Macaulay
+ isCM(M);
+ ==> 1
+
+
+File: sing.htm, Node: isFlat, Next: isLocallyFree, Prev: isCM, Up:
homolog_lib
+
+D.4.3.11 isFlat
+...............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ isFlat(M); M module
+
+*Return:*
+ 1 if M'=coker(M) is flat;
+ 0 if this is not the case.
+
+*Example:*
+ LIB "homolog.lib";
+ ring A = 0,(x,y),dp;
+ matrix M[3][3] = x-1,y,x,x,x+1,y,x2,xy+x+1,x2+y;
+ print(M);
+ ==> x-1,y, x,
+ ==> x, x+1, y,
+ ==> x2, xy+x+1,x2+y
+ isFlat(M); // coker(M) is not flat over A=Q[x,y]
+ ==> 0
+ qring B = std(x2+x-y); // the ring B=Q[x,y]/<x2+x-y>
+ matrix M = fetch(A,M);
+ isFlat(M); // coker(M) is flat over B
+ ==> 1
+ setring A;
+ qring C = std(x2+x+y); // the ring C=Q[x,y]/<x2+x+y>
+ matrix M = fetch(A,M);
+ isFlat(M); // coker(M) is not flat over C
+ ==> 0
+
+
+File: sing.htm, Node: isLocallyFree, Next: isReg, Prev: isFlat, Up:
homolog_lib
+
+D.4.3.12 isLocallyFree
+......................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ isLocallyFree(M,r); M module, r int
+
+*Return:*
+ 1 if M'=coker(M) is locally free of constant rank r;
+ 0 if this is not the case.
+
+*Example:*
+ LIB "homolog.lib";
+ ring R=0,(x,y,z),dp;
+ matrix M[2][3]; // the presentation matrix
+ M=x-1,y-1,z,y-1,x-2,x;
+ ideal I=fitting(M,0); // 0-th Fitting ideal of coker(M)
+ qring Q=I;
+ matrix M=fetch(R,M);
+ isLocallyFree(M,1); // as R/I-module, coker(M) is locally free of rk 1
+ ==> 1
+ isLocallyFree(M,0);
+ ==> 0
+
+
+File: sing.htm, Node: isReg, Next: kernel, Prev: isLocallyFree, Up:
homolog_lib
+
+D.4.3.13 isReg
+..............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ isReg(I,M); I ideal, M module
+
+*Return:*
+ 1 if given (ordered) list of generators for I is coker(M)-sequence;
+ 0 if this is not the case.
+
+*Example:*
+ LIB "homolog.lib";
+ ring R = 0,(x,y,z),dp;
+ ideal I = x*(y-1),y,z*(y-1);
+ isReg(I,0); // given list of generators is Q[x,y,z]-sequence
+ ==> 1
+ I = x*(y-1),z*(y-1),y; // change sorting of generators
+ isReg(I,0);
+ ==> 0
+ ring r = 0,(x,y,z),ds; // local ring
+ ideal I=fetch(R,I);
+ isReg(I,0); // result independent of sorting of generators
+ ==> 1
+
+
+File: sing.htm, Node: kernel, Next: kohom, Prev: isReg, Up: homolog_lib
+
+D.4.3.14 kernel
+...............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ kernel(A,M,N);
+
+*Compute:*
+ Let M and N be submodules of R^m and R^n, presenting M'=R^m/M,
+ N'=R^n/N (R=basering), and let A:R^m->R^n be a matrix inducing a
+ map A':M'->N'. Then kernel(A,M,N); computes a presentation K of
+ ker(A') as in the commutative diagram:
+
+ ker(A') ---> M' --A'--> N'
+ |^ |^ |^
+ | | |
+ R^r ---> R^m --A--> R^n
+ |^ |^ |^
+ |K |M |N
+ | | |
+ R^s ---> R^p -----> R^q
+
+*Return:*
+ module K, a presentation of ker(A':coker(M)->coker(N)).
+
+*Example:*
+ LIB "homolog.lib";
+ ring r;
+ module N=[2x,x],[0,y];
+ module M=maxideal(1)*freemodule(2);
+ matrix A[2][2]=2x,0,x,y,z2,y;
+ module K=kernel(A,M,N);
+ // dimension of kernel:
+ dim(std(K));
+ ==> 0
+ // vector space dimension of kernel:
+ vdim(std(K));
+ ==> 2
+ print(K);
+ ==> z,0,y,0,x,0,
+ ==> 0,z,0,y,0,x
+
+
+File: sing.htm, Node: kohom, Next: kontrahom, Prev: kernel, Up: homolog_lib
+
+D.4.3.15 kohom
+..............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ kohom(A,k); A=matrix, k=integer
+
+*Return:*
+ matrix Hom(R^k,A), i.e. let A be a matrix defining a map F1->F2 of
+ free R-modules, then the matrix of Hom(R^k,F1)->Hom(R^k,F2) is
+ computed (R=basering).
+
+*Example:*
+ LIB "homolog.lib";
+ ring r;
+ matrix n[2][3]=x,y,5,z,77,33;
+ print(kohom(n,3));
+ ==> x,0,0,y, 0, 0, 5, 0, 0,
+ ==> 0,x,0,0, y, 0, 0, 5, 0,
+ ==> 0,0,x,0, 0, y, 0, 0, 5,
+ ==> z,0,0,77,0, 0, 33,0, 0,
+ ==> 0,z,0,0, 77,0, 0, 33,0,
+ ==> 0,0,z,0, 0, 77,0, 0, 33
+
+
+File: sing.htm, Node: kontrahom, Next: KoszulHomology, Prev: kohom, Up:
homolog_lib
+
+D.4.3.16 kontrahom
+..................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ kontrahom(A,k); A=matrix, k=integer
+
+*Return:*
+ matrix Hom(A,R^k), i.e. let A be a matrix defining a map F1->F2 of
+ free R-modules, then the matrix of Hom(F2,R^k)->Hom(F1,R^k) is
+ computed (R=basering).
+
+*Example:*
+ LIB "homolog.lib";
+ ring r;
+ matrix n[2][3]=x,y,5,z,77,33;
+ print(kontrahom(n,3));
+ ==> x,z, 0,0, 0,0,
+ ==> y,77,0,0, 0,0,
+ ==> 5,33,0,0, 0,0,
+ ==> 0,0, x,z, 0,0,
+ ==> 0,0, y,77,0,0,
+ ==> 0,0, 5,33,0,0,
+ ==> 0,0, 0,0, x,z,
+ ==> 0,0, 0,0, y,77,
+ ==> 0,0, 0,0, 5,33
+
+
+File: sing.htm, Node: KoszulHomology, Next: tensorMod, Prev: kontrahom,
Up: homolog_lib
+
+D.4.3.17 KoszulHomology
+.......................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Compute:*
+ A presentation of the p-th Koszul homology module
+ H_p(f_1,...,f_k;M'), where M'=coker(M) and f_1,...,f_k are the
+ given (ordered list of generators of the) ideal I. The computed
+ presentation is minimized via prune. In particular, if
+ H_p(f_1,...,f_k;M')=0 then the return value is 0.
+
+*Return:*
+ module H, s.th. coker(H) = H_p(f_1,...,f_k;M').
+
+*Note:*
+ size of input ideal has to be <= 20.
+
+*Example:*
+ LIB "homolog.lib";
+ ring R=0,x(1..3),dp;
+ ideal x=maxideal(1);
+ module M=0;
+ KoszulHomology(x,M,0); // H_0(x,R), x=(x_1,x_2,x_3)
+ ==> _[1]=x(3)*gen(1)
+ ==> _[2]=x(2)*gen(1)
+ ==> _[3]=x(1)*gen(1)
+ KoszulHomology(x,M,1); // H_1(x,R), x=(x_1,x_2,x_3)
+ ==> _[1]=0
+ qring S=std(x(1)*x(2));
+ module M=0;
+ ideal x=maxideal(1);
+ KoszulHomology(x,M,1);
+ ==> _[1]=-x(3)*gen(1)
+ ==> _[2]=-x(2)*gen(1)
+ ==> _[3]=-x(1)*gen(1)
+ KoszulHomology(x,M,2);
+ ==> _[1]=0
+
+
+File: sing.htm, Node: tensorMod, Next: Tor, Prev: KoszulHomology, Up:
homolog_lib
+
+D.4.3.18 tensorMod
+..................
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Usage:*
+ tensorMod(M,N); M,N modules
+
+*Compute:*
+ presentation matrix A of the tensor product T of the modules
+ M'=coker(M), N'=coker(N): if matrix(M) defines a map M: R^r->R^s
+ and matrix(N) defines a map N: R^p->R^q, then A defines a
+ presentation
+
+ R^(sp+rq) --A-> R^(sq) --> T --> 0 .
+
+*Return:*
+ matrix A satisfying coker(A) = tensorprod(coker(M),coker(N)) .
+
+*Example:*
+ LIB "homolog.lib";
+ ring A=0,(x,y,z),dp;
+ matrix M[3][3]=1,2,3,4,5,6,7,8,9;
+ matrix N[2][2]=x,y,0,z;
+ print(M);
+ ==> 1,2,3,
+ ==> 4,5,6,
+ ==> 7,8,9
+ print(N);
+ ==> x,y,
+ ==> 0,z
+ print(tensorMod(M,N));
+ ==> x,y,0,0,0,0,1,0,2,0,3,0,
+ ==> 0,z,0,0,0,0,0,1,0,2,0,3,
+ ==> 0,0,x,y,0,0,4,0,5,0,6,0,
+ ==> 0,0,0,z,0,0,0,4,0,5,0,6,
+ ==> 0,0,0,0,x,y,7,0,8,0,9,0,
+ ==> 0,0,0,0,0,z,0,7,0,8,0,9
+
+
+File: sing.htm, Node: Tor, Prev: tensorMod, Up: homolog_lib
+
+D.4.3.19 Tor
+............
+
+Procedure from library `homolog.lib' (*note homolog_lib::).
+
+*Compute:*
+ a presentation of Tor_k(M',N'), for k=v[1],v[2],... , where
+ M'=coker(M) and N'=coker(N): let
+
+ 0 <-- M' <-- G0 <-M-- G1
+ 0 <-- N' <-- F0 <--N- F1 <-- F2 <--...
+
+ be a presentation of M', resp. a free resolution of N', and
+ consider the commutative diagram
+
+ 0 0 0
+ |^ |^ |^
+ Tensor(M',Fk+1) -Ak+1-> Tensor(M',Fk) -Ak-> Tensor(M',Fk-1)
+ |^ |^ |^
+ Tensor(G0,Fk+1) -Ak+1-> Tensor(G0,Fk) -Ak-> Tensor(G0,Fk-1)
+ |^ |^
+ |C |B
+ Tensor(G1,Fk) ----> Tensor(G1,Fk-1)
+
+ (Ak,Ak+1 induced by N and B,C induced by M).
+
+ Let K=modulo(Ak,B), J=module(C)+module(Ak+1) and Tor=modulo(K,J),
+ then we have exact sequences
+
+ R^p --K-> Tensor(G0,Fk) --Ak-> Tensor(G0,Fk-1)/im(B),
+
+ R^q -Tor-> R^p --K-> Tensor(G0,Fk)/(im(C)+im(Ak+1)).
+
+ Hence, Tor presents Tor_k(M',N').
+
+*Return:*
+ - if v is of type int: module Tor, a presentation of Tor_k(M',N');
+ - if v is of type intvec: a list of Tor_k(M',N') (k=v[1],v[2],...);
+ - in case of a third argument of any type: list l with
+
+ l[1] = module Tor/list of Tor_k(M',N'),
+ l[2] = SB of Tor/list of SB of Tor_k(M',N'),
+ l[3] = matrix/list of matrices, each representing a kbase of
Tor_k(M',N')
+ (if finite dimensional), or 0.
+
+*Display:*
+ printlevel >=0: (affine) dimension of Tor_k for each k (default).
+ printlevel >=1: matrices Ak, Ak+1 and kbase of Tor_k in
+ Tensor(G0,Fk) (if finite dimensional).
+
+*Note:*
+ In order to compute Tor_k(M,N) use the command
+ Tor(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2);
+ Tor(k,P[2],Q[2]);
+
+*Example:*
+ LIB "homolog.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 0,(x,y),dp;
+ ideal i = x2,y;
+ ideal j = x;
+ list E = Tor(0..2,i,j); // Tor_k(r/i,r/j) for k=0,1,2 over r
+ ==> // dimension of Tor_0: 0
+ ==> // vdim of Tor_0: 1
+ ==>
+ ==> // Computing Tor_1 (help Tor; gives an explanation):
+ ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
+ ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
+ ==> // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by:
+ ==> x
+ ==> // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by:
+ ==> 0,x2,y
+ ==>
+ ==> // dimension of Tor_1: 0
+ ==> // vdim of Tor_1: 1
+ ==>
+ ==> // Computing Tor_2 (help Tor; gives an explanation):
+ ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
+ ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
+ ==> // coker(N), then Tensor(G0,F2)-->Tensor(G0,F1) is given by:
+ ==> 0
+ ==> // and Tensor(G0,F3) + Tensor(G1,F2)-->Tensor(G0,F2) is given by:
+ ==> 1,x2,y
+ ==>
+ ==> // dimension of Tor_2: -1
+ ==>
+ qring R = std(i);
+ ideal j = fetch(r,j);
+ module M = [x,0],[0,x];
+ printlevel = 2;
+ module E1 = Tor(1,M,j); // Tor_1(R^2/M,R/j) over R=r/i
+ ==> // Computing Tor_1 (help Tor; gives an explanation):
+ ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
+ ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
+ ==> // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by:
+ ==> x,0,
+ ==> 0,x
+ ==> // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by:
+ ==> x,0,x,0,
+ ==> 0,x,0,x
+ ==>
+ ==> // dimension of Tor_1: 0
+ ==> // vdim of Tor_1: 2
+ ==>
+ list l = Tor(3,M,M,1); // Tor_3(R^2/M,R^2/M) over R=r/i
+ ==> // Computing Tor_3 (help Tor; gives an explanation):
+ ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
+ ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
+ ==> // coker(N), then Tensor(G0,F3)-->Tensor(G0,F2) is given by:
+ ==> x,0,0,0,
+ ==> 0,x,0,0,
+ ==> 0,0,x,0,
+ ==> 0,0,0,x
+ ==> // and Tensor(G0,F4) + Tensor(G1,F3)-->Tensor(G0,F3) is given by:
+ ==> x,0,0,0,x,0,0,0,
+ ==> 0,x,0,0,0,x,0,0,
+ ==> 0,0,x,0,0,0,x,0,
+ ==> 0,0,0,x,0,0,0,x
+ ==>
+ ==> // dimension of Tor_3: 0
+ ==> // vdim of Tor_3: 4
+ ==>
+ ==> // columns of matrix are kbase of Tor_3 in Tensor(G0,F3)
+ ==> 1,0,0,0,
+ ==> 0,1,0,0,
+ ==> 0,0,1,0,
+ ==> 0,0,0,1
+ ==>
+ printlevel = p;
+
+
+File: sing.htm, Node: mprimdec_lib, Next: mregular_lib, Prev: homolog_lib,
Up: Commutative algebra
+
+D.4.4 mprimdec_lib
+------------------
+
+*Library:*
+ mprimdec.lib
+
+*Purpose:*
+ procedures for primary decomposition of modules
+
+*Authors:*
+ Alexander Dreyer, address@hidden; address@hidden
+
+*Remark:*
+ These procedures are implemented to be used in characteristic 0.
+ They also work in positive characteristic >> 0.
+ In small characteristic and for algebraic extensions, the
+ procedures via Gianni, Trager, Zacharias may not terminate.
+
+*Procedures:*
+
+* Menu:
+
+* separator:: computes a list of separators of prime ideals
+* PrimdecA:: (not necessarily minimal) primary decomposition via
Shimoyama/Yokoyama (suggested by Graebe)
+* PrimdecB:: (not necessarily minimal) primary decomposition for
pseudo-primary ideals
+* modDec:: minimal primary decomposition via Shimoyama/Yokoyama (suggested by
Graebe)
+* zeroMod:: minimal zero-dimensional primary decomposition via Gianni, Trager
and Zacharias
+* GTZmod:: minimal primary decomposition via Gianni, Trager and Zacharias
+* dec1var:: primary decomposition for one variable
+* annil:: the annihilator of M/N in the basering
+* splitting:: splitting to simpler modules
+* primTest:: tests whether i is prime or homogeneous
+* preComp:: enhanced Version of splitting
+* indSet:: lists with varstrings of(in)dependent variables
+* GTZopt:: a faster version of GTZmod
+* zeroOpt:: a faster version of zeroMod
+* clrSBmod:: extracts an minimal SB from a SB
+* minSatMod:: minimal saturation of N w.r.t. I
+* specialModulesEqual:: checks for equality of standard bases of modules if N1
is contained in N2 or vice versa
+* stdModulesEqual:: checks for equality of standard bases
+* modulesEqual:: checks for equality of modules
+* getData:: extracts oldData and computes the remaining data
+
+
+File: sing.htm, Node: separator, Next: PrimdecA, Up: mprimdec_lib
+
+D.4.4.1 separator
+.................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ separator(l); list l of prime ideals
+
+*Return:*
+ list sepList;
+ a list of separators of the prime ideals in l,
+ i.e. polynomials p_ij, s.th. p_ij is in l[j],
+ for all l[j] not contained in l[i]
+ but p_ij is not in l[i]
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ ideal i=(x2y,xz2,y2z,z3);
+ list l=minAssGTZ(i);
+ list sepL=separator(l);
+ sepL;
+ ==> [1]:
+ ==> x
+ ==> [2]:
+ ==> y
+
+
+File: sing.htm, Node: PrimdecA, Next: PrimdecB, Prev: separator, Up:
mprimdec_lib
+
+D.4.4.2 PrimdecA
+................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ PrimdecA (N[, i]); module N, int i
+
+*Return:*
+ list l
+ a (not necessarily minimal) primary decomposition of N computed by
+ a generalized version of
+ the algorithm of Schimoyama/Yokoyama,
+ if i=1 is given, the factorizing Groebner is used
+ to compute the isolated primes.
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=x*gen(1)+ y*gen(2),
+ x*gen(1)-x2*gen(2);
+ list l=PrimdecA(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=x*gen(1)+y*gen(2)
+ ==> _[2]=x*gen(2)-gen(1)
+ ==> [2]:
+ ==> _[1]=x2+y
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=x*gen(1)
+ ==> [2]:
+ ==> _[1]=x
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=y*gen(1)
+ ==> _[2]=y*gen(2)
+ ==> _[3]=x*gen(1)
+ ==> _[4]=x*gen(2)
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=x
+
+
+File: sing.htm, Node: PrimdecB, Next: modDec, Prev: PrimdecA, Up:
mprimdec_lib
+
+D.4.4.3 PrimdecB
+................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ PrimdecB (N, p); pseudo-primary module N, isolated prime ideal p
+
+*Return:*
+ list l
+ a (not necessarily minimal) primary decomposition of N
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=y*gen(1),y2*gen(2),yz*gen(2),yx*gen(2);
+ ideal p=y;
+ list l=PrimdecB(N,p);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=y*gen(1)
+ ==> _[2]=y*gen(2)
+ ==> [2]:
+ ==> _[1]=y
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=y*gen(1)
+ ==> _[2]=y*gen(2)
+ ==> _[3]=x*gen(1)
+ ==> _[4]=x*gen(2)
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=x
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=z*gen(1)
+ ==> _[2]=z*gen(2)
+ ==> _[3]=y*gen(1)
+ ==> _[4]=x*gen(1)
+ ==> _[5]=x*gen(2)
+ ==> _[6]=y2*gen(2)
+ ==> [2]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+
+
+File: sing.htm, Node: modDec, Next: zeroMod, Prev: PrimdecB, Up:
mprimdec_lib
+
+D.4.4.4 modDec
+..............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ modDec (N[, i]); module N, int i
+
+*Return:*
+ list l
+ a minimal primary decomposition of N
+ computed by an generalized version of
+ the algorithm of Schimoyama/Yokoyama,
+ if i=1 is given, the factorizing Groebner is used
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=x*gen(1)+ y*gen(2),
+ x*gen(1)-x2*gen(2);
+ list l=modDec(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=x*gen(1)+y*gen(2)
+ ==> _[2]=x*gen(2)-gen(1)
+ ==> [2]:
+ ==> _[1]=x2+y
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=x*gen(1)
+ ==> [2]:
+ ==> _[1]=x
+
+
+File: sing.htm, Node: zeroMod, Next: GTZmod, Prev: modDec, Up: mprimdec_lib
+
+D.4.4.5 zeroMod
+...............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ zeroMod (N[, check]); zero-dimensional module N[, module check]
+
+*Return:*
+ list l
+ the minimal primary decomposition of a zero-dimensional module N,
+ computed by a generalized version of the algorithm
+ of Gianni, Trager and Zacharias
+
+*Note:*
+ if the parameter check is given, only components
+ not containing check are computed
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,z,dp;
+ module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
+ list l=zeroMod(N);
+ ==> 2
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(3)
+ ==> _[3]=z*gen(2)-gen(2)
+ ==> [2]:
+ ==> _[1]=z-1
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=gen(3)
+ ==> _[3]=z*gen(1)
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=z*gen(3)+gen(3)
+ ==> [2]:
+ ==> _[1]=z+1
+
+
+File: sing.htm, Node: GTZmod, Next: dec1var, Prev: zeroMod, Up:
mprimdec_lib
+
+D.4.4.6 GTZmod
+..............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ GTZmod (N[, check]); module N[, module check]
+
+*Return:*
+ list l
+ the minimal primary decomposition of the module N,
+ computed by a generalized version of the algorithm
+ of Gianny, Trager and Zacharias
+
+*Note:*
+ if the parameter check is given, only components
+ not containing check are computed
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=x*gen(1)+ y*gen(2),
+ x*gen(1)-x2*gen(2);
+ list l=GTZmod(N);
+ ==> 2
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=x*gen(1)+y*gen(2)
+ ==> _[2]=x*gen(2)-gen(1)
+ ==> [2]:
+ ==> _[1]=x2+y
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=x*gen(1)
+ ==> [2]:
+ ==> _[1]=x
+
+
+File: sing.htm, Node: dec1var, Next: annil, Prev: GTZmod, Up: mprimdec_lib
+
+D.4.4.7 dec1var
+...............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ dec1var (N); zero-dimensional module N[, module check]
+
+*Return:*
+ list l
+ the minimal primary decomposition of a submodule N of R^s if
+ nvars(R)=1
+
+*Note:*
+ if the parameter check is given, only components
+ not containing check are computed
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,z,dp;
+ module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
+ list l=dec1var(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(3)
+ ==> _[3]=z*gen(2)-gen(2)
+ ==> [2]:
+ ==> _[1]=z-1
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=gen(3)
+ ==> _[3]=z*gen(1)
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=z*gen(3)+gen(3)
+ ==> [2]:
+ ==> _[1]=z+1
+
+
+File: sing.htm, Node: annil, Next: splitting, Prev: dec1var, Up:
mprimdec_lib
+
+D.4.4.8 annil
+.............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ annil(N); module N
+
+*Return:*
+ ideal ann=std(quotient(N,freemodule(nrows(N))));
+ the annihilator of M/N in the basering
+
+*Note:*
+ ann is a std basis in the basering
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=x*gen(1), y*gen(2);
+ ideal ann=annil(N);
+ ann;
+ ==> ann[1]=xy
+
+
+File: sing.htm, Node: splitting, Next: primTest, Prev: annil, Up:
mprimdec_lib
+
+D.4.4.9 splitting
+.................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ splitting(N[,check[, ann]]); module N, module check, ideal ann
+
+*Return:*
+ (l, check) list l, module check
+ the elements of l consists of a triple with
+ [1] of type module [2] and [3] of type ideal
+ s.th. the intersection of the modules is equal to the
+ zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if
+ l[j][2]!=0 then the module l[j][1] is primary
+ with associated prime l[j][2],
+ and check=intersect(check, l[j][1]) is computed
+
+*Note:*
+ if the parameter check is given, only components not containing
+ check are computed; if ann is given, ann is used instead of
+ annil(N)
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,z,lp;
+ module N=z*gen(1), (z+1)*gen(2);
+ N=std(N);
+ list l; module check;
+ (l, check)=splitting(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=z*gen(1)
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> _[1]=z
+ ==> [4]:
+ ==> _[1]=z
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=z*gen(2)+gen(2)
+ ==> [2]:
+ ==> _[1]=z+1
+ ==> [3]:
+ ==> _[1]=z+1
+ ==> [4]:
+ ==> _[1]=z+1
+ check;
+ ==> check[1]=z*gen(2)+gen(2)
+ ==> check[2]=z*gen(1)
+
+
+File: sing.htm, Node: primTest, Next: preComp, Prev: splitting, Up:
mprimdec_lib
+
+D.4.4.10 primTest
+.................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ primTest(i[, p]); a zero-dimensional ideal i, irreducible poly p in
+ i
+
+*Return:*
+ if i neither is prime nor is homogeneous then ideal(0) is returned,
+ else radical(i)
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),lp;
+ ideal i=x+1,y-1,z;
+ i=std(i);
+ ideal primId=primTest(i,z);
+ primId;
+ ==> primId[1]=z
+ ==> primId[2]=y-1
+ ==> primId[3]=x+1
+ i=x,z2,yz,y2;
+ i=std(i);
+ primId=primTest(i);
+ primId;
+ ==> primId[1]=x
+ ==> primId[2]=y
+ ==> primId[3]=z
+
+
+File: sing.htm, Node: preComp, Next: indSet, Prev: primTest, Up:
mprimdec_lib
+
+D.4.4.11 preComp
+................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ preComp(N,check[, ann]); module N, module check, ideal ann
+
+*Return:*
+ (l, check) list l, module check
+ the elements of l consists of a triple with
+ [1] of type module [2] and [3] of type ideal
+ s.th. the intersection of the modules is equal to the
+ zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if
+ l[j][2]!=0 then the module l[j][1] is primary
+ with associated prime l[j][2],
+ and check=intersect(check, l[j][1]) is computed
+
+*Note:*
+ only components not containing check are computed;
+ if ann is given, ann is used instead of annil(N)
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,z,lp;
+ module N=z*gen(1), (z+1)*gen(2);
+ N=std(N);
+ list l; module check;
+ (l, check)=preComp(N,freemodule(2));
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=z*gen(1)
+ ==> _[2]=gen(2)
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> _[1]=z
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=z*gen(2)+gen(2)
+ ==> [2]:
+ ==> _[1]=z+1
+ ==> [3]:
+ ==> _[1]=z+1
+ check;
+ ==> check[1]=z*gen(1)
+ ==> check[2]=z*gen(2)+gen(2)
+
+
+File: sing.htm, Node: indSet, Next: GTZopt, Prev: preComp, Up: mprimdec_lib
+
+D.4.4.12 indSet
+...............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ indSet(i); i ideal
+
+*Return:*
+ list with two entrees
+ both are lists of new varstrings with the dependent variables the
+ independent set, the ordstring with the corresp. block ordering,
+ and the integer where the independent set starts in the varstring
+
+*Note:*
+ the first entry gives the strings for all maximal independent sets
+ the second gives the strings for the independent sets,
+ which cannot be enhanced
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring s1=(0,x,y),(a,b,c,d,e,f,g),lp;
+ ideal i=ea-fbg,fa+be,ec-fdg,fc+de;
+ i=std(i);
+ list l=indSet(i);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> [1]:
+ ==> e,f
+ ==> [2]:
+ ==> a,b,c,d,g
+ ==> [3]:
+ ==> (C,dp(2),dp)
+ ==> [4]:
+ ==> 5
+ ==> [2]:
+ ==> [1]:
+ ==> [1]:
+ ==> a,b,c,d
+ ==> [2]:
+ ==> e,f,g
+ ==> [3]:
+ ==> (C,dp(4),dp)
+ ==> [4]:
+ ==> 3
+ ==> [2]:
+ ==> [1]:
+ ==> a,c,e
+ ==> [2]:
+ ==> b,d,f,g
+ ==> [3]:
+ ==> (C,dp(3),dp)
+ ==> [4]:
+ ==> 4
+
+
+File: sing.htm, Node: GTZopt, Next: zeroOpt, Prev: indSet, Up: mprimdec_lib
+
+D.4.4.13 GTZopt
+...............
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ GTZopt (N[, check]); module N[, module check]
+
+*Return:*
+ list l
+ the minimal primary decomposition of the module N,
+ computed by a generalized and optimized version of
+ the algorithm of Gianny, Trager and Zacharias
+
+*Note:*
+ if the parameter check is given, only components
+ not containing check are computed
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,(x,y,z),dp;
+ module N=x*gen(1)+ y*gen(2),
+ x*gen(1)-x2*gen(2);
+ list l=GTZopt(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=x*gen(1)+y*gen(2)
+ ==> _[2]=x*gen(2)-gen(1)
+ ==> [2]:
+ ==> _[1]=x2+y
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=gen(2)
+ ==> _[2]=x*gen(1)
+ ==> [2]:
+ ==> _[1]=x
+
+
+File: sing.htm, Node: zeroOpt, Next: clrSBmod, Prev: GTZopt, Up:
mprimdec_lib
+
+D.4.4.14 zeroOpt
+................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ zeroOpt (N[, check]); zero-dimensional module N[, module check]
+
+*Return:*
+ list l
+ the minimal primary decomposition of a zero-dimensional module N,
+ computed by a generalized and optimized version of the algorithm of
+ Gianny, Trager and Zacharias
+
+*Note:*
+ if the parameter check is given, only components
+ not containing check are computed
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r=0,z,dp;
+ module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
+ list l=zeroOpt(N);
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=z*gen(2)-gen(2)
+ ==> _[3]=gen(3)
+ ==> [2]:
+ ==> _[1]=z-1
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=z*gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=gen(3)
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=gen(1)
+ ==> _[2]=gen(2)
+ ==> _[3]=z*gen(3)+gen(3)
+ ==> [2]:
+ ==> _[1]=z+1
+
+
+File: sing.htm, Node: clrSBmod, Next: minSatMod, Prev: zeroOpt, Up:
mprimdec_lib
+
+D.4.4.15 clrSBmod
+.................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ clrSBmod(N); N module which is SB ordered by monomial ordering
+
+*Return:*
+ module = minimal SB
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = (0,a,b),(x,y,z),dp;
+ module N1=ax2+y,a2x+y,bx;
+ module N2=clrSBmod(N1);
+ N2;
+ ==> N2[1]=(a)*x2*gen(1)+y*gen(1)
+ ==> N2[2]=(b)*x*gen(1)
+
+
+File: sing.htm, Node: minSatMod, Next: specialModulesEqual, Prev: clrSBmod,
Up: mprimdec_lib
+
+D.4.4.16 minSatMod
+..................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ minSatMod(N, I); module N, ideal I
+
+*Return:*
+ list with 2 elements:
+ [1]=sat(N,product(I))[1],
+ [2]=p, the polynomial of minimal degree s.th. [1]=quotient(N,p)
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = 0,(x,y,z),dp;
+ module N=xy*gen(1);
+ ideal h=yz,z2;
+ list l=minSatMod(N,h);
+ l;
+ ==> [1]:
+ ==> _[1]=x*gen(1)
+ ==> [2]:
+ ==> y
+
+
+File: sing.htm, Node: specialModulesEqual, Next: stdModulesEqual, Prev:
minSatMod, Up: mprimdec_lib
+
+D.4.4.17 specialModulesEqual
+............................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ specialModulesEqual(N1, N2) N1, N2 standard bases of modules, s.th.
+ N1 is contained in N2 or vice versa
+
+*Return:*
+ int i
+ if (N1==N2) then i=1
+ else i=0
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = 0,(x,y,z),dp;
+ module N1=x*freemodule(2);
+ module N2=xy*freemodule(2);
+ int i=specialModulesEqual(N1,N2);
+ i;
+ ==> 0
+ N2=N1;
+ i=specialModulesEqual(N1,N2);
+ i;
+ ==> 1
+
+
+File: sing.htm, Node: stdModulesEqual, Next: modulesEqual, Prev:
specialModulesEqual, Up: mprimdec_lib
+
+D.4.4.18 stdModulesEqual
+........................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ stdModulesEqual(N1, N2) N1, N2 standard bases of modules,
+
+*Return:*
+ int i
+ if (N1==N2) then i=1
+ else i=0
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = 0,(x,y,z),dp;
+ module N1=x*freemodule(2);
+ module N2=xy*freemodule(2);
+ int i=stdModulesEqual(N1,N2);
+ i;
+ ==> 0
+ N2=N1;
+ i=stdModulesEqual(N1,N2);
+ i;
+ ==> 1
+
+
+File: sing.htm, Node: modulesEqual, Next: getData, Prev: stdModulesEqual,
Up: mprimdec_lib
+
+D.4.4.19 modulesEqual
+.....................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ modulesEqual(N1, N2) N1, N2 modules,
+
+*Return:*
+ int i
+ if (N1==N2) then i=1
+ else i=0
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = 0,(x,y,z),dp;
+ module N1=x*freemodule(2);
+ module N2=xy*freemodule(2);
+ int i=modulesEqual(N1,N2);
+ i;
+ ==> 0
+ N2=N1;
+ i=modulesEqual(N1,N2);
+ i;
+ ==> 1
+
+
+File: sing.htm, Node: getData, Prev: modulesEqual, Up: mprimdec_lib
+
+D.4.4.20 getData
+................
+
+Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
+
+*Usage:*
+ getData(N, l[, noCheck]); module N, list l[, int noCheck]
+
+*Return:*
+ (ann, check, M, checked)
+ ideal ann, module check, M, int checked
+
+ if l[1] is contained in N [and noCheck is not given]
+ then checked=1, ann=ideal(0), check=0, M=0;
+ else checked=0, M=freemodule(nrows(N)); check=l[1]
+ (resp. check=M if l is an empty list) and
+ if size(l)>1 then ann=l[2] else ann is the annihilator of M/N.
+
+*Note:*
+ ann is a std basis in the basering
+
+*Example:*
+ LIB "mprimdec.lib";
+ ring r = 0,(x,y,z),lp;
+ module N=x*gen(1),y*gen(2);
+ N=std(N);
+ ideal ann; module check, M; int checked; list l;
+ (ann, check, M, checked)=getData(N,l);
+ ann; check; M; checked;
+ ==> ann[1]=xy
+ ==> check[1]=gen(1)
+ ==> check[2]=gen(2)
+ ==> M[1]=gen(1)
+ ==> M[2]=gen(2)
+ ==> 0
+ l=list(check,ann);
+ (ann, check, M, checked)=getData(N,l);
+ ann; check; M; checked;
+ ==> ann[1]=xy
+ ==> check[1]=gen(1)
+ ==> check[2]=gen(2)
+ ==> M[1]=gen(1)
+ ==> M[2]=gen(2)
+ ==> 0
+ l=list(N);
+ (ann, check, M, checked)=getData(N,l);
+ ann; check; M; checked;
+ ==> ann[1]=0
+ ==> check[1]=0
+ ==> M[1]=0
+ ==> 1
+
+
+File: sing.htm, Node: mregular_lib, Next: normal_lib, Prev: mprimdec_lib,
Up: Commutative algebra
+
+D.4.5 mregular_lib
+------------------
+
+*Library:*
+ mregular.lib
+
+*Purpose:*
+ Castelnuovo-Mumford Regularity of CM-Schemes and Curves
+
+*Authors:*
+ I.Bermejo, address@hidden
+ Ph.Gimenez, address@hidden
+ G.-M.Greuel, address@hidden
+
+*Overview:*
+ A library for computing the Castelnuovo-Mumford regularity of a
+ subscheme of the projective n-space that DOES NOT require the
+ computation of a minimal graded free resolution of the saturated
+ ideal defining the subscheme. The procedures are based on two
+ papers by Isabel Bermejo and Philippe Gimenez: 'On
+ Castelnuovo-Mumford regularity of projective curves'
+ Proc.Amer.Math.Soc. 128(5) (2000), and 'Computing the
+ Castelnuovo-Mumford regularity of some subschemes of Pn using
+ quotients of monomial ideals', Proceedings of MEGA-2000, J. Pure
+ Appl. Algebra (to appear).
+ The algorithm assumes the variables to be in Noether position.
+
+*Procedures:*
+
+* Menu:
+
+* reg_CM:: regularity of arith. C-M subscheme V(id_sat) of Pn
+* reg_curve:: regularity of projective curve V(id_sat) in Pn
+* reg_moncurve:: regularity of projective monomial curve defined by li
+
+
+File: sing.htm, Node: reg_CM, Next: reg_curve, Up: mregular_lib
+
+D.4.5.1 reg_CM
+..............
+
+Procedure from library `mregular.lib' (*note mregular_lib::).
+
+*Usage:*
+ reg_CM (i); i ideal
+
+*Return:*
+ an integer, the Castelnuovo-Mumford regularity of i-sat.
+
+*Assume:*
+ i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the
+ field K is infinite, and S/i-sat is Cohen-Macaulay. Assume that
+ K[x(n-d),...,x(n)] is a Noether normalization of S/i-sat where
+ d=dim S/i -1. If this is not the case, compute a Noether
+ normalization e.g. by using the proc noetherNormal from
+ algebra.lib.
+
+*Note:*
+ The output is reg(X)=reg(i-sat) where X is the arithmetically
+ Cohen-Macaulay subscheme of the projective n-space defined by i.
+ If printlevel > 0 (default = 0) additional information is
+ displayed. In particular, the value of the regularity of the
+ Hilbert function of S/i-sat is given.
+
+*Example:*
+ LIB "mregular.lib";
+ ring s=0,x(0..5),dp;
+ ideal i=x(2)^2-x(4)*x(5),x(1)*x(2)-x(0)*x(5),x(0)*x(2)-x(1)*x(4),
+ x(1)^2-x(3)*x(5),x(0)*x(1)-x(2)*x(3),x(0)^2-x(3)*x(4);
+ reg_CM(i);
+ ==> 2
+ // Additional information can be obtained as follows:
+ printlevel = 1;
+ reg_CM(i);
+ ==> // Ideal i of S defining an arithm. Cohen-Macaulay subscheme X of P5:
+ ==> // - dimension of X: 2
+ ==> // - i is saturated: YES
+ ==> // - regularity of the Hilbert function of S/i-sat: -1
+ ==> // - time for computing reg(X): 0 sec.
+ ==> // Castelnuovo-Mumford regularity of X:
+ ==> 2
+
+
+File: sing.htm, Node: reg_curve, Next: reg_moncurve, Prev: reg_CM, Up:
mregular_lib
+
+D.4.5.2 reg_curve
+.................
+
+Procedure from library `mregular.lib' (*note mregular_lib::).
+
+*Usage:*
+ reg_curve (i[,e]); i ideal, e integer
+
+*Return:*
+ an integer, the Castelnuovo-Mumford regularity of i-sat.
+
+*Assume:*
+ i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the
+ field K is infinite, and it defines a projective curve C in the
+ projective n-space (dim(i)=2). We assume that K[x(n-1),x(n)] is a
+ Noether normalization of S/i-sat.
+ e=0: (default)
+ Uses a random choice of an element of K when it is necessary. This
+ is absolutely safe (if the element is bad, another random choice
+ will be done until a good element is found).
+ e=1: Substitutes the random choice of an element of K by a simple
+ transcendental field extension of K.
+
+*Note:*
+ The output is the integer reg(C)=reg(i-sat).
+ If printlevel > 0 (default = 0) additional information is
+ displayed. In particular, says if C is arithmetically
+ Cohen-Macaulay or not, determines in which step of a minimal graded
+ free resolution of i-sat the regularity of C is attained, and
+ sometimes gives the value of the regularity of the Hilbert function
+ of S/i-sat (otherwise, an upper bound is given).
+
+*Example:*
+ LIB "mregular.lib";
+ ring s = 0,(x,y,z,t),dp;
+ // 1st example is Ex.2.5 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5):
+ ideal i = x17y14-y31, x20y13, x60-y36z24-x20z20t20;
+ reg_curve(i);
+ ==> 72
+ // 2nd example is Ex.2.9 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5):
+ int k=43;
+ ideal j=x17y14-y31,x20y13,x60-y36z24-x20z20t20,y41*z^k-y40*z^(k+1);
+ reg_curve(j);
+ ==> 93
+ // Additional information can be obtained as follows:
+ printlevel = 1;
+ reg_curve(j);
+ ==> // Ideal i of S defining a projective curve C in P3:
+ ==> // - i is saturated: YES
+ ==> // - C is arithm. Cohen-Macaulay: NO
+ ==> // - reg(C) attained at the last step of a m.g.f.r. of i-sat: YES
+ ==> // - regularity of the Hilbert function of S/i-sat: 92
+ ==> // - time for computing reg(C): 0 sec.
+ ==> // Castelnuovo-Mumford regularity of C:
+ ==> 93
+
+
+File: sing.htm, Node: reg_moncurve, Prev: reg_curve, Up: mregular_lib
+
+D.4.5.3 reg_moncurve
+....................
+
+Procedure from library `mregular.lib' (*note mregular_lib::).
+
+*Usage:*
+ reg_moncurve (a0,...,an) ; ai integers with a0=0 < a1 < ... < an=:d
+
+*Return:*
+ an integer, the Castelnuovo-Mumford regularity of the projective
+ monomial curve C in Pn parametrically defined by:
+ x(0)=t^d , x(1)=s^(a1)t^(d-a1), ... , x(n)=s^d.
+
+*Assume:*
+ a0=0 < a1 < ... < an are integers and the base field is infinite.
+
+*Note:*
+ The defining ideal I(C) in S is determined using elimination. The
+ procedure reg_curve is improved in this case since one knows
+ beforehand that the dimension is 2, that the variables are in
+ Noether position, that I(C) is prime.
+ If printlevel > 0 (default = 0) additional information is
+ displayed. In particular, says if C is arithmetically
+ Cohen-Macaulay or not, determines in which step of a minimal graded
+ free resolution of I(C) the regularity is attained, and sometimes
+ gives the value of the regularity of the Hilbert function of S/I(C)
+ (otherwise, an upper bound is given).
+
+*Example:*
+ LIB "mregular.lib";
+ // The 1st example is the twisted cubic:
+ reg_moncurve(0,1,2,3);
+ ==> 2
+ // The 2nd. example is the non arithm. Cohen-Macaulay monomial curve in P4
+ // parametrized by: x(0)-s6,x(1)-s5t,x(2)-s3t3,x(3)-st5,x(4)-t6:
+ reg_moncurve(0,1,3,5,6);
+ ==> 3
+ // Additional information can be obtained as follows:
+ printlevel = 1;
+ reg_moncurve(0,1,3,5,6);
+ ==> // Sequence of integers defining a monomial curve C in P4:
+ ==> // - time for computing ideal I(C) of S (elimination): 0 sec.
+ ==> // - C is arithm. Cohen-Macaulay: NO
+ ==> // - reg(C) attained at the last step of a m.g.f.r. of I(C): YES
+ ==> // - reg(C) attained at the second last step of a m.g.f.r. of I(C):
YES
+ ==> // - regularity of the Hilbert function of S/I(C): 2
+ ==> // - time for computing reg(C): 0 sec.
+ ==> // Castelnuovo-Mumford regularity of C:
+ ==> 3
+
+
+File: sing.htm, Node: normal_lib, Next: primdec_lib, Prev: mregular_lib,
Up: Commutative algebra
+
+D.4.6 normal_lib
+----------------
+
+*Library:*
+ normal.lib
+
+*Purpose:*
+ Normalization of Affine Rings
+
+*Authors:*
+ G.-M. Greuel, address@hidden,
+ G. Pfister, address@hidden
+
+*Main procedures:*
+
+* Menu:
+
+* normal:: computes the normalization of basering/I, resp. computes the
normalization of basering/I and the delta invariant
+* HomJJ:: presentation of End_R(J) as affine ring, L a list
+* genus:: computes genus of the projective curve defined by I
+
+*Auxiliary procedure:*
+
+* Menu:
+
+* deltaLoc:: (sum of) delta invariant(s) at conjugated singular points
+
+
+File: sing.htm, Node: normal, Next: HomJJ, Up: normal_lib
+
+D.4.6.1 normal
+..............
+
+Procedure from library `normal.lib' (*note normal_lib::).
+
+*Usage:*
+ normal(i [,choose]); i a radical ideal, choose empty, 1 or "wd" if
+ choose=1 the normalization of the associated primes is computed
+ (which is sometimes more efficient); if `choose="wd"' the delta
+ invariant is computed simultaneously; this may take much more time
+ in the reducible case, since the factorizing standard basis
+ algorithm cannot be used.
+
+*Assume:*
+ The ideal must be radical, for non-radical ideals the output may be
+ wrong (i=radical(i); makes i radical)
+
+*Return:*
+ a list of rings, say nor and in case of `choose="wd"' an integer at
+ the end of the list. Each ring `nor[i]' contains two ideals with
+ given names `norid' and `normap' such that
+ - the direct sum of the rings `nor[i]/norid' is the normalization
+ of basering/id;
+ - `normap' gives the normalization map from basering/id to
+ `nor[i]/norid' (for each i).
+
+*Note:*
+ to use the i-th ring type: `def R=nor[i]; setring R;'.
+ Increasing printlevel displays more comments (default:
+ printlevel=0).
+ Not implemented for local or mixed orderings.
+ If the input ideal i is weighted homogeneous a weighted ordering
+ may be used (qhweight(i); computes weights).
+
+*Example:*
+ LIB "normal.lib";
+ ring r=32003,(x,y,z),wp(2,1,2);
+ ideal i=z3-xy4;
+ list nor=normal(i);
+ ==>
+ ==> // 'normal' created a list of 1 ring(s).
+ ==> // nor[1+1] is the delta-invariant in case of choose=wd.
+ ==> // To see the rings, type (if the name of your list is nor):
+ ==> show( nor);
+ ==> // To access the 1-st ring and map (similar for the others), type:
+ ==> def R = nor[1]; setring R; norid; normap;
+ ==> // R/norid is the 1-st ring of the normalization and
+ ==> // normap the map from the original basering to R/norid
+ show(nor);
+ ==> // list, 1 element(s):
+ ==> [1]:
+ ==> // ring: (32003),(T(1),T(2),T(3)),(a(2,1,1),dp(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // normap [0] ideal, 3 generator(s)
+ ==> // norid [0] ideal, 1 generator(s)
+ def r1=nor[1];
+ setring r1;
+ norid;
+ ==> norid[1]=T(3)3-T(1)T(2)
+ normap;
+ ==> normap[1]=T(1)
+ ==> normap[2]=T(2)
+ ==> normap[3]=T(2)T(3)
+ ring s=0,(x,y),dp;
+ ideal i=(x-y^2)^2 - y*x^3;
+ nor=normal(i,"wd");
+ ==>
+ ==> // 'normal' created a list of 1 ring(s).
+ ==> // nor[1+1] is the delta-invariant in case of choose=wd.
+ ==> // To see the rings, type (if the name of your list is nor):
+ ==> show( nor);
+ ==> // To access the 1-st ring and map (similar for the others), type:
+ ==> def R = nor[1]; setring R; norid; normap;
+ ==> // R/norid is the 1-st ring of the normalization and
+ ==> // normap the map from the original basering to R/norid
+ //the delta-invariant
+ nor[size(nor)];
+ ==> 3
+
+
+File: sing.htm, Node: HomJJ, Next: genus, Prev: normal, Up: normal_lib
+
+D.4.6.2 HomJJ
+.............
+
+Procedure from library `normal.lib' (*note normal_lib::).
+
+*Usage:*
+ HomJJ (Li); Li = list: ideal SBid, ideal id, ideal J, poly p
+
+*Assume:*
+ R = P/id, P = basering, a polynomial ring, id an ideal of P,
+ SBid = standard basis of id,
+ J = ideal of P containing the polynomial p,
+ p = nonzero divisor of R
+
+*Compute:*
+ Endomorphism ring End_R(J)=Hom_R(J,J) with its ring structure as
+ affine ring, together with the canonical map R -> Hom_R(J,J), where
+ R is the quotient ring of P modulo the standard basis SBid.
+
+*Return:*
+ a list l of two objects
+
+ l[1] : a polynomial ring, containing two ideals, 'endid' and
'endphi'
+ such that l[1]/endid = Hom_R(J,J) and
+ endphi describes the canonical map R -> Hom_R(J,J)
+ l[2] : an integer which is 1 if phi is an isomorphism, 0 if not
+ l[3] : an integer, the contribution to delta
+
+*Note:*
+ printlevel >=1: display comments (default: printlevel=0)
+
+*Example:*
+ LIB "normal.lib";
+ ring r = 0,(x,y),wp(2,3);
+ ideal id = y^2-x^3;
+ ideal J = x,y;
+ poly p = x;
+ list Li = std(id),id,J,p;
+ list L = HomJJ(Li);
+ def end = L[1]; // defines ring L[1], containing ideals endid, endphi
+ setring end; // makes end the basering
+ end;
+ ==> // characteristic : 0
+ ==> // number of vars : 1
+ ==> // block 1 : ordering dp
+ ==> // : names T(1)
+ ==> // block 2 : ordering C
+ endid; // end/endid is isomorphic to End(r/id) as ring
+ ==> endid[1]=0
+ map psi = r,endphi;// defines the canonical map r/id -> End(r/id)
+ psi;
+ ==> psi[1]=T(1)^2
+ ==> psi[2]=T(1)^3
+
+
+File: sing.htm, Node: genus, Next: deltaLoc, Prev: HomJJ, Up: normal_lib
+
+D.4.6.3 genus
+.............
+
+Procedure from library `normal.lib' (*note normal_lib::).
+
+*Usage:*
+ genus(I) or genus(i,1); I a 1-dimensional ideal
+
+*Return:*
+ an integer, the geometric genus p_g = p_a - delta of the projective
+ curve defined by I, where p_a is the arithmetic genus.
+
+*Note:*
+ delta is the sum of all local delta-invariants of the
+ singularities, i.e. dim(R'/R), R' the normalization of the local
+ ring R of the singularity.
+ genus(i,1) uses the normalization to compute delta. Usually this is
+ slow but sometimes not.
+
+*Example:*
+ LIB "normal.lib";
+ ring r=0,(x,y),dp;
+ ideal i=y^9 - x^2*(x - 1)^9;
+ genus(i);
+ ==> 0
+
+
+File: sing.htm, Node: deltaLoc, Prev: genus, Up: normal_lib
+
+D.4.6.4 deltaLoc
+................
+
+Procedure from library `normal.lib' (*note normal_lib::).
+
+*Usage:*
+ deltaLoc(f,J); f poly, J ideal
+
+*Assume:*
+ f is reduced bivariate polynomial; basering has exactly two
+ variables; J is irreducible prime component of the singular locus
+ of f (e.g., one entry of the output of `minAssGTZ(I);', I =
+ <f,jacob(f)>).
+
+*Return:*
+ list L:
+
+ `L[1]'; int:
+ the sum of (local) delta invariants of f at the (conjugated)
+ singular points given by J.
+
+ `L[2]'; int:
+ the sum of (local) Tjurina numbers of f at the (conjugated)
+ singular points given by J.
+
+ `L[3]'; int:
+ the sum of (local) number of branches of f at the (conjugated)
+ singular points given by J.
+
+*Note:*
+ procedure makes use of `execute'; increasing printlevel displays
+ more comments (default: printlevel=0).
+
+*Example:*
+ LIB "normal.lib";
+ ring r=0,(x,y),dp;
+ poly f=(x2+y^2-1)^3 +27x2y2;
+ ideal I=f,jacob(f);
+ I=std(I);
+ list qr=minAssGTZ(I);
+ size(qr);
+ ==> 6
+ // each component of the singular locus either describes a cusp or a pair
+ // of conjugated nodes:
+ deltaLoc(f,qr[1]);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+ deltaLoc(f,qr[2]);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+ deltaLoc(f,qr[3]);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+ deltaLoc(f,qr[4]);
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+ deltaLoc(f,qr[5]);
+ ==> [1]:
+ ==> 2
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 4
+ deltaLoc(f,qr[6]);
+ ==> [1]:
+ ==> 2
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 4
+
+* Menu:
+
+See also:
+* delta::
+* tjurina::
+
+*See also:* *note delta::; *note tjurina::.
+
+
+File: sing.htm, Node: primdec_lib, Next: primitiv_lib, Prev: normal_lib,
Up: Commutative algebra
+
+D.4.7 primdec_lib
+-----------------
+
+*Library:*
+ primdec.lib
+
+*Purpose:*
+ Primary Decomposition and Radical of Ideals
+
+*Authors:*
+ Gerhard Pfister, address@hidden (GTZ)
+ Wolfram Decker, address@hidden (SY)
+ Hans Schoenemann, address@hidden (SY)
+
+*Overview:*
+ Algorithms for primary decomposition based on the ideas of Gianni,
+ Trager and Zacharias (implementation by Gerhard Pfister),
+ respectively based on the ideas of Shimoyama and Yokoyama
+ (implementation by Wolfram Decker and Hans Schoenemann).
+ The procedures are implemented to be used in characteristic 0.
+ They also work in positive characteristic >> 0.
+ In small characteristic and for algebraic extensions, primdecGTZ
+ may not terminate.
+ Algorithms for the computation of the radical based on the ideas of
+ Krick, Logar and Kemper (implementation by Gerhard Pfister).
+
+*Procedures:*
+
+* Menu:
+
+* Ann:: annihilator of R^n/M, R=basering, M in R^n
+* primdecGTZ:: complete primary decomposition via Gianni,Trager,Zacharias
+* primdecSY:: complete primary decomposition via Shimoyama-Yokoyama
+* minAssGTZ:: the minimal associated primes via Gianni,Trager,Zacharias
+* minAssChar:: the minimal associated primes using characteristic sets
+* testPrimary:: tests the result of the primary decomposition
+* radical:: computes the radical of I via Krick/Logar and Kemper
+* radicalEHV:: computes the radical of I via Eisenbud,Huneke,Vasconcelos
+* equiRadical:: the radical of the equidimensional part of the ideal I
+* prepareAss:: list of radicals of the equidimensional components of I
+* equidim:: weak equidimensional decomposition of I
+* equidimMax:: equidimensional locus of I
+* equidimMaxEHV:: equidimensional locus of I via Eisenbud,Huneke,Vasconcelos
+* zerodec:: zerodimensional decomposition via Monico
+
+
+File: sing.htm, Node: Ann, Next: primdecGTZ, Up: primdec_lib
+
+D.4.7.1 Ann
+...........
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+
+File: sing.htm, Node: primdecGTZ, Next: primdecSY, Prev: Ann, Up:
primdec_lib
+
+D.4.7.2 primdecGTZ
+..................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ primdecGTZ(i); i ideal
+
+*Return:*
+ a list pr of primary ideals and their associated primes:
+
+ pr[i][1] the i-th primary component,
+ pr[i][2] the i-th prime component.
+
+*Note:*
+ Algorithm of Gianni/Trager/Zacharias.
+ Designed for characteristic 0, works also in char k > 0, if it
+ terminates (may result in an infinite loop in small
+ characteristic!)
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),lp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ list pr = primdecGTZ(i);
+ pr;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=z6+4z3+4
+ ==> _[2]=y-z2
+ ==> [2]:
+ ==> _[1]=z3+2
+ ==> _[2]=y-z2
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=z2+1
+ ==> _[2]=y-z2
+ ==> [2]:
+ ==> _[1]=z2+1
+ ==> _[2]=y-z2
+
+
+File: sing.htm, Node: primdecSY, Next: minAssGTZ, Prev: primdecGTZ, Up:
primdec_lib
+
+D.4.7.3 primdecSY
+.................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ primdecSY(i); i ideal, c int
+
+*Return:*
+ a list pr of primary ideals and their associated primes:
+
+ pr[i][1] the i-th primary component,
+ pr[i][2] the i-th prime component.
+
+*Note:*
+ Algorithm of Shimoyama/Yokoyama.
+
+ if c=0, the given ordering of the variables is used,
+ if c=1, minAssChar tries to use an optimal ordering,
+ if c=2, minAssGTZ is used,
+ if c=3, minAssGTZ and facstd are used.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),lp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ list pr = primdecSY(i);
+ pr;
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=z6+4z3+4
+ ==> _[2]=y-z2
+ ==> [2]:
+ ==> _[1]=z3+2
+ ==> _[2]=y-z2
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=z2+1
+ ==> _[2]=y+1
+ ==> [2]:
+ ==> _[1]=z2+1
+ ==> _[2]=y+1
+
+
+File: sing.htm, Node: minAssGTZ, Next: minAssChar, Prev: primdecSY, Up:
primdec_lib
+
+D.4.7.4 minAssGTZ
+.................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ minAssGTZ(i); i ideal
+ minAssGTZ(i,1); i ideal does not use the factorizing Groebner
+
+*Return:*
+ a list, the minimal associated prime ideals of i.
+
+*Note:*
+ Designed for characteristic 0, works also in char k > 0 based on an
+ algorithm of Yokoyama
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ list pr = minAssGTZ(i);
+ pr;
+ ==> [1]:
+ ==> _[1]=z2+1
+ ==> _[2]=-z2+y
+ ==> [2]:
+ ==> _[1]=z3+2
+ ==> _[2]=-z2+y
+
+
+File: sing.htm, Node: minAssChar, Next: testPrimary, Prev: minAssGTZ, Up:
primdec_lib
+
+D.4.7.5 minAssChar
+..................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ minAssChar(i[,c]); i ideal, c int.
+
+*Return:*
+ list, the minimal associated prime ideals of i.
+
+*Note:*
+ If c=0, the given ordering of the variables is used.
+ Otherwise, the system tries to find an optimal ordering, which in
+ some cases may considerably speed up the algorithm.
+ Due to a bug in the factorization, the result may be not completely
+ decomposed in small characteristic.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ list pr = minAssChar(i);
+ pr;
+ ==> [1]:
+ ==> _[1]=y+1
+ ==> _[2]=z2+1
+ ==> [2]:
+ ==> _[1]=z2-y
+ ==> _[2]=yz+2
+ ==> _[3]=y2+2z
+
+
+File: sing.htm, Node: testPrimary, Next: radical, Prev: minAssChar, Up:
primdec_lib
+
+D.4.7.6 testPrimary
+...................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ testPrimary(pr,k); pr a list, k an ideal.
+
+*Assume:*
+ pr is the result of primdecGTZ(k) or primdecSY(k).
+
+*Return:*
+ int, 1 if the intersection of the ideals in pr is k, 0 if not
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 32003,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z4+2;
+ ideal i = p^2*q^3,(y-z3)^3,(x-yz+z4)^4;
+ list pr = primdecGTZ(i);
+ testPrimary(pr,i);
+ ==> 1
+
+
+File: sing.htm, Node: radical, Next: radicalEHV, Prev: testPrimary, Up:
primdec_lib
+
+D.4.7.7 radical
+...............
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ radical(i); i ideal.
+
+*Return:*
+ ideal, the radical of i.
+
+*Note:*
+ A combination of the algorithms of Krick/Logar and Kemper is used.
+ Works also in positive characteristic (Kempers algorithm).
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ ideal pr= radical(i);
+ pr;
+ ==> pr[1]=z2-y
+ ==> pr[2]=y2z+yz+2y+2
+
+
+File: sing.htm, Node: radicalEHV, Next: equiRadical, Prev: radical, Up:
primdec_lib
+
+D.4.7.8 radicalEHV
+..................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ radicalEHV(i); i ideal.
+
+*Return:*
+ ideal, the radical of i.
+
+*Note:*
+ Uses the algorithm of Eisenbud/Huneke/Vasconcelos, which reduces
+ the computation to the complete intersection case, by taking, in
+ the general case, a generic linear combination of the input.
+ Works only in characteristic 0 or p large.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ ideal pr= radicalEHV(i);
+ pr;
+ ==> pr[1]=z2-y
+ ==> pr[2]=y2z+yz+2y+2
+ ==> pr[3]=y3+y2+2yz+2z
+
+
+File: sing.htm, Node: equiRadical, Next: prepareAss, Prev: radicalEHV, Up:
primdec_lib
+
+D.4.7.9 equiRadical
+...................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ equiRadical(i); i ideal
+
+*Return:*
+ ideal, intersection of associated primes of i of maximal dimension.
+
+*Note:*
+ A combination of the algorithms of Krick/Logar and Kemper is used.
+ Works also in positive characteristic (Kempers algorithm).
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ ideal pr= equiRadical(i);
+ pr;
+ ==> pr[1]=z2-y
+ ==> pr[2]=y2z+yz+2y+2
+
+
+File: sing.htm, Node: prepareAss, Next: equidim, Prev: equiRadical, Up:
primdec_lib
+
+D.4.7.10 prepareAss
+...................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ prepareAss(i); i ideal
+
+*Return:*
+ list, the radicals of the maximal dimensional components of i.
+
+*Note:*
+ Uses algorithm of Eisenbud/Huneke/Vasconcelos.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ poly p = z2+1;
+ poly q = z3+2;
+ ideal i = p*q^2,y-z2;
+ list pr = prepareAss(i);
+ pr;
+ ==> [1]:
+ ==> _[1]=z2-y
+ ==> _[2]=y2z+yz+2y+2
+
+
+File: sing.htm, Node: equidim, Next: equidimMax, Prev: prepareAss, Up:
primdec_lib
+
+D.4.7.11 equidim
+................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ equidim(i) or equidim(i,1) ; i ideal
+
+*Return:*
+ list of equidimensional ideals a[1],...,a[s] with:
+ - a[s] the equidimensional locus of i, i.e. the intersection of the
+ primary ideals of dimension of i
+ - a[1],...,a[s-1] the lower dimensional equidimensional loci.
+
+*Note:*
+ An embedded component q (primary ideal) of i can be replaced in the
+ decomposition by a primary ideal q1 with the same radical as q.
+ `equidim(i,1)' uses the algorithm of Eisenbud/Huneke/Vasconcelos.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 32003,(x,y,z),dp;
+ ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
+ equidim(i);
+ ==> [1]:
+ ==> _[1]=z4
+ ==> _[2]=y5
+ ==> _[3]=x5
+ ==> _[4]=x3z3
+ ==> _[5]=x4y4
+ ==> [2]:
+ ==> _[1]=yz
+ ==> _[2]=xz
+ ==> _[3]=x2
+ ==> [3]:
+ ==> _[1]=z
+
+
+File: sing.htm, Node: equidimMax, Next: equidimMaxEHV, Prev: equidim, Up:
primdec_lib
+
+D.4.7.12 equidimMax
+...................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ equidimMax(i); i ideal
+
+*Return:*
+ ideal of equidimensional locus (of maximal dimension) of i.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 32003,(x,y,z),dp;
+ ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
+ equidimMax(i);
+ ==> _[1]=z
+
+
+File: sing.htm, Node: equidimMaxEHV, Next: zerodec, Prev: equidimMax, Up:
primdec_lib
+
+D.4.7.13 equidimMaxEHV
+......................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ equidimMaxEHV(i); i ideal
+
+*Return:*
+ ideal, the equidimensional component (of maximal dimension) of i.
+
+*Note:*
+ Uses algorithm of Eisenbud, Huneke and Vasconcelos.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y,z),dp;
+ ideal i=intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
+ equidimMaxEHV(i);
+ ==> _[1]=z
+
+
+File: sing.htm, Node: zerodec, Prev: equidimMaxEHV, Up: primdec_lib
+
+D.4.7.14 zerodec
+................
+
+Procedure from library `primdec.lib' (*note primdec_lib::).
+
+*Usage:*
+ zerodec(I); I ideal
+
+*Assume:*
+ I is zero-dimensional, the characteristic of the ground field is 0
+
+*Return:*
+ list of primary ideals, the zero-dimensional decomposition of I
+
+*Note:*
+ The algorithm (of Monico), works well only for a small total number
+ of solutions (`vdim(std(I))' should be < 100) and without
+ parameters. In practice, it works also in large characteristic p>0
+ but may fail for small p.
+ If printlevel > 0 (default = 0) additional information is
+ displayed.
+
+*Example:*
+ LIB "primdec.lib";
+ ring r = 0,(x,y),dp;
+ ideal i = x2-2,y2-2;
+ list pr = zerodec(i);
+ pr;
+ ==> [1]:
+ ==> _[1]=y2-2
+ ==> _[2]=xy-2
+ ==> _[3]=x2-2
+ ==> [2]:
+ ==> _[1]=y2-2
+ ==> _[2]=xy+2
+ ==> _[3]=x2-2
+
+
+File: sing.htm, Node: primitiv_lib, Next: reesclos_lib, Prev: primdec_lib,
Up: Commutative algebra
+
+D.4.8 primitiv_lib
+------------------
+
+*Library:*
+ primitiv.lib
+
+*Purpose:*
+ Computing a Primitive Element
+
+*Author:*
+ Martin Lamm, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* primitive:: find minimal polynomial for a primitive element
+* primitive_extra:: find primitive element for two generators
+* splitring:: define ring extension with name R and switch to it
+
+
+File: sing.htm, Node: primitive, Next: primitive_extra, Up: primitiv_lib
+
+D.4.8.1 primitive
+.................
+
+Procedure from library `primitiv.lib' (*note primitiv_lib::).
+
+*Usage:*
+ primitive(i); i ideal
+
+*Assume:*
+ i is given by generators m[1],...,m[n] such that for j=1,...,n
+ - m[j] is a polynomial in k[x(1),...,x(j)]
+ - m[j](a[1],...,a[j-1],x(j)) is the minimal polynomial for a[j]
+ over k(a[1],...,a[j-1])
+ (k the ground field of the current basering and x(1),...,x(n) the
+ ring variables).
+
+*Return:*
+ ideal j in k[x(n)] with
+ - j[1] a minimal polynomial for a primitive element b of
+ k(a[1],...,a[n]) over k,
+ - j[2],...,j[n+1] polynomials in k[x(n)] such that j[i+1](b)=a[i]
+ for i=1,...,n.
+
+*Note:*
+ the number of variables in the basering has to be exactly n, the
+ number of given generators (i.e., minimal polynomials).
+ If the ground field k has only a few elements it may happen that no
+ linear combination of a[1],...,a[n] is a primitive element. In this
+ case `primitive(i)' returns the zero ideal, and one should use
+ `primitive_extra(i)' instead.
+
+*Example:*
+ LIB "primitiv.lib";
+ ring exring=0,(x,y),dp;
+ ideal i=x2+1,y2-x; // compute Q(i,i^(1/2))=:L
+ ideal j=primitive(i);
+ j[1]; // L=Q(a) with a=(-1)^(1/4)
+ ==> y4+1
+ j[2]; // i=a^2
+ ==> y2
+ j[3]; // i^(1/2)=a
+ ==> y
+ // the 2nd element was already primitive!
+ j=primitive(ideal(x2-2,y2-3)); // compute Q(sqrt(2),sqrt(3))
+ j[1];
+ ==> y4-10y2+1
+ j[2];
+ ==> 1/2y3-9/2y
+ j[3];
+ ==> -1/2y3+11/2y
+ // no element was primitive -- the calculation of primitive elements
+ // is based on a random choice.
+
+* Menu:
+
+See also:
+* primitive_extra::
+
+*See also:* *note primitive_extra::.
+
+
+File: sing.htm, Node: primitive_extra, Next: splitring, Prev: primitive,
Up: primitiv_lib
+
+D.4.8.2 primitive_extra
+.......................
+
+Procedure from library `primitiv.lib' (*note primitiv_lib::).
+
+*Usage:*
+ primitive_extra(i); i ideal
+
+*Assume:*
+ The ground field of the basering is k=Q or k=Z/pZ and the ideal i
+ is given by 2 generators f,g with the following properties:
+
+ f is the minimal polynomial of a in k[x],
+ g is a polynomial in k[x,y] s.th. g(a,y) is the minpoly of b in
k(a)[y].
+
+ Here, x is the name of the first ring variable, y the name of the
+ second.
+
+*Return:*
+ ideal j in k[y] such that
+
+ j[1] is the minimal polynomial for a primitive element c of k(a,b)
over k,
+ j[2] is a polynomial s.th. j[2](c)=a.
+
+*Note:*
+ While `primitive(i)' may fail for finite fields,
+ `primitive_extra(i)' tries all elements of k(a,b) and, hence,
+ always finds a primitive element.
+ In order to do this (try all elements), field extensions like
+ Z/pZ(a) are not allowed for the ground field k.
+ `primitive_extra(i)' assumes that the second generator, g, is monic
+ as polynomial in (k[x])[y].
+
+*Example:*
+ LIB "primitiv.lib";
+ ring exring=3,(x,y),dp;
+ ideal i=x2+1,y3+y2-1;
+ primitive_extra(i);
+ ==> _[1]=y6-y5+y4-y3-y-1
+ ==> _[2]=y5+y4+y2+y+1
+ ring extension=(3,y),x,dp;
+ minpoly=y6-y5+y4-y3-y-1;
+ number a=y5+y4+y2+y+1;
+ a^2;
+ ==> -1
+ factorize(x2+1);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x+(-y5-y4-y2-y-1)
+ ==> _[3]=x+(y5+y4+y2+y+1)
+ ==> [2]:
+ ==> 1,1,1
+ factorize(x3+x2-1);
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=x+(-y5-y4-y3-y2-y-1)
+ ==> _[3]=x+(y5+y4+y2+1)
+ ==> _[4]=x+(y3+y+1)
+ ==> [2]:
+ ==> 1,1,1,1
+
+
+File: sing.htm, Node: splitring, Prev: primitive_extra, Up: primitiv_lib
+
+D.4.8.3 splitring
+.................
+
+Procedure from library `primitiv.lib' (*note primitiv_lib::).
+
+*Usage:*
+ splitring(f,R[,L]); f poly, R string, L list of polys and/or ideals
+ (optional)
+
+*Assume:*
+ f is univariate and irreducible over the active basering.
+ The active ring must allow an algebraic extension (e.g., it cannot
+ be a transcendent ring extension of Q or Z/p).
+
+*Create:*
+ a ring with name R, in which f is reducible, and CHANGE to it.
+
+*Return:*
+ list L mapped into the new ring R, if L is given; else nothing
+
+*Note:*
+ If the old ring has no parameter, the name `a' is chosen for the
+ parameter of R (if `a' is no ring variable; if it is, `b' is
+ chosen, etc.; if `a,b,c,o' are ring variables, `splitring(f,R[,L])'
+ produces an error message), otherwise the name of the parameter is
+ kept and only the minimal polynomial is changed.
+ The names of the ring variables and the orderings are not affected.
+
+ It is also allowed to call `splitring' with R="". Then the old
+ basering will be REPLACED by the new ring (with the same name as
+ the old ring).
+
+*Example:*
+ LIB "primitiv.lib";
+ ring r=0,(x,y),dp;
+ splitring(x2-2,"r1"); // change to Q(sqrt(2))
+ // change to Q(sqrt(2),sqrt(sqrt(2)))=Q(a) and return the transformed
+ // old parameter:
+ splitring(x2-a,"r2",a);
+ ==> // new minimal polynomial: a4-2
+ ==> [1]:
+ ==> (a2)
+ // the result is (a)^2 = (sqrt(sqrt(2)))^2
+ nameof(basering);
+ ==> r2
+ r2;
+ ==> // characteristic : 0
+ ==> // 1 parameter : a
+ ==> // minpoly : (a4-2)
+ ==> // number of vars : 2
+ ==> // block 1 : ordering dp
+ ==> // : names x y
+ ==> // block 2 : ordering C
+ kill r1; kill r2;
+
+
+File: sing.htm, Node: reesclos_lib, Next: intprog_lib, Prev: primitiv_lib,
Up: Commutative algebra
+
+D.4.9 reesclos_lib
+------------------
+
+*Library:*
+ reesclos.lib
+
+*Purpose:*
+ procedures to compute the int. closure of an ideal
+
+*Author:*
+ Tobias Hirsch, email: address@hidden
+
+*Overview:*
+ A library to compute the integral closure of an ideal I in a
+ polynomial ring R=K[x(1),...,x(n)] using the Rees Algebra R[It] of
+ I. It computes the integral closure of R[It] (in the same manner as
+ done in the library 'normal.lib'), which is a graded subalgebra of
+ R[t]. The degree-k-component is the integral closure of the k-th
+ power of I.
+ These procedures can also be used to compute the integral closure
+ R^ of an integral domain R=k[x(1),...,x(n)]/ker, ker a prime ideal,
+ in its quotient field K=Q(R), as an affine ring
+ R^=k[T(1),...,T(s)]]/J and to get representations of elements of R^
+ as fractions of elements of R.
+
+*Procedures:*
+
+* Menu:
+
+* ReesAlgebra:: computes the Rees Algebra of an ideal I
+* normalI:: computes the integral closure of an ideal I using R[It]
+* primeClosure:: computes the integral closure of the int. domain R
+* closureRingtower:: defines the rings in the list L as global objects R(i)
+* closureFrac:: computes fractions representing elements of R^=L[n]
+
+
+File: sing.htm, Node: ReesAlgebra, Next: normalI, Up: reesclos_lib
+
+D.4.9.1 ReesAlgebra
+...................
+
+Procedure from library `reesclos.lib' (*note reesclos_lib::).
+
+*Usage:*
+ ReesAlgebra (I); I = ideal
+
+*Return:*
+ The Rees algebra R[It] as an affine ring, where I is an ideal in R.
+ The procedure returns a list containing two rings:
+ [1]: a ring, say RR; in the ring an ideal ker such that
+ R[It]=RR/ker
+
+ [2]: a ring, say Kxt; the basering with additional variable t
+ containing an ideal mapI that defines the map RR->Kxt
+
+*Example:*
+ LIB "reesclos.lib";
+ ring R = 0,(x,y),dp;
+ ideal I = x2,xy4,y5;
+ list L = ReesAlgebra(I);
+ def Rees = L[1]; // defines the ring Rees, containing the ideal ker
+ setring Rees; // passes to the ring Rees
+ Rees;
+ ==> // characteristic : 0
+ ==> // number of vars : 5
+ ==> // block 1 : ordering dp
+ ==> // : names x y U(1) U(2) U(3)
+ ==> // block 2 : ordering C
+ ker; // R[It] is isomorphic to Rees/ker
+ ==> ker[1]=y*U(2)-x*U(3)
+ ==> ker[2]=y^3*U(1)*U(3)-U(2)^2
+ ==> ker[3]=y^4*U(1)-x*U(2)
+ ==> ker[4]=x*y^2*U(1)*U(3)^2-U(2)^3
+ ==> ker[5]=x^2*y*U(1)*U(3)^3-U(2)^4
+ ==> ker[6]=x^3*U(1)*U(3)^4-U(2)^5
+
+
+File: sing.htm, Node: normalI, Next: primeClosure, Prev: ReesAlgebra, Up:
reesclos_lib
+
+D.4.9.2 normalI
+...............
+
+Procedure from library `reesclos.lib' (*note reesclos_lib::).
+
+*Usage:*
+ normalI(I [,p[,c]]); I an ideal, p and c optional integers
+
+*Return:*
+ the integral closure of I,...,I^p. If p is not given, or p==0,
+ compute the closure of all powers up to the maximum degree in t
+ occurring in the generators of the closure of R[It] (so this is the
+ last one that is not just the sum/product of the above ones). c is
+ transferred to the procedure primeClosure and toggles its behavior
+ in computing the integral closure of R[It].
+ The result is a list containing the closure of the desired powers
+ of I as ideals of the basering.
+
+*Example:*
+ LIB "reesclos.lib";
+ ring R=0,(x,y),dp;
+ ideal I = x2,xy4,y5;
+ list J = normalI(I);
+ I;
+ ==> I[1]=x2
+ ==> I[2]=xy4
+ ==> I[3]=y5
+ J; // J[1] is the integral closure of I
+ ==> [1]:
+ ==> _[1]=x2
+ ==> _[2]=y5
+ ==> _[3]=-xy3
+
+
+File: sing.htm, Node: primeClosure, Next: closureRingtower, Prev: normalI,
Up: reesclos_lib
+
+D.4.9.3 primeClosure
+....................
+
+Procedure from library `reesclos.lib' (*note reesclos_lib::).
+
+*Usage:*
+ primeClosure(L [,c]); L a list of a ring containing a prime ideal
+ ker, c an optional integer
+
+*Return:*
+ a list L consisting of rings L[1],...,L[n] such that
+ - L[1] is a copy of (not a reference to!) the input ring L[1] - all
+ rings L[i] contain ideals ker, L[2],...,L[n] contain ideals phi
+ such that
+ L[1]/ker -> ... -> L[n]/ker
+ are injections given by the corresponding ideals phi, and L[n]/ker
+ is the integral closure of L[1]/ker in its quotient field. - all
+ rings L[i] contain a polynomial nzd such that elements of L[i]/ker
+ are quotients of elements of L[i-1]/ker with denominator nzd via
+ the injection phi.
+
+*Note:*
+ - L is constructed by recursive calls of primeClosure itself. - c
+ determines the choice of nzd:
+ - c not given or equal to 0: first generator of the ideal SL, the
+ singular locus of Spec(L[i]/ker)
+ - c<>0: the generator of SL with least number of monomials.
+
+*Example:*
+ LIB "reesclos.lib";
+ ring R=0,(x,y),dp;
+ ideal I=x4,y4;
+ def K=ReesAlgebra(I)[1]; // K contains ker such that K/ker=R[It]
+ list L=primeClosure(K);
+ def R(1)=L[1]; // L[4] contains ker, L[4]/ker is the
+ def R(4)=L[4]; // integral closure of L[1]/ker
+ setring R(1);
+ R(1);
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names x y U(1) U(2)
+ ==> // block 2 : ordering C
+ ker;
+ ==> ker[1]=y^4*U(1)-x^4*U(2)
+ setring R(4);
+ R(4);
+ ==> // characteristic : 0
+ ==> // number of vars : 7
+ ==> // block 1 : ordering a
+ ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
+ ==> // : weights 1 1 1 1 1 1 1
+ ==> // block 2 : ordering dp
+ ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
+ ==> // block 3 : ordering C
+ ker;
+ ==> ker[1]=T(2)*T(5)-T(1)*T(7)
+ ==> ker[2]=T(1)*T(5)-T(2)*T(6)
+ ==> ker[3]=T(5)*T(6)-T(3)*T(7)
+ ==> ker[4]=T(4)*T(6)-T(5)*T(7)
+ ==> ker[5]=T(5)^2-T(6)*T(7)
+ ==> ker[6]=T(4)*T(5)-T(7)^2
+ ==> ker[7]=T(3)*T(5)-T(6)^2
+ ==> ker[8]=T(2)^2*T(6)-T(1)^2*T(7)
+ ==> ker[9]=T(3)*T(4)-T(6)*T(7)
+ ==> ker[10]=T(1)*T(4)-T(2)*T(7)
+ ==> ker[11]=T(2)*T(3)-T(1)*T(6)
+ ==> ker[12]=T(2)^2*T(6)^2-T(1)^2*T(6)*T(7)
+
+
+File: sing.htm, Node: closureRingtower, Next: closureFrac, Prev:
primeClosure, Up: reesclos_lib
+
+D.4.9.4 closureRingtower
+........................
+
+Procedure from library `reesclos.lib' (*note reesclos_lib::).
+
+*Usage:*
+ closureRingtower(list L); L a list of rings
+
+*Create:*
+ rings R(1),...,R(n) such that R(i)=L[i] for all i
+
+*Example:*
+ LIB "reesclos.lib";
+ ring R=0,(x,y),dp;
+ ideal I=x4,y4;
+ list L=primeClosure(ReesAlgebra(I)[1]);
+ closureRingtower(L);
+ R(1);
+ ==> // characteristic : 0
+ ==> // number of vars : 4
+ ==> // block 1 : ordering dp
+ ==> // : names x y U(1) U(2)
+ ==> // block 2 : ordering C
+ R(4);
+ ==> // characteristic : 0
+ ==> // number of vars : 7
+ ==> // block 1 : ordering a
+ ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
+ ==> // : weights 1 1 1 1 1 1 1
+ ==> // block 2 : ordering dp
+ ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
+ ==> // block 3 : ordering C
+
+
+File: sing.htm, Node: closureFrac, Prev: closureRingtower, Up: reesclos_lib
+
+D.4.9.5 closureFrac
+...................
+
+Procedure from library `reesclos.lib' (*note reesclos_lib::).
+
+*Create:*
+ a list fraction of two elements of L[1], such that
+ f=fraction[1]/fraction[2] via the injections phi L[i]->L[i+1].
+
+*Example:*
+ LIB "reesclos.lib";
+ ring R=0,(x,y),dp;
+ ideal ker=x2+y2;
+ export R;
+ ==> // ** `R` is already global
+ list L=primeClosure(R); // We normalize R/ker
+ closureRingtower(L); // Now R/ker=R(1) with normalization R(2)
+ setring R(2);
+ kill(R);
+ phi; // The map R(1)-->R(2)
+ ==> phi[1]=T(1)*T(2)
+ ==> phi[2]=T(1)
+ poly f=T(1)*T(2); // We will get a representation of f
+ export R(2);
+ ==> // ** `R(2)` is already global
+ closureFrac(L);
+ setring R(1);
+ kill (R(2));
+ fraction; // f=fraction[1]/fraction[2] via phi
+ ==> [1]:
+ ==> xy
+ ==> [2]:
+ ==> y
+
+
+File: sing.htm, Node: intprog_lib, Next: toric_lib, Prev: reesclos_lib,
Up: Commutative algebra
+
+D.4.10 intprog_lib
+------------------
+
+*Library:*
+ intprog.lib
+
+*Purpose:*
+ Integer Programming with Groebner Basis Methods
+
+*Author:*
+ Christine Theis, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* solve_IP:: procedures for solving Integer Programming problems
+
+
+File: sing.htm, Node: solve_IP, Up: intprog_lib
+
+D.4.10.1 solve_IP
+.................
+
+Procedure from library `intprog.lib' (*note intprog_lib::).
+
+*Usage:*
+ solve_IP(A,bx,c,alg); A intmat, bx intvec, c intvec, alg string.
+ solve_IP(A,bx,c,alg); A intmat, bx list of intvec, c intvec, alg
+ string.
+ solve_IP(A,bx,c,alg,prsv); A intmat, bx intvec, c intvec, alg
+ string, prsv intvec.
+ solve_IP(A,bx,c,alg,prsv); A intmat, bx list of intvec, c intvec,
+ alg string, prsv intvec.
+
+*Return:*
+ same type as bx: solution of the associated integer programming
+ problem(s) as explained in
+
+ *note Toric ideals and integer programming::.
+
+*Note:*
+ This procedure returns the solution(s) of the given IP-problem(s)
+ or the message `not solvable'.
+ One may call the procedure with several different algorithms:
+ - the algorithm of Conti/Traverso (ct),
+ - the positive variant of the algorithm of Conti/Traverso (pct),
+ - the algorithm of Conti/Traverso using elimination (ect),
+ - the algorithm of Pottier (pt),
+ - an algorithm of Bigatti/La Scala/Robbiano (blr),
+ - the algorithm of Hosten/Sturmfels (hs),
+ - the algorithm of DiBiase/Urbanke (du). The argument `alg' should
+ be the abbreviation for an algorithm as above: ct, pct, ect, pt,
+ blr, hs or du.
+
+ `ct' allows computation of an optimal solution of the IP-problem
+ directly from the right-hand vector b.
+ The same is true for its `positive' variant `pct' which may only be
+ applied if A and b have nonnegative entries.
+ All other algorithms need initial solutions of the IP-problem.
+
+ If `alg' is chosen to be `ct' or `pct', bx is read as the right
+ hand vector b of the system Ax=b. b should then be an intvec of
+ size m where m is the number of rows of A.
+ Furthermore, bx and A should be nonnegative if `pct' is used. If
+ `alg' is chosen to be `ect',`pt',`blr',`hs' or `du', bx is read as
+ an initial solution x of the system Ax=b. bx should then be a
+ nonnegative intvec of size n where n is the number of columns of A.
+
+ If `alg' is chosen to be `blr' or `hs', the algorithm needs a
+ vector with positive coefficients in the row space of A.
+ If no row of A contains only positive entries, one has to use the
+ versions of solve_IP which take such a vector prsv as an argument.
+
+ solve_IP may also be called with a list bx of intvecs instead of a
+ single intvec.
+
+*Example:*
+ LIB "intprog.lib";
+ // 1. call with single right-hand vector
+ intmat A[2][3]=1,1,0,0,1,1;
+ intvec b1=1,1;
+ intvec c=2,2,1;
+ intvec solution_vector=solve_IP(A,b1,c,"pct");
+ solution_vector;"";
+ ==> 0,1,0
+ ==>
+ // 2. call with list of right-hand vectors
+ intvec b2=-1,1;
+ list l=b1,b2;
+ l;
+ ==> [1]:
+ ==> 1,1
+ ==> [2]:
+ ==> -1,1
+ list solution_list=solve_IP(A,l,c,"ct");
+ solution_list;"";
+ ==> [1]:
+ ==> 0,1,0
+ ==> [2]:
+ ==> not solvable
+ ==>
+ // 3. call with single initial solution vector
+ A=2,1,-1,-1,1,2;
+ b1=3,4,5;
+ solve_IP(A,b1,c,"du");"";
+ ==> 0,7,2
+ ==>
+ // 4. call with single initial solution vector
+ // and algorithm needing a positive row space vector
+ solution_vector=solve_IP(A,b1,c,"hs");"";
+ ==> ERROR: The chosen algorithm needs a positive vector in the row space
of t\
+ he matrix.
+ ==> 0
+ ==>
+ // 5. call with single initial solution vector
+ // and positive row space vector
+ intvec prsv=1,2,1;
+ solution_vector=solve_IP(A,b1,c,"hs",prsv);
+ solution_vector;"";
+ ==> 0,7,2
+ ==>
+ // 6. call with list of initial solution vectors
+ // and positive row space vector
+ b2=7,8,0;
+ l=b1,b2;
+ l;
+ ==> [1]:
+ ==> 3,4,5
+ ==> [2]:
+ ==> 7,8,0
+ solution_list=solve_IP(A,l,c,"blr",prsv);
+ solution_list;
+ ==> [1]:
+ ==> 0,7,2
+ ==> [2]:
+ ==> 7,8,0
+
+* Menu:
+
+See also:
+* Integer programming::
+* intprog_lib::
+* toric_lib::
+
+*See also:* *note Integer programming::; *note intprog_lib::; *note
+toric_lib::.
+
+
+File: sing.htm, Node: toric_lib, Prev: intprog_lib, Up: Commutative algebra
+
+D.4.11 toric_lib
+----------------
+
+*Library:*
+ toric.lib
+
+*Purpose:*
+ Standard Basis of Toric Ideals
+
+*Author:*
+ Christine Theis, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* toric_ideal:: computes the toric ideal of A
+* toric_std:: standard basis of I by a specialized Buchberger algorithm
+
+
+File: sing.htm, Node: toric_ideal, Next: toric_std, Up: toric_lib
+
+D.4.11.1 toric_ideal
+....................
+
+Procedure from library `toric.lib' (*note toric_lib::).
+
+*Usage:*
+ toric_ideal(A,alg); A intmat, alg string
+ toric_ideal(A,alg,prsv); A intmat, alg string, prsv intvec
+
+*Return:*
+ ideal: standard basis of the toric ideal of A
+
+*Note:*
+ These procedures return the standard basis of the toric ideal of A
+ with respect to the term ordering in the current basering. Not all
+ term orderings are supported: The usual global term orderings may
+ be used, but no block orderings combining them.
+ One may call the procedure with several different algorithms:
+ - the algorithm of Conti/Traverso using elimination (ect),
+ - the algorithm of Pottier (pt),
+ - an algorithm of Bigatti/La Scala/Robbiano (blr),
+ - the algorithm of Hosten/Sturmfels (hs),
+ - the algorithm of DiBiase/Urbanke (du).
+ The argument `alg' should be the abbreviation for an algorithm as
+ above: ect, pt, blr, hs or du.
+
+ If `alg' is chosen to be `blr' or `hs', the algorithm needs a
+ vector with positive coefficients in the row space of A.
+ If no row of A contains only positive entries, one has to use the
+ second version of toric_ideal which takes such a vector as its
+ third argument.
+ For the mathematical background, see
+
+ *note Toric ideals and integer programming::.
+
+*Example:*
+ LIB "toric.lib";
+ ring r=0,(x,y,z),dp;
+ // call with two arguments
+ intmat A[2][3]=1,1,0,0,1,1;
+ A;
+ ==> 1,1,0,
+ ==> 0,1,1
+ ideal I=toric_ideal(A,"du");
+ I;
+ ==> I[1]=xz-y
+ I=toric_ideal(A,"blr");
+ ==> ERROR: The chosen algorithm needs a positive vector in the row space
of t\
+ he matrix.
+ I;
+ ==> I[1]=0
+ // call with three arguments
+ intvec prsv=1,2,1;
+ I=toric_ideal(A,"blr",prsv);
+ I;
+ ==> I[1]=xz-y
+
+* Menu:
+
+See also:
+* Toric ideals::
+* intprog_lib::
+* toric_lib::
+* toric_std::
+
+*See also:* *note Toric ideals::; *note intprog_lib::; *note
+toric_lib::; *note toric_std::.
+
+
+File: sing.htm, Node: toric_std, Prev: toric_ideal, Up: toric_lib
+
+D.4.11.2 toric_std
+..................
+
+Procedure from library `toric.lib' (*note toric_lib::).
+
+*Usage:*
+ toric_std(I); I ideal
+
+*Return:*
+ ideal: standard basis of I
+
+*Note:*
+ This procedure computes the standard basis of I using a specialized
+ Buchberger algorithm. The generating system by which I is given has
+ to consist of binomials of the form x^u-x^v. There is no real check
+ if I is toric. If I is generated by binomials of the above form,
+ but not toric, toric_std computes an ideal `between' I and its
+ saturation with respect to all variables.
+ For the mathematical background, see
+
+ *note Toric ideals and integer programming::.
+
+*Example:*
+ LIB "toric.lib";
+ ring r=0,(x,y,z),wp(3,2,1);
+ // call with toric ideal (of the matrix A=(1,1,1))
+ ideal I=x-y,x-z;
+ ideal J=toric_std(I);
+ J;
+ ==> J[1]=y-z
+ ==> J[2]=x-z
+ // call with the same ideal, but badly chosen generators:
+ // 1) not only binomials
+ I=x-y,2x-y-z;
+ J=toric_std(I);
+ ==> ERROR: Generator 2 of the input ideal is no difference of monomials.
+ // 2) binomials whose monomials are not relatively prime
+ I=x-y,xy-yz,y-z;
+ J=toric_std(I);
+ ==> Warning: The monomials of generator 2 of the input ideal are not
relative\
+ ly prime.
+ J;
+ ==> J[1]=y-z
+ ==> J[2]=x-z
+ // call with a non-toric ideal that seems to be toric
+ I=x-yz,xy-z;
+ J=toric_std(I);
+ J;
+ ==> J[1]=y2-1
+ ==> J[2]=x-yz
+ // comparison with real standard basis and saturation
+ ideal H=std(I);
+ H;
+ ==> H[1]=x-yz
+ ==> H[2]=y2z-z
+ LIB "elim.lib";
+ sat(H,xyz);
+ ==> [1]:
+ ==> _[1]=x-yz
+ ==> _[2]=y2-1
+ ==> [2]:
+ ==> 1
+
+* Menu:
+
+See also:
+* Toric ideals::
+* intprog_lib::
+* toric_ideal::
+* toric_lib::
+
+*See also:* *note Toric ideals::; *note intprog_lib::; *note
+toric_ideal::; *note toric_lib::.
+
+
+File: sing.htm, Node: Singularities, Next: Invariant theory, Prev:
Commutative algebra, Up: SINGULAR libraries
+
+D.5 Singularities
+=================
+
+* Menu:
+
+* classify_lib:: procedures for the Arnold-classifier of singularities
+* deform_lib:: procedures for computing miniversal deformation
+* equising_lib:: procedures for equisingularity strata
+* gaussman_lib:: procedures for gauss-manin connection of a singularity
+* hnoether_lib:: procedures for the Hamburger-Noether (Puiseux) development
+* mondromy_lib:: procedures to compute the monodromy of a singularity
+* qhmoduli_lib:: procedures for moduli spaces of sqh-singularities
+* sing_lib:: procedures for computing invariants of singularities
+* spcurve_lib:: procedures for cm codimension 2 singularities
+* spectrum_lib:: procedures for computing singularity spectra
+
+
+File: sing.htm, Node: classify_lib, Next: deform_lib, Prev: Singularities,
Up: Singularities
+
+D.5.1 classify_lib
+------------------
+
+*Library:*
+ classify.lib
+
+*Purpose:*
+ Arnold Classifier of Singularities
+
+*Authors:*
+ Kai Krueger, address@hidden
+ Corina Baciu, address@hidden
+
+*Overview:*
+ A library for classifying isolated hypersurface singularities
+ w.r.t. right equivalence, based on the determinator of
+ singularities by V.I. Arnold.
+
+*Procedures:*
+
+* Menu:
+
+* basicinvariants:: computes Milnor number, determinacy-bound and corank of
+* classify:: normal form of poly f determined with Arnold's method
+* corank:: computes the corank of f (i.e. of the Hessian of f)
+* Hcode:: coding of intvec v according to the number repetitions
+* init_debug:: print trace and debugging information depending on int n
+* internalfunctions:: display names of internal procedures of this library
+* milnorcode:: Hilbert poly of [e-th] Milnor algebra coded with Hcode
+* morsesplit:: residual part of f after applying the splitting lemma
+* quickclass:: normal form of f determined by invariants (milnorcode)
+* singularity:: normal form of singularity given by its name s and index
+* swap:: returns b,a
+* A_L:: shortcut for quickclass(f) or normalform(s)
+* normalform:: normal form of singularity given by its name s
+* debug_log:: print trace and debugging information w.r.t level>@DeBug
+
+
+File: sing.htm, Node: basicinvariants, Next: classify, Up: classify_lib
+
+D.5.1.1 basicinvariants
+.......................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ basicinvariants(f); f = poly
+
+*Compute:*
+ Compute basic invariants of f: an upper bound d for the
+ determinacy, the milnor number mu and the corank c of f
+
+*Return:*
+ intvec: d, mu, c
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ basicinvariants((x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3);
+ ==> 5,4,2
+
+
+File: sing.htm, Node: classify, Next: corank, Prev: basicinvariants, Up:
classify_lib
+
+D.5.1.2 classify
+................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ classify(f); f=poly
+
+*Compute:*
+ normal form and singularity type of f with respect to right
+ equivalence, as given in the book "Singularities of differentiable
+ maps, Volume I" by V.I. Arnold, S.M. Gusein-Zade, A.N. Varchenko
+
+*Return:*
+ normal form of f, of type poly
+
+*Remark:*
+ This version of classify is only beta. Please send bugs and
+ comments to: "Kai Krueger" <address@hidden>
+ Be sure to have at least Singular version 1.0.1. Updates can be
+ found at:
+ URL=http://www.mathematik.uni-kl.de/~krueger/Singular/
+
+*Note:*
+ type init_debug(n); (0 <= n <= 10) in order to get intermediate
+ information, higher values of n give more information.
+ The proc creates several global objects with names all starting
+ with @, hence there should be no name conflicts
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
+ classify(f);
+ ==> About the singularity :
+ ==> Milnor number(f) = 4
+ ==> Corank(f) = 2
+ ==> Determinacy <= 5
+ ==> Guessing type via Milnorcode: D[k]=D[4]
+ ==>
+ ==> Computing normal form ...
+ ==> I have to apply the splitting lemma. This will take some time....:-)
+ ==> Arnold step number 4
+ ==> The singularity
+ ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
+ ==> is R-equivalent to D[4].
+ ==> Milnor number = 4
+ ==> modality = 0
+ ==> 2z2+x2y+y3
+ init_debug(3);
+ ==> Debugging level change from 0 to 3
+ classify(f);
+ ==> Computing Basicinvariants of f ...
+ ==> About the singularity :
+ ==> Milnor number(f) = 4
+ ==> Corank(f) = 2
+ ==> Determinacy <= 5
+ ==> Hcode: 1,2,1,0,0
+ ==> Milnor code : 1,1,1
+ ==> Debug:(2): entering HKclass3_teil_1 1,1,1
+ ==> Debug:(2): finishing HKclass3_teil_1
+ ==> Guessing type via Milnorcode: D[k]=D[4]
+ ==>
+ ==> Computing normal form ...
+ ==> I have to apply the splitting lemma. This will take some time....:-)
+ ==> Debug:(3): Split the polynomial below using determinacy: 5
+ ==> Debug:(3): 9y2-12yz+4z2-x3+6x2y-4x2z+xyz+x4+3x2y3
+ ==> Debug:(2): Permutations: 3,2,1
+ ==> Debug:(2): Permutations: 3,2,1
+ ==> Debug:(2): rank determined with Morse rg= 1
+ ==> Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
+ ==> Step 3
+ ==> Arnold step number 4
+ ==> The singularity
+ ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
+ ==> is R-equivalent to D[4].
+ ==> Milnor number = 4
+ ==> modality = 0
+ ==> Debug:(2): Decode:
+ ==> Debug:(2): S_in= D[4] s_in= D[4]
+ ==> Debug:(2): Looking for Normalform of D[k] with (k,r,s) = ( 4 , 0 ,
0 )
+ ==> Debug:(2): Opening Singalarity-database:
+ ==> DBM: NFlist
+ ==> Debug:(2): DBMread( D[k] )= x2y+y^(k-1) .
+ ==> Debug:(2): S= f = x2y+y^(k-1); Tp= x2y+y^(k-1) Key= I_D[k]
+ ==> Polynom f= x2y+y3 crk= 2 Mu= 4 MlnCd= 1,1,1
+ ==> Debug:(2): Info= x2y+y3
+ ==> Debug:(2): Normal form NF(f)= 2*x(3)^2+x(1)^2*x(2)+x(2)^3
+ ==> 2z2+x2y+y3
+
+
+File: sing.htm, Node: corank, Next: Hcode, Prev: classify, Up: classify_lib
+
+D.5.1.3 corank
+..............
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ corank(f); f=poly
+
+*Return:*
+ the corank of the Hessian matrix of f, of type int
+
+*Remark:*
+ corank(f) is the number of variables occurring in the residual
+ singularity after applying 'morsesplit' to f
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
+ corank(f);
+ ==> 2
+
+
+File: sing.htm, Node: Hcode, Next: init_debug, Prev: corank, Up:
classify_lib
+
+D.5.1.4 Hcode
+.............
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ Hcode(v); v=intvec
+
+*Return:*
+ intvec, coding v according to the number of successive repetitions
+ of an entry
+
+*Example:*
+ LIB "classify.lib";
+ intvec v1 = 1,3,5,5,2;
+ Hcode(v1);
+ ==> 1,0,1,0,2,0,0,1,0
+ intvec v2 = 1,2,3,4,4,4,4,4,4,4,3,2,1;
+ Hcode(v2);
+ ==> 1,1,1,7,1,1,1
+
+
+File: sing.htm, Node: init_debug, Next: internalfunctions, Prev: Hcode,
Up: classify_lib
+
+D.5.1.5 init_debug
+..................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ init_debug([level]); level=int
+
+*Compute:*
+ Set the global variable @DeBug to level. The variable @DeBug is
+ used by the function debug_log(level, list of strings) to know when
+ to print the list of strings. init_debug() reports only changes of
+ @DeBug.
+
+*Note:*
+ The procedure init_debug(n); is useful as trace-mode. n may range
+ from 0 to 10, higher values of n give more information.
+
+*Example:*
+ LIB "classify.lib";
+ init_debug();
+ debug_log(1,"no trace information printed");
+ init_debug(1);
+ ==> Debugging level change from 0 to 1
+ debug_log(1,"some trace information");
+ ==> some trace information
+ init_debug(2);
+ ==> Debugging level change from 1 to 2
+ debug_log(2,"nice for debugging scripts");
+ ==> Debug:(2): nice for debugging scripts
+ init_debug(0);
+ ==> Debugging switched off.
+
+
+File: sing.htm, Node: internalfunctions, Next: milnorcode, Prev:
init_debug, Up: classify_lib
+
+D.5.1.6 internalfunctions
+.........................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ internalfunctions();
+
+*Return:*
+ nothing, display names of internal procedures of classify.lib
+
+*Example:*
+ LIB "classify.lib";
+ internalfunctions();
+ ==> Internal functions for the classification using Arnold's method,
+ ==> the function numbers correspond to numbers in Arnold's classifier:
+ ==> Klassifiziere(poly f); //determine the type of the singularity f
+ ==> Funktion1bis (poly f, list cstn)
+ ==> Funktion3 (poly f, list cstn)
+ ==> Funktion6 (poly f, list cstn)
+ ==> Funktion13 (poly f, list cstn)
+ ==> Funktion17 (poly f, list cstn)
+ ==> Funktion25 (poly f, list cstn)
+ ==> Funktion40 (poly f, list cstn, int k)
+ ==> Funktion47 (poly f, list cstn)
+ ==> Funktion50 (poly f, list cstn)
+ ==> Funktion58 (poly fin, list cstn)
+ ==> Funktion59 (poly f, list cstn)
+ ==> Funktion66 (poly f, list cstn)
+ ==> Funktion82 (poly f, list cstn)
+ ==> Funktion83 (poly f, list cstn)
+ ==> Funktion91 (poly f, list cstn, int k)
+ ==> Funktion92 (poly f, list cstn, int k)
+ ==> Funktion93 (poly f, list cstn, int k)
+ ==> Funktion94 (poly f, list cstn, int k)
+ ==> Funktion95 (poly f, list cstn, int k)
+ ==> Funktion96 (poly f, list cstn, int k)
+ ==> Funktion97 (poly f, list cstn)
+ ==> Isomorphie_s82_x (poly f, poly fk, int k)
+ ==> Isomorphie_s82_z (poly f, poly fk, int k)
+ ==> Isomorphie_s17 (poly f, poly fk, int k, int ct)
+ ==> printresult (string f,string typ,int Mu,int m,int corank,int K)
+ ==>
+ ==> Internal functions for the classifcation by invariants:
+ ==> Cubic (poly f)
+ ==> parity (int e) //return the parity of e
+ ==> HKclass (intvec i)
+ ==> HKclass3( intvec i, string SG_Typ, int cnt)
+ ==> HKclass3_teil_1 (intvec i, string SG_Typ, int cnt)
+ ==> HKclass5 (intvec i, string SG_Typ, int cnt)
+ ==> HKclass5_teil_1 (intvec i, string SG_Typ, int cnt)
+ ==> HKclass5_teil_2 (intvec i, string SG_Typ, int cnt)
+ ==> HKclass7 (intvec i, string SG_Typ, int cnt)
+ ==> HKclass7_teil_1 (intvec i, string SG_Typ, int cnt)
+ ==>
+ ==> Internal functions for the Morse-splitting lemma:
+ ==> Morse(poly fi, int K, int corank) //splitting lemma itself
+ ==> Coeffs (list #)
+ ==> Coeff
+ ==>
+ ==> Internal functions providing tools:
+ ==> ReOrder(poly f)
+ ==> Singularitaet(string typ,int k,int r,int s,poly a,poly b,poly
c,poly d)
+ ==> RandomPolyK
+ ==> Faktorisiere(poly f, poly g, int p, int k) compute g = (ax+by^k)^p
+ ==> Teile(poly f, poly g); //divides f by g
+ ==> GetRf(poly f, int n);
+ ==> Show(poly f);
+ ==> checkring();
+ ==> DecodeNormalFormString(string s);
+ ==> Setring(int n, string ringname);
+ ==>
+
+
+File: sing.htm, Node: milnorcode, Next: morsesplit, Prev:
internalfunctions, Up: classify_lib
+
+D.5.1.7 milnorcode
+..................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ milnorcode(f[,e]); f=poly, e=int
+
+*Return:*
+ intvec, coding the Hilbert function of the e-th Milnor algebra of
+ f, i.e. of basering/(jacob(f)^e) (default e=1), according to proc
+ Hcode
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ poly f=x2y+y3+z2;
+ milnorcode(f);
+ ==> 1,1,1
+ milnorcode(f,2); // a big second argument may result in memory overflow
+ ==> 1,0,1,0,2,0,0,1,0
+
+
+File: sing.htm, Node: morsesplit, Next: quickclass, Prev: milnorcode, Up:
classify_lib
+
+D.5.1.8 morsesplit
+..................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ morsesplit(f); f=poly
+
+*Return:*
+ Normal form of f in M^3 after application of the splitting lemma
+
+*Compute:*
+ apply the splitting lemma (generalized Morse lemma) to f
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ export r;
+ ==> // ** `r` is already global
+ init_debug(1);
+ ==> Debugging level is set to 1
+ poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
+ poly g=morsesplit(f);
+ ==> Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
+ g;
+ ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
+
+
+File: sing.htm, Node: quickclass, Next: singularity, Prev: morsesplit, Up:
classify_lib
+
+D.5.1.9 quickclass
+..................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ quickclass(f); f=poly
+
+*Return:*
+ Normal form of f in Arnold's list
+
+*Remark:*
+ try to determine the normal form of f by invariants, mainly by
+ computing the Hilbert function of the Milnor algebra, no coordinate
+ change is needed (see also proc 'milnorcode').
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),ds;
+ poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
+ quickclass(f);
+ ==> Singularity R-equivalent to : D[k]=D[4]
+ ==> normal form : z2+x2y+y3
+ ==> z2+x2y+y3
+
+
+File: sing.htm, Node: singularity, Next: swap, Prev: quickclass, Up:
classify_lib
+
+D.5.1.10 singularity
+....................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ singularity(t, l); t=string (name of singularity),
+ l=list of integers/polynomials (indices/parameters of singularity)
+
+*Compute:*
+ get the singularity named by type t from the database. list l is
+ as follows:
+ l= k [,r [,s [,a [,b [,c [,d]..]: k,r,s=int a,b,c,d=poly.
+ The name of the dbm-database file is: NFlist.[dir,pag]. The file
+ is found in the current directory. If it does not exist, please run
+ the script MakeDBM first.
+
+*Return:*
+ Normal form and corank of the singularity named by type t and its
+ index (indices) l.
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(x,y,z),(c,ds);
+ init_debug(0);
+ singularity("E[6k]",6);
+ ==> [1]:
+ ==> x3+xy13+y19
+ ==> [2]:
+ ==> 2
+ singularity("T[k,r,s]", 3, 7, 5);
+ ==> [1]:
+ ==> x3+xyz+z5+y7
+ ==> [2]:
+ ==> 3
+ poly f=y;
+ singularity("J[k,r]", 4, 0, 0, f);
+ ==> [1]:
+ ==> x3+x2y4+y13
+ ==> [2]:
+ ==> 2
+
+
+File: sing.htm, Node: swap, Next: A_L, Prev: singularity, Up: classify_lib
+
+D.5.1.11 swap
+.............
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ swap(a,b);
+
+*Return:*
+ b,a if b,a is the input (any type)
+
+*Example:*
+ LIB "classify.lib";
+ swap("variable1","variable2");
+ ==> variable2 variable1
+
+
+File: sing.htm, Node: A_L, Next: normalform, Prev: swap, Up: classify_lib
+
+D.5.1.12 A_L
+............
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ A_L(f); f poly
+ A_L(s); s string, the name of the singularity
+
+*Compute:*
+ the normal form of f in Arnold's list of singularities in case 1,
+ in case 2 nothing has to be computed.
+
+*Return:*
+ A_L(f): compute via 'milnorcode' the class of f and return the
+ normal form of f found in the database.
+ A_L("name"): get the normal form from the database for the
+ singularity given by its name.
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(a,b,c),ds;
+ poly f=A_L("E[13]");
+ f;
+ ==> c2+a3+ab5+b8
+ A_L(f);
+ ==> Singularity R-equivalent to : E[6k+1]=E[13]
+ ==> normal form : c2+a3+ab5+b8
+ ==> c2+a3+ab5+b8
+
+
+File: sing.htm, Node: normalform, Next: debug_log, Prev: A_L, Up:
classify_lib
+
+D.5.1.13 normalform
+...................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ normalform(s); s=string
+
+*Return:*
+ Arnold's normal form of singularity with name s
+
+*Example:*
+ LIB "classify.lib";
+ ring r=0,(a,b,c),ds;
+ normalform("E[13]");
+ ==> c2+a3+ab5+b8
+
+
+File: sing.htm, Node: debug_log, Prev: normalform, Up: classify_lib
+
+D.5.1.14 debug_log
+..................
+
+Procedure from library `classify.lib' (*note classify_lib::).
+
+*Usage:*
+ debug_log(level,li); level=int, li=comma separated "message" list
+
+*Compute:*
+ print "messages" if level>address@hidden
+ useful for user-defined trace messages.
+
+*Example:*
+ LIB "classify.lib";
+ example init_debug;
+ ==> // proc init_debug from lib classify.lib
+ ==> EXAMPLE:
+ ==> init_debug();
+ ==> debug_log(1,"no trace information printed");
+ ==> init_debug(1);
+ ==> Debugging level change from 0 to 1
+ ==> debug_log(1,"some trace information");
+ ==> some trace information
+ ==> init_debug(2);
+ ==> Debugging level change from 1 to 2
+ ==> debug_log(2,"nice for debugging scripts");
+ ==> Debug:(2): nice for debugging scripts
+ ==> init_debug(0);
+ ==> Debugging switched off.
+ ==>
+
+* Menu:
+
+See also:
+* init_debug::
+
+*See also:* *note init_debug::.
+
+
+File: sing.htm, Node: deform_lib, Next: equising_lib, Prev: classify_lib,
Up: Singularities
+
+D.5.2 deform_lib
+----------------
+
+*Library:*
+ deform.lib
+
+*Purpose:*
+ Miniversal Deformation of Singularities and Modules
+
+*Author:*
+ Bernd Martin, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* versal:: miniversal deformation of isolated singularity Fo
+* mod_versal:: miniversal deformation of module Mo modulo ideal I
+* lift_kbase:: lifting N into standard kbase of M
+* lift_rel_kb:: relative lifting N into a kbase of M
+* kill_rings:: kills the exported rings from above
+
+
+File: sing.htm, Node: versal, Next: mod_versal, Up: deform_lib
+
+D.5.2.1 versal
+..............
+
+Procedure from library `deform.lib' (*note deform_lib::).
+
+*Usage:*
+ versal(Fo[,d,any]); Fo=ideal, d=int, any=list
+
+*Compute:*
+ miniversal deformation of Fo up to degree d (default d=100),
+
+*Create:*
+ Rings (exported):
+ 'my'Px = extending the basering Po by new variables given by
+ "A,B,.." (deformation parameters), returns as basering; the new
+ variables precede the old ones, the ordering is the product between
+ "ls" and "ord(Po)"
+ 'my'Qx = Px/Fo extending Qo=Po/Fo,
+ 'my'So = the embedding-ring of the versal base space,
+ 'my'Ox = Px/Js extending So/Js. (default my="")
+
+ Matrices (in Px, exported):
+ Js = giving the versal base space (obstructions),
+ Fs = giving the versal family of Fo,
+ Rs = giving the lifting of Ro=syz(Fo).
+
+ If d is defined (!=0), it computes up to degree d.
+ If 'any' is defined and any[1] is no string, interactive version.
+ Otherwise 'any' gives predefined strings:
+ "my","param","order","out" ("my" prefix-string, "param" is a letter
+ (e.g. "A") for the name of first parameter or (e.g. "A(") for index
+ parameter variables, "order" ordering string for ring extension),
+ "out" name of output-file).
+
+*Note:*
+ printlevel < 0 no output at all,
+ printlevel >=0,1,2,.. informs you, what is going on;
+ this proc uses 'execute'.
+
+*Example:*
+ LIB "deform.lib";
+ int p = printlevel;
+ printlevel = 0;
+ ring r1 = 0,(x,y,z,u,v),ds;
+ matrix m[2][4] = x,y,z,u,y,z,u,v;
+ ideal Fo = minor(m,2);
+ // cone over rational normal curve of degree 4
+ versal(Fo);
+ ==> // ready: T_1 and T_2
+ ==> // start computation in degree 2.
+ ==>
+ ==> // Result belongs to ring Px.
+ ==> // Equations of total space of miniversal deformation are
+ ==> // given by Fs, equations of miniversal base space by Js.
+ ==> // Make Px the basering and list objects defined in Px by typing:
+ ==> setring Px; show(Px);
+ ==> listvar(matrix);
+ ==> // NOTE: rings Qx, Px, So are alive!
+ ==> // (use 'kill_rings("");' to remove)
+ setring Px;
+ // ___ Equations of miniversal base space ___:
+ Js;"";
+ ==> Js[1,1]=BD
+ ==> Js[1,2]=-AD+D2
+ ==> Js[1,3]=-CD
+ ==>
+ // ___ Equations of miniversal total space ___:
+ Fs;"";
+ ==> Fs[1,1]=-u2+zv+Bu+Dv
+ ==> Fs[1,2]=-zu+yv-Au+Du
+ ==> Fs[1,3]=-yu+xv+Cu+Dz
+ ==> Fs[1,4]=z2-yu+Az+By
+ ==> Fs[1,5]=yz-xu+Bx-Cz
+ ==> Fs[1,6]=-y2+xz+Ax+Cy
+ ==>
+
+
+File: sing.htm, Node: mod_versal, Next: lift_kbase, Prev: versal, Up:
deform_lib
+
+D.5.2.2 mod_versal
+..................
+
+Procedure from library `deform.lib' (*note deform_lib::).
+
+*Usage:*
+ mod_versal(Mo,I[,d,any]); I=ideal, M=module, d=int, any =list
+
+*Compute:*
+ miniversal deformation of coker(Mo) over Qo=Po/Io, Po=basering;
+
+*Create:*
+ Ringsr (exported):
+ 'my'Px = extending the basering by new variables (deformation
+ parameters), the new variables precede the old ones,
+ the ordering is the product between "my_ord"
+ and "ord(Po)"
+ 'my'Qx = Px/Io extending Qo (returns as basering),
+ 'my'Ox = Px/(Io+Js) ring of the versal deformation of coker(Ms),
+ 'my'So = embedding-ring of the versal base space. (default 'my'="")
+
+ Matrices (in Qx, exported):
+ Js = giving the versal base space (obstructions),
+ Ms = giving the versal family of Mo,
+ Ls = giving the lifting of syzygies Lo=syz(Mo),
+
+ If d is defined (!=0), it computes up to degree d.
+ If 'any' is defined and any[1] is no string, interactive version.
+ Otherwise 'any' gives predefined strings:"my","param","order","out"
+ ("my" prefix-string, "param" is a letter (e.g. "A") for the name of
+ first parameter or (e.g. "A(") for index parameter variables, "ord"
+ ordering string for ring extension), "out" name of output-file).
+
+*Note:*
+ printlevel < 0 no output at all,
+ printlevel >=0,1,2,.. informs you, what is going on,
+ this proc uses 'execute'.
+
+*Example:*
+ LIB "deform.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring Ro = 0,(x,y),wp(3,4);
+ ideal Io = x4+y3;
+ matrix Mo[2][2] = x2,y,-y2,x2;
+ mod_versal(Mo,Io);
+ ==> // vdim (Ext^2) = 4
+ ==> // vdim (Ext^1) = 4
+ ==> // ready: Ext1 and Ext2
+ ==> // Ext1 is quasi-homogeneous represented: 3,6,1,4
+ ==> // infinitesimal extension
+ ==> x2-Ax-B, y+Cx+D,
+ ==> -y2+Cxy+Dy,x2+Ax+B
+ ==> // start deg = 2
+ ==> // start deg = 3
+ ==> // start deg = 4
+ ==> // start deg = 5
+ ==> // finished in degree
+ ==> 5
+ ==> // quasi-homogeneous weights of miniversal base
+ ==> 3,6,1,4
+ ==> // Result belongs to qring Qx
+ ==> // Equations of total space of miniversal deformation are in Js
+ ==> -2AB+A3+3CD2-BC3-3AC2D+A2C3,
+ ==> -B2+A2B+D3-3BC2D+ABC3
+ ==> // Matrix of the deformed module is Ms and lifted syzygies are Ls.
+ ==> // Make Qx the basering and list objects defined in Qx by typing:
+ ==> listvar(ring);setring Qx; show(Qx);listvar(ideal);listvar(matrix);
+ ==> // NOTE: rings Qx, Ox, So are still alive!
+ ==> // (use: 'kill_rings();' to remove them)
+ printlevel = p;
+ if(system("with","Namespaces")) {
+ if(nameof(Current) == "Ring" ) {
+ kill Top::Px,Top::Qx,Top::So;
+ } else {
+ kill Ring::Px,Ring::So;
+ }
+ }
+ kill Px,Qx,So;
+
+
+File: sing.htm, Node: lift_kbase, Next: lift_rel_kb, Prev: mod_versal, Up:
deform_lib
+
+D.5.2.3 lift_kbase
+..................
+
+Procedure from library `deform.lib' (*note deform_lib::).
+
+*Usage:*
+ lift_kbase(N,M); N,M=poly/ideal/vector/module
+
+*Return:*
+ matrix A, coefficient matrix expressing N as linear combination of
+ k-basis of M. Let the k-basis have k elements and size(N)=c
+ columns. Then A satisfies:
+ matrix(reduce(N,std(M)),k,c) = matrix(kbase(std(M)))*A
+
+*Assume:*
+ dim(M)=0 and the monomial ordering is a well ordering or the last
+ block of the ordering is c or C
+
+*Example:*
+ LIB "deform.lib";
+ ring R=0,(x,y),ds;
+ module M=[x2,xy],[y2,xy],[0,xx],[0,yy];
+ module N=[x3+xy,x],[x,x+y2];
+ print(M);
+ ==> x2,y2,0, 0,
+ ==> xy,xy,x2,y2
+ module kb=kbase(std(M));
+ print(kb);
+ ==> y2,xy,y,x,1,0,0,0,
+ ==> 0, 0, 0,0,0,y,x,1
+ print(N);
+ ==> xy+x3,x,
+ ==> x, x+y2
+ matrix A=lift_kbase(N,M);
+ print(A);
+ ==> 0,0,
+ ==> 1,0,
+ ==> 0,0,
+ ==> 0,1,
+ ==> 0,0,
+ ==> 0,0,
+ ==> 1,1,
+ ==> 0,0
+ matrix(reduce(N,std(M)),nrows(kb),ncols(A)) - matrix(kbase(std(M)))*A;
+ ==> _[1,1]=0
+ ==> _[1,2]=0
+ ==> _[2,1]=0
+ ==> _[2,2]=0
+
+
+File: sing.htm, Node: lift_rel_kb, Next: kill_rings, Prev: lift_kbase, Up:
deform_lib
+
+D.5.2.4 lift_rel_kb
+...................
+
+Procedure from library `deform.lib' (*note deform_lib::).
+
+*Usage:*
+ lift_rel_kb(N,M[,kbaseM,p]);
+
+*Assume:*
+ [p a monomial ] or the product of all variables
+ N, M modules of same rank, M depending only on variables not in p
+ and vdim(M) is finite in this ring,
+ [ kbaseM the kbase of M in the subring given by variables not in p
+ ]
+ warning: these assumptions are not checked by the procedure
+
+*Return:*
+ matrix A, whose j-th columns present the coeff's of N[j] in kbaseM,
+ i.e. kbaseM*A = reduce(N,std(M))
+
+*Example:*
+ LIB "deform.lib";
+ ring r=0,(A,B,x,y),dp;
+ module M = [x2,xy],[xy,y3],[y2],[0,x];
+ module kbaseM = [1],[x],[xy],[y],[0,1],[0,y],[0,y2];
+ poly f=xy;
+ module N = [AB,BBy],[A3xy+x4,AB*(1+y2)];
+ matrix A = lift_rel_kb(N,M,kbaseM,f);
+ print(A);
+ ==> AB,0,
+ ==> 0, 0,
+ ==> 0, A3,
+ ==> 0, 0,
+ ==> 0, AB,
+ ==> B2,0,
+ ==> 0, AB
+ "TEST:";
+ ==> TEST:
+ print(matrix(kbaseM)*A-matrix(reduce(N,std(M))));
+ ==> 0,0,
+ ==> 0,0
+
+
+File: sing.htm, Node: kill_rings, Prev: lift_rel_kb, Up: deform_lib
+
+D.5.2.5 kill_rings
+..................
+
+Procedure from library `deform.lib' (*note deform_lib::).
+
+*Usage:*
+ kill_rings([string]);
+
+*Return:*
+ nothing, but kills exported rings generated by procedures 'versal'
+ and 'mod_versal' with optional prefix 'string'
+
+
+File: sing.htm, Node: equising_lib, Next: gaussman_lib, Prev: deform_lib,
Up: Singularities
+
+D.5.3 equising_lib
+------------------
+
+*Library:*
+ equising.lib
+
+*Purpose:*
+ Equisingularity Stratum of a Family of Plane Curves
+
+*Author:*
+ Christoph Lossen, address@hidden
+ Andrea Mindnich, address@hidden
+
+*Main procedures:*
+
+* Menu:
+
+* tau_es:: codim of mu-const stratum in semi-universal def. base
+* esIdeal:: (Wahl's) equisingularity ideal of f
+* esStratum:: equisingularity stratum of a family F
+* isEquising:: tests if a given deformation is equisingular
+
+*Auxiliary procedure:*
+
+* Menu:
+
+* control_Matrix:: computes list of blowing-up data
+
+
+File: sing.htm, Node: tau_es, Next: esIdeal, Up: equising_lib
+
+D.5.3.1 tau_es
+..............
+
+Procedure from library `equising.lib' (*note equising_lib::).
+
+*Usage:*
+ tau_es(f); f poly
+
+*Assume:*
+ f is a reduced bivariate polynomial, the basering has precisely two
+ variables, is local and no qring.
+
+*Return:*
+ int, the codimension of the mu-const stratum in the semi-universal
+ deformation base.
+
+*Note:*
+ printlevel>=1 displays additional information.
+ When called with any additional parameter, the computation of the
+ Milnor number is avoided (no check for NND).
+
+*Example:*
+ LIB "equising.lib";
+ ring r=32003,(x,y),ds;
+ poly f=(x4-y4)^2-x10;
+ tau_es(f);
+ ==> 42
+
+* Menu:
+
+See also:
+* esIdeal::
+* invariants::
+* tjurina::
+
+*See also:* *note esIdeal::; *note invariants::; *note tjurina::.
+
+
+File: sing.htm, Node: esIdeal, Next: esStratum, Prev: tau_es, Up:
equising_lib
+
+D.5.3.2 esIdeal
+...............
+
+Procedure from library `equising.lib' (*note equising_lib::).
+
+*Usage:*
+ esIdeal(f); f poly
+
+*Assume:*
+ f is a reduced bivariate polynomial, the basering has precisely two
+ variables, is local and no qring, and the characteristic of the
+ ground field does not divide mult(f).
+
+*Return:*
+ list of two ideals:
+
+ _[1]: equisingularity ideal of f (in sense of Wahl)
+ _[2]: equisingularity ideal of f with fixed section
+
+*Note:*
+ if some of the above condition is not satisfied then return value
+ is list(0,0).
+
+*Example:*
+ LIB "equising.lib";
+ ring r=0,(x,y),ds;
+ poly f=x7+y7+(x-y)^2*x2y2;
+ list K=esIdeal(f);
+ ==> polynomial is Newton degenerated !
+ ==>
+ ==> //
+ ==> // versal deformation with triv. section
+ ==> // =====================================
+ ==> //
+ ==> //
+ ==> // Compute equisingular Stratum over Spec(C[t]/t^2)
+ ==> // ================================================
+ ==> //
+ ==> // finished
+ ==> //
+ option(redSB);
+ // Wahl's equisingularity ideal:
+ std(K[1]);
+ ==> _[1]=4x4y-10x2y3+6xy4+21x6+14y6
+ ==> _[2]=4x3y2-6x2y3+2xy4+7x6
+ ==> _[3]=x2y4-xy5
+ ==> _[4]=x7
+ ==> _[5]=xy6
+ ==> _[6]=y7
+ ring rr=0,(x,y),ds;
+ poly f=x4+4x3y+6x2y2+4xy3+y4+2x2y15+4xy16+2y17+xy23+y24+y30+y31;
+ list K=esIdeal(f);
+ ==> polynomial is Newton degenerated !
+ ==>
+ ==> //
+ ==> // versal deformation with triv. section
+ ==> // =====================================
+ ==> //
+ ==> //
+ ==> // Compute equisingular Stratum over Spec(C[t]/t^2)
+ ==> // ================================================
+ ==> //
+ ==> // finished
+ ==> //
+ vdim(std(K[1]));
+ ==> 68
+ // the latter should be equal to:
+ tau_es(f);
+ ==> 68
+
+* Menu:
+
+See also:
+* esStratum::
+* tau_es::
+
+*See also:* *note esStratum::; *note tau_es::.
+
+
+File: sing.htm, Node: esStratum, Next: isEquising, Prev: esIdeal, Up:
equising_lib
+
+D.5.3.3 esStratum
+.................
+
+Procedure from library `equising.lib' (*note equising_lib::).
+
+*Usage:*
+ esStratum(F[,m,L]); F poly, m int, L list
+
+*Assume:*
+ F defines a deformation of a reduced bivariate polynomial f and the
+ characteristic of the basering does not divide mult(f).
+ If nv is the number of variables of the basering, then the first
+ nv-2 variables are the deformation parameters.
+ If the basering is a qring, ideal(basering) must only depend on the
+ deformation parameters.
+
+*Compute:*
+ equations for the stratum of equisingular deformations with fixed
+ (trivial) section.
+
+*Return:*
+ list l: either consisting of an ideal and an integer, where
+
+ l[1]=ideal defining the equisingular stratum
+ l[2]=1 if some error has occured, l[2]=0 otherwise;
+
+ or consisting of a ring and an integer, where
+
+ l[1]=ESSring is a ring extension of basering containing the ideal ES
+ (describing the ES-stratum) and the poly p_F=F,
+ l[2]=1 if some error has occured, l[2]=0 otherwise.
+
+*Note:*
+ L is supposed to be the output of reddevelop (with the given
+ ordering of the variables appearing in f).
+ If m is given, the ES Stratum over A/maxideal(m) is computed.
+ This procedure uses `execute' or calls a procedure using `execute'.
+ printlevel>=2 displays additional information.
+
+*Example:*
+ LIB "equising.lib";
+ int p=printlevel;
+ printlevel=1;
+ ring r = 0,(a,b,c,d,e,f,g,x,y),ds;
+ poly F = (x2+2xy+y2+x5)+ax+by+cx2+dxy+ey2+fx3+gx4;
+ list M = esStratum(F);
+ M[1];
+ ==> _[1]=g
+ ==> _[2]=f
+ ==> _[3]=b
+ ==> _[4]=a
+ ==> _[5]=-4c+4d-4e+d2-4ce
+ printlevel=3; // displays additional information
+ esStratum(F,2); // es stratum over Q[a,b,c,d,e,f,g] / <a,b,c,d,e,f,g>^2
+ ==> //
+ ==> // Compute HN development
+ ==> // ----------------------
+ ==> // finished
+ ==> //
+ ==> // Blowup Step 1 completed
+ ==> // Blowup Step 2 completed
+ ==> // Blowup Step 3 completed
+ ==> // 1 branch finished
+ ==> //
+ ==> // Elimination starts:
+ ==> // -------------------
+ ==> // finished
+ ==> //
+ ==> // output of 'esStratum' is list consisting of:
+ ==> // _[1] = ideal defining equisingular stratum
+ ==> // _[2] = 0
+ ==> [1]:
+ ==> _[1]=b
+ ==> _[2]=a
+ ==> _[3]=c-d+e
+ ==> _[4]=g
+ ==> _[5]=f
+ ==> [2]:
+ ==> 0
+ ideal I = f-fa,e+b;
+ qring q = std(I);
+ poly F = imap(r,F);
+ esStratum(F);
+ ==> //
+ ==> // Compute HN development
+ ==> // ----------------------
+ ==> // finished
+ ==> //
+ ==> // Blowup Step 1 completed
+ ==> // Blowup Step 2 completed
+ ==> // Blowup Step 3 completed
+ ==> // 1 branch finished
+ ==> //
+ ==> // Elimination starts:
+ ==> // -------------------
+ ==> // finished
+ ==> //
+ ==> // output of 'esStratum' is list consisting of:
+ ==> // _[1] = ideal defining equisingular stratum
+ ==> // _[2] = 0
+ ==> [1]:
+ ==> _[1]=e
+ ==> _[2]=a
+ ==> _[3]=-4c+4d+d2
+ ==> _[4]=g
+ ==> [2]:
+ ==> 0
+ printlevel=p;
+
+* Menu:
+
+See also:
+* esIdeal::
+* isEquising::
+
+*See also:* *note esIdeal::; *note isEquising::.
+
+
+File: sing.htm, Node: isEquising, Next: control_Matrix, Prev: esStratum,
Up: equising_lib
+
+D.5.3.4 isEquising
+..................
+
+Procedure from library `equising.lib' (*note equising_lib::).
+
+*Usage:*
+ isEquising(F[,m,L]); F poly, m int, L list
+
+*Assume:*
+ F defines a deformation of a reduced bivariate polynomial f and the
+ characteristic of the basering does not divide mult(f).
+ If nv is the number of variables of the basering, then the first
+ nv-2 variables are the deformation parameters.
+ If the basering is a qring, ideal(basering) must only depend on the
+ deformation parameters.
+
+*Compute:*
+ tests if the given family is equisingular along the trivial
+ section.
+
+*Return:*
+ int: 1 if the family is equisingular, 0 otherwise.
+
+*Note:*
+ L is supposed to be the output of reddevelop (with the given
+ ordering of the variables appearing in f).
+ If m is given, the family is considered over A/maxideal(m).
+ This procedure uses `execute' or calls a procedure using `execute'.
+ printlevel>=2 displays additional information.
+
+*Example:*
+ LIB "equising.lib";
+ ring r = 0,(a,b,x,y),ds;
+ poly F = (x2+2xy+y2+x5)+ay3+bx5;
+ isEquising(F);
+ ==> 0
+ ideal I = ideal(a);
+ qring q = std(I);
+ poly F = imap(r,F);
+ isEquising(F);
+ ==> 1
+ ring rr=0,(A,B,C,x,y),ls;
+ poly f=x7+y7+(x-y)^2*x2y2;
+ poly F=f+A*y*diff(f,x)+B*x*diff(f,x);
+ isEquising(F);
+ ==> 0
+ isEquising(F,2); // computation over Q[a,b] / <a,b>^2
+ ==> 1
+
+
+File: sing.htm, Node: control_Matrix, Prev: isEquising, Up: equising_lib
+
+D.5.3.5 control_Matrix
+......................
+
+Procedure from library `equising.lib' (*note equising_lib::).
+
+*Assume:*
+ L is the output of multsequence(reddevelop(f)).
+
+*Return:*
+ list M of 4 intmat's:
+
+ M[1] contains the multiplicities at the respective infinitely near
points
+ p[i,j] (i=step of blowup+1, j=branch) - if branches j=k,...,k+m
pass
+ through the same p[i,j] then the multiplicity is stored in
M[1][k,j],
+ while M[1][k+1]=...=M[1][k+m]=0.
+ M[2] contains the number of branches meeting at p[i,j] (again, the
information
+ is stored according to the above rule)
+ M[3] contains the information about the splitting of M[1][i,j] with
respect to
+ different tangents of branches at p[i,j] (information is stored
only for
+ minimal j>=k corresponding to a new tangent direction).
+ The entries are the sum of multiplicities of all branches with the
+ respective tangent.
+ M[4] contains the maximal sum of higher multiplicities for a branch
passing
+ through p[i,j] ( = degree Bound for blowing up)
+
+*Note:*
+ the branches are ordered in such a way that only consecutive
+ branches can meet at an infinitely near point.
+ the final rows of the matrices M[1],...,M[3] is (1,1,1,...,1), and
+ correspond to infinitely near points such that the strict
+ transforms of the branches are smooth and intersect the exceptional
+ divisor transversally.
+
+* Menu:
+
+See also:
+* multsequence::
+
+*See also:* *note multsequence::.
+
+
+File: sing.htm, Node: gaussman_lib, Next: hnoether_lib, Prev: equising_lib,
Up: Singularities
+
+D.5.4 gaussman_lib
+------------------
+
+*Library:*
+ gaussman.lib
+
+*Purpose:*
+ Algorithmic Gauss-Manin Connection
+
+*Author:*
+ Mathias Schulze, email: address@hidden
+
+*Overview:*
+ A library to compute Hodge-theoretic invariants
+ of isolated hypersurface singularities
+
+*Procedures:*
+
+* Menu:
+
+* gmsring:: Gauss-Manin system of t with variable s
+* gmsnf:: Gauss-Manin normal form of p
+* gmscoeffs:: Gauss-Manin basis representation of p
+* bernstein:: roots of the Bernstein polynomial of t
+* monodromy:: Jordan data of complex monodromy of t
+* spectrum:: singularity spectrum of t
+* sppairs:: spectral pairs of t
+* spnf:: spectrum normal form of (a,m,V)
+* sppnf:: spectral pairs normal form of (a,w,m,V)
+* vfilt:: V-filtration of t on Brieskorn lattice
+* vwfilt:: weighted V-filtration of t on Brieskorn lattice
+* tmatrix:: C[[s]]-matrix of t on Brieskorn lattice
+* endvfilt:: endomorphism V-filtration on Jacobian algebra
+* spprint:: print spectrum sp
+* sppprint:: print spectral pairs spp
+* spadd:: sum of spectra sp1 and sp2
+* spsub:: difference of spectra sp1 and sp2
+* spmul:: linear combination of spectra sp
+* spissemicont:: semicontinuity test of spectrum sp
+* spsemicont:: semicontinuous combinations of spectra sp0 in sp
+* spmilnor:: Milnor number of spectrum sp
+* spgeomgenus:: geometrical genus of spectrum sp
+* spgamma:: gamma invariant of spectrum sp
+
+* Menu:
+
+See also:
+* mondromy_lib::
+* spectrum_lib::
+
+*See also:* *note mondromy_lib::; *note spectrum_lib::.
+
+
+File: sing.htm, Node: gmsring, Next: gmsnf, Up: gaussman_lib
+
+D.5.4.1 gmsring
+...............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ gmsring(t,s); poly t, string s
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ ring G; Gauss-Manin system of t with variable s
+ poly gmspoly=t;
+ ideal gmsjacob; Jacobian ideal of t
+ ideal gmsstd; standard basis of Jacobian ideal
+ matrix gmsmatrix; matrix(gmsjacob)*gmsmatrix==matrix(gmsstd)
+ ideal gmsbasis; monomial vector space basis of Jacobian algebra
+ int gmsmaxdeg; maximal weight of variables
+
+*Note:*
+ gmsbasis is a C[[s]]-basis of H" and [t,s]=s^2
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ def G=gmsring(t,"s");
+ setring(G);
+ gmspoly;
+ ==> x2y2+x5+y5
+ print(gmsjacob);
+ ==> 2xy2+5x4,
+ ==> 2x2y+5y4
+ print(gmsstd);
+ ==> 2x2y+5y4,
+ ==> 2xy2+5x4,
+ ==> 5x5-5y5,
+ ==> 10y6+25x3y4
+ print(gmsmatrix);
+ ==> 0,1,x, -2xy,
+ ==> 1,0,-y,2y2+5x3
+ print(gmsbasis);
+ ==> y5,
+ ==> y4,
+ ==> y3,
+ ==> y2,
+ ==> xy,
+ ==> y,
+ ==> x4,
+ ==> x3,
+ ==> x2,
+ ==> x,
+ ==> 1
+ gmsmaxdeg;
+ ==> 1
+
+
+File: sing.htm, Node: gmsnf, Next: gmscoeffs, Prev: gmsring, Up:
gaussman_lib
+
+D.5.4.2 gmsnf
+.............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ gmsnf(p,K); poly p, int K
+
+*Assume:*
+ basering returned by gmsring
+
+*Return:*
+
+ list nf;
+ ideal nf[1]; projection of p to <gmsbasis>C[[s]] mod s^(K+1)
+ ideal nf[2]; p==nf[1]+nf[2]
+
+*Note:*
+ computation can be continued by setting p=nf[2]
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ def G=gmsring(t,"s");
+ setring(G);
+ list l0=gmsnf(gmspoly,0);
+ print(l0[1]);
+ ==> -1/2y5
+ list l1=gmsnf(gmspoly,1);
+ print(l1[1]);
+ ==> -1/2y5+1/2s
+ list l=gmsnf(l0[2],1);
+ print(l[1]);
+ ==> 1/2s
+
+
+File: sing.htm, Node: gmscoeffs, Next: bernstein, Prev: gmsnf, Up:
gaussman_lib
+
+D.5.4.3 gmscoeffs
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ gmscoeffs(p,K); poly p, int K
+
+*Assume:*
+ basering constructed by gmsring
+
+*Return:*
+
+ list l;
+ matrix l[1]; C[[s]]-basis representation of p mod s^(K+1)
+ ideal l[2]; p==matrix(gmsbasis)*l[1]+l[2]
+
+*Note:*
+ computation can be continued by setting p=l[2]
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ def G=gmsring(t,"s");
+ setring(G);
+ list l0=gmscoeffs(gmspoly,0);
+ print(l0[1]);
+ ==> -1/2,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0
+ list l1=gmscoeffs(gmspoly,1);
+ print(l1[1]);
+ ==> -1/2,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 1/2s
+ list l=gmscoeffs(l0[2],1);
+ print(l[1]);
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 0,
+ ==> 1/2s
+
+
+File: sing.htm, Node: bernstein, Next: monodromy, Prev: gmscoeffs, Up:
gaussman_lib
+
+D.5.4.4 bernstein
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ bernstein(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+ ideal r; roots of the Bernstein polynomial b excluding the root -1
+
+*Note:*
+ the roots of b are negative rational numbers and -1 is a root of b
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ bernstein(t);
+ ==> [1]:
+ ==> _[1]=-1/2
+ ==> _[2]=-7/10
+ ==> _[3]=-9/10
+ ==> _[4]=-1
+ ==> _[5]=-11/10
+ ==> _[6]=-13/10
+ ==> [2]:
+ ==> 2,1,1,2,1,1
+
+
+File: sing.htm, Node: monodromy, Next: spectrum, Prev: bernstein, Up:
gaussman_lib
+
+D.5.4.5 monodromy
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ monodromy(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list l; Jordan data jordan(M) of monodromy matrix exp(-2*pi*i*M)
+ ideal l[1];
+ number l[1][i]; eigenvalue of i-th Jordan block of M
+ intvec l[2];
+ int l[2][i]; size of i-th Jordan block of M
+ intvec l[3];
+ int l[3][i]; multiplicity of i-th Jordan block of M
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ monodromy(t);
+ ==> [1]:
+ ==> _[1]=1/2
+ ==> _[2]=7/10
+ ==> _[3]=9/10
+ ==> _[4]=1
+ ==> _[5]=11/10
+ ==> _[6]=13/10
+ ==> [2]:
+ ==> 2,1,1,1,1,1
+ ==> [3]:
+ ==> 1,2,2,1,2,2
+
+* Menu:
+
+See also:
+* linalg_lib::
+* mondromy_lib::
+
+*See also:* *note linalg_lib::; *note mondromy_lib::.
+
+
+File: sing.htm, Node: spectrum, Next: sppairs, Prev: monodromy, Up:
gaussman_lib
+
+D.5.4.6 spectrum
+................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spectrum(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list sp; singularity spectrum of t
+ ideal sp[1];
+ number sp[1][i]; i-th spectral number
+ intvec sp[2];
+ int sp[2][i]; multiplicity of i-th spectral number
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ spprint(spectrum(t));
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+
+* Menu:
+
+See also:
+* spectrum_lib::
+
+*See also:* *note spectrum_lib::.
+
+
+File: sing.htm, Node: sppairs, Next: spnf, Prev: spectrum, Up: gaussman_lib
+
+D.5.4.7 sppairs
+...............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ sppairs(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list spp; spectral pairs of t
+ ideal spp[1];
+ number spp[1][i]; V-filtration index of i-th spectral pair
+ intvec spp[2];
+ int spp[2][i]; weight filtration index of i-th spectral pair
+ intvec spp[3];
+ int spp[3][i]; multiplicity of i-th spectral pair
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ sppprint(sppairs(t));
+ ==>
((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\
+ ,2),((1/2,0),1)
+
+* Menu:
+
+See also:
+* spectrum_lib::
+
+*See also:* *note spectrum_lib::.
+
+
+File: sing.htm, Node: spnf, Next: sppnf, Prev: sppairs, Up: gaussman_lib
+
+D.5.4.8 spnf
+............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Assume:*
+ ncols(a)==size(m)==size(V); typeof(V[i])=="int"
+
+*Return:*
+ order (a[i][,V[i]]) with multiplicity m[i] lexicographically
+
+
+File: sing.htm, Node: sppnf, Next: vfilt, Prev: spnf, Up: gaussman_lib
+
+D.5.4.9 sppnf
+.............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Assume:*
+ ncols(e)=size(w)=size(m)=size(V); typeof(V[i])=="module"
+
+*Return:*
+ order (a[i][,w[i]][,V[i]]) with multiplicity m[i] lexicographically
+
+
+File: sing.htm, Node: vfilt, Next: vwfilt, Prev: sppnf, Up: gaussman_lib
+
+D.5.4.10 vfilt
+..............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ vfilt(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list v; V-filtration on H"/s*H"
+ ideal v[1];
+ number v[1][i]; V-filtration index of i-th spectral number
+ intvec v[2];
+ int v[2][i]; multiplicity of i-th spectral number
+ list v[3];
+ module v[3][i]; vector space of i-th graded part in terms of v[4]
+ ideal v[4]; monomial vector space basis of H"/s*H"
+ ideal v[5]; standard basis of Jacobian ideal
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ vfilt(t);
+ ==> [1]:
+ ==> _[1]=-1/2
+ ==> _[2]=-3/10
+ ==> _[3]=-1/10
+ ==> _[4]=0
+ ==> _[5]=1/10
+ ==> _[6]=3/10
+ ==> _[7]=1/2
+ ==> [2]:
+ ==> 1,2,2,1,2,2,1
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=gen(11)
+ ==> [2]:
+ ==> _[1]=gen(10)
+ ==> _[2]=gen(6)
+ ==> [3]:
+ ==> _[1]=gen(9)
+ ==> _[2]=gen(4)
+ ==> [4]:
+ ==> _[1]=gen(5)
+ ==> [5]:
+ ==> _[1]=gen(3)
+ ==> _[2]=gen(8)
+ ==> [6]:
+ ==> _[1]=gen(2)
+ ==> _[2]=gen(7)
+ ==> [7]:
+ ==> _[1]=gen(1)
+ ==> [4]:
+ ==> _[1]=y5
+ ==> _[2]=y4
+ ==> _[3]=y3
+ ==> _[4]=y2
+ ==> _[5]=xy
+ ==> _[6]=y
+ ==> _[7]=x4
+ ==> _[8]=x3
+ ==> _[9]=x2
+ ==> _[10]=x
+ ==> _[11]=1
+ ==> [5]:
+ ==> _[1]=2x2y+5y4
+ ==> _[2]=2xy2+5x4
+ ==> _[3]=5x5-5y5
+ ==> _[4]=10y6+25x3y4
+
+* Menu:
+
+See also:
+* spectrum_lib::
+
+*See also:* *note spectrum_lib::.
+
+
+File: sing.htm, Node: vwfilt, Next: tmatrix, Prev: vfilt, Up: gaussman_lib
+
+D.5.4.11 vwfilt
+...............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ vwfilt(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list vw; weighted V-filtration on H"/s*H"
+ ideal vw[1];
+ number vw[1][i]; V-filtration index of i-th spectral pair
+ intvec vw[2];
+ int vw[2][i]; weight filtration index of i-th spectral pair
+ intvec vw[3];
+ int vw[3][i]; multiplicity of i-th spectral pair
+ list vw[4];
+ module vw[4][i]; vector space of i-th graded part in terms of vw[5]
+ ideal vw[5]; monomial vector space basis of H"/s*H"
+ ideal vw[6]; standard basis of Jacobian ideal
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ vwfilt(t);
+ ==> [1]:
+ ==> _[1]=-1/2
+ ==> _[2]=-3/10
+ ==> _[3]=-1/10
+ ==> _[4]=0
+ ==> _[5]=1/10
+ ==> _[6]=3/10
+ ==> _[7]=1/2
+ ==> [2]:
+ ==> 2,1,1,1,1,1,0
+ ==> [3]:
+ ==> 1,2,2,1,2,2,1
+ ==> [4]:
+ ==> [1]:
+ ==> _[1]=gen(11)
+ ==> [2]:
+ ==> _[1]=gen(10)
+ ==> _[2]=gen(6)
+ ==> [3]:
+ ==> _[1]=gen(9)
+ ==> _[2]=gen(4)
+ ==> [4]:
+ ==> _[1]=gen(5)
+ ==> [5]:
+ ==> _[1]=gen(3)
+ ==> _[2]=gen(8)
+ ==> [6]:
+ ==> _[1]=gen(2)
+ ==> _[2]=gen(7)
+ ==> [7]:
+ ==> _[1]=gen(1)
+ ==> [5]:
+ ==> _[1]=y5
+ ==> _[2]=y4
+ ==> _[3]=y3
+ ==> _[4]=y2
+ ==> _[5]=xy
+ ==> _[6]=y
+ ==> _[7]=x4
+ ==> _[8]=x3
+ ==> _[9]=x2
+ ==> _[10]=x
+ ==> _[11]=1
+ ==> [6]:
+ ==> _[1]=2x2y+5y4
+ ==> _[2]=2xy2+5x4
+ ==> _[3]=5x5-5y5
+ ==> _[4]=10y6+25x3y4
+
+* Menu:
+
+See also:
+* spectrum_lib::
+
+*See also:* *note spectrum_lib::.
+
+
+File: sing.htm, Node: tmatrix, Next: endvfilt, Prev: vwfilt, Up:
gaussman_lib
+
+D.5.4.12 tmatrix
+................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ tmatrix(t); poly t
+
+*Assume:*
+ characteristic 0; local degree ordering;
+ isolated critical point 0 of t
+
+*Return:*
+
+ list l=A0,A1,T,M;
+ matrix A0,A1; t=A0+s*A1+s^2*(d/ds) on H" w.r.t. C[[s]]-basis M*T
+ module T; C-basis of C^mu
+ ideal M; monomial C-basis of H"/sH"
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ list A=tmatrix(t);
+ print(A[1]);
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 0,0,0,0,0,0,0,0,0,0,0,
+ ==> 1,0,0,0,0,0,0,0,0,0,0
+ print(A[2]);
+ ==> 1/2,0, 0, 0, 0, 0,0, 0, 0, 0, 0,
+ ==> 0, 7/10,0, 0, 0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 7/10,0, 0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 9/10,0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 9/10,0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 1,0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0,11/10,0, 0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0,0, 11/10,0, 0, 0,
+ ==> 0, 0, 0, 0, 0, 0,0, 0, 13/10,0, 0,
+ ==> 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10,0,
+ ==> 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 3/2
+ print(A[3]);
+ ==> -1445/64,0, 0, 0,0,85/8,0,0,0,0,1/2,
+ ==> 0, 125,0, 0,0,0, 0,0,1,0,0,
+ ==> 0, 0, 0, 5,0,0, 1,0,0,0,0,
+ ==> 0, 0, 0, 0,4,0, 0,0,0,0,0,
+ ==> 2, 0, 0, 0,0,1, 0,0,0,0,0,
+ ==> 0, 0, 16, 0,0,0, 0,0,0,0,0,
+ ==> 0, 0, 125,0,0,0, 0,0,0,1,0,
+ ==> 0, 0, 0, 0,5,0, 0,1,0,0,0,
+ ==> 0, 0, 0, 4,0,0, 0,0,0,0,0,
+ ==> 0, 16, 0, 0,0,0, 0,0,0,0,0,
+ ==> -1, 0, 0, 0,0,0, 0,0,0,0,0
+ print(A[4]);
+ ==> y5,
+ ==> y4,
+ ==> y3,
+ ==> y2,
+ ==> xy,
+ ==> y,
+ ==> x4,
+ ==> x3,
+ ==> x2,
+ ==> x,
+ ==> 1
+
+
+File: sing.htm, Node: endvfilt, Next: spprint, Prev: tmatrix, Up:
gaussman_lib
+
+D.5.4.13 endvfilt
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ endvfilt(v); list v
+
+*Assume:*
+ v returned by vfilt
+
+*Return:*
+
+ list ev; V-filtration on Jacobian algebra
+ ideal ev[1];
+ number ev[1][i]; i-th V-filtration index
+ intvec ev[2];
+ int ev[2][i]; i-th multiplicity
+ list ev[3];
+ module ev[3][i]; vector space of i-th graded part in terms of ev[4]
+ ideal ev[4]; monomial vector space basis of Jacobian algebra
+ ideal ev[5]; standard basis of Jacobian ideal
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ poly t=x5+x2y2+y5;
+ endvfilt(vfilt(t));
+ ==> [1]:
+ ==> _[1]=0
+ ==> _[2]=1/5
+ ==> _[3]=2/5
+ ==> _[4]=1/2
+ ==> _[5]=3/5
+ ==> _[6]=4/5
+ ==> _[7]=1
+ ==> [2]:
+ ==> 1,2,2,1,2,2,1
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=gen(11)
+ ==> [2]:
+ ==> _[1]=gen(10)
+ ==> _[2]=gen(6)
+ ==> [3]:
+ ==> _[1]=gen(9)
+ ==> _[2]=gen(4)
+ ==> [4]:
+ ==> _[1]=gen(5)
+ ==> [5]:
+ ==> _[1]=gen(8)
+ ==> _[2]=gen(3)
+ ==> [6]:
+ ==> _[1]=gen(7)
+ ==> _[2]=gen(2)
+ ==> [7]:
+ ==> _[1]=gen(1)
+ ==> [4]:
+ ==> _[1]=y5
+ ==> _[2]=y4
+ ==> _[3]=y3
+ ==> _[4]=y2
+ ==> _[5]=xy
+ ==> _[6]=y
+ ==> _[7]=x4
+ ==> _[8]=x3
+ ==> _[9]=x2
+ ==> _[10]=x
+ ==> _[11]=1
+ ==> [5]:
+ ==> _[1]=2x2y+5y4
+ ==> _[2]=2xy2+5x4
+ ==> _[3]=5x5-5y5
+ ==> _[4]=10y6+25x3y4
+
+
+File: sing.htm, Node: spprint, Next: sppprint, Prev: endvfilt, Up:
gaussman_lib
+
+D.5.4.14 spprint
+................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spprint(sp); list sp
+
+*Return:*
+ string s; spectrum sp
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+
+
+File: sing.htm, Node: sppprint, Next: spadd, Prev: spprint, Up:
gaussman_lib
+
+D.5.4.15 sppprint
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ sppprint(spp); list spp
+
+*Return:*
+ string s; spectral pairs spp
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
spp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(2,1,1,1,1,1,0),intvec(1,2,2,1,2,2,1));
+ sppprint(spp);
+ ==>
((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\
+ ,2),((1/2,0),1)
+
+
+File: sing.htm, Node: spadd, Next: spsub, Prev: sppprint, Up: gaussman_lib
+
+D.5.4.16 spadd
+..............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spadd(sp1,sp2); list sp1, list sp2
+
+*Return:*
+ list sp; sum of spectra sp1 and sp2
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp1);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ list sp2=list(ideal(-1/6,1/6),intvec(1,1));
+ spprint(sp2);
+ ==> (-1/6,1),(1/6,1)
+ spprint(spadd(sp1,sp2));
+ ==>
(-1/2,1),(-3/10,2),(-1/6,1),(-1/10,2),(0,1),(1/10,2),(1/6,1),(3/10,2),(1/\
+ 2,1)
+
+
+File: sing.htm, Node: spsub, Next: spmul, Prev: spadd, Up: gaussman_lib
+
+D.5.4.17 spsub
+..............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spsub(sp1,sp2); list sp1, list sp2
+
+*Return:*
+ list sp; difference of spectra sp1 and sp2
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp1);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ list sp2=list(ideal(-1/6,1/6),intvec(1,1));
+ spprint(sp2);
+ ==> (-1/6,1),(1/6,1)
+ spprint(spsub(sp1,sp2));
+ ==>
(-1/2,1),(-3/10,2),(-1/6,-1),(-1/10,2),(0,1),(1/10,2),(1/6,-1),(3/10,2),(\
+ 1/2,1)
+
+
+File: sing.htm, Node: spmul, Next: spissemicont, Prev: spsub, Up:
gaussman_lib
+
+D.5.4.18 spmul
+..............
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spmul(sp0,k); list sp0, int[vec] k
+
+*Return:*
+ list sp; linear combination of spectra sp0 with coefficients k
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ spprint(spmul(sp,2));
+ ==> (-1/2,2),(-3/10,4),(-1/10,4),(0,2),(1/10,4),(3/10,4),(1/2,2)
+ list sp1=list(ideal(-1/6,1/6),intvec(1,1));
+ spprint(sp1);
+ ==> (-1/6,1),(1/6,1)
+ list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
+ spprint(sp2);
+ ==> (-1/3,1),(0,2),(1/3,1)
+ spprint(spmul(list(sp1,sp2),intvec(1,2)));
+ ==> (-1/3,2),(-1/6,1),(0,4),(1/6,1),(1/3,2)
+
+
+File: sing.htm, Node: spissemicont, Next: spsemicont, Prev: spmul, Up:
gaussman_lib
+
+D.5.4.19 spissemicont
+.....................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spissemicont(sp[,1]); list sp, int opt
+
+*Return:*
+
+ int k=
+ 1; if sum of sp is positive on all intervals [a,a+1) [and (a,a+1)]
+ 0; if sum of sp is negative on some interval [a,a+1) [or (a,a+1)]
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp1);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ list sp2=list(ideal(-1/6,1/6),intvec(1,1));
+ spprint(sp2);
+ ==> (-1/6,1),(1/6,1)
+ spissemicont(spsub(sp1,spmul(sp2,3)));
+ ==> 1
+ spissemicont(spsub(sp1,spmul(sp2,4)));
+ ==> 0
+
+
+File: sing.htm, Node: spsemicont, Next: spmilnor, Prev: spissemicont, Up:
gaussman_lib
+
+D.5.4.20 spsemicont
+...................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spsemicont(sp0,sp,k[,1]); list sp0, list sp
+
+*Return:*
+
+ list l;
+ intvec l[i]; if the spectra sp0 occur with multiplicities k
+ in a deformation of a [quasihomogeneous] singularity
+ with spectrum sp then k<=l[i]
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp0=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp0);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ list sp1=list(ideal(-1/6,1/6),intvec(1,1));
+ spprint(sp1);
+ ==> (-1/6,1),(1/6,1)
+ list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
+ spprint(sp2);
+ ==> (-1/3,1),(0,2),(1/3,1)
+ list sp=sp1,sp2;
+ list l=spsemicont(sp0,sp);
+ l;
+ ==> [1]:
+ ==> 3
+ ==> [2]:
+ ==> 2,1
+ spissemicont(spsub(sp0,spmul(sp,l[1])));
+ ==> 1
+ spissemicont(spsub(sp0,spmul(sp,l[1]-1)));
+ ==> 1
+ spissemicont(spsub(sp0,spmul(sp,l[1]+1)));
+ ==> 0
+
+
+File: sing.htm, Node: spmilnor, Next: spgeomgenus, Prev: spsemicont, Up:
gaussman_lib
+
+D.5.4.21 spmilnor
+.................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spmilnor(sp); list sp
+
+*Return:*
+ int mu; Milnor number of spectrum sp
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ spmilnor(sp);
+ ==> 11
+
+
+File: sing.htm, Node: spgeomgenus, Next: spgamma, Prev: spmilnor, Up:
gaussman_lib
+
+D.5.4.22 spgeomgenus
+....................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spgeomgenus(sp); list sp
+
+*Return:*
+ int g; geometrical genus of spectrum sp
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ spgeomgenus(sp);
+ ==> 6
+
+
+File: sing.htm, Node: spgamma, Prev: spgeomgenus, Up: gaussman_lib
+
+D.5.4.23 spgamma
+................
+
+Procedure from library `gaussman.lib' (*note gaussman_lib::).
+
+*Usage:*
+ spgamma(sp); list sp
+
+*Return:*
+ number gamma; gamma invariant of spectrum sp
+
+*Example:*
+ LIB "gaussman.lib";
+ ring R=0,(x,y),ds;
+ list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
+ spprint(sp);
+ ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
+ spgamma(sp);
+ ==> 1/240
+
+
+File: sing.htm, Node: hnoether_lib, Next: mondromy_lib, Prev: gaussman_lib,
Up: Singularities
+
+D.5.5 hnoether_lib
+------------------
+
+*Library:*
+ hnoether.lib
+
+*Purpose:*
+ Hamburger-Noether (Puiseux) Development
+
+*Author:*
+ Martin Lamm, address@hidden
+
+*Overview:*
+ A library for computing the Hamburger-Noether, resp. Puiseux,
+ development of a plane curve singularity following [Campillo, A.:
+ Algebroid curves in positive characteristic, Springer LNM 813
+ (1980)].
+ The library contains also procedures for computing the
+ (topological) numerical invariants of plane curve singularities.
+
+*Main procedures:*
+
+* Menu:
+
+* hnexpansion:: Hamburger-Noether (H-N) development of f
+* sethnering:: changes to the hnering created by hnexpansion
+* develop:: H-N development of irreducible curves
+* extdevelop:: extension of the H-N development hne of f
+* parametrisation:: a parametrization of f
+* displayHNE:: display H-N development as an ideal
+* invariants:: invariants of f, e.g. the characteristic exponents
+* displayInvariants:: display invariants of f
+* multsequence:: sequence of multiplicities
+* displayMultsequence:: display sequence of multiplicities
+* intersection:: intersection multiplicity of two curves
+* stripHNE:: reduce amount of memory consumed by hne
+* is_irred:: test if f is irreducible
+* delta:: delta invariant of f
+* newtonpoly:: (local) Newton polygon of f
+* is_NND:: test if f is Newton non-degenerate
+
+*Auxiliary procedures:*
+
+* Menu:
+
+* puiseux2generators:: convert Puiseux pairs to generators of semigroup
+* separateHNE:: number of quadratic transf. needed for separation
+* squarefree:: a squarefree divisor of the poly f
+* allsquarefree:: the maximal squarefree divisor of the poly f
+* further_hn_proc:: show further procedures useful for interactive use
+
+
+File: sing.htm, Node: hnexpansion, Next: sethnering, Up: hnoether_lib
+
+D.5.5.1 hnexpansion
+...................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ hnexpansion(f); or hnexpansion(f,"ess"); f poly
+
+*Usage:*
+ hnexpansion(f); f poly
+
+*Assume:*
+ f is a bivariate polynomial (in the first 2 ring variables)
+
+*Create:*
+ ring with variables `x,y' and ordering `ls' over a field extension
+ of the current basering's ground field, since the Hamburger-Noether
+ development usually does not exist in the originally given
+ basering. The field extension is chosen minimally.
+ Moreover, in the ring a list `hne' of lists `hne[i]' is created
+ (corresponding to the output of `develop(f[i])', f[i] a branch of
+ f, but the last entry being omitted).
+
+ `hne[i][1]'; matrix:
+ Each row contains the coefficients of the corresponding line
+ of the Hamburger-Noether expansion (HNE) for f[i].
+ The end of the line is marked in the matrix by the
+ first ring variable (usually x).
+
+ `hne[i][2]'; intvec:
+ indicating the length of lines of the HNE
+
+ `hne[i][3]'; int:
+ 0 if the 1st ring variable was transversal (with respect to
+ f[i]),
+ 1 if the variables were changed at the beginning of the
+ computation,
+ -1 if an error has occurred.
+
+ `hne[i][4]'; poly:
+ the transformed polynomial of f[i] to make it possible to
+ extend the Hamburger-Noether development a posteriori
+ without having to do all the previous calculation
+ once again (0 if not needed)
+
+*Return:*
+ a list, say `hn', containing the created ring
+
+*Note:*
+ to use the ring type: `def HNEring=hn[i]; setring HNEring;'.
+ If f is known to be irreducible as a power series, `develop(f)'
+ could be chosen instead to avoid the change of basering.
+ Increasing `printlevel' leads to more and more comments.
+
+*Usage:*
+ hnexpansion(f,"ess"); f poly
+
+*Assume:*
+ f is a bivariate polynomial (in the first 2 ring variables)
+
+*Create:*
+ ring with variables `x,y' and ordering `ls' over a field extension
+ of the current basering's ground field, since the Hamburger-Noether
+ development usually does not exist in the originally given
+ basering. The field extension is chosen minimally.
+ Moreover, in the ring a list `hne' of lists `hne[i]' is created
+ (corresponding to the output of `develop(f[i])', f[i] an
+ "essential" branch of f, but the last entry being omitted). See
+ `hnexpansion' above for more details.
+
+*Return:*
+ a list, say `hn', containing the created ring
+
+*Note:*
+ to use the ring type: `def hnering=hn[i]; setring hnering;'.
+ Alternatively you may use the procedure sethnering and type:
+ `sethnering(hn);'
+ If the HNE needs a field extension, some of the branches will be
+ conjugate. In this case `hnexpansion(f,"ess")' reduces the
+ computation to one representative for each group of conjugate
+branches.
+ Note that the degree of each branch is in general less than the
+ degree of the field extension in which all HNEs can be put.
+ Use `hnexpansion(f)' to compute a complete HNE, i.e., a HNE for all
+branches.
+ Increasing `printlevel' leads to more and more comments.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r=0,(x,y),ls;
+ list hn=hnexpansion(x4-y6);
+ show(hn);
+ ==> // list, 1 element(s):
+ ==> [1]:
+ ==> // ring: (0),(x,y),(ls(2),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // hne [0] list, size: 2
+ def hnering=hn[1];
+ setring hnering;
+ size(hne); // number of branches
+ ==> 2
+ print(hne[1][1]); // HN-matrix of 1st branch
+ ==> 0,x,0,
+ ==> 0,1,x
+ parametrisation(hne); // parametrization of the two branches
+ ==> [1]:
+ ==> _[1]=x3
+ ==> _[2]=x2
+ ==> [2]:
+ ==> _[1]=-x3
+ ==> _[2]=-x2
+ /////////////////////////////////////////////////////////
+ ring s=2,(x,y),ls;
+ poly f=(x4+x2y+y2)*(x3+xy2+y3);
+ // --------- compute all branches: ---------
+ hn=hnexpansion(f);
+ ==> // new minimal polynomial: a6+a5+a3+a2+1
+ hnering=hn[1];
+ setring hnering;
+ displayHNE(hne[1]); // HN-matrix of 1st branch
+ ==> HNE[1]=y+(a^4+a+1)*z(0)
+ ==> HNE[2]=x+z(0)
+ displayHNE(hne[4]); // HN-matrix of 4th branch
+ ==> HNE[1]=y+(a^4+a^2+a+1)*z(0)^2
+ ==> HNE[2]=x+z(0)
+ setring s;
+ // --- compute only one of conjugate branches: ---
+ hn=hnexpansion(f,"ess");
+ ==> // new minimal polynomial: a6+a5+a3+a2+1
+ hnering=hn[1];
+ setring hnering;
+ displayHNE(hne);
+ ==> // Hamburger-Noether development of branch nr.1:
+ ==> HNE[1]=y+(a^4+a^2)*z(0)
+ ==> HNE[2]=x+z(0)
+ ==>
+ ==> // Hamburger-Noether development of branch nr.2:
+ ==> HNE[1]=y+(a^4+a^2+a)*z(0)^2
+ ==> HNE[2]=x+z(0)
+ ==>
+ // no. 1 of hnexpansion(f,"ess") represents no. 1 - 3 of hnexpansion(f)
and
+ // no. 2 of hnexpansion(f,"ess") represents no. 4 + 5 of hnexpansion(f)
+
+* Menu:
+
+See also:
+* develop::
+* displayHNE::
+* extdevelop::
+* parametrisation::
+
+*See also:* *note develop::; *note displayHNE::; *note extdevelop::;
+*note parametrisation::.
+
+
+File: sing.htm, Node: sethnering, Next: develop, Prev: hnexpansion, Up:
hnoether_lib
+
+D.5.5.2 sethnering
+..................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ sethnering(L[,s]); L list, s string (optional)
+
+*Assume:*
+ L is a list containing a ring (e.g. the output of `hnexpansion').
+
+*Create:*
+ The procedure creates a ring with name given by the optional
+ parameter s resp. with name hnering, if no optional parameter is
+ given, and changes your ring to this ring. The new ring will be the
+ ring given as the first entry in the list L.
+
+*Return:*
+ nothing.
+
+*Example:*
+ LIB "hnoether.lib";
+ // -------- prepare for example ---------
+ if (defined(hnering))
+ {
+ def address@hidden;
+ if (nameof(basering)=="hnering")
+ {
+ int wechsel=1;
+ }
+ else
+ {
+ int wechsel;
+ }
+ kill hnering;
+ }
+ // ------ the example starts here -------
+ ring r=0,(x,y),ls;
+ nameof(basering);
+ ==> r
+ sethnering(hnexpansion(x4-y6)); // Creates hnering and changes to it!
+ nameof(basering);
+ ==> hnering
+ // --- restore HNEring if previously defined ---
+ kill hnering;
+ if (defined(address@hidden)) {
+ def address@hidden;
+ export hnering;
+ if (wechsel==1)
+ {
+ setring hnering;
+ }
+ }
+
+* Menu:
+
+See also:
+* hnexpansion::
+
+*See also:* *note hnexpansion::.
+
+
+File: sing.htm, Node: develop, Next: extdevelop, Prev: sethnering, Up:
hnoether_lib
+
+D.5.5.3 develop
+...............
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ develop(f [,n]); f poly, n int
+
+*Assume:*
+ f is a bivariate polynomial (in the first 2 ring variables) and
+ irreducible as power series (for reducible f use `hnexpansion').
+
+*Return:*
+ list `L' with:
+
+ `L[1]'; matrix:
+ Each row contains the coefficients of the corresponding line
+ of the Hamburger-Noether expansion (HNE). The end of
+ the line is marked in the matrix by the first ring
+ variable (usually x).
+
+ `L[2]'; intvec:
+ indicating the length of lines of the HNE
+
+ `L[3]'; int:
+ 0 if the 1st ring variable was transversal (with respect to
+ f),
+ 1 if the variables were changed at the beginning of the
+ computation,
+ -1 if an error has occurred.
+
+ `L[4]'; poly:
+ the transformed polynomial of f to make it possible to extend
+ the Hamburger-Noether development a posteriori
+ without having to do all the previous calculation
+ once again (0 if not needed)
+
+ `L[5]'; int:
+ 1 if the curve has exactly one branch (i.e., is irreducible),
+
+ 0 else (i.e., the curve has more than one HNE, or f is not
+ valid).
+
+*Display:*
+ The (non zero) elements of the HNE (if not called by another proc).
+
+*Note:*
+ The optional parameter `n' affects only the computation of the LAST
+ line of the HNE. If it is given, the HN-matrix `L[1]' will have at
+ least `n' columns.
+ Otherwise, the number of columns will be chosen minimal such that
+ the matrix contains all necessary information (i.e., all lines of
+ the HNE but the last (which is in general infinite) have place).
+ If `n' is negative, the algorithm is stopped as soon as the
+ computed information is sufficient for `invariants(L)', but the
+ HN-matrix `L[1]' may still contain undetermined elements, which are
+ marked with the 2nd variable (of the basering).
+ For time critical computations it is recommended to use `ring
+ ...,(x,y),ls' as basering - it increases the algorithm's speed.
+ If `printlevel>=0' comments are displayed (default is
+ `printlevel=0').
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring = 7,(x,y),ds;
+ list hne=develop(4x98+2x49y7+x11y14+2y14);
+ print(hne[1]);
+ ==> 0,0, 0,0,0,0,3,x,
+ ==> 0,x, 0,0,0,0,0,0,
+ ==> 0,0, 0,x,0,0,0,0,
+ ==> 0,x, 0,0,0,0,0,0,
+ ==> 0,-1,0,0,0,0,0,0
+ // therefore the HNE is:
+ // z(-1)= 3*z(0)^7 + z(0)^7*z(1),
+ // z(0) = z(1)*z(2), (there is 1 zero in the 2nd row before x)
+ // z(1) = z(2)^3*z(3), (there are 3 zeroes in the 3rd row)
+ // z(2) = z(3)*z(4),
+ // z(3) = -z(4)^2 + 0*z(4)^3 +...+ 0*z(4)^8 + ?*z(4)^9 + ...
+ // (the missing x in the last line indicates that it is not complete.)
+ hne[2];
+ ==> 7,1,3,1,-1
+ parametrisation(hne);
+ ==> [1]:
+ ==> _[1]=-x14
+ ==> _[2]=-3x98-x109
+ // parametrization: x(t)= -t^14+O(t^21), y(t)= -3t^98+O(t^105)
+ // (the term -t^109 in y may have a wrong coefficient)
+ displayHNE(hne);
+ ==> HNE[1]=-y+3*z(0)^7+z(0)^7*z(1)
+ ==> HNE[2]=-x+z(1)*z(2)
+ ==> HNE[3]=z(2)^3*z(3)
+ ==> HNE[4]=z(3)*z(4)
+ ==> HNE[5]=-z(4)^2
+
+* Menu:
+
+See also:
+* displayHNE::
+* extdevelop::
+* hnexpansion::
+
+*See also:* *note displayHNE::; *note extdevelop::; *note hnexpansion::.
+
+
+File: sing.htm, Node: extdevelop, Next: parametrisation, Prev: develop,
Up: hnoether_lib
+
+D.5.5.4 extdevelop
+..................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ extdevelop(L,N); list L, int N
+
+*Assume:*
+ L is the output of `develop(f)', or of `extdevelop(l,n)', or one
+ entry in the list `hne' in the ring created by
+ `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ an extension of the Hamburger-Noether development of f as a list in
+ the same format as L has (up to the last entry in the output of
+`develop(f)').
+ Type `help develop;', resp. `help hnexpansion;' for more details.
+
+*Note:*
+ The new HN-matrix will have at least N columns (if the HNE is not
+ finite). In particular, if f is irreducible then (in most cases)
+ `extdevelop(develop(f),N)' will produce the same result as
+`develop(f,N)'.
+ If the matrix M of L has n columns then, compared with
+ `parametrisation(L)', `paramametrize(extdevelop(L,N))' will
+ increase the exactness by at least (N-n) more significant
+ monomials.
+
+*Example:*
+ LIB "hnoether.lib";
+ if (defined(HNEring))
+ {
+ def save_r_i_n_g=HNEring;
+ kill HNEring;
+ }
+ // ------ the example starts here -------
+ ring exring=0,(x,y),dp;
+ list hn=hnexpansion(x14-3y2x11-y3x10-y2x9+3y4x8+y5x7+3y4x6+x5*(-y6+y5)
+ -3y6x3-y7x2+y8);
+ def HNEring=hn[1];
+ setring HNEring;
+ export(HNEring);
+ ==> // ** `HNEring` is already global
+ print(hne[1][1]); // HNE of 1st branch is finite
+ ==> 0,x,0,
+ ==> 0,1,x
+ print(extdevelop(hne[1],5)[1]);
+ ==> No extension is possible
+ ==> 0,x,0,
+ ==> 0,1,x
+ print(hne[2][1]); // HNE of 2nd branch can be extended
+ ==> 0,x,0,
+ ==> 0,1,x,
+ ==> 0,1,-1
+ list ehne=extdevelop(hne[2],5);
+ print(ehne[1]); // new HN-matrix has 5 columns
+ ==> 0,x,0, 0,0,
+ ==> 0,1,x, 0,0,
+ ==> 0,1,-1,1,-1
+ parametrisation(hne[2]);
+ ==> [1]:
+ ==> _[1]=x4-x5-x6+x7
+ ==> _[2]=x6-2x7+2x9-x10
+ parametrisation(ehne);
+ ==> [1]:
+ ==> _[1]=x4-x5+x6-x7-x8+x9-x10+x11
+ ==> _[2]=x6-2x7+3x8-4x9+2x10-2x12+4x13-3x14+2x15-x16
+ if (defined(save_r_i_n_g))
+ {
+ kill HNEring;
+ def HNEring=save_r_i_n_g;
+ }
+
+* Menu:
+
+See also:
+* develop::
+* hnexpansion::
+* parametrisation::
+
+*See also:* *note develop::; *note hnexpansion::; *note
+parametrisation::.
+
+
+File: sing.htm, Node: parametrisation, Next: displayHNE, Prev: extdevelop,
Up: hnoether_lib
+
+D.5.5.5 parametrisation
+.......................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ parametrisation(INPUT [,x]); INPUT list or poly, x int (optional)
+
+*Assume:*
+ INPUT is either a bivariate polynomial f defining a plane curve
+ singularity, or it is the output of `hnexpansion(f[,"ess"])', or of
+ `develop(f)', or of `extdevelop(develop(f),n)', or the list @{hne}
+ in the ring created by `hnexpansion(f)' respectively one entry
+ thereof.
+
+*Return:*
+ a list L containing a parametrization L[i] for each branch f[i] of
+ f in the following format:
+ - if only the list INPUT is given, L[i] is an ideal of two
+ polynomials p[1],p[2]: if the HNE of was finite then
+ f[i](p[1],p[2])=0; if not, the "real" parametrization will be two
+ power series and p[1],p[2] are truncations of these series.
+ - if the optional parameter x is given, L[i] is itself a list:
+ L[i][1] is the parametrization ideal as above and L[i][2] is an
+ intvec with two entries indicating the highest degree up to which
+ the coefficients of the monomials in L[i][1] are exact (entry -1
+ means that the corresponding parametrization is exact).
+
+*Note:*
+ If the basering has only 2 variables, the first variable is chosen
+ as indefinite. Otherwise, the 3rd variable is chosen.
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=0,(x,y,t),ds;
+ // 1st Example: input is a polynomial
+ poly g=(x2-y3)*(x3-y5);
+ parametrisation(g);
+ ==> [1]:
+ ==> _[1]=t3
+ ==> _[2]=t2
+ ==> [2]:
+ ==> _[1]=t5
+ ==> _[2]=t3
+ // 2nd Example: input is the ring of a Hamburger-Noether expansion
+ poly h=x2-y2-y3;
+ list hn=hnexpansion(h);
+ parametrisation(h,1);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=t
+ ==> _[2]=t-1/2t2
+ ==> [2]:
+ ==> -1,2
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=t
+ ==> _[2]=-t-1/2t2
+ ==> [2]:
+ ==> -1,2
+ // 3rd Example: input is a Hamburger-Noether expansion
+ poly f=x3+2xy2+y2;
+ list hne=develop(f);
+ list hne_extended=extdevelop(hne,10);
+ // compare the matrices ...
+ print(hne[1]);
+ ==> 0,x,
+ ==> 0,-1
+ print(hne_extended[1]);
+ ==> 0,x, 0,0,0,0, 0,0,0,0,
+ ==> 0,-1,0,2,0,-4,0,8,0,-16
+ // ... and the resulting parametrizations:
+ parametrisation(hne);
+ ==> [1]:
+ ==> _[1]=-t2
+ ==> _[2]=-t3
+ parametrisation(hne_extended);
+ ==> [1]:
+ ==> _[1]=-t2+2t4-4t6+8t8-16t10
+ ==> _[2]=-t3+2t5-4t7+8t9-16t11
+ parametrisation(hne_extended,0);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=-t2+2t4-4t6+8t8-16t10
+ ==> _[2]=-t3+2t5-4t7+8t9-16t11
+ ==> [2]:
+ ==> 10,11
+
+* Menu:
+
+See also:
+* develop::
+* extdevelop::
+
+*See also:* *note develop::; *note extdevelop::.
+
+
+File: sing.htm, Node: displayHNE, Next: invariants, Prev: parametrisation,
Up: hnoether_lib
+
+D.5.5.6 displayHNE
+..................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ displayHNE(L[,n]); L list, n int
+
+*Assume:*
+ L is the output of `develop(f)', or of `exdevelop(f,n)', or of
+ `hnexpansion(f[,"ess"])', or (one entry in) the list `hne' in the
+ ring created by `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ - if only one argument is given, no return value, but display an
+ ideal HNE of the following form:
+
+ HNE[1]=-y+[]*z(0)^1+[]*z(0)^2+...+z(0)^<>*z(1)
+ HNE[2]=-x+ []*z(1)^2+...+z(1)^<>*z(2)
+ HNE[3]= []*z(2)^2+...+z(2)^<>*z(3)
+ ....... ..........................
+ HNE[r+1]= []*z(r)^2+[]*z(r)^3+......
+
+ where `x',`y' are the first 2 variables of the basering. The
+ values of `[]' are the coefficients of the Hamburger-Noether
+ matrix, the values of `<>' are represented by `x' in the HN-matrix.
+ - if a second argument is given, create and export a new ring with
+ name `displayring' containing an ideal `HNE' as described above.
+ - if L corresponds to the output of `hnexpansion(f[,"ess"])' or to
+ the list `hne' in the ring created by `hnexpansion(f[,"ess"])',
+ `displayHNE(L[,n])' shows the HNE's of all branches of f in the
+ form described above. The optional parameter is then ignored.
+
+*Note:*
+ The 1st line of the above ideal (i.e., `HNE[1]') means that
+ `y=[]*z(0)^1+...', the 2nd line (`HNE[2]') means that
+ `x=[]*z(1)^2+...', so you can see which indeterminate corresponds
+ to which line (it's also possible that `x' corresponds to the 1st
+ line and `y' to the 2nd).
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r=0,(x,y),dp;
+ poly f=x3+2xy2+y2;
+ list hn=develop(f);
+ displayHNE(hn);
+ ==> HNE[1]=-y+z(0)*z(1)
+ ==> HNE[2]=-x-z(1)^2
+
+* Menu:
+
+See also:
+* develop::
+* hnexpansion::
+
+*See also:* *note develop::; *note hnexpansion::.
+
+
+File: sing.htm, Node: invariants, Next: displayInvariants, Prev:
displayHNE, Up: hnoether_lib
+
+D.5.5.7 invariants
+..................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ invariants(INPUT); INPUT list or poly
+
+*Assume:*
+ INPUT is the output of `develop(f)', or of
+ `extdevelop(develop(f),n)', or one entry in the list `hne' of the
+ HNEring created by `hnexpansion'.
+
+*Return:*
+ list, if INPUT contains a valid HNE:
+
+ invariants(INPUT)[1]: intvec (characteristic exponents)
+ invariants(INPUT)[2]: intvec (generators of the semigroup)
+ invariants(INPUT)[3]: intvec (Puiseux pairs, 1st components)
+ invariants(INPUT)[4]: intvec (Puiseux pairs, 2nd components)
+ invariants(INPUT)[5]: int (degree of the conductor)
+ invariants(INPUT)[6]: intvec (sequence of multiplicities)
+
+ an empty list, if INPUT contains no valid HNE.
+
+*Assume:*
+ INPUT is bivariate polynomial f or the output of
+ `hnexpansion(f[,"ess"])', or the list `hne' in the HNEring created
+ by `hnexpansion'.
+
+*Return:*
+ list INV, such that INV[i] is the output of
+ `invariants(develop(f[i]))' as above, where f[i] is the ith branch
+ of the curve f, and the last entry contains further invariants of f
+ in the format:
+
+ INV[i][1] : intvec (characteristic exponents)
+ INV[i][2] : intvec (generators of the semigroup)
+ INV[i][3] : intvec (Puiseux pairs, 1st components)
+ INV[i][4] : intvec (Puiseux pairs, 2nd components)
+ INV[i][5] : int (degree of the conductor)
+ INV[i][6] : intvec (sequence of multiplicities)
+ INV[last][1] : intmat (contact matrix of the branches)
+ INV[last][2] : intmat (intersection multiplicities of the branches)
+ INV[last][3] : int (delta invariant of f)
+
+*Note:*
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=0,(x,y),dp;
+ list hne=develop(y4+2x3y2+x6+x5y);
+ list INV=invariants(hne);
+ INV[1]; // the characteristic exponents
+ ==> 4,6,7
+ INV[2]; // the generators of the semigroup of values
+ ==> 4,6,13
+ INV[3],INV[4]; // the Puiseux pairs in packed form
+ ==> 3,7 2,2
+ INV[5] / 2; // the delta-invariant
+ ==> 8
+ INV[6]; // the sequence of multiplicities
+ ==> 4,2,2,1,1
+ // To display the invariants more 'nicely':
+ displayInvariants(hne);
+ ==> characteristic exponents : 4,6,7
+ ==> generators of semigroup : 4,6,13
+ ==> Puiseux pairs : (3,2)(7,2)
+ ==> degree of the conductor : 16
+ ==> delta invariant : 8
+ ==> sequence of multiplicities: 4,2,2,1,1
+ /////////////////////////////
+ INV=invariants((x2-y3)*(x3-y5));
+ INV[1][1]; // the characteristic exponents of the first
branch
+ ==> 2,3
+ INV[2][6]; // the sequence of multiplicities of the second
branch
+ ==> 3,2,1,1
+ print(INV[size(INV)][1]); // the contact matrix of the branches
+ ==> 0 3
+ ==> 3 0
+ print(INV[size(INV)][2]); // the intersection numbers of the
branches
+ ==> 0 9
+ ==> 9 0
+ INV[size(INV)][3]; // the delta invariant of the curve
+ ==> 14
+
+* Menu:
+
+See also:
+* develop::
+* displayInvariants::
+* intersection::
+* multsequence::
+
+*See also:* *note develop::; *note displayInvariants::; *note
+intersection::; *note multsequence::.
+
+
+File: sing.htm, Node: displayInvariants, Next: multsequence, Prev:
invariants, Up: hnoether_lib
+
+D.5.5.8 displayInvariants
+.........................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ displayInvariants(INPUT); INPUT list or poly
+
+*Assume:*
+ INPUT is a bivariate polynomial, or the output of `develop(f)', or
+ of `extdevelop(develop(f),n)', or (one entry of) the list `hne' in
+ the ring created by `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ none
+
+*Display:*
+ invariants of the corresponding branch, resp. of all branches, in a
+ better readable form.
+
+*Note:*
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=0,(x,y),dp;
+ list hne=develop(y4+2x3y2+x6+x5y);
+ displayInvariants(hne);
+ ==> characteristic exponents : 4,6,7
+ ==> generators of semigroup : 4,6,13
+ ==> Puiseux pairs : (3,2)(7,2)
+ ==> degree of the conductor : 16
+ ==> delta invariant : 8
+ ==> sequence of multiplicities: 4,2,2,1,1
+
+* Menu:
+
+See also:
+* develop::
+* hnexpansion::
+* intersection::
+* invariants::
+
+*See also:* *note develop::; *note hnexpansion::; *note intersection::;
+*note invariants::.
+
+
+File: sing.htm, Node: multsequence, Next: displayMultsequence, Prev:
displayInvariants, Up: hnoether_lib
+
+D.5.5.9 multsequence
+....................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ multsequence(INPUT); INPUT list or poly
+
+*Assume:*
+ INPUT is the output of `develop(f)', or of
+ `extdevelop(develop(f),n)', or one entry in the list `hne' of the
+ ring created by `hnexpansion(f)'.
+
+*Return:*
+ intvec corresponding to the multiplicity sequence of (a branch) of
+ the curve (the same as `invariants(INPUT)[6]').
+
+*Assume:*
+ INPUT is a bivariate polynomial, or the output of `hnexpansion(f)',
+ or the list `hne' in the ring created by `hnexpansion(f)'.
+
+*Return:*
+ list of two integer matrices:
+
+ `multsequence(INPUT)[1][i,*]'
+ contains the multiplicities of the branches at their
+ infinitely near point of 0 in its (i-1) order neighbourhood
+ (i.e., i=1: multiplicity of the branches themselves, i=2:
+ multiplicity of their 1st quadratic transformed, etc.,
+ Hence, `multsequence(INPUT)[1][*,j]' is the multiplicity
+ sequence of branch j.
+
+ `multsequence(INPUT)[2][i,*]':
+ contains the information which of these infinitely near points
+ coincide.
+
+*Note:*
+ The order of elements of the list `hne' obtained from
+ `hnexpansion(f[,"ess")' must not be changed (because then the
+ coincident infinitely near points couldn't be grouped together, cf.
+ meaning of 2nd intmat in example). Hence, it is not wise to
+ compute the HNE of several polynomials separately, put them into a
+ list INPUT and call `multsequence(INPUT)'.
+ Use `displayMultsequence' to produce a better readable output for
+ reducible curves on the screen.
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ // -------- prepare for example ---------
+ if (nameof(basering)=="HNEring") {
+ def rettering=HNEring;
+ kill HNEring;
+ }
+ // ------ the example starts here -------
+ ring r=0,(x,y),dp;
+ list hn=hnexpansion((x6-y10)*(x+y2-y3)*(x+y2+y3)); // 4 branches
+ def HNEring=hn[1];
+ setring HNEring;
+ multsequence(hne[1])," | ",multsequence(hne[2])," | ",
+ multsequence(hne[3])," | ",multsequence(hne[4]);
+ ==> 3,2,1,1 | 3,2,1,1 | 1 | 1
+ multsequence(hne);
+ ==> [1]:
+ ==> 3,3,1,1,
+ ==> 2,2,1,1,
+ ==> 1,1,1,1,
+ ==> 1,1,1,1,
+ ==> 1,1,1,1
+ ==> [2]:
+ ==> 4,0,0,0,
+ ==> 4,0,0,0,
+ ==> 2,2,0,0,
+ ==> 2,1,1,0,
+ ==> 1,1,1,1
+ // The meaning of the entries of the 2nd matrix is as follows:
+ displayMultsequence(hne);
+ ==> [(3,3,1,1)],
+ ==> [(2,2,1,1)],
+ ==> [(1,1),(1,1)],
+ ==> [(1,1),(1),(1)],
+ ==> [(1),(1),(1),(1)]
+ // --- restore HNEring if previously defined ---
+ kill HNEring,r;
+ if (defined(rettering)) {
+ setring rettering;
+ def HNEring=rettering;
+ export HNEring;
+ }
+
+* Menu:
+
+See also:
+* develop::
+* displayMultsequence::
+* hnexpansion::
+* separateHNE::
+
+*See also:* *note develop::; *note displayMultsequence::; *note
+hnexpansion::; *note separateHNE::.
+
+
+File: sing.htm, Node: displayMultsequence, Next: intersection, Prev:
multsequence, Up: hnoether_lib
+
+D.5.5.10 displayMultsequence
+............................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ displayMultsequence(INPUT); INPUT list or poly
+
+*Assume:*
+ INPUT is a bivariate polynomial, or the output of `develop(f)', or
+ of `extdevelop(develop(f),n)', or of of `hnexpansion(f[,"ess"])',
+ or (one entry in) the list `hne' of the ring created by
+ `hnexpansion(f[,"ess "])'.
+
+*Return:*
+ nothing
+
+*Display:*
+ the sequence of multiplicities:
+
+ - if `INPUT=develop(f)' or `INPUT=extdevelop(develop(f),n)' or
`INPUT=hne[i]':
+ `a , b , c , ....... , 1'
+ - if `INPUT=f' or `INPUT=hnexpansion(f[,"ess"])' or `INPUT=hne':
+ `[(a_1, .... , b_1 , .... , c_1)],'
+ `[(a_2, ... ), ... , (... , c_2)],'
+ ` ........................................ ,'
+ `[(a_n),(b_n), ....., (c_n)]'
+ with:
+ `a_1 , ... , a_n' the sequence of multiplicities of the 1st branch,
+ `[...]' the multiplicities of the j-th transformed of all branches,
+ `(...)' indicating branches meeting in an infinitely near point.
+
+*Note:*
+ The same restrictions for INPUT as in `multsequence' apply.
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ // ------ the example starts here -------
+ ring r=0,(x,y),dp;
+ //// Example 1: Input = output of develop
+ displayMultsequence(develop(x3-y5));
+ ==> The sequence of multiplicities is 3,2,1,1
+ //// Example 2: Input = bivariate polynomial
+ displayMultsequence((x6-y10)*(x+y2-y3)*(x+y2+y3));
+ ==> [(3,3,1,1)],
+ ==> [(2,2,1,1)],
+ ==> [(1,1),(1,1)],
+ ==> [(1,1),(1),(1)],
+ ==> [(1),(1),(1),(1)]
+
+* Menu:
+
+See also:
+* develop::
+* hnexpansion::
+* multsequence::
+* separateHNE::
+
+*See also:* *note develop::; *note hnexpansion::; *note multsequence::;
+*note separateHNE::.
+
+
+File: sing.htm, Node: intersection, Next: stripHNE, Prev:
displayMultsequence, Up: hnoether_lib
+
+D.5.5.11 intersection
+.....................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ intersection(hne1,hne2); hne1, hne2 lists
+
+*Assume:*
+ hne1, hne2 represent a HNE (i.e., are the output of `develop(f)',
+ or of `extdevelop(develop(f),n)', or one entry of the list `hne' in
+ the ring created by `hnexpansion(f[,"ess"])').
+
+*Return:*
+ int, the intersection multiplicity of the branches corresponding to
+ hne1 and hne2.
+
+*Example:*
+ LIB "hnoether.lib";
+ // ------ the example starts here -------
+ ring r=0,(x,y),dp;
+ list hn=hnexpansion((x2-y3)*(x2+y3));
+ def HNEring=hn[1];
+ setring HNEring;
+ intersection(hne[1],hne[2]);
+ ==> 6
+
+* Menu:
+
+See also:
+* displayInvariants::
+* hnexpansion::
+
+*See also:* *note displayInvariants::; *note hnexpansion::.
+
+
+File: sing.htm, Node: stripHNE, Next: is_irred, Prev: intersection, Up:
hnoether_lib
+
+D.5.5.12 stripHNE
+.................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ stripHNE(L); L list
+
+*Assume:*
+ L is the output of `develop(f)', or of `extdevelop(develop(f),n)',
+ or (one entry of) the list `hne' in the ring created by
+ `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ list in the same format as L, but all polynomials L[4], resp.
+ L[i][4], are set to zero.
+
+*Note:*
+ The purpose of this procedure is to remove huge amounts of data no
+ longer needed. It is useful, if one or more of the polynomials in L
+ consume much memory. It is still possible to compute invariants,
+ parametrizations etc. with the stripped HNE(s), but it is not
+ possible to use `extdevelop' with them.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r=0,(x,y),dp;
+ list hne=develop(x2+y3+y4);
+ hne;
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[1,2]=x
+ ==> _[2,1]=0
+ ==> _[2,2]=-1
+ ==> [2]:
+ ==> 1,-1
+ ==> [3]:
+ ==> 1
+ ==> [4]:
+ ==> x4-2x2y+y2+y
+ ==> [5]:
+ ==> 1
+ stripHNE(hne);
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[1,2]=x
+ ==> _[2,1]=0
+ ==> _[2,2]=-1
+ ==> [2]:
+ ==> 1,-1
+ ==> [3]:
+ ==> 1
+ ==> [4]:
+ ==> 0
+ ==> [5]:
+ ==> 1
+
+* Menu:
+
+See also:
+* develop::
+* extdevelop::
+* hnexpansion::
+
+*See also:* *note develop::; *note extdevelop::; *note hnexpansion::.
+
+
+File: sing.htm, Node: is_irred, Next: delta, Prev: stripHNE, Up:
hnoether_lib
+
+D.5.5.13 is_irred
+.................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ is_irred(f); f poly
+
+*Assume:*
+ f is a squarefree bivariate polynomial (in the first 2 ring
+ variables).
+
+*Return:*
+ int (0 or 1):
+ - `is_irred(f)=1' if f is irreducible as a formal power series over
+ the algebraic closure of its coefficient field (f defines an
+ analytically irreducible curve at zero),
+ - `is_irred(f)=0' otherwise.
+
+*Note:*
+ 0 and units in the ring of formal power series are considered to be
+ not irreducible.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=0,(x,y),ls;
+ is_irred(x2+y3);
+ ==> 1
+ is_irred(x2+y2);
+ ==> 0
+ is_irred(x2+y3+1);
+ ==> 0
+
+
+File: sing.htm, Node: delta, Next: newtonpoly, Prev: is_irred, Up:
hnoether_lib
+
+D.5.5.14 delta
+..............
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ delta(INPUT); INPUT a polynomial defining an isolated plane curve
+ singularity at 0, or the Hamburger-Noether expansion thereof, i.e.
+ the output of `develop(f)', or the output of
+ `hnexpansion(f[,"ess"])', or (one of the entries of) the list `hne'
+ in the ring created by `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ the delta invariant of the singularity at 0, the vector space
+ dimension of R~/R, where R~ is the normalization of the singularity
+ R=basering/f
+
+*Note:*
+ In case the Hamburger-Noether expansion of the curve f is needed
+ for other purposes as well it is better to calculate this first
+ with the aid of `hnexpansion' and use it as input instead of the
+ polynomial itself.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r = 32003,(x,y),ds;
+ poly f = x25+x24-4x23-1x22y+4x22+8x21y-2x21-12x20y-4x19y2+4x20+10x19y
+ +12x18y2-24x18y-20x17y2-4x16y3+x18+60x16y2+20x15y3-9x16y
+ -80x14y3-10x13y4+36x14y2+60x12y4+2x11y5-84x12y3-24x10y5
+ +126x10y4+4x8y6-126x8y5+84x6y6-36x4y7+9x2y8-1y9;
+ delta(f);
+ ==> 96
+
+* Menu:
+
+See also:
+* deltaLoc::
+* invariants::
+
+*See also:* *note deltaLoc::; *note invariants::.
+
+
+File: sing.htm, Node: newtonpoly, Next: is_NND, Prev: delta, Up:
hnoether_lib
+
+D.5.5.15 newtonpoly
+...................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ newtonpoly(f); f poly
+
+*Assume:*
+ basering has exactly two variables;
+ f is convenient, that is, f(x,0) != 0 != f(0,y).
+
+*Return:*
+ list of intvecs (= coordinates x,y of the Newton polygon of f).
+
+*Note:*
+ Procedure uses `execute'; this can be avoided by calling
+ `newtonpoly(f,1)' if the ordering of the basering is `ls'.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r=0,(x,y),ls;
+ poly f=x5+2x3y-x2y2+3xy5+y6-y7;
+ newtonpoly(f);
+ ==> [1]:
+ ==> 0,6
+ ==> [2]:
+ ==> 2,2
+ ==> [3]:
+ ==> 3,1
+ ==> [4]:
+ ==> 5,0
+
+
+File: sing.htm, Node: is_NND, Next: puiseux2generators, Prev: newtonpoly,
Up: hnoether_lib
+
+D.5.5.16 is_NND
+...............
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ is_NND(f[,mu,NP]); f poly, mu int, NP list of intvecs
+
+*Assume:*
+ f is convenient, that is, f(x,0) != 0 != f(0,y);
+ mu (optional) is Milnor number of f.
+ NP (optional) is output of `newtonpoly(f)'.
+
+*Return:*
+ int: 1 if f in Newton non-degenerate, 0 otherwise.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring r=0,(x,y),ls;
+ poly f=x5+y3;
+ is_NND(f);
+ ==> 1
+ poly g=(x-y)^5+3xy5+y6-y7;
+ is_NND(g);
+ ==> 0
+ // if already computed, one should give the Minor number and Newton
polygon
+ // as second and third input:
+ int mu=milnor(g);
+ list NP=newtonpoly(g);
+ is_NND(g,mu,NP);
+ ==> 0
+
+* Menu:
+
+See also:
+* newtonpoly::
+
+*See also:* *note newtonpoly::.
+
+
+File: sing.htm, Node: puiseux2generators, Next: separateHNE, Prev: is_NND,
Up: hnoether_lib
+
+D.5.5.17 puiseux2generators
+...........................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ puiseux2generators(m,n); m,n intvec
+
+*Assume:*
+ m, resp. n, represent the 1st, resp. 2nd, components of Puiseux
+ pairs (e.g., `m=invariants(L)[3]', `n=invariants(L)[4]').
+
+*Return:*
+ intvec of the generators of the semigroup of values.
+
+*Example:*
+ LIB "hnoether.lib";
+ // take (3,2),(7,2),(15,2),(31,2),(63,2),(127,2) as Puiseux pairs:
+ puiseux2generators(intvec(3,7,15,31,63,127),intvec(2,2,2,2,2,2));
+ ==> 64,96,208,424,852,1706,3413
+
+* Menu:
+
+See also:
+* invariants::
+
+*See also:* *note invariants::.
+
+
+File: sing.htm, Node: separateHNE, Next: squarefree, Prev:
puiseux2generators, Up: hnoether_lib
+
+D.5.5.18 separateHNE
+....................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ separateHNE(hne1,hne2); hne1, hne2 lists
+
+*Assume:*
+ hne1, hne2 are HNEs (=output of `develop(f)',
+ `extdevelop(develop(f),n)', or one entry in the list `hne' in the
+ ring created by `hnexpansion(f[,"ess"])'.
+
+*Return:*
+ number of quadratic transformations needed to separate both curves
+ (branches).
+
+*Example:*
+ LIB "hnoether.lib";
+ int p=printlevel; printlevel=-1;
+ ring r=0,(x,y),dp;
+ list hne1=develop(x);
+ list hne2=develop(x+y);
+ list hne3=develop(x+y2);
+ separateHNE(hne1,hne2); // two transversal lines
+ ==> 1
+ separateHNE(hne1,hne3); // one quadratic transform. gives 1st example
+ ==> 2
+ printlevel=p;
+
+* Menu:
+
+See also:
+* develop::
+* displayMultsequence::
+* hnexpansion::
+* multsequence::
+
+*See also:* *note develop::; *note displayMultsequence::; *note
+hnexpansion::; *note multsequence::.
+
+
+File: sing.htm, Node: squarefree, Next: allsquarefree, Prev: separateHNE,
Up: hnoether_lib
+
+D.5.5.19 squarefree
+...................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ squarefree(f); f poly
+
+*Assume:*
+ f is a bivariate polynomial (in the first 2 ring variables).
+
+*Return:*
+ poly, a squarefree divisor of f.
+
+*Note:*
+ Usually, the return value is the greatest squarefree divisor, but
+ there is one exception: factors with a p-th root, p the
+ characteristic of the basering, are lost.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=3,(x,y),dp;
+ squarefree((x3+y)^2);
+ ==> x3+y
+ squarefree((x+y)^3*(x-y)^2); // Warning: (x+y)^3 is lost
+ ==> x-y
+ squarefree((x+y)^4*(x-y)^2); // result is (x+y)*(x-y)
+ ==> x2-y2
+
+* Menu:
+
+See also:
+* allsquarefree::
+
+*See also:* *note allsquarefree::.
+
+
+File: sing.htm, Node: allsquarefree, Next: further_hn_proc, Prev:
squarefree, Up: hnoether_lib
+
+D.5.5.20 allsquarefree
+......................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage :*
+ allsquarefree(f,g); f,g poly
+
+*Assume:*
+ g is the output of `squarefree(f)'.
+
+*Return:*
+ the greatest squarefree divisor of f.
+
+*Note :*
+ This proc uses factorize to get the missing factors of f not in g
+ and, therefore, may be slow.
+
+*Example:*
+ LIB "hnoether.lib";
+ ring exring=7,(x,y),dp;
+ poly f=(x+y)^7*(x-y)^8;
+ poly g=squarefree(f);
+ g; // factor x+y lost, since characteristic=7
+ ==> x-y
+ allsquarefree(f,g); // all factors (x+y)*(x-y) found
+ ==> x2-y2
+
+* Menu:
+
+See also:
+* squarefree::
+
+*See also:* *note squarefree::.
+
+
+File: sing.htm, Node: further_hn_proc, Prev: allsquarefree, Up: hnoether_lib
+
+D.5.5.21 further_hn_proc
+........................
+
+Procedure from library `hnoether.lib' (*note hnoether_lib::).
+
+*Usage:*
+ further_hn_proc();
+
+*Note:*
+ The library `hnoether.lib' contains some more procedures which are
+ not shown when typing `help hnoether.lib;'. They may be useful for
+ interactive use (e.g. if you want to do the calculation of an HN
+ development "by hand" to see the intermediate results), and they
+ can be enumerated by calling `further_hn_proc()'.
+ Use `help <procedure>;' for detailed information about each of
+ them.
+
+*Example:*
+ LIB "hnoether.lib";
+ further_hn_proc();
+ ==>
+ ==> The following procedures are also part of `hnoether.lib':
+ ==>
+ ==> getnm(f); intersection pts. of Newton polygon with axes
+ ==> T_Transform(f,Q,N); returns f(y,xy^Q)/y^NQ (f: poly, Q,N: int)
+ ==> T1_Transform(f,d,M); returns f(x,y+d*x^M) (f: poly,d:number,M:int)
+ ==> T2_Transform(f,d,M,N,ref); a composition of T1 & T
+ ==> koeff(f,I,J); gets coefficient of indicated monomial of poly f
+ ==> redleit(f,S,E); restriction of monomials of f to line (S-E)
+ ==> leit(f,n,m); special case of redleit (for irred. polynomials)
+ ==> testreducible(f,n,m); tests whether f is reducible
+ ==> charPoly(f,M,N); characteristic polynomial of f
+ ==> find_in_list(L,p); find int p in list L
+ ==> get_last_divisor(M,N); last divisor in Euclid's algorithm
+ ==> factorfirst(f,M,N); try to factor f without `factorize'
+ ==> factorlist(L); factorize a list L of polynomials
+ ==> referencepoly(D); a polynomial f s.t. D is the Newton diagram of f
+
+
+File: sing.htm, Node: mondromy_lib, Next: qhmoduli_lib, Prev: hnoether_lib,
Up: Singularities
+
+D.5.6 mondromy_lib
+------------------
+
+*Library:*
+ mondromy.lib
+
+*Purpose:*
+ Monodromy of an Isolated Hypersurface Singularity
+
+*Author:*
+ Mathias Schulze, email: address@hidden
+
+*Overview:*
+ A library to compute the monodromy of an isolated hypersurface
+ singularity. It uses an algorithm by Brieskorn (manuscripta math.
+ 2 (1970), 103-161) to compute a connection matrix of the
+ meromorphic Gauss-Manin connection up to arbitrarily high order,
+ and an algorithm of Gerard and Levelt (Ann. Inst. Fourier,
+ Grenoble 23,1 (1973), pp. 157-195) to transform it to a simple
+ pole.
+
+*Procedures:*
+
+* Menu:
+
+* detadj:: determinant and adjoint matrix of square matrix U
+* invunit:: series inverse of polynomial u up to order n
+* jacoblift:: lifts f^kappa in jacob(f) with minimal kappa
+* monodromyB:: monodromy of isolated hypersurface singularity f
+* H2basis:: basis of Brieskorn lattice H"
+
+* Menu:
+
+See also:
+* gaussman_lib::
+
+*See also:* *note gaussman_lib::.
+
+
+File: sing.htm, Node: detadj, Next: invunit, Up: mondromy_lib
+
+D.5.6.1 detadj
+..............
+
+Procedure from library `mondromy.lib' (*note mondromy_lib::).
+
+*Usage:*
+ detadj(U); U matrix
+
+*Assume:*
+ U is a square matrix with non zero determinant.
+
+*Return:*
+ The procedure returns a list with at most 2 entries.
+ If U is not a square matrix, the list is empty.
+ If U is a square matrix, then the first entry is the determinant of
+ U. If U is a square matrix and the determinant of U not zero, then
+ the second entry is the adjoint matrix of U.
+
+*Display:*
+ The procedure displays comments if printlevel>=1.
+
+*Example:*
+ LIB "mondromy.lib";
+ ring R=0,x,dp;
+ matrix U[2][2]=1,1+x,1+x2,1+x3;
+ list daU=detadj(U);
+ daU[1];
+ ==> -x2-x
+ print(daU[2]);
+ ==> x3+1, -x-1,
+ ==> -x2-1,1
+
+
+File: sing.htm, Node: invunit, Next: jacoblift, Prev: detadj, Up:
mondromy_lib
+
+D.5.6.2 invunit
+...............
+
+Procedure from library `mondromy.lib' (*note mondromy_lib::).
+
+*Usage:*
+ invunit(u,n); u poly, n int
+
+*Assume:*
+ The polynomial u is a series unit.
+
+*Return:*
+ The procedure returns the series inverse of u up to order n or a
+ zero polynomial if u is no series unit.
+
+*Display:*
+ The procedure displays comments if printlevel>=1.
+
+*Example:*
+ LIB "mondromy.lib";
+ ring R=0,(x,y),dp;
+ invunit(2+x3+xy4,10);
+ ==> 1/8x2y8-1/16x9+1/4x4y4+1/8x6-1/4xy4-1/4x3+1/2
+
+
+File: sing.htm, Node: jacoblift, Next: monodromyB, Prev: invunit, Up:
mondromy_lib
+
+D.5.6.3 jacoblift
+.................
+
+Procedure from library `mondromy.lib' (*note mondromy_lib::).
+
+*Usage:*
+ jacoblift(f); f poly
+
+*Assume:*
+ The polynomial f in a series ring (local ordering) defines an
+ isolated hypersurface singularity.
+
+*Return:*
+ The procedure returns a list with entries kappa, xi, u of type int,
+ vector, poly such that kappa is minimal with f^kappa in jacob(f), u
+ is a unit, and u*f^kappa=(matrix(jacob(f))*xi)[1,1].
+
+*Display:*
+ The procedure displays comments if printlevel>=1.
+
+*Example:*
+ LIB "mondromy.lib";
+ ring R=0,(x,y),ds;
+ poly f=x2y2+x6+y6;
+ jacoblift(f);
+ ==> [1]:
+ ==> 2
+ ==> [2]:
+ ==>
1/2x2y3*gen(2)+1/6x7*gen(1)+5/6x6y*gen(2)-2/3xy6*gen(1)+1/6y7*gen(2)-4\
+
x4y5*gen(2)-3/2x9y2*gen(1)-15/2x8y3*gen(2)+9/2x3y8*gen(1)-3/2x2y9*gen(2)
+ ==> [3]:
+ ==> 1-9x2y2
+
+
+File: sing.htm, Node: monodromyB, Next: H2basis, Prev: jacoblift, Up:
mondromy_lib
+
+D.5.6.4 monodromyB
+..................
+
+Procedure from library `mondromy.lib' (*note mondromy_lib::).
+
+*Usage:*
+ monodromyB(f[,opt]); f poly, opt int
+
+*Assume:*
+ The polynomial f in a series ring (local ordering) defines an
+ isolated hypersurface singularity.
+
+*Return:*
+ The procedure returns a residue matrix M of the meromorphic
+ Gauss-Manin connection of the singularity defined by f or an empty
+ matrix if the assumptions are not fulfilled. If opt=0 (default),
+ exp(-2*pi*i*M) is a monodromy matrix of f, else, only the
+ characteristic polynomial of exp(-2*pi*i*M) coincides with the
+ characteristic polynomial of the monodromy of f.
+
+*Display:*
+ The procedure displays more comments for higher printlevel.
+
+*Example:*
+ LIB "mondromy.lib";
+ ring R=0,(x,y),ds;
+ poly f=x2y2+x6+y6;
+ matrix M=monodromyB(f);
+ print(M);
+ ==> 7/6,0, 0,0, 0, 0,0, 0,-1/2,0, 0, 0, 0,
+ ==> 0, 7/6,0,0, 0, 0,-1/2,0,0, 0, 0, 0, 0,
+ ==> 0, 0, 1,0, 0, 0,0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,4/3,0, 0,0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 4/3,0,0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 0, 1,0, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 0, 0,5/6, 0,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 0, 0,0, 1,0, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 0, 0,0, 0,5/6, 0, 0, 0, 0,
+ ==> 0, 0, 0,0, 0, 0,0, 0,0, 2/3,0, 0, 0,
+ ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 2/3,0, 0,
+ ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 47/44,-625/396,
+ ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 9/44, -3/44
+
+
+File: sing.htm, Node: H2basis, Prev: monodromyB, Up: mondromy_lib
+
+D.5.6.5 H2basis
+...............
+
+Procedure from library `mondromy.lib' (*note mondromy_lib::).
+
+*Usage:*
+ H2basis(f); f poly
+
+*Assume:*
+ The polynomial f in a series ring (local ordering) defines an
+ isolated hypersurface singularity.
+
+*Return:*
+ The procedure returns a list of representatives of a C{f}-basis of
+ the Brieskorn lattice H"=Omega^(n+1)/df^dOmega^(n-1).
+
+*Theory:*
+ H" is a free C{f}-module of rank milnor(f).
+
+*Display:*
+ The procedure displays more comments for higher printlevel.
+
+*Example:*
+ LIB "mondromy.lib";
+ ring R=0,(x,y),ds;
+ poly f=x2y2+x6+y6;
+ H2basis(f);
+ ==> [1]:
+ ==> x4
+ ==> [2]:
+ ==> x2y2
+ ==> [3]:
+ ==> y4
+ ==> [4]:
+ ==> x3
+ ==> [5]:
+ ==> x2y
+ ==> [6]:
+ ==> xy2
+ ==> [7]:
+ ==> y3
+ ==> [8]:
+ ==> x2
+ ==> [9]:
+ ==> xy
+ ==> [10]:
+ ==> y2
+ ==> [11]:
+ ==> x
+ ==> [12]:
+ ==> y
+ ==> [13]:
+ ==> 1
+
+
+File: sing.htm, Node: qhmoduli_lib, Next: sing_lib, Prev: mondromy_lib,
Up: Singularities
+
+D.5.7 qhmoduli_lib
+------------------
+
+*Library:*
+ qhmoduli.lib
+
+*Purpose:*
+ Moduli Spaces of Semi-Quasihomogeneous Singularities
+
+*Author:*
+ Thomas Bayer, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* ArnoldAction:: Induced action of G_f on T_.
+* ModEqn:: Equations of the moduli space for principal part f
+* QuotientEquations:: Equations of Variety(I)/G w.r.t. action 'A'
+* StabEqn:: Equations of the stabilizer of f.
+* StabEqnId:: Equations of the stabilizer of the qhom. ideal I.
+* StabOrder:: Order of the stabilizer of f.
+* UpperMonomials:: Upper basis of the Milnor algebra of f.
+* Max:: maximal integer contained in 'data'
+* Min:: minimal integer contained in 'data'
+* Table:: list, i-th entry is cmd(i), lb <= i <= ub
+
+
+File: sing.htm, Node: ArnoldAction, Next: ModEqn, Up: qhmoduli_lib
+
+D.5.7.1 ArnoldAction
+....................
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ ArnoldAction(f, [Gf, B]); poly f; list Gf, B;
+ 'Gf' is a list of two rings (coming from 'StabEqn')
+
+*Purpose:*
+ compute the induced action of the stabilizer G of f on T_, where T_
+ is given by the upper monomials B of the Milnor algebra of f.
+
+*Assume:*
+ f is quasihomogeneous
+
+*Return:*
+ polynomial ring over the same ground field, containing the ideals
+ 'actionid' and 'stabid'.
+ - 'actionid' is the ideal defining the induced action of Gf on T_
+ - 'stabid' is the ideal of the stabilizer Gf in the new ring
+
+*Example:*
+ LIB "qhmoduli.lib";
+ ring B = 0,(x,y,z), ls;
+ poly f = -z5+y5+x2z+x2y;
+ def R = ArnoldAction(f);
+ setring R;
+ actionid;
+ ==> actionid[1]=-s(2)*t(1)+s(3)*t(1)
+ ==> actionid[2]=-s(2)^2*t(2)+2*s(2)^2*t(3)^2+s(3)^2*t(2)
+ ==> actionid[3]=s(2)*t(3)+s(3)*t(3)
+ stabid;
+ ==> stabid[1]=s(2)*s(3)
+ ==> stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1
+ ==> stabid[3]=s(1)^2*s(3)^2-s(3)
+ ==> stabid[4]=s(1)^2+s(2)^4-s(3)^4
+ ==> stabid[5]=s(1)^4+s(2)^3-s(3)^3
+ ==> stabid[6]=-s(1)^2*s(3)+s(3)^5
+
+
+File: sing.htm, Node: ModEqn, Next: QuotientEquations, Prev: ArnoldAction,
Up: qhmoduli_lib
+
+D.5.7.2 ModEqn
+..............
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ ModEqn(f [, opt]); poly f; int opt;
+
+*Purpose:*
+ compute equations of the moduli space of semiquasihomogeneous
+ hypersurface singularity with principal part f w.r.t. right
+ equivalence
+
+*Assume:*
+ f quasihomogeneous polynomial with an isolated singularity at 0
+
+*Return:*
+ polynomial ring, possibly a simple extension of the ground field of
+ the basering, containing the ideal 'modid'
+ - 'modid' is the ideal of the moduli space if opt is even (> 0).
+ otherwise it contains generators of the coordinate ring R of the
+ moduli space (note : Spec(R) is the moduli space)
+
+*Options:*
+ 1 compute equations of the mod. space,
+ 2 use a primary decomposition
+ 4 compute E_f0, i.e., the image of G_f0
+ To combine options, add their value, default: opt =7
+
+*Example:*
+ LIB "qhmoduli.lib";
+ ring B = 0,(x,y), ls;
+ poly f = -x4 + xy5;
+ def R = ModEqn(f);
+ setring R;
+ modid;
+ ==> modid[1]=Y(5)^2-Y(4)*Y(6)
+ ==> modid[2]=Y(4)*Y(5)-Y(3)*Y(6)
+ ==> modid[3]=Y(3)*Y(5)-Y(2)*Y(6)
+ ==> modid[4]=Y(2)*Y(5)-Y(1)*Y(6)
+ ==> modid[5]=Y(4)^2-Y(2)*Y(6)
+ ==> modid[6]=Y(3)*Y(4)-Y(1)*Y(6)
+ ==> modid[7]=Y(2)*Y(4)-Y(1)*Y(5)
+ ==> modid[8]=Y(3)^2-Y(1)*Y(5)
+ ==> modid[9]=Y(2)*Y(3)-Y(1)*Y(4)
+ ==> modid[10]=Y(2)^2-Y(1)*Y(3)
+
+
+File: sing.htm, Node: QuotientEquations, Next: StabEqn, Prev: ModEqn, Up:
qhmoduli_lib
+
+D.5.7.3 QuotientEquations
+.........................
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ QuotientEquations(G,action,emb [, opt]); ideal G,action,emb;int opt
+
+*Purpose:*
+ compute the quotient of the variety given by the parameterization
+ 'emb' by the linear action 'action' of the algebraic group G.
+
+*Assume:*
+ 'action' is linear, G must be finite if the Reynolds operator is
+ needed (i.e., NullCone(G,action) returns some non-invariant polys)
+
+*Return:*
+ polynomial ring over a simple extension of the ground field of the
+ basering, containing the ideals 'id' and 'embedid'.
+ - 'id' contains the equations of the quotient, if opt = 1; if opt =
+ 0, 2, 'id' contains generators of the coordinate ring R of the
+ quotient (Spec(R) is the quotient)
+ - 'embedid' = 0, if opt = 1;
+ if opt = 0, 2, it is the ideal defining the equivariant embedding
+
+*Options:*
+ 1 compute equations of the quotient,
+ 2 use a primary decomposition when computing the Reynolds operator
+ To combine options, add their value, default: opt =3.
+
+
+File: sing.htm, Node: StabEqn, Next: StabEqnId, Prev: QuotientEquations,
Up: qhmoduli_lib
+
+D.5.7.4 StabEqn
+...............
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ StabEqn(f); f polynomial
+
+*Purpose:*
+ compute the equations of the isometry group of f.
+
+*Assume:*
+ f semiquasihomogeneous polynomial with an isolated singularity at 0
+
+*Return:*
+ list of two ring 'S1', 'S2'
+ - 'S1' contains the equations of the stabilizer (ideal 'stabid')
+ - 'S2' contains the action of the stabilizer (ideal 'actionid')
+
+*Global:*
+ varSubsList, contains the index j s.t. x(i) -> x(i)t(j) ...
+
+*Example:*
+ LIB "qhmoduli.lib";
+ ring B = 0,(x,y,z), ls;
+ poly f = -z5+y5+x2z+x2y;
+ list stab = StabEqn(f);
+ def S1 = stab[1]; setring S1; stabid;
+ ==> stabid[1]=s(2)*s(3)
+ ==> stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1
+ ==> stabid[3]=s(1)^2*s(3)^2-s(3)
+ ==> stabid[4]=s(2)^4-s(3)^4+s(1)^2
+ ==> stabid[5]=s(1)^4+s(2)^3-s(3)^3
+ ==> stabid[6]=s(3)^5-s(1)^2*s(3)
+ def S2 = stab[2]; setring S2; actionid;
+ ==> actionid[1]=s(1)*x
+ ==> actionid[2]=s(3)*y+s(2)*z
+ ==> actionid[3]=s(2)*y+s(3)*z
+
+
+File: sing.htm, Node: StabEqnId, Next: StabOrder, Prev: StabEqn, Up:
qhmoduli_lib
+
+D.5.7.5 StabEqnId
+.................
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ StabEqn(I, w); I ideal, w intvec
+
+*Purpose:*
+ compute the equations of the isometry group of the ideal I each
+ generator of I is fixed by the stabilizer.
+
+*Assume:*
+ I semiquasihomogeneous ideal wrt 'w' with an isolated singularity
+ at 0
+
+*Return:*
+ list of two ring 'S1', 'S2'
+ - 'S1' contains the equations of the stabilizer (ideal 'stabid')
+ - 'S2' contains the action of the stabilizer (ideal 'actionid')
+
+*Global:*
+ varSubsList, contains the index j s.t. t(i) -> t(i)t(j) ...
+
+*Example:*
+ LIB "qhmoduli.lib";
+ ring B = 0,(x,y,z), ls;
+ ideal I = x2,y3,z6;
+ intvec w = 3,2,1;
+ list stab = StabEqnId(I, w);
+ ==> // ** redefining d **
+ ==> // ** redefining newcoMx **
+ ==> // ** redefining coMx **
+ ==> // ** redefining d **
+ ==> // ** redefining newcoMx **
+ ==> // ** redefining coMx **
+ def S1 = stab[1]; setring S1; stabid;
+ ==> stabid[1]=s(1)^2-1
+ ==> stabid[2]=s(2)^3-1
+ ==> stabid[3]=s(3)^6-1
+ def S2 = stab[2]; setring S2; actionid;
+ ==> actionid[1]=s(1)*x
+ ==> actionid[2]=s(2)*y
+ ==> actionid[3]=s(3)*z
+
+
+File: sing.htm, Node: StabOrder, Next: UpperMonomials, Prev: StabEqnId,
Up: qhmoduli_lib
+
+D.5.7.6 StabOrder
+.................
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ StabOrder(f); poly f;
+
+*Purpose:*
+ compute the order of the stabilizer group of f.
+
+*Assume:*
+ f quasihomogeneous polynomial with an isolated singularity at 0
+
+*Return:*
+ int
+
+*Global:*
+ varSubsList
+
+
+File: sing.htm, Node: UpperMonomials, Next: Max, Prev: StabOrder, Up:
qhmoduli_lib
+
+D.5.7.7 UpperMonomials
+......................
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ UpperMonomials(poly f, [intvec w])
+
+*Purpose:*
+ compute the upper monomials of the milnor algebra of f.
+
+*Assume:*
+ f is quasihomogeneous (w.r.t. w)
+
+*Return:*
+ ideal
+
+*Example:*
+ LIB "qhmoduli.lib";
+ ring B = 0,(x,y,z), ls;
+ poly f = -z5+y5+x2z+x2y;
+ UpperMonomials(f);
+ ==> _[1]=y3z3
+ ==> _[2]=x2y3
+ ==> _[3]=x2y2
+
+
+File: sing.htm, Node: Max, Next: Min, Prev: UpperMonomials, Up:
qhmoduli_lib
+
+D.5.7.8 Max
+...........
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ Max(data); intvec/list of integers data
+
+*Purpose:*
+ find the maximal integer contained in 'data'
+
+*Return:*
+ list
+
+*Assume:*
+ 'data' contains only integers and is not empty
+
+
+File: sing.htm, Node: Min, Next: Table, Prev: Max, Up: qhmoduli_lib
+
+D.5.7.9 Min
+...........
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ Min(data); intvec/list of integers data
+
+*Purpose:*
+ find the minimal integer contained in 'data'
+
+*Return:*
+ list
+
+*Assume:*
+ 'data' contains only integers and is not empty
+
+
+File: sing.htm, Node: Table, Prev: Min, Up: qhmoduli_lib
+
+D.5.7.10 Table
+..............
+
+Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
+
+*Usage:*
+ Table(cmd,i, lb, ub); string cmd, i; int lb, ub
+
+*Purpose:*
+ generate a list of size ub - lb + 1 s.t. _[i] = cmd(i)
+
+*Return:*
+ list
+
+
+File: sing.htm, Node: sing_lib, Next: spcurve_lib, Prev: qhmoduli_lib, Up:
Singularities
+
+D.5.8 sing_lib
+--------------
+
+*Library:*
+ sing.lib
+
+*Purpose:*
+ Invariants of Singularities
+
+*Authors:*
+ Gert-Martin Greuel, email: address@hidden
+ Bernd Martin, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* deform:: infinitesimal deformations of ideal i
+* dim_slocus:: dimension of singular locus of ideal i
+* is_active:: is poly f an active element mod id? (id ideal/module)
+* is_ci:: is ideal i a complete intersection?
+* is_is:: is ideal i an isolated singularity?
+* is_reg:: is poly f a regular element mod id? (id ideal/module)
+* is_regs:: are gen's of ideal i regular sequence modulo id?
+* locstd:: SB for local degree ordering without cancelling units
+* milnor:: milnor number of ideal i; (assume i is ICIS in nf)
+* nf_icis:: generic combinations of generators; get ICIS in nf
+* slocus:: ideal of singular locus of ideal i
+* qhspectrum:: spectrum numbers of w-homogeneous polynomial f
+* Tjurina:: SB of Tjurina module of ideal i (assume i is ICIS)
+* tjurina:: Tjurina number of ideal i (assume i is ICIS)
+* T_1:: T^1-module of ideal i
+* T_2:: T^2-module of ideal i
+* T_12:: T^1- and T^2-module of ideal i
+* tangentcone:: compute tangent cone of id
+
+
+File: sing.htm, Node: deform, Next: dim_slocus, Up: sing_lib
+
+D.5.8.1 deform
+..............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ deform(id); id=ideal or poly
+
+*Return:*
+ matrix, columns are kbase of infinitesimal deformations
+
+*Example:*
+ LIB "sing.lib";
+ ring r = 32003,(x,y,z),ds;
+ ideal i = xy,xz,yz;
+ matrix T = deform(i);
+ print(T);
+ ==> x,0,0,
+ ==> 0,0,z,
+ ==> 0,y,0
+ print(deform(x3+y5+z2));
+ ==> xy3,y3,xy2,y2,xy,y,x,1
+
+
+File: sing.htm, Node: dim_slocus, Next: is_active, Prev: deform, Up:
sing_lib
+
+D.5.8.2 dim_slocus
+..................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ dim_slocus(i); i ideal or poly
+
+*Return:*
+ dimension of singular locus of i
+
+*Example:*
+ LIB "sing.lib";
+ ring r = 32003,(x,y,z),ds;
+ ideal i = x5+y6+z6,x2+2y2+3z2;
+ dim_slocus(i);
+ ==> 0
+
+
+File: sing.htm, Node: is_active, Next: is_ci, Prev: dim_slocus, Up:
sing_lib
+
+D.5.8.3 is_active
+.................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ is_active(f,id); f poly, id ideal or module
+
+*Return:*
+ 1 if f is an active element modulo id (i.e.
+ dim(id)=dim(id+f*R^n)+1, if id is a submodule of R^n) resp. 0 if f
+ is not active. The basering may be a quotient ring
+
+*Note:*
+ regular parameters are active but not vice versa (id may have
+ embedded components). proc is_reg tests whether f is a regular
+ parameter
+
+*Example:*
+ LIB "sing.lib";
+ ring r =32003,(x,y,z),ds;
+ ideal i = yx3+y,yz3+y3z;
+ poly f = x;
+ is_active(f,i);
+ ==> 1
+ qring q = std(x4y5);
+ poly f = x;
+ module m = [yx3+x,yx3+y3x];
+ is_active(f,m);
+ ==> 0
+
+
+File: sing.htm, Node: is_ci, Next: is_is, Prev: is_active, Up: sing_lib
+
+D.5.8.4 is_ci
+.............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ is_ci(i); i ideal
+
+*Return:*
+ intvec = sequence of dimensions of ideals (j[1],...,j[k]), for
+ k=1,...,size(j), where j is minimal base of i. i is a complete
+ intersection if last number equals nvars-size(i)
+
+*Note:*
+ dim(0-ideal) = -1. You may first apply simplify(i,10); in order to
+ delete zeroes and multiples from set of generators
+ printlevel >=0: display comments (default)
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1; // display comments
+ ring r = 32003,(x,y,z),ds;
+ ideal i = x4+y5+z6,xyz,yx2+xz2+zy7;
+ is_ci(i);
+ ==> // complete intersection of dim 0
+ ==> // dim-sequence:
+ ==> 2,1,0
+ i = xy,yz;
+ is_ci(i);
+ ==> // no complete intersection
+ ==> // dim-sequence:
+ ==> 2,2
+ printlevel = p;
+
+
+File: sing.htm, Node: is_is, Next: is_reg, Prev: is_ci, Up: sing_lib
+
+D.5.8.5 is_is
+.............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ is_is(id); id ideal or poly
+
+*Return:*
+ intvec = sequence of dimensions of singular loci of ideals
+ generated by id[1]..id[i], k = 1..size(id);
+ dim(0-ideal) = -1;
+ id defines an isolated singularity if last number is 0
+
+*Note:*
+ printlevel >=0: display comments (default)
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 32003,(x,y,z),ds;
+ ideal i = x2y,x4+y5+z6,yx2+xz2+zy7;
+ is_is(i);
+ ==> // dim of singular locus = 0
+ ==> // isolated singularity if last number is 0 in dim-sequence:
+ ==> 2,1,0
+ poly f = xy+yz;
+ is_is(f);
+ ==> // dim of singular locus = 1
+ ==> // isolated singularity if last number is 0 in dim-sequence:
+ ==> 1
+ printlevel = p;
+
+
+File: sing.htm, Node: is_reg, Next: is_regs, Prev: is_is, Up: sing_lib
+
+D.5.8.6 is_reg
+..............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ is_reg(f,id); f poly, id ideal or module
+
+*Return:*
+ 1 if multiplication with f is injective modulo id, 0 otherwise
+
+*Note:*
+ let R be the basering and id a submodule of R^n. The procedure
+ checks injectivity of multiplication with f on R^n/id. The basering
+ may be a quotient ring
+
+*Example:*
+ LIB "sing.lib";
+ ring r = 32003,(x,y),ds;
+ ideal i = x8,y8;
+ ideal j = (x+y)^4;
+ i = intersect(i,j);
+ poly f = xy;
+ is_reg(f,i);
+ ==> 0
+
+
+File: sing.htm, Node: is_regs, Next: locstd, Prev: is_reg, Up: sing_lib
+
+D.5.8.7 is_regs
+...............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ is_regs(i[,id]); i poly, id ideal or module (default: id=0)
+
+*Return:*
+ 1 if generators of i are a regular sequence modulo id, 0 otherwise
+
+*Note:*
+ let R be the basering and id a submodule of R^n. The procedure
+ checks injectivity of multiplication with i[k] on R^n/id+i[1..k-1].
+ The basering may be a quotient ring
+ printlevel >=0: display comments (default)
+ printlevel >=1: display comments during computation
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r1 = 32003,(x,y,z),ds;
+ ideal i = x8,y8,(x+y)^4;
+ is_regs(i);
+ ==> // checking whether element 1 is regular mod 1 .. 0
+ ==> // checking whether element 2 is regular mod 1 .. 1
+ ==> // checking whether element 3 is regular mod 1 .. 2
+ ==> // elements 1..2 are regular, 3 is not regular mod 1..2
+ ==> 0
+ module m = [x,0,y];
+ i = x8,(x+z)^4;;
+ is_regs(i,m);
+ ==> // checking whether element 1 is regular mod 1 .. 0
+ ==> // checking whether element 2 is regular mod 1 .. 1
+ ==> // elements are a regular sequence of length 2
+ ==> 1
+ printlevel = p;
+
+
+File: sing.htm, Node: locstd, Next: milnor, Prev: is_regs, Up: sing_lib
+
+D.5.8.8 locstd
+..............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ locstd (id); id = ideal
+
+*Return:*
+ a standard basis for a local degree ordering
+
+*Note:*
+ the procedure homogenizes id w.r.t. a new 1st variable @t@,
+ computes a SB wrt (dp(1),dp) and substitutes @t@ by 1.
+ Hence the result is a SB with respect to an ordering which sorts
+ first w.r.t. the order and then refines it with dp. This is a local
+ degree ordering.
+ This is done in order to avoid cancellation of units and thus be
+ able to use option(contentSB);
+
+*Example:*
+ LIB "sing.lib";
+ ring R = 0,(x,y,z),ds;
+ ideal i = xyz+z5,2x2+y3+z7,3z5+y5;
+ locstd(i);
+ ==> _[1]=y5+3z5
+ ==> _[2]=3x4y3z8-4x3y3z9+6x2y4z9+3y5z10
+ ==> _[3]=3x4z13-4x3z14+6x2yz14+3y2z15
+ ==> _[4]=3x4yz12-4x3yz13+6x2y2z13+3y3z14
+ ==> _[5]=2x2z9+x2y2z8+y3z9
+ ==> _[6]=2x2y4z5+y7z5-3x2yz9
+ ==> _[7]=6y2z10-3x2y3z8+4xy3z9-3y4z9
+ ==> _[8]=3x2y2z8+3y3z9+2xy4z8
+ ==> _[9]=18z14-4xy6z8+3y7z8-9x2yz12
+ ==> _[10]=xyz+z5
+ ==> _[11]=3xz6-y4z5
+ ==> _[12]=3y3z6+2xy4z5-3xyz9
+ ==> _[13]=y4z5-2xz9-xy2z8
+ ==> _[14]=3z10+2xyz9+xy3z8
+ ==> _[15]=2x2z5+y3z5-xyz8
+ ==> _[16]=y4z-2xz5+yz8
+ ==> _[17]=3z6+2xyz5-y2z8
+ ==> _[18]=2x2+y3+z7
+
+
+File: sing.htm, Node: milnor, Next: nf_icis, Prev: locstd, Up: sing_lib
+
+D.5.8.9 milnor
+..............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ milnor(i); i ideal or poly
+
+*Return:*
+ Milnor number of i, if i is ICIS (isolated complete intersection
+ singularity) in generic form, resp. -1 if not
+
+*Note:*
+ use proc nf_icis to put generators in generic form
+ printlevel >=0: display comments (default)
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 32003,(x,y,z),ds;
+ ideal j = x5+y6+z6,x2+2y2+3z2,xyz+yx;
+ milnor(j);
+ ==> //sequence of discriminant numbers: 100,149,70
+ ==> 21
+ poly f = x7+y7+(x-y)^2*x2y2+z2;
+ milnor(f);
+ ==> 28
+ printlevel = p;
+
+
+File: sing.htm, Node: nf_icis, Next: slocus, Prev: milnor, Up: sing_lib
+
+D.5.8.10 nf_icis
+................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ nf_icis(i); i ideal
+
+*Return:*
+ ideal = generic linear combination of generators of i if i is an
+ ICIS (isolated complete intersection singularity), return i if not
+
+*Note:*
+ this proc is useful in connection with proc milnor
+ printlevel >=0: display comments (default)
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 32003,(x,y,z),ds;
+ ideal i = x3+y4,z4+yx;
+ nf_icis(i);
+ ==> // complete intersection of dim 1
+ ==> // dim-sequence:
+ ==> // dim of singular locus = 0
+ ==> // isolated singularity if last number is 0 in dim-sequence:
+ ==> // dim of singular locus = 0
+ ==> // isolated singularity if last number is 0 in dim-sequence:
+ ==> // ICIS in generic form after 1 genericity loop(s)
+ ==> _[1]=2xy+x3+y4+2z4
+ ==> _[2]=xy+z4
+ ideal j = x3+y4,xy,yz;
+ nf_icis(j);
+ ==> // no complete intersection
+ ==> // dim-sequence:
+ ==> // no complete intersection
+ ==> _[1]=x3+y4
+ ==> _[2]=xy
+ ==> _[3]=yz
+ printlevel = p;
+
+
+File: sing.htm, Node: slocus, Next: qhspectrum, Prev: nf_icis, Up: sing_lib
+
+D.5.8.11 slocus
+...............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ slocus(i); i ideal
+
+*Return:*
+ ideal of singular locus of i
+
+*Example:*
+ LIB "sing.lib";
+ ring r = 0,(u,v,w,x,y,z),dp;
+ ideal i = wx,wy,wz,vx,vy,vz,ux,uy,uz,y3-x2;;
+ slocus(i);
+ ==> _[1]=x
+ ==> _[2]=w
+ ==> _[3]=v
+ ==> _[4]=u
+ ==> _[5]=y2
+
+
+File: sing.htm, Node: qhspectrum, Next: Tjurina, Prev: slocus, Up: sing_lib
+
+D.5.8.12 qhspectrum
+...................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ qhspectrum(f,w); f=poly, w=intvec;
+
+*Assume:*
+ f is a weighted homogeneous isolated singularity w.r.t. the weights
+ given by w; w must consist of as many positive integers as there
+ are variables of the basering
+
+*Compute:*
+ the spectral numbers of the w-homogeneous polynomial f, computed in
+ a ring of characteristic 0
+
+*Return:*
+ intvec d,s1,...,su where:
+ d = w-degree(f) and si/d = i-th spectral-number(f)
+ No return value if basering has parameters or if f is no isolated
+ singularity, displays a warning in this case
+
+*Example:*
+ LIB "sing.lib";
+ ring r;
+ poly f=x3+y5+z2;
+ intvec w=10,6,15;
+ qhspectrum(f,w);
+ ==> 30,1,7,11,13,17,19,23,29
+ // the spectrum numbers are:
+ // 1/30,7/30,11/30,13/30,17/30,19/30,23/30,29/30
+
+
+File: sing.htm, Node: Tjurina, Next: tjurina, Prev: qhspectrum, Up:
sing_lib
+
+D.5.8.13 Tjurina
+................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ Tjurina(id[,<any>]); id=ideal or poly
+
+*Assume:*
+ id=ICIS (isolated complete intersection singularity)
+
+*Return:*
+ standard basis of Tjurina-module of id,
+ of type module if id=ideal, resp. of type ideal if id=poly. If a
+ second argument is present (of any type) return a list:
+ [1] = Tjurina number,
+ [2] = k-basis of miniversal deformation,
+ [3] = SB of Tjurina module,
+ [4] = Tjurina module
+
+*Display:*
+ Tjurina number if printlevel >= 0 (default)
+
+*Note:*
+ Tjurina number = -1 implies that id is not an ICIS
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 0,(x,y,z),ds;
+ poly f = x5+y6+z7+xyz; // singularity T[5,6,7]
+ list T = Tjurina(f,"");
+ ==> // Tjurina number = 16
+ show(T[1]); // Tjurina number, should be 16
+ ==> // int, size 1
+ ==> 16
+ show(T[2]); // basis of miniversal deformation
+ ==> // ideal, 16 generator(s)
+ ==> z6,
+ ==> z5,
+ ==> z4,
+ ==> z3,
+ ==> z2,
+ ==> z,
+ ==> y5,
+ ==> y4,
+ ==> y3,
+ ==> y2,
+ ==> y,
+ ==> x4,
+ ==> x3,
+ ==> x2,
+ ==> x,
+ ==> 1
+ show(T[3]); // SB of Tjurina ideal
+ ==> // ideal, 6 generator(s)
+ ==> xy+7z6,
+ ==> xz+6y5,
+ ==> yz+5x4,
+ ==> 5x5-6y6,
+ ==> 6y6,
+ ==> z7
+ show(T[4]); ""; // Tjurina ideal
+ ==> // ideal, 4 generator(s)
+ ==> yz+5x4,
+ ==> xz+6y5,
+ ==> xy+7z6,
+ ==> xyz+x5+y6+z7
+ ==>
+ ideal j = x2+y2+z2,x2+2y2+3z2;
+ show(kbase(Tjurina(j))); // basis of miniversal deformation
+ ==> // Tjurina number = 5
+ ==> // module, 5 generator(s)
+ ==> [z]
+ ==> [y]
+ ==> [x]
+ ==> [1]
+ ==> [0,1]
+ hilb(Tjurina(j)); // Hilbert series of Tjurina module
+ ==> // Tjurina number = 5
+ ==> // 2 t^0
+ ==> // -3 t^1
+ ==> // -3 t^2
+ ==> // 7 t^3
+ ==> // -3 t^4
+ ==>
+ ==> // 2 t^0
+ ==> // 3 t^1
+ ==> // dimension (local) = 0
+ ==> // multiplicity = 5
+ printlevel = p;
+
+
+File: sing.htm, Node: tjurina, Next: T_1, Prev: Tjurina, Up: sing_lib
+
+D.5.8.14 tjurina
+................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ tjurina(id); id=ideal or poly
+
+*Assume:*
+ id=ICIS (isolated complete intersection singularity)
+
+*Return:*
+ int = Tjurina number of id
+
+*Note:*
+ Tjurina number = -1 implies that id is not an ICIS
+
+*Example:*
+ LIB "sing.lib";
+ ring r=32003,(x,y,z),(c,ds);
+ ideal j=x2+y2+z2,x2+2y2+3z2;
+ tjurina(j);
+ ==> 5
+
+
+File: sing.htm, Node: T_1, Next: T_2, Prev: tjurina, Up: sing_lib
+
+D.5.8.15 T_1
+............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ T_1(id[,<any>]); id = ideal or poly
+
+*Return:*
+ T_1(id): of type module/ideal if id is of type ideal/poly. We call
+ T_1(id) the T_1-module of id. It is a std basis of the presentation
+ of 1st order deformations of P/id, if P is the basering. If a
+ second argument is present (of any type) return a list of 3
+ modules:
+ [1]= T_1(id)
+ [2]= generators of normal bundle of id, lifted to P
+ [3]= module of relations of [2], lifted to P
+ (note: transpose[3]*[2]=0 mod id)
+ The list contains all non-easy objects which must be computed to
+ get T_1(id).
+
+*Display:*
+ k-dimension of T_1(id) if printlevel >= 0 (default)
+
+*Note:*
+ T_1(id) itself is usually of minor importance. Nevertheless, from
+ it all relevant information can be obtained. The most important are
+ probably vdim(T_1(id)); (which computes the Tjurina number),
+ hilb(T_1(id)); and kbase(T_1(id));
+ If T_1 is called with two argument, then matrix([2])*(kbase([1]))
+ represents a basis of 1st order semiuniversal deformation of id
+ (use proc 'deform', to get this in a direct way).
+ For a complete intersection the proc Tjurina is faster
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 32003,(x,y,z),(c,ds);
+ ideal i = xy,xz,yz;
+ module T = T_1(i);
+ ==> // dim T_1 = 3
+ vdim(T); // Tjurina number = dim_K(T_1), should be 3
+ ==> 3
+ list L=T_1(i,"");
+ ==> // dim T_1 = 3
+ module kB = kbase(L[1]);
+ print(L[2]*kB); // basis of 1st order miniversal deformation
+ ==> 0,0,0,
+ ==> z,0,0,
+ ==> 0,y,z
+ show(L[2]); // presentation of normal bundle
+ ==> // module, 6 generator(s)
+ ==> [x]
+ ==> [y,z]
+ ==> [0,x,y]
+ ==> [0,z]
+ ==> [0,0,y]
+ ==> [0,0,z]
+ print(L[3]); // relations of i
+ ==> z, 0,
+ ==> -y,y,
+ ==> 0, -x
+ print(transpose(L[3])*L[2]); // should be 0 (mod i)
+ ==> xz,0, -xy,-yz,0, 0,
+ ==> 0, yz,0, yz, -xy,-xz
+ printlevel = p;
+
+
+File: sing.htm, Node: T_2, Next: T_12, Prev: T_1, Up: sing_lib
+
+D.5.8.16 T_2
+............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ T_2(id[,<any>]); id = ideal
+
+*Return:*
+ T_2(id): T_2-module of id . This is a std basis of a presentation
+ of the module of obstructions of R=P/id, if P is the basering. If
+ a second argument is present (of any type) return a list of 4
+ modules and 1 ideal:
+ [1]= T_2(id)
+ [2]= standard basis of id (ideal)
+ [3]= module of relations of id (=1st syzygy module of id)
+ [4]= presentation of syz/kos
+ [5]= relations of Hom_P([3]/kos,R), lifted to P
+ The list contains all non-easy objects which must be computed to
+ get T_2(id).
+
+*Display:*
+ k-dimension of T_2(id) if printlevel >= 0 (default)
+
+*Note:*
+ The most important information is probably vdim(T_2(id)). Use proc
+ miniversal to get equations of miniversal deformation.
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 32003,(x,y),(c,dp);
+ ideal j = x6-y4,x6y6,x2y4-x5y2;
+ module T = T_2(j);
+ ==> // dim T_2 = 6
+ vdim(T);
+ ==> 6
+ hilb(T);"";
+ ==> // 1 t^0
+ ==> // -1 t^2
+ ==> // -1 t^3
+ ==> // 1 t^5
+ ==>
+ ==> // 1 t^0
+ ==> // 2 t^1
+ ==> // 2 t^2
+ ==> // 1 t^3
+ ==> // dimension (affine) = 0
+ ==> // degree = 6
+ ==>
+ ring r1 = 0,(x,y,z),dp;
+ ideal id = xy,xz,yz;
+ list L = T_2(id,"");
+ ==> // dim T_2 = 0
+ vdim(L[1]); // vdim of T_2
+ ==> 0
+ print(L[3]); // syzygy module of id
+ ==> -z,-z,
+ ==> y, 0,
+ ==> 0, x
+ printlevel = p;
+
+
+File: sing.htm, Node: T_12, Next: tangentcone, Prev: T_2, Up: sing_lib
+
+D.5.8.17 T_12
+.............
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ T_12(i[,any]); i = ideal
+
+*Return:*
+ T_12(i): list of 2 modules:
+ * standard basis of T_1-module =T_1(i), 1st order deformations
+ * standard basis of T_2-module =T_2(i), obstructions of R=P/i
+ If a second argument is present (of any type) return a list of 9
+ modules, matrices, integers:
+ [1]= standard basis of T_1-module
+ [2]= standard basis of T_2-module
+ [3]= vdim of T_1
+ [4]= vdim of T_2
+ [5]= matrix, whose cols present infinitesimal deformations
+ [6]= matrix, whose cols are generators of relations of i(=syz(i))
+ [7]= matrix, presenting Hom_P(syz/kos,R), lifted to P
+ [8]= presentation of T_1-module, no std basis
+ [9]= presentation of T_2-module, no std basis
+
+*Display:*
+ k-dimension of T_1 and T_2 if printlevel >= 0 (default)
+
+*Note:*
+ Use proc miniversal from deform.lib to get miniversal deformation
+ of i, the list contains all objects used by proc miniversal
+
+*Example:*
+ LIB "sing.lib";
+ int p = printlevel;
+ printlevel = 1;
+ ring r = 200,(x,y,z,u,v),(c,ws(4,3,2,3,4));
+ ideal i = xz-y2,yz2-xu,xv-yzu,yu-z3,z2u-yv,zv-u2;
+ //a cyclic quotient singularity
+ list L = T_12(i,1);
+ ==> // dim T_1 = 5
+ ==> // dim T_2 = 3
+ print(L[5]); //matrix of infin. deformations
+ ==> 0, 0, 0, 0, 0,
+ ==> yz, y, z2, 0, 0,
+ ==> -z3,-z2,-zu,yz, yu,
+ ==> -z2,-z, -u, 0, 0,
+ ==> zu, u, v, -z2,-zu,
+ ==> 0, 0, 0, u, v
+ printlevel = p;
+
+
+File: sing.htm, Node: tangentcone, Prev: T_12, Up: sing_lib
+
+D.5.8.18 tangentcone
+....................
+
+Procedure from library `sing.lib' (*note sing_lib::).
+
+*Usage:*
+ tangentcone(id [,n]); id = ideal, n = int
+
+*Return:*
+ the tangent cone of id
+
+*Note:*
+ the procedure works for any monomial ordering.
+ If n=0 use std w.r.t. local ordering ds, if n=1 use locstd
+
+*Example:*
+ LIB "sing.lib";
+ ring R = 0,(x,y,z),ds;
+ ideal i = 7xyz+z5,x2+y3+z7,5z5+y5;
+ tangentcone(i);
+ ==> _[1]=x2
+ ==> _[2]=7xyz
+ ==> _[3]=y5+5z5
+ ==> _[4]=7y4z
+ ==> _[5]=35z6
+
+
+File: sing.htm, Node: spcurve_lib, Next: spectrum_lib, Prev: sing_lib, Up:
Singularities
+
+D.5.9 spcurve_lib
+-----------------
+
+*Library:*
+ spcurve.lib
+
+*Purpose:*
+ Deformations and Invariants of CM-codim 2 Singularities
+
+*Author:*
+ Anne Fruehbis-Krueger, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* isCMcod2:: presentation matrix of the ideal i, if i is CM
+* CMtype:: Cohen-Macaulay type of the ideal i
+* matrixT1:: 1st order deformation T1 in matrix description
+* semiCMcod2:: semiuniversal deformation of maximal minors of M
+* discr:: discriminant of semiuniversal deformation
+* qhmatrix:: weights if M is quasihomogeneous
+* relweight:: relative matrix weight of N w.r.t. weights (W,a)
+* posweight:: deformation of coker(M) of non-negative weight
+* KSpencerKernel:: kernel of the Kodaira-Spencer map
+
+
+File: sing.htm, Node: isCMcod2, Next: CMtype, Up: spcurve_lib
+
+D.5.9.1 isCMcod2
+................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ isCMcod2(i); i an ideal
+
+*Return:*
+ presentation matrix of i, if i is Cohen-Macaulay of codimension 2
+ a zero matrix otherwise
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x,y,z),ds;
+ ideal i=xz,yz,x^3-y^4;
+ print(isCMcod2(i));
+ ==> -y,-x2,
+ ==> x, y3,
+ ==> 0, z
+
+
+File: sing.htm, Node: CMtype, Next: matrixT1, Prev: isCMcod2, Up:
spcurve_lib
+
+D.5.9.2 CMtype
+..............
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ CMtype(i); i an ideal, CM of codimension 2
+
+*Return:*
+ Cohen-Macaulay type of i (integer)
+ (-1, if i is not Cohen-Macaulay of codimension 2)
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x,y,z),ds;
+ ideal i=xy,xz,yz;
+ CMtype(i);
+ ==> 2
+
+
+File: sing.htm, Node: matrixT1, Next: semiCMcod2, Prev: CMtype, Up:
spcurve_lib
+
+D.5.9.3 matrixT1
+................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ matrixT1(M,n); M matrix, n integer
+
+*Assume:*
+ M is a presentation matrix of an ideal i, CM of codimension 2;
+ consider i as a family of ideals in a ring in the first n variables
+ where the remaining variables are considered as parameters
+
+*Return:*
+ list consisting of the k x (k+1) matrix M and a module K_M such
+ that T1=Mat(k,k+1;R)/K_M is the space of first order deformations
+ of i
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x(1),x(2),x(3)),ds;
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
+ matrix M=isCMcod2(curve);
+ matrixT1(M,3);
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[1,2]=-x(3)
+ ==> _[2,1]=-x(2)
+ ==> _[2,2]=x(2)
+ ==> _[3,1]=x(1)
+ ==> _[3,2]=0
+ ==> [2]:
+ ==> _[1]=gen(5)
+ ==> _[2]=gen(4)-gen(3)
+ ==> _[3]=-gen(2)
+ ==> _[4]=x(1)*gen(5)-x(2)*gen(3)
+ ==> _[5]=x(1)*gen(6)-x(2)*gen(4)
+ ==> _[6]=x(2)*gen(3)-x(3)*gen(1)
+ ==> _[7]=x(2)*gen(4)-x(3)*gen(2)
+ ==> _[8]=-x(3)*gen(2)
+ ==> _[9]=x(2)*gen(2)-x(2)*gen(1)
+ ==> _[10]=x(1)*gen(1)
+ ==> _[11]=-x(3)*gen(4)
+ ==> _[12]=x(2)*gen(4)-x(2)*gen(3)
+ ==> _[13]=x(1)*gen(3)
+ ==> _[14]=-x(3)*gen(6)
+ ==> _[15]=x(2)*gen(6)-x(2)*gen(5)
+ ==> _[16]=x(1)*gen(5)
+
+
+File: sing.htm, Node: semiCMcod2, Next: discr, Prev: matrixT1, Up:
spcurve_lib
+
+D.5.9.4 semiCMcod2
+..................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ semiCMcod2(M,t1); M matrix, t1 module
+
+*Assume:*
+ M is a presentation matrix of an ideal i, CM of codimension 2, and
+ t1 is a presentation of the space of first order deformations of i
+ ((M,t1) as returned by the procedure matrixT1)
+
+*Create:*
+ new basering with name rneu
+
+*Return:*
+ ideal in rneu describing the semiuniversal deformation of i
+
+*Note:*
+ The current basering should not contain any variables named A(j)
+ where j is some integer!
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x(1),x(2),x(3)),ds;
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
+ matrix M=isCMcod2(curve);
+ list l=matrixT1(M,3);
+ semiCMcod2(l[1],std(l[2]));
+ ==> _[1]=A(2)*A(3)-x(2)*A(3)-x(1)*x(2)
+ ==> _[2]=A(1)*A(3)+x(1)*x(3)
+ ==> _[3]=-x(2)*A(1)-x(3)*A(2)+x(2)*x(3)
+
+
+File: sing.htm, Node: discr, Next: qhmatrix, Prev: semiCMcod2, Up:
spcurve_lib
+
+D.5.9.5 discr
+.............
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ discr(sem,n); sem ideal, n integer
+
+*Assume:*
+ sem is the versal deformation of an ideal of codimension 2.
+ the first n variables of the ring are treated as variables all the
+ others as parameters
+
+*Return:*
+ ideal describing the discriminant
+
+*Note:*
+ This is not a powerful algorithm!
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x(1),x(2),x(3)),ds;
+ ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
+ matrix M=isCMcod2(curve);
+ list l=matrixT1(M,3);
+ def sem=semiCMcod2(l[1],std(l[2]));
+ basering;
+ ==> // characteristic : 32003
+ ==> // number of vars : 6
+ ==> // block 1 : ordering ds
+ ==> // : names x(1) x(2) x(3)
+ ==> // block 2 : ordering dp
+ ==> // : names A(1) A(2) A(3)
+ ==> // block 3 : ordering C
+ discr(sem,3);
+ ==> _[1]=A(1)*A(2)*A(3)
+
+
+File: sing.htm, Node: qhmatrix, Next: relweight, Prev: discr, Up:
spcurve_lib
+
+D.5.9.6 qhmatrix
+................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ qhmatrix(M); M a k x (k+1) matrix
+
+*Return:*
+ list, consisting of an integer vector containing the weights of the
+ variables of the basering and an integer matrix giving the weights
+ of the entries of M, if M is quasihomogeneous; zero integer vector
+ and zero integer matrix, if M is not quasihomogeneous, i.e. does
+ not allow row and column weights
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=0,(x,y,z),ds;
+ matrix M[3][2]=z,0,y,x,x^3,y;
+ qhmatrix(M);
+ ==> [1]:
+ ==> 1,2,1
+ ==> [2]:
+ ==> 1,0,
+ ==> 2,1,
+ ==> 3,2
+ pmat(M);
+ ==> z, 0,
+ ==> y, x,
+ ==> x3, y
+
+
+File: sing.htm, Node: relweight, Next: posweight, Prev: qhmatrix, Up:
spcurve_lib
+
+D.5.9.7 relweight
+.................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Assume:*
+ N is a non-zero matrix
+ W is an integer matrix of the same size as N
+ a is an integer vector giving the weights of the variables
+
+*Return:*
+ integer, max(a-weighted order(N_ij) - W_ij | all entries ij)
+ string "ERROR" if sizes do not match
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x,y,z),ds;
+ matrix N[2][3]=z,0,y,x,x^3,y;
+ intmat W[2][3]=1,1,1,1,1,1;
+ intvec a=1,1,1;
+ relweight(N,W,a);
+ ==> 2
+
+
+File: sing.htm, Node: posweight, Next: KSpencerKernel, Prev: relweight,
Up: spcurve_lib
+
+D.5.9.8 posweight
+.................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ posweight(M,t1,n[,s]); M matrix, t1 module, n int, s string
+ n=0 : all deformations of non-negative weight
+ n=1 : only non-constant deformations of non-negative weight
+ n=2 : all deformations of positive weight
+ As an optional parameter the name of a new ring may be specified.
+
+*Assume:*
+ M is a presentation matrix of a Cohen-Macaulay codimension 2 ideal
+ and t1 is its T1 space in matrix notation
+
+*Create:*
+ new basering (default name: rneu); a different name for this ring
+ may be given as a 4th parameter
+
+*Return:*
+ list, consisting of a presentation matrix describing the
+ deformation given by the generators of T1 of non-negative/positive
+ weight and the weight vector for the new variables
+
+*Note:*
+ The current basering should not contain any variables named T(i)
+ where i is some integer!
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=32003,(x(1),x(2),x(3)),ds;
+ ideal curve=(x(3)-x(1)^2)*x(3),(x(3)-x(1)^2)*x(2),x(2)^2-x(1)^7*x(3);
+ matrix M=isCMcod2(curve);
+ list l=matrixT1(M,3);
+ list li=posweight(l[1],std(l[2]),0);
+ pmat(li[1]);
+ ==> T(2)+x(1)*T(1), -x(3)+x(1)^2,
+ ==> -x(3), x(2),
+ ==> x(2), -x(1)^7
+ li[2];
+ ==> 3,1
+
+
+File: sing.htm, Node: KSpencerKernel, Prev: posweight, Up: spcurve_lib
+
+D.5.9.9 KSpencerKernel
+......................
+
+Procedure from library `spcurve.lib' (*note spcurve_lib::).
+
+*Usage:*
+ KSpencerKernel(M[,s][,v]); M matrix, s string, v intvec
+ optional parameters (please specify in this order, if both are
+ present):
+ * s = first of the names of the new rings
+ e.g. "R" leads to ring names R and R1
+ * v of size n(n+1) leads to the following module ordering
+ gen(v[1]) > gen(v[2]) > ... > gen(v[n(n+1)]) where the matrix entry
+ ij corresponds to gen((i-1)*n+j)
+
+*Assume:*
+ M is a quasihomogeneous n x (n+1) matrix where the n minors define
+ an isolated space curve singularity
+
+*Create:*
+ 2 new rings (default names: rneu and reneu)
+ different ring names may be specified as a 2nd parameter
+
+*Return:*
+ coefficient matrix representing the kernel of the Kodaira- Spencer
+ map of the family of non-negative deformations having the given
+ singularity as special fibre
+
+*Note:*
+ * the initial basering should not contain variables with name e(i)
+ or T(i), since those variable names will internally be used by the
+ script
+ * setting an intvec with 5 entries and name watchProgress shows the
+ progress of the computations:
+ watchProgress[1]>0 => option(prot) in groebner commands
+ watchProgress[2]>0 => trace output for highcorner
+ watchProgress[3]>0 => output of deformed matrix
+ watchProgress[4]>0 => result of elimination step
+ watchProgress[4]>1 => trace output of multiplications with xyz and
+ subsequent reductions
+ watchProgress[5]>0 => matrix representing the kernel using print
+
+*Example:*
+ LIB "spcurve.lib";
+ ring r=0,(x,y,z),ds;
+ matrix M[3][2]=z-x^7,0,y^2,z,x^9,y;
+ def KS=KSpencerKernel(M,"ar");
+ print(KS);
+ ==> T(7), 0, 0, 0, 0, 0, 0, 0,
+ ==> KS[2,1],6*T(3), 3*T(7), 0, 0, 0, 0, 0,
+ ==> KS[3,1],KS[3,2],KS[3,3],6*T(3),3*T(7),0, 0, 0,
+ ==> 10*T(4),8*T(1), 7*T(5), 5*T(2),4*T(6),2*T(8),2*T(3),T(7)
+ nameof(basering);
+ ==> ar
+ basering;
+ ==> // characteristic : 0
+ ==> // number of vars : 17
+ ==> // block 1 : ordering Ws
+ ==> // : names e(1) e(2) e(3) e(4) e(5) e(6) x y z
+ ==> // : weights -21 -10 -32 -21 -27 -16 3 16 21
+ ==> // block 2 : ordering wp
+ ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
T(8)
+ ==> // : weights 8 5 2 10 7 4 1
2
+ ==> // block 3 : ordering C
+
+
+File: sing.htm, Node: spectrum_lib, Prev: spcurve_lib, Up: Singularities
+
+D.5.10 spectrum_lib
+-------------------
+
+*Library:*
+ spectrum.lib
+
+*Purpose:*
+ Singularity Spectrum for Nondegenerate Singularities
+
+*Author:*
+ S. Endrass
+
+*Procedures:*
+
+* Menu:
+
+* spectrumnd:: spectrum of nondegenerate isolated singularity f
+
+
+File: sing.htm, Node: spectrumnd, Up: spectrum_lib
+
+D.5.10.1 spectrumnd
+...................
+
+Procedure from library `spectrum.lib' (*note spectrum_lib::).
+
+*Usage:*
+ spectrumnd(f[,1]); poly f
+
+*Assume:*
+ basering has characteristic 0 and local ordering,
+ f has isolated singularity at 0 and nondegenerate principal part
+
+*Return:*
+
+ list S:
+ ideal S[1]: spectral numbers in increasing order
+ intvec S[2]:
+ int S[2][i]: multiplicity of spectral number S[1][i]
+
+*Note:*
+ if a second argument 1 is given,
+ no test for a degenerate principal part will be done
+ SEE_ALSO: gaussman_lib
+
+*Example:*
+ LIB "spectrum.lib";
+ ring R=0,(x,y),ds;
+ poly f=x^31+x^6*y^7+x^2*y^12+x^13*y^2+y^29;
+ spectrumnd(f);
+ ==> [1]:
+ ==> _[1]=-67/79
+ ==> _[2]=-62/79
+ ==> _[3]=-45/58
+ ==> _[4]=-57/79
+ ==> _[5]=-41/58
+ ==> _[6]=-55/79
+ ==> _[7]=-52/79
+ ==> _[8]=-37/58
+ ==> _[9]=-50/79
+ ==> _[10]=-18/29
+ ==> _[11]=-47/79
+ ==> _[12]=-45/79
+ ==> _[13]=-33/58
+ ==> _[14]=-16/29
+ ==> _[15]=-43/79
+ ==> _[16]=-42/79
+ ==> _[17]=-40/79
+ ==> _[18]=-1/2
+ ==> _[19]=-15/31
+ ==> _[20]=-14/29
+ ==> _[21]=-38/79
+ ==> _[22]=-27/58
+ ==> _[23]=-14/31
+ ==> _[24]=-35/79
+ ==> _[25]=-25/58
+ ==> _[26]=-13/31
+ ==> _[27]=-33/79
+ ==> _[28]=-12/29
+ ==> _[29]=-23/58
+ ==> _[30]=-31/79
+ ==> _[31]=-12/31
+ ==> _[32]=-30/79
+ ==> _[33]=-21/58
+ ==> _[34]=-11/31
+ ==> _[35]=-28/79
+ ==> _[36]=-10/29
+ ==> _[37]=-26/79
+ ==> _[38]=-19/58
+ ==> _[39]=-10/31
+ ==> _[40]=-25/79
+ ==> _[41]=-9/29
+ ==> _[42]=-17/58
+ ==> _[43]=-23/79
+ ==> _[44]=-9/31
+ ==> _[45]=-8/29
+ ==> _[46]=-21/79
+ ==> _[47]=-15/58
+ ==> _[48]=-8/31
+ ==> _[49]=-20/79
+ ==> _[50]=-7/29
+ ==> _[51]=-19/79
+ ==> _[52]=-18/79
+ ==> _[53]=-7/31
+ ==> _[54]=-13/58
+ ==> _[55]=-6/29
+ ==> _[56]=-16/79
+ ==> _[57]=-6/31
+ ==> _[58]=-15/79
+ ==> _[59]=-11/58
+ ==> _[60]=-14/79
+ ==> _[61]=-5/29
+ ==> _[62]=-13/79
+ ==> _[63]=-5/31
+ ==> _[64]=-9/58
+ ==> _[65]=-11/79
+ ==> _[66]=-4/29
+ ==> _[67]=-4/31
+ ==> _[68]=-10/79
+ ==> _[69]=-7/58
+ ==> _[70]=-9/79
+ ==> _[71]=-3/29
+ ==> _[72]=-8/79
+ ==> _[73]=-3/31
+ ==> _[74]=-7/79
+ ==> _[75]=-5/58
+ ==> _[76]=-6/79
+ ==> _[77]=-2/29
+ ==> _[78]=-2/31
+ ==> _[79]=-5/79
+ ==> _[80]=-3/58
+ ==> _[81]=-4/79
+ ==> _[82]=-3/79
+ ==> _[83]=-1/29
+ ==> _[84]=-1/31
+ ==> _[85]=-2/79
+ ==> _[86]=-1/58
+ ==> _[87]=-1/79
+ ==> _[88]=0
+ ==> _[89]=1/79
+ ==> _[90]=1/58
+ ==> _[91]=2/79
+ ==> _[92]=1/31
+ ==> _[93]=1/29
+ ==> _[94]=3/79
+ ==> _[95]=4/79
+ ==> _[96]=3/58
+ ==> _[97]=5/79
+ ==> _[98]=2/31
+ ==> _[99]=2/29
+ ==> _[100]=6/79
+ ==> _[101]=5/58
+ ==> _[102]=7/79
+ ==> _[103]=3/31
+ ==> _[104]=8/79
+ ==> _[105]=3/29
+ ==> _[106]=9/79
+ ==> _[107]=7/58
+ ==> _[108]=10/79
+ ==> _[109]=4/31
+ ==> _[110]=4/29
+ ==> _[111]=11/79
+ ==> _[112]=9/58
+ ==> _[113]=5/31
+ ==> _[114]=13/79
+ ==> _[115]=5/29
+ ==> _[116]=14/79
+ ==> _[117]=11/58
+ ==> _[118]=15/79
+ ==> _[119]=6/31
+ ==> _[120]=16/79
+ ==> _[121]=6/29
+ ==> _[122]=13/58
+ ==> _[123]=7/31
+ ==> _[124]=18/79
+ ==> _[125]=19/79
+ ==> _[126]=7/29
+ ==> _[127]=20/79
+ ==> _[128]=8/31
+ ==> _[129]=15/58
+ ==> _[130]=21/79
+ ==> _[131]=8/29
+ ==> _[132]=9/31
+ ==> _[133]=23/79
+ ==> _[134]=17/58
+ ==> _[135]=9/29
+ ==> _[136]=25/79
+ ==> _[137]=10/31
+ ==> _[138]=19/58
+ ==> _[139]=26/79
+ ==> _[140]=10/29
+ ==> _[141]=28/79
+ ==> _[142]=11/31
+ ==> _[143]=21/58
+ ==> _[144]=30/79
+ ==> _[145]=12/31
+ ==> _[146]=31/79
+ ==> _[147]=23/58
+ ==> _[148]=12/29
+ ==> _[149]=33/79
+ ==> _[150]=13/31
+ ==> _[151]=25/58
+ ==> _[152]=35/79
+ ==> _[153]=14/31
+ ==> _[154]=27/58
+ ==> _[155]=38/79
+ ==> _[156]=14/29
+ ==> _[157]=15/31
+ ==> _[158]=1/2
+ ==> _[159]=40/79
+ ==> _[160]=42/79
+ ==> _[161]=43/79
+ ==> _[162]=16/29
+ ==> _[163]=33/58
+ ==> _[164]=45/79
+ ==> _[165]=47/79
+ ==> _[166]=18/29
+ ==> _[167]=50/79
+ ==> _[168]=37/58
+ ==> _[169]=52/79
+ ==> _[170]=55/79
+ ==> _[171]=41/58
+ ==> _[172]=57/79
+ ==> _[173]=45/58
+ ==> _[174]=62/79
+ ==> _[175]=67/79
+ ==> [2]:
+ ==>
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,\
+
1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1\
+
,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,4,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,\
+
1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1\
+ ,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+
+
+File: sing.htm, Node: Invariant theory, Next: Symbolic-numerical solving,
Prev: Singularities, Up: SINGULAR libraries
+
+D.6 Invariant theory
+====================
+
+* Menu:
+
+* finvar_lib:: procedures to compute invariant rings of finite groups
+* ainvar_lib:: procedures to compute invariants rings of the additive group
+* rinvar_lib:: procedures to compute invariants ring of reductive groups
+* stratify_lib:: algorithmic stratification by the Greuel-Pfister algorithm
+
+
+File: sing.htm, Node: finvar_lib, Next: ainvar_lib, Prev: Invariant theory,
Up: Invariant theory
+
+D.6.1 finvar_lib
+----------------
+
+*Library:*
+ finvar.lib
+
+*Purpose:*
+ Invariant Rings of Finite Groups
+
+*Author:*
+ Agnes E. Heydtmann, email: address@hidden
+
+*Overview:*
+ A library for computing polynomial invariants of finite matrix
+ groups and generators of related varieties. The algorithms are
+ based on B. Sturmfels, G. Kemper and W. Decker et al..
+
+*Main procedures:*
+
+* Menu:
+
+* invariant_ring:: generators of the invariant ring (i.r.)
+* invariant_ring_random:: generators of the i.r., randomized alg.
+* primary_invariants:: primary invariants (p.i.)
+* primary_invariants_random:: primary invariants, randomized alg.
+
+*Auxiliary procedures:*
+
+* Menu:
+
+* cyclotomic:: cyclotomic polynomial
+* group_reynolds:: finite group and Reynolds operator (R.o.)
+* molien:: Molien series (M.s.)
+* reynolds_molien:: Reynolds operator and Molien series
+* partial_molien:: partial expansion of Molien series
+* evaluate_reynolds:: image under the Reynolds operator
+* invariant_basis:: basis of homogeneous invariants of a degree
+* invariant_basis_reynolds:: as invariant_basis(), with R.o.
+* primary_char0:: primary invariants in char 0
+* primary_charp:: primary invariant in char p
+* primary_char0_no_molien:: p.i., char 0, without Molien series
+* primary_charp_no_molien:: p.i., char p, without Molien series
+* primary_charp_without:: p.i., char p, without R.o. or Molien series
+* primary_char0_random:: primary invariants in char 0, randomized
+* primary_charp_random:: primary invariants in char p, randomized
+* primary_char0_no_molien_random:: p.i., char 0, without M.s., randomized
+* primary_charp_no_molien_random:: p.i., char p, without M.s., randomized
+* primary_charp_without_random:: p.i., char p, without R.o. or M.s., random.
+* power_products:: exponents for power products
+* secondary_char0:: secondary (s.i.) invariants in char 0
+* secondary_charp:: secondary invariants in char p
+* secondary_no_molien:: secondary invariants, without Molien series
+* secondary_and_irreducibles_no_molien:: s.i. & irreducible s.i., without M.s.
+* secondary_not_cohen_macaulay:: s.i. when invariant ring not Cohen-Macaulay
+* orbit_variety:: ideal of the orbit variety
+* relative_orbit_variety:: ideal of a relative orbit variety
+* image_of_variety:: ideal of the image of a variety
+
+
+File: sing.htm, Node: invariant_ring, Next: invariant_ring_random, Up:
finvar_lib
+
+D.6.1.1 invariant_ring
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ invariant_ring(G1,G2,...[,flags]);
+ G1,G2,...: <matrices> generating a finite matrix group, flags: an
+ optional <intvec> with three entries: if the first one equals 0,
+ the program attempts to compute the Molien series and Reynolds
+ operator, if it equals 1, the program is told that the Molien
+ series should not be computed, if it equals -1 characteristic 0 is
+ simulated, i.e. the Molien series is computed as if the base field
+ were characteristic 0 (the user must choose a field of large prime
+ characteristic, e.g. 32003) and if the first one is anything else,
+ it means that the characteristic of the base field divides the
+ group order (i.e. it will not even be attempted to compute the
+ Reynolds operator or Molien series), the second component should
+ give the size of intervals between canceling common factors in the
+ expansion of Molien series, 0 (the default) means only once after
+ generating all terms, in prime characteristic also a negative
+ number can be given to indicate that common factors should always
+ be canceled when the expansion is simple (the root of the extension
+ field occurs not among the coefficients)
+
+*Return:*
+ primary and secondary invariants (both of type <matrix>) generating
+ the invariant ring with respect to the matrix group generated by
+ the matrices in the input and irreducible secondary invariants
+ (type <matrix>) if the Molien series was available
+
+*Display:*
+ information about the various stages of the program if the third
+ flag does not equal 0
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)). In the
+ non-modular case secondary invariants are calculated by finding a
+ basis (in terms of monomials) of the basering modulo the primary
+ invariants, mapping to invariants with the Reynolds operator and
+ using those or their power products such that they are linearly
+ independent modulo the primary invariants (see "Some Algorithms in
+ Invariant Theory of Finite Groups" by Kemper and Steel (1997)). In
+ the modular case they are generated according to "Generating
+ Invariant Rings of Finite Groups over Arbitrary Fields" by Kemper
+ (1996).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix P,S,IS=invariant_ring(A);
+ print(P);
+ ==> z2,x2+y2,x2y2
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(IS);
+ ==> xyz,x2z-y2z,x3y-xy3
+
+
+File: sing.htm, Node: invariant_ring_random, Next: primary_invariants,
Prev: invariant_ring, Up: finvar_lib
+
+D.6.1.2 invariant_ring_random
+.............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ invariant_ring_random(G1,G2,...,r[,flags]);
+ G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
+ where -|r| to |r| is the range of coefficients of random
+ combinations of bases elements that serve as primary invariants,
+ flags: an optional <intvec> with three entries: if the first equals
+ 0, the program attempts to compute the Molien series and Reynolds
+ operator, if it equals 1, the program is told that the Molien
+ series should not be computed, if it equals -1 characteristic 0 is
+ simulated, i.e. the Molien series is computed as if the base field
+ were characteristic 0 (the user must choose a field of large prime
+ characteristic, e.g. 32003) and if the first one is anything else,
+ then the characteristic of the base field divides the group order
+ (i.e. we will not even attempt to compute the Reynolds operator or
+ Molien series), the second component should give the size of
+ intervals between canceling common factors in the expansion of the
+ Molien series, 0 (the default) means only once after generating all
+ terms, in prime characteristic also a negative number can be given
+ to indicate that common factors should always be canceled when the
+ expansion is simple (the root of the extension field does not occur
+ among the coefficients)
+
+*Return:*
+ primary and secondary invariants (both of type <matrix>) generating
+ invariant ring with respect to the matrix group generated by the
+ matrices in the input and irreducible secondary invariants (type
+ <matrix>) if the Molien series was available
+
+*Display:*
+ information about the various stages of the program if the third
+ flag does not equal 0
+
+*Theory:*
+ is the same as for invariant_ring except that random combinations
+ of basis elements are chosen as candidates for primary invariants
+ and hopefully they lower the dimension of the previously found
+ primary invariants by the right amount.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix P,S,IS=invariant_ring_random(A,1);
+ print(P);
+ ==> z2,x2+y2,x4+y4-z4
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(IS);
+ ==> xyz,x2z-y2z,x3y-xy3
+
+
+File: sing.htm, Node: primary_invariants, Next: primary_invariants_random,
Prev: invariant_ring_random, Up: finvar_lib
+
+D.6.1.3 primary_invariants
+..........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_invariants(G1,G2,...[,flags]);
+ G1,G2,...: <matrices> generating a finite matrix group, flags: an
+ optional <intvec> with three entries, if the first one equals 0
+ (also the default), the program attempts to compute the Molien
+ series and Reynolds operator, if it equals 1, the program is told
+ that the Molien series should not be computed, if it equals -1
+ characteristic 0 is simulated, i.e. the Molien series is computed
+ as if the base field were characteristic 0 (the user must choose a
+ field of large prime characteristic, e.g. 32003) and if the first
+ one is anything else, it means that the characteristic of the base
+ field divides the group order, the second component should give the
+ size of intervals between canceling common factors in the expansion
+ of the Molien series, 0 (the default) means only once after
+ generating all terms, in prime characteristic also a negative
+ number can be given to indicate that common factors should always
+ be canceled when the expansion is simple (the root of the extension
+ field occurs not among the coefficients)
+
+*Display:*
+ information about the various stages of the program if the third
+ flag does not equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and if
+ computable Reynolds operator (type <matrix>) and Molien series
+ (type <matrix>) or ring name (type string) where the Molien series
+ can be found in the char p case; if the first flag is 1 and we are
+ in the non-modular case then an <intvec> is returned giving some of
+ the degrees where no non-trivial homogeneous invariants can be
+ found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A);
+ print(L[1]);
+ ==> z2,x2+y2,x2y2
+
+
+File: sing.htm, Node: primary_invariants_random, Next: cyclotomic, Prev:
primary_invariants, Up: finvar_lib
+
+D.6.1.4 primary_invariants_random
+.................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_invariants_random(G1,G2,...,r[,flags]);
+ G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
+ where -|r| to |r| is the range of coefficients of the random
+ combinations of bases elements, flags: an optional <intvec> with
+ three entries, if the first one equals 0 (also the default), the
+ program attempts to compute the Molien series and Reynolds
+ operator, if it equals 1, the program is told that the Molien
+ series should not be computed, if it equals -1 characteristic 0 is
+ simulated, i.e. the Molien series is computed as if the base field
+ were characteristic 0 (the user must choose a field of large prime
+ characteristic, e.g. 32003) and if the first one is anything else,
+ it means that the characteristic of the base field divides the
+ group order, the second component should give the size of intervals
+ between canceling common factors in the expansion of the Molien
+ series, 0 (the default) means only once after generating all terms,
+ in prime characteristic also a negative number can be given to
+ indicate that common factors should always be canceled when the
+ expansion is simple (the root of the extension field does not occur
+ among the coefficients)
+
+*Display:*
+ information about the various stages of the program if the third
+ flag does not equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and if
+ computable Reynolds operator (type <matrix>) and Molien series
+ (type <matrix>), if the first flag is 1 and we are in the
+ non-modular case then an <intvec> is returned giving some of the
+ degrees where no non-trivial homogeneous invariants can be found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants_random(A,1);
+ print(L[1]);
+ ==> z2,x2+y2,x4+y4-z4
+
+
+File: sing.htm, Node: cyclotomic, Next: group_reynolds, Prev:
primary_invariants_random, Up: finvar_lib
+
+D.6.1.5 cyclotomic
+..................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ cyclotomic(i); i integer > 0
+
+*Returns:*
+ the i-th cyclotomic polynomial (type <poly>) as one in the first
+ ring variable
+
+*Theory:*
+ x^i-1 is divided by the j-th cyclotomic polynomial where j takes on
+ the value of proper divisors of i
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ print(cyclotomic(25));
+ ==> x20+x15+x10+x5+1
+
+
+File: sing.htm, Node: group_reynolds, Next: molien, Prev: cyclotomic, Up:
finvar_lib
+
+D.6.1.6 group_reynolds
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ group_reynolds(G1,G2,...[,v]);
+ G1,G2,...: nxn <matrices> generating a finite matrix group, v: an
+ optional <int>
+
+*Assume:*
+ n is the number of variables of the basering, g the number of group
+ elements
+
+*Return:*
+ a <list>, the first list element will be a gxn <matrix>
+ representing the Reynolds operator if we are in the non-modular
+ case; if the characteristic is >0, minpoly==0 and the finite group
+ non-cyclic the second list element is an <int> giving the lowest
+ common multiple of the matrix group elements' order (used in
+ molien); in general all other list elements are nxn <matrices>
+ listing all elements of the finite group
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ The entire matrix group is generated by getting all left products
+ of generators with the new elements from the last run through the
+ loop (or the generators themselves during the first run). All the
+ ones that have been generated before are thrown out and the program
+ terminates when no new elements found in one run. Additionally each
+ time a new group element is found the corresponding ring mapping of
+ which the Reynolds operator is made up is generated. They are
+ stored in the rows of the first return value.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ print(L[1]);
+ ==> y, -x,-z,
+ ==> -x,-y,z,
+ ==> -y,x, -z,
+ ==> x, y, z
+ print(L[2..size(L)]);
+ ==> 0, 1,0,
+ ==> -1,0,0,
+ ==> 0, 0,-1
+ ==> -1,0, 0,
+ ==> 0, -1,0,
+ ==> 0, 0, 1
+ ==> 0,-1,0,
+ ==> 1,0, 0,
+ ==> 0,0, -1
+ ==> 1,0,0,
+ ==> 0,1,0,
+ ==> 0,0,1
+
+
+File: sing.htm, Node: molien, Next: reynolds_molien, Prev: group_reynolds,
Up: finvar_lib
+
+D.6.1.7 molien
+..............
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ molien(G1,G2,...[,ringname,lcm,flags]);
+ G1,G2,...: nxn <matrices>, all elements of a finite matrix group,
+ ringname: a <string> giving a name for a new ring of characteristic
+ 0 for the Molien series in case of prime characteristic, lcm: an
+ <int> giving the lowest common multiple of the elements' orders in
+ case of prime characteristic, minpoly==0 and a non-cyclic group,
+ flags: an optional <intvec> with three components: if the first
+ element is not equal to 0 characteristic 0 is simulated, i.e. the
+ Molien series is computed as if the base field were characteristic
+ 0 (the user must choose a field of large prime characteristic, e.g.
+ 32003), the second component should give the size of intervals
+ between canceling common factors in the expansion of the Molien
+ series, 0 (the default) means only once after generating all terms,
+ in prime characteristic also a negative number can be given to
+ indicate that common factors should always be canceled when the
+ expansion is simple (the root of the extension field does not occur
+ among the coefficients)
+
+*Assume:*
+ n is the number of variables of the basering, G1,G2... are the
+ group elements generated by group_reynolds(), lcm is the second
+ return value of group_reynolds()
+
+*Return:*
+ in case of characteristic 0 a 1x2 <matrix> giving enumerator and
+ denominator of Molien series; in case of prime characteristic a
+ ring with the name `ringname` of characteristic 0 is created where
+ the same Molien series (named M) is stored
+
+*Display:*
+ information if the third component of flags does not equal 0
+
+*Theory:*
+ In characteristic 0 the terms 1/det(1-xE) for all group elements of
+ the Molien series are computed in a straight forward way. In prime
+ characteristic a Brauer lift is involved. The returned matrix gives
+ enumerator and denominator of the expanded version where common
+ factors have been canceled.
+
+*Example:*
+ LIB "finvar.lib";
+ " note the case of prime characteristic";
+ ==> note the case of prime characteristic
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ matrix M=molien(L[2..size(L)]);
+ print(M);
+ ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
+ ring S=3,(x,y,z),dp;
+ string newring="alksdfjlaskdjf";
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ molien(L[2..size(L)],newring);
+ setring alksdfjlaskdjf;
+ print(M);
+ ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
+ setring S;
+ kill alksdfjlaskdjf;
+
+
+File: sing.htm, Node: reynolds_molien, Next: partial_molien, Prev: molien,
Up: finvar_lib
+
+D.6.1.8 reynolds_molien
+.......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ reynolds_molien(G1,G2,...[,ringname,flags]);
+ G1,G2,...: nxn <matrices> generating a finite matrix group,
+ ringname: a <string> giving a name for a new ring of characteristic
+ 0 for the Molien series in case of prime characteristic, flags: an
+ optional <intvec> with three components: if the first element is
+ not equal to 0 characteristic 0 is simulated, i.e. the Molien
+ series is computed as if the base field were characteristic 0 (the
+ user must choose a field of large prime characteristic, e.g. 32003)
+ the second component should give the size of intervals between
+ canceling common factors in the expansion of the Molien series, 0
+ (the default) means only once after generating all terms, in prime
+ characteristic also a negative number can be given to indicate that
+ common factors should always be canceled when the expansion is
+ simple (the root of the extension field does not occur among the
+ coefficients)
+
+*Assume:*
+ n is the number of variables of the basering, G1,G2... are the
+ group elements generated by group_reynolds(), g is the size of the
+ group
+
+*Return:*
+ a gxn <matrix> representing the Reynolds operator is the first
+ return value and in case of characteristic 0 a 1x2 <matrix> giving
+ enumerator and denominator of Molien series is the second one; in
+ case of prime characteristic a ring with the name `ringname` of
+ characteristic 0 is created where the same Molien series (named M)
+ is stored
+
+*Display:*
+ information if the third component of flags does not equal 0
+
+*Theory:*
+ The entire matrix group is generated by getting all left products
+ of the generators with new elements from the last run through the
+ loop (or the generators themselves during the first run). All the
+ ones that have been generated before are thrown out and the program
+ terminates when are no new elements found in one run. Additionally
+ each time a new group element is found the corresponding ring
+ mapping of which the Reynolds operator is made up is generated.
+ They are stored in the rows of the first return value. In
+ characteristic 0 the terms 1/det(1-xE) is computed whenever a new
+ element E is found. In prime characteristic a Brauer lift is
+ involved and the terms are only computed after the entire matrix
+ group is generated (to avoid the modular case). The returned matrix
+ gives enumerator and denominator of the expanded version where
+ common factors have been canceled.
+
+*Example:*
+ LIB "finvar.lib";
+ " note the case of prime characteristic";
+ ==> note the case of prime characteristic
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix REY,M=reynolds_molien(A);
+ print(REY);
+ ==> y, -x,-z,
+ ==> -x,-y,z,
+ ==> -y,x, -z,
+ ==> x, y, z
+ print(M);
+ ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
+ ring S=3,(x,y,z),dp;
+ string newring="Qadjoint";
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix REY=reynolds_molien(A,newring);
+ print(REY);
+ ==> y, -x,-z,
+ ==> -x,-y,z,
+ ==> -y,x, -z,
+ ==> x, y, z
+ setring Qadjoint;
+ print(M);
+ ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
+ setring S;
+ kill Qadjoint;
+
+
+File: sing.htm, Node: partial_molien, Next: evaluate_reynolds, Prev:
reynolds_molien, Up: finvar_lib
+
+D.6.1.9 partial_molien
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ partial_molien(M,n[,p]);
+ M: a 1x2 <matrix>, n: an <int> indicating number of terms in the
+ expansion, p: an optional <poly>
+
+*Assume:*
+ M is the return value of molien or the second return value of
+ reynolds_molien, p ought to be the second return value of a
+ previous run of partial_molien and avoids recalculating known terms
+
+*Return:*
+ n terms (type <poly>) of the partial expansion of the Molien series
+ (first n if there is no third parameter given, otherwise the next n
+ terms depending on a previous calculation) and an intermediate
+ result (type <poly>) of the calculation to be used as third
+ parameter in a next run of partial_molien
+
+*Theory:*
+ The following calculation is implemented:
+
+ (1+a1x+a2x^2+...+anx^n)/(1+b1x+b2x^2+...+bmx^m)=(1+(a1-b1)x+...
+ (1+b1x+b2x^2+...+bmx^m)
+ ---------------
+ (a1-b1)x+(a2-b2)x^2+...
+ (a1-b1)x+b1(a1-b1)x^2+...
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix REY,M=reynolds_molien(A);
+ poly p(1..2);
+ p(1..2)=partial_molien(M,5);
+ p(1);
+ ==> 4x5+5x4+2x3+2x2+1
+ p(1..2)=partial_molien(M,5,p(2));
+ p(1);
+ ==> 18x10+12x9+13x8+8x7+8x6
+
+
+File: sing.htm, Node: evaluate_reynolds, Next: invariant_basis, Prev:
partial_molien, Up: finvar_lib
+
+D.6.1.10 evaluate_reynolds
+..........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ evaluate_reynolds(REY,I);
+ REY: a <matrix> representing the Reynolds operator, I: an arbitrary
+ <ideal>
+
+*Assume:*
+ REY is the first return value of group_reynolds() or
+ reynolds_molien()
+
+*Returns:*
+ image of the polynomials defining I under the Reynolds operator
+ (type <ideal>)
+
+*Note:*
+ the characteristic of the coefficient field of the polynomial ring
+ should not divide the order of the finite matrix group
+
+*Theory:*
+ REY has been constructed in such a way that each row serves as a
+ ring mapping of which the Reynolds operator is made up.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ ideal I=x2,y2,z2;
+ print(evaluate_reynolds(L[1],I));
+ ==> 1/2x2+1/2y2,
+ ==> 1/2x2+1/2y2,
+ ==> z2
+
+
+File: sing.htm, Node: invariant_basis, Next: invariant_basis_reynolds,
Prev: evaluate_reynolds, Up: finvar_lib
+
+D.6.1.11 invariant_basis
+........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ invariant_basis(g,G1,G2,...);
+ g: an <int> indicating of which degree (>0) the homogeneous basis
+ should be, G1,G2,...: <matrices> generating a finite matrix group
+
+*Returns:*
+ the basis (type <ideal>) of the space of invariants of degree g
+
+*Theory:*
+ A general polynomial of degree g is generated and the generators of
+ the matrix group applied. The difference ought to be 0 and this way
+ a system of linear equations is created. It is solved by computing
+ syzygies.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ print(invariant_basis(2,A));
+ ==> x2+y2,
+ ==> z2
+
+
+File: sing.htm, Node: invariant_basis_reynolds, Next: primary_char0, Prev:
invariant_basis, Up: finvar_lib
+
+D.6.1.12 invariant_basis_reynolds
+.................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ invariant_basis_reynolds(REY,d[,flags]);
+ REY: a <matrix> representing the Reynolds operator, d: an <int>
+ indicating of which degree (>0) the homogeneous basis should be,
+ flags: an optional <intvec> with two entries: its first component
+ gives the dimension of the space (default <0 meaning unknown) and
+ its second component is used as the number of polynomials that
+ should be mapped to invariants during one call of evaluate_reynolds
+ if the dimension of the space is unknown or the number such that
+ number x dimension polynomials are mapped to invariants during one
+ call of evaluate_reynolds
+
+*Assume:*
+ REY is the first return value of group_reynolds() or
+ reynolds_molien() and flags[1] given by partial_molien
+
+*Return:*
+ the basis (type <ideal>) of the space of invariants of degree d
+
+*Theory:*
+ Monomials of degree d are mapped to invariants with the Reynolds
+ operator. A linearly independent set is generated with the help of
+ minbase.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ intvec flags=0,1,0;
+ matrix REY,M=reynolds_molien(A,flags);
+ flags=8,6;
+ print(invariant_basis_reynolds(REY,6,flags));
+ ==> z6,
+ ==> x2z4+y2z4,
+ ==> x2y2z2,
+ ==> x3yz2-xy3z2,
+ ==> x4z2+y4z2,
+ ==> x4y2+x2y4,
+ ==> x5y-xy5,
+ ==> x6+y6
+
+
+File: sing.htm, Node: primary_char0, Next: primary_charp, Prev:
invariant_basis_reynolds, Up: finvar_lib
+
+D.6.1.13 primary_char0
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_char0(REY,M[,v]);
+ REY: a <matrix> representing the Reynolds operator, M: a 1x2
+ <matrix> representing the Molien series, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+ and M the one of molien or the second one of reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix REY,M=reynolds_molien(A);
+ matrix P=primary_char0(REY,M);
+ print(P);
+ ==> z2,x2+y2,x2y2
+
+
+File: sing.htm, Node: primary_charp, Next: primary_char0_no_molien, Prev:
primary_char0, Up: finvar_lib
+
+D.6.1.14 primary_charp
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp(REY,ringname[,v]);
+ REY: a <matrix> representing the Reynolds operator, ringname: a
+ <string> giving the name of a ring where the Molien series is
+ stored, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+ and ringname gives the name of a ring of characteristic 0 that has
+ been created by molien or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=3,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ string newring="alskdfj";
+ molien(L[2..size(L)],newring);
+ matrix P=primary_charp(L[1],newring);
+ if(system("with","Namespaces")) { kill Top::`newring`; }
+ kill `newring`;
+ print(P);
+ ==> z2,x2+y2,x2y2
+
+
+File: sing.htm, Node: primary_char0_no_molien, Next:
primary_charp_no_molien, Prev: primary_charp, Up: finvar_lib
+
+D.6.1.15 primary_char0_no_molien
+................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_char0_no_molien(REY[,v]);
+ REY: a <matrix> representing the Reynolds operator, v: an optional
+ <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and an
+ <intvec> listing some of the degrees where no non-trivial
+ homogeneous invariants are to be found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ list l=primary_char0_no_molien(L[1]);
+ print(l[1]);
+ ==> z2,x2+y2,x2y2
+
+
+File: sing.htm, Node: primary_charp_no_molien, Next: primary_charp_without,
Prev: primary_char0_no_molien, Up: finvar_lib
+
+D.6.1.16 primary_charp_no_molien
+................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp_no_molien(REY[,v]);
+ REY: a <matrix> representing the Reynolds operator, v: an optional
+ <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and an
+ <intvec> listing some of the degrees where no non-trivial
+ homogeneous invariants are to be found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=3,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ list l=primary_charp_no_molien(L[1]);
+ print(l[1]);
+ ==> z2,x2+y2,x2y2
+
+
+File: sing.htm, Node: primary_charp_without, Next: primary_char0_random,
Prev: primary_charp_no_molien, Up: finvar_lib
+
+D.6.1.17 primary_charp_without
+..............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp_without(G1,G2,...[,v]);
+ G1,G2,...: <matrices> generating a finite matrix group, v: an
+ optional <int>
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ those are chosen as primary invariants that lower the dimension of
+ the ideal generated by the previously found invariants (see paper
+ "Generating a Noetherian Normalization of the Invariant Ring of a
+ Finite Group" by Decker, Heydtmann, Schreyer (1998)). No Reynolds
+ operator or Molien series is used.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=2,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix P=primary_charp_without(A);
+ print(P);
+ ==> x+y,z,xy
+
+
+File: sing.htm, Node: primary_char0_random, Next: primary_charp_random,
Prev: primary_charp_without, Up: finvar_lib
+
+D.6.1.18 primary_char0_random
+.............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_char0_random(REY,M,r[,v]);
+ REY: a <matrix> representing the Reynolds operator, M: a 1x2
+ <matrix> representing the Molien series, r: an <int> where -|r| to
+ |r| is the range of coefficients of the random combinations of
+ bases elements, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+ and M the one of molien or the second one of reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix REY,M=reynolds_molien(A);
+ matrix P=primary_char0_random(REY,M,1);
+ print(P);
+ ==> z2,x2+y2,x4+y4-z4
+
+
+File: sing.htm, Node: primary_charp_random, Next:
primary_char0_no_molien_random, Prev: primary_char0_random, Up: finvar_lib
+
+D.6.1.19 primary_charp_random
+.............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp_random(REY,ringname,r[,v]);
+ REY: a <matrix> representing the Reynolds operator, ringname: a
+ <string> giving the name of a ring where the Molien series is
+ stored, r: an <int> where -|r| to |r| is the range of coefficients
+ of the random combinations of bases elements, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+ and ringname gives the name of a ring of characteristic 0 that has
+ been created by molien or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=3,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ string newring="alskdfj";
+ molien(L[2..size(L)],newring);
+ matrix P=primary_charp_random(L[1],newring,1);
+ if(system("with","Namespaces")) { kill Top::`newring`; }
+ kill `newring`;
+ print(P);
+ ==> z2,x2+y2,x4+y4-z4
+
+
+File: sing.htm, Node: primary_char0_no_molien_random, Next:
primary_charp_no_molien_random, Prev: primary_charp_random, Up: finvar_lib
+
+D.6.1.20 primary_char0_no_molien_random
+.......................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_char0_no_molien_random(REY,r[,v]);
+ REY: a <matrix> representing the Reynolds operator, r: an <int>
+ where -|r| to |r| is the range of coefficients of the random
+ combinations of bases elements, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and an
+ <intvec> listing some of the degrees where no non-trivial
+ homogeneous invariants are to be found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ list l=primary_char0_no_molien_random(L[1],1);
+ print(l[1]);
+ ==> z2,x2+y2,x4+y4-z4
+
+
+File: sing.htm, Node: primary_charp_no_molien_random, Next:
primary_charp_without_random, Prev: primary_char0_no_molien_random, Up:
finvar_lib
+
+D.6.1.21 primary_charp_no_molien_random
+.......................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp_no_molien_random(REY,r[,v]);
+ REY: a <matrix> representing the Reynolds operator, r: an <int>
+ where -|r| to |r| is the range of coefficients of the random
+ combinations of bases elements, v: an optional <int>
+
+*Assume:*
+ REY is the first return value of group_reynolds or reynolds_molien
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring and an
+ <intvec> listing some of the degrees where no non-trivial
+ homogeneous invariants are to be found
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=3,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=group_reynolds(A);
+ list l=primary_charp_no_molien_random(L[1],1);
+ print(l[1]);
+ ==> z2,x2+y2,x4+y4-z4
+
+
+File: sing.htm, Node: primary_charp_without_random, Next: power_products,
Prev: primary_charp_no_molien_random, Up: finvar_lib
+
+D.6.1.22 primary_charp_without_random
+.....................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ primary_charp_without_random(G1,G2,...,r[,v]);
+ G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
+ where -|r| to |r| is the range of coefficients of the random
+ combinations of bases elements, v: an optional <int>
+
+*Display:*
+ information about the various stages of the program if v does not
+ equal 0
+
+*Return:*
+ primary invariants (type <matrix>) of the invariant ring
+
+*Theory:*
+ Bases of homogeneous invariants are generated successively and
+ random linear combinations are chosen as primary invariants that
+ lower the dimension of the ideal generated by the previously found
+ invariants (see "Generating a Noetherian Normalization of the
+ Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
+ (1998)). No Reynolds operator or Molien series is used.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=2,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ matrix P=primary_charp_without_random(A,1);
+ print(P);
+ ==> x+y,z,xy
+
+
+File: sing.htm, Node: power_products, Next: secondary_char0, Prev:
primary_charp_without_random, Up: finvar_lib
+
+D.6.1.23 power_products
+.......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ power_products(dv,d);
+ dv: an <intvec> giving the degrees of homogeneous polynomials, d:
+ the degree of the desired power products
+
+*Return:*
+ a size(dv)*m <intmat> where each column ought to be interpreted as
+ containing the exponents of the corresponding polynomials. The
+ product of the powers is then homogeneous of degree d.
+
+*Example:*
+ LIB "finvar.lib";
+ intvec dv=5,5,5,10,10;
+ print(power_products(dv,10));
+ ==> 2 1 1 0 0 0 0 0
+ ==> 0 1 0 2 1 0 0 0
+ ==> 0 0 1 0 1 2 0 0
+ ==> 0 0 0 0 0 0 1 0
+ ==> 0 0 0 0 0 0 0 1
+ print(power_products(dv,7));
+ ==> 0
+ ==> 0
+ ==> 0
+ ==> 0
+ ==> 0
+
+
+File: sing.htm, Node: secondary_char0, Next: secondary_charp, Prev:
power_products, Up: finvar_lib
+
+D.6.1.24 secondary_char0
+........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ secondary_char0(P,REY,M[,v]);
+ P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
+ representing the Reynolds operator, M: a 1x2 <matrix> giving
+ numerator and denominator of the Molien series, v: an optional
+ <int>
+
+*Assume:*
+ n is the number of variables of the basering, g the size of the
+ group, REY is the 1st return value of group_reynolds(),
+ reynolds_molien() or the second one of primary_invariants(), M the
+ return value of molien() or the second one of reynolds_molien() or
+ the third one of primary_invariants()
+
+*Return:*
+ secondary invariants of the invariant ring (type <matrix>) and
+ irreducible secondary invariants (type <matrix>)
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ The secondary invariants are calculated by finding a basis (in
+ terms of monomials) of the basering modulo the primary invariants,
+ mapping those to invariants with the Reynolds operator and using
+ these images or their power products such that they are linearly
+ independent modulo the primary invariants (see paper "Some
+ Algorithms in Invariant Theory of Finite Groups" by Kemper and
+ Steel (1997)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A);
+ matrix S,IS=secondary_char0(L[1..3]);
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(IS);
+ ==> xyz,x2z-y2z,x3y-xy3
+
Index: test/singular_manual/res_info/singular_httex/sing.htm-5
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.htm-5
diff -N test/singular_manual/res_info/singular_httex/sing.htm-5
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ test/singular_manual/res_info/singular_httex/sing.htm-5 14 Jul 2010
15:42:40 -0000 1.1
@@ -0,0 +1,8724 @@
+This is sing.htm, produced by makeinfo version 4.13 from singular.texi.
+
+
+File: sing.htm, Node: secondary_charp, Next: secondary_no_molien, Prev:
secondary_char0, Up: finvar_lib
+
+D.6.1.25 secondary_charp
+........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ secondary_charp(P,REY,ringname[,v]);
+ P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
+ representing the Reynolds operator, ringname: a <string> giving the
+ name of a ring of characteristic 0 where the Molien series is
+ stored, v: an optional <int>
+
+*Assume:*
+ n is the number of variables of the basering, g the size of the
+ group, REY is the 1st return value of group_reynolds(),
+ reynolds_molien() or the second one of primary_invariants(),
+ `ringname` is a ring of char 0 that has been created by molien() or
+ reynolds_molien() or primary_invariants()
+
+*Return:*
+ secondary invariants of the invariant ring (type <matrix>) and
+ irreducible secondary invariants (type <matrix>)
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ Secondary invariants are calculated by finding a basis (in terms of
+ monomials) of the basering modulo primary invariants, mapping those
+ to invariants with the Reynolds operator and using these images or
+ their power products such that they are linearly independent modulo
+ the primary invariants (see paper "Some Algorithms in Invariant
+ Theory of Finite Groups" by Kemper and Steel (1997)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=3,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A);
+ matrix S,IS=secondary_charp(L[1..size(L)]);
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(IS);
+ ==> xyz,x2z-y2z,x3y-xy3
+
+
+File: sing.htm, Node: secondary_no_molien, Next:
secondary_and_irreducibles_no_molien, Prev: secondary_charp, Up: finvar_lib
+
+D.6.1.26 secondary_no_molien
+............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ secondary_no_molien(P,REY[,deg_vec,v]);
+ P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
+ representing the Reynolds operator, deg_vec: an optional <intvec>
+ listing some degrees where no non-trivial homogeneous invariants
+ can be found, v: an optional <int>
+
+*Assume:*
+ n is the number of variables of the basering, g the size of the
+ group, REY is the 1st return value of group_reynolds(),
+ reynolds_molien() or the second one of primary_invariants(),
+ deg_vec is the second return value of primary_char0_no_molien(),
+ primary_charp_no_molien(), primary_char0_no_molien_random() or
+ primary_charp_no_molien_random()
+
+*Return:*
+ secondary invariants of the invariant ring (type <matrix>)
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ Secondary invariants are calculated by finding a basis (in terms of
+ monomials) of the basering modulo primary invariants, mapping those
+ to invariants with the Reynolds operator and using these images as
+ candidates for secondary invariants.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A,intvec(1,1,0));
+ matrix S=secondary_no_molien(L[1..3]);
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+
+
+File: sing.htm, Node: secondary_and_irreducibles_no_molien, Next:
secondary_not_cohen_macaulay, Prev: secondary_no_molien, Up: finvar_lib
+
+D.6.1.27 secondary_and_irreducibles_no_molien
+.............................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ secondary_and_irreducibles_no_molien(P,REY[,v]);
+ P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
+ representing the Reynolds operator, v: an optional <int>
+
+*Assume:*
+ n is the number of variables of the basering, g the size of the
+ group, REY is the 1st return value of group_reynolds(),
+ reynolds_molien() or the second one of primary_invariants()
+
+*Return:*
+ secondary invariants of the invariant ring (type <matrix>) and
+ irreducible secondary invariants (type <matrix>)
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ Secondary invariants are calculated by finding a basis (in terms of
+ monomials) of the basering modulo primary invariants, mapping those
+ to invariants with the Reynolds operator and using these images or
+ their power products such that they are linearly independent modulo
+ the primary invariants (see paper "Some Algorithms in Invariant
+ Theory of Finite Groups" by Kemper and Steel (1997)).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A,intvec(1,1,0));
+ matrix S,IS=secondary_and_irreducibles_no_molien(L[1..2]);
+ print(S);
+ ==> 1,xyz,x2z-y2z,x3y-xy3
+ print(IS);
+ ==> xyz,x2z-y2z,x3y-xy3
+
+
+File: sing.htm, Node: secondary_not_cohen_macaulay, Next: orbit_variety,
Prev: secondary_and_irreducibles_no_molien, Up: finvar_lib
+
+D.6.1.28 secondary_not_cohen_macaulay
+.....................................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ secondary_not_cohen_macaulay(P,G1,G2,...[,v]);
+ P: a 1xn <matrix> with primary invariants, G1,G2,...: nxn
+ <matrices> generating a finite matrix group, v: an optional <int>
+
+*Assume:*
+ n is the number of variables of the basering
+
+*Return:*
+ secondary invariants of the invariant ring (type <matrix>)
+
+*Display:*
+ information if v does not equal 0
+
+*Theory:*
+ Secondary invariants are generated following "Generating Invariant
+ Rings of Finite Groups over Arbitrary Fields" by Kemper (1996).
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=2,(x,y,z),dp;
+ matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
+ list L=primary_invariants(A);
+ matrix S=secondary_not_cohen_macaulay(L[1],A);
+ print(S);
+ ==> 1
+
+
+File: sing.htm, Node: orbit_variety, Next: relative_orbit_variety, Prev:
secondary_not_cohen_macaulay, Up: finvar_lib
+
+D.6.1.29 orbit_variety
+......................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ orbit_variety(F,s);
+ F: a 1xm <matrix> defining an invariant ring, s: a <string> giving
+ the name for a new ring
+
+*Return:*
+ a Groebner basis (type <ideal>, named G) for the ideal defining the
+ orbit variety (i.e. the syzygy ideal) in the new ring (named `s`)
+
+*Theory:*
+ The ideal of algebraic relations of the invariant ring generators
+ is calculated, then the variables of the original ring are
+ eliminated and the polynomials that are left over define the orbit
+ variety
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix F[1][7]=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3;
+ string newring="E";
+ orbit_variety(F,newring);
+ print(G);
+ ==> y(4)-1,
+ ==> y(5)*y(6)-y(2)*y(7),
+ ==> y(2)*y(3)-y(5)^2-2*y(6)^2,
+ ==> y(1)^2*y(6)-2*y(3)*y(6)+y(5)*y(7),
+ ==> y(1)^2*y(5)-y(3)*y(5)-2*y(6)*y(7),
+ ==> y(1)^2*y(2)-y(2)*y(3)-2*y(6)^2,
+ ==> y(1)^4-3*y(1)^2*y(3)+2*y(3)^2+2*y(7)^2
+ basering;
+ ==> // characteristic : 0
+ ==> // number of vars : 7
+ ==> // block 1 : ordering dp
+ ==> // : names y(1) y(2) y(3) y(4) y(5) y(6) y(7)
+ ==> // block 2 : ordering C
+
+
+File: sing.htm, Node: relative_orbit_variety, Next: image_of_variety, Prev:
orbit_variety, Up: finvar_lib
+
+D.6.1.30 relative_orbit_variety
+...............................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ relative_orbit_variety(I,F,s);
+ I: an <ideal> invariant under the action of a group, F: a 1xm
+ <matrix> defining the invariant ring of this group, s: a <string>
+ giving a name for a new ring
+
+*Return:*
+ a Groebner basis (type <ideal>, named G) for the ideal defining the
+ relative orbit variety with respect to I in the new ring (named s)
+
+*Theory:*
+ A Groebner basis of the ideal of algebraic relations of the
+ invariant ring generators is calculated, then one of the basis
+ elements plus the ideal generators. The variables of the original
+ ring are eliminated and the polynomials that are left define the
+ relative orbit variety with respect to I.
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix F[1][3]=x+y+z,xy+xz+yz,xyz;
+ ideal I=x2+y2+z2-1,x2y+y2z+z2x-2x-2y-2z,xy2+yz2+zx2-2x-2y-2z;
+ string newring="E";
+ relative_orbit_variety(I,F,newring);
+ print(G);
+ ==> 27*y(3)^6-513*y(3)^4+33849*y(3)^2-784,
+ ==> 1475*y(2)+9*y(3)^4-264*y(3)^2+736,
+ ==> 8260*y(1)+9*y(3)^5-87*y(3)^3+5515*y(3)
+ basering;
+ ==> // characteristic : 0
+ ==> // number of vars : 3
+ ==> // block 1 : ordering lp
+ ==> // : names y(1) y(2) y(3)
+ ==> // block 2 : ordering C
+
+
+File: sing.htm, Node: image_of_variety, Prev: relative_orbit_variety, Up:
finvar_lib
+
+D.6.1.31 image_of_variety
+.........................
+
+Procedure from library `finvar.lib' (*note finvar_lib::).
+
+*Usage:*
+ image_of_variety(I,F);
+ I: an arbitrary <ideal>, F: a 1xm <matrix> defining an invariant
+ ring of a some matrix group
+
+*Return:*
+ the <ideal> defining the image under that group of the variety
+ defined by I
+
+*Theory:*
+ relative_orbit_variety(I,F,s) is called and the newly introduced
+ variables in the output are replaced by the generators of the
+ invariant ring. This ideal in the original variables defines the
+ image of the variety defined by I
+
+*Example:*
+ LIB "finvar.lib";
+ ring R=0,(x,y,z),dp;
+ matrix F[1][3]=x+y+z,xy+xz+yz,xyz;
+ ideal I=xy;
+ print(image_of_variety(I,F));
+ ==> xyz
+
+
+File: sing.htm, Node: ainvar_lib, Next: rinvar_lib, Prev: finvar_lib, Up:
Invariant theory
+
+D.6.2 ainvar_lib
+----------------
+
+*Library:*
+ ainvar.lib
+
+*Purpose:*
+ Invariant Rings of the Additive Group
+
+*Authors:*
+ Gerhard Pfister (email: address@hidden), Gert-Martin
+ Greuel (email: address@hidden)
+
+*Procedures:*
+
+* Menu:
+
+* invariantRing:: compute ring of invariants of (K,+)-action given by m
+* derivate:: derivation of f with respect to the vector field m
+* actionIsProper:: tests whether action defined by m is proper
+* reduction:: SAGBI reduction of p in the subring generated by I
+* completeReduction:: complete SAGBI reduction
+* localInvar:: invariant polynomial under m computed from p,...
+* furtherInvar:: compute further invariants of m from the given ones
+* sortier:: sorts generators of id by increasing leading terms
+
+
+File: sing.htm, Node: invariantRing, Next: derivate, Up: ainvar_lib
+
+D.6.2.1 invariantRing
+.....................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ invariantRing(m,p,q,b[,r,pa]); m matrix, p,q poly, b,r int, pa
+ string
+
+*Assume:*
+ p,q variables with m(p)=q and q invariant under m
+ i.e. if p=x(i) and q=x(j) then m[j,1]=0 and m[i,1]=x(j)
+
+*Return:*
+ ideal, containing generators of the ring of invariants of the
+ additive group (K,+) given by the vector field
+
+ m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n).
+
+ If b>0 the computation stops after all invariants of degree <= b
+ (and at least one of higher degree) are found or when all
+ invariants are computed.
+ If b<=0, the computation continues until all generators of the ring
+ of invariants are computed (should be used only if the ring of
+ invariants is known to be finitely generated otherwise the
+ algorithm might not stop).
+ If r=1 a different reduction is used which is sometimes faster
+ (default r=0).
+
+*Display:*
+ if pa is given (any string as 5th or 6th argument), the computation
+ pauses whenever new invariants are found and displays them
+
+*Theory:*
+ The algorithm to compute the ring of invariants works in char 0 or
+ big enough characteristic. (K,+) acts as the exponential of the
+ vector field defined by the matrix m. For background see G.-M.
+ Greuel, G. Pfister, Geometric quotients of unipotent group actions,
+ Proc. London Math. Soc. (3) 67, 75-105 (1993).
+
+*Example:*
+ LIB "ainvar.lib";
+ //Winkelmann: free action but Spec(k[x(1),...,x(5)]) --> Spec(invariant
ring)
+ //is not surjective
+ ring rw=0,(x(1..5)),dp;
+ matrix m[5][1];
+ m[3,1]=x(1);
+ m[4,1]=x(2);
+ m[5,1]=1+x(1)*x(4)+x(2)*x(3);
+ ideal in=invariantRing(m,x(3),x(1),0); //compute full invarint ring
+ in;
+ ==> in[1]=x(1)
+ ==> in[2]=x(2)
+ ==> in[3]=x(2)*x(3)*x(4)-x(2)*x(5)+x(4)
+ ==> in[4]=x(1)*x(3)*x(4)-x(1)*x(5)+x(3)
+ //Deveney/Finston: The ring of invariants is not finitely generated
+ ring rf=0,(x(1..7)),dp;
+ matrix m[7][1];
+ m[4,1]=x(1)^3;
+ m[5,1]=x(2)^3;
+ m[6,1]=x(3)^3;
+ m[7,1]=(x(1)*x(2)*x(3))^2;
+ ideal in=invariantRing(m,x(4),x(1),6); //all invariants up to degree
6
+ in;
+ ==> in[1]=x(1)
+ ==> in[2]=x(3)
+ ==> in[3]=x(2)
+ ==> in[4]=x(3)^3*x(4)-x(1)^3*x(6)
+ ==> in[5]=x(2)^3*x(4)-x(1)^3*x(5)
+ ==> in[6]=x(2)^2*x(3)^2*x(4)-x(1)*x(7)
+ ==> in[7]=x(1)^2*x(2)^2*x(6)-x(3)*x(7)
+ ==> in[8]=x(1)^2*x(3)^2*x(5)-x(2)*x(7)
+ ==>
in[9]=x(1)^2*x(2)*x(3)^4*x(4)*x(5)+x(1)^2*x(2)^4*x(3)*x(4)*x(6)-x(1)^5*x(\
+ 2)*x(3)*x(5)*x(6)-2*x(2)^2*x(3)^2*x(4)*x(7)+x(1)*x(7)^2
+
+
+File: sing.htm, Node: derivate, Next: actionIsProper, Prev: invariantRing,
Up: ainvar_lib
+
+D.6.2.2 derivate
+................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ derivate(m,id); m matrix, id poly/vector/ideal
+
+*Assume:*
+ m is a nx1 matrix, where n = number of variables of the basering
+
+*Return:*
+ poly/vector/ideal (same type as input), result of applying the
+ vector field by the matrix m componentwise to id;
+
+*Note:*
+ the vector field is m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n)
+
+*Example:*
+ LIB "ainvar.lib";
+ ring q=0,(x,y,z,u,v,w),dp;
+ poly f=2xz-y2;
+ matrix m[6][1] =x,y,0,u,v;
+ derivate(m,f);
+ ==> -2y2+2xz
+ vector v = [2xz-y2,u6-3];
+ derivate(m,v);
+ ==> 6u6*gen(2)-2y2*gen(1)+2xz*gen(1)
+ derivate(m,ideal(2xz-y2,u6-3));
+ ==> _[1]=-2y2+2xz
+ ==> _[2]=6u6
+
+
+File: sing.htm, Node: actionIsProper, Next: reduction, Prev: derivate, Up:
ainvar_lib
+
+D.6.2.3 actionIsProper
+......................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ actionIsProper(m); m matrix
+
+*Assume:*
+ m is a nx1 matrix, where n = number of variables of the basering
+
+*Return:*
+ int = 1, if the action defined by m is proper, 0 if not
+
+*Note:*
+ m defines a group action which is the exponential of the vector
+ field m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n)
+
+*Example:*
+ LIB "ainvar.lib";
+ ring rf=0,x(1..7),dp;
+ matrix m[7][1];
+ m[4,1]=x(1)^3;
+ m[5,1]=x(2)^3;
+ m[6,1]=x(3)^3;
+ m[7,1]=(x(1)*x(2)*x(3))^2;
+ actionIsProper(m);
+ ==> 0
+ ring rd=0,x(1..5),dp;
+ matrix m[5][1];
+ m[3,1]=x(1);
+ m[4,1]=x(2);
+ m[5,1]=1+x(1)*x(4)^2;
+ actionIsProper(m);
+ ==> 1
+
+
+File: sing.htm, Node: reduction, Next: completeReduction, Prev:
actionIsProper, Up: ainvar_lib
+
+D.6.2.4 reduction
+.................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ reduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int
+ (optional)]
+
+*Return:*
+ a polynomial equal to p-H(f1,...,fr), in case the leading term
+ LT(p) of p is of the form H(LT(f1),...,LT(fr)) for some polynomial
+ H in r variables over the base field, I=f1,...,fr; if q is given, a
+ maximal power a is computed such that q^a divides p-H(f1,...,fr),
+ and then (p-H(f1,...,fr))/q^a is returned; return p if no H is
+ found
+ if n=1, a different algorithm is chosen which is sometimes faster
+ (default: n=0; q and n can be given (or not) in any order)
+
+*Note:*
+ this is a kind of SAGBI reduction in the subalgebra K[f1,...,fr] of
+ the basering
+
+*Example:*
+ LIB "ainvar.lib";
+ ring q=0,(x,y,z,u,v,w),dp;
+ poly p=x2yz-x2v;
+ ideal dom =x-w,u2w+1,yz-v;
+ reduction(p,dom);
+ ==> 2xyzw-yzw2-2xvw+vw2
+ reduction(p,dom,w);
+ ==> 2xyz-yzw-2xv+vw
+
+
+File: sing.htm, Node: completeReduction, Next: localInvar, Prev: reduction,
Up: ainvar_lib
+
+D.6.2.5 completeReduction
+.........................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ completeReduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int]
+
+*Return:*
+ a polynomial, the SAGBI reduction of the polynomial p with I via
+ the procedure 'reduction' as long as possible
+ if n=1, a different algorithm is chosen which is sometimes faster
+ (default: n=0; q and n can be given (or not) in any order)
+
+*Note:*
+ help reduction; shows an explanation of SAGBI reduction
+
+*Example:*
+ LIB "ainvar.lib";
+ ring q=0,(x,y,z,u,v,w),dp;
+ poly p=x2yz-x2v;
+ ideal dom =x-w,u2w+1,yz-v;
+ completeReduction(p,dom);
+ ==> 2xyzw-yzw2-2xvw+vw2
+ completeReduction(p,dom,w);
+ ==> 0
+
+
+File: sing.htm, Node: localInvar, Next: furtherInvar, Prev:
completeReduction, Up: ainvar_lib
+
+D.6.2.6 localInvar
+..................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ localInvar(m,p,q,h); m matrix, p,q,h polynomials
+
+*Assume:*
+ m(q) and h are invariant under the vector field m, i.e.
+ m(m(q))=m(h)=0 h must be a ring variable
+
+*Return:*
+ a polynomial, the invariant polynomial of the vector field
+
+ m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n)
+
+ with respect to p,q,h. It is defined as follows: set inv = p if p
+ is invariant, and else as
+ inv = m(q)^N * sum_i=1..N-1{ (-1)^i*(1/i!)*m^i(p)*(q/m(q))^i }
+ where m^N(p) = 0, m^(N-1)(p) != 0;
+ the result is inv divided by h as much as possible
+
+*Example:*
+ LIB "ainvar.lib";
+ ring q=0,(x,y,z),dp;
+ matrix m[3][1];
+ m[2,1]=x;
+ m[3,1]=y;
+ poly in=localInvar(m,z,y,x);
+ in;
+ ==> -1/2y2+xz
+
+
+File: sing.htm, Node: furtherInvar, Next: sortier, Prev: localInvar, Up:
ainvar_lib
+
+D.6.2.7 furtherInvar
+....................
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ furtherInvar(m,id,karl,q); m matrix, id,karl ideals, q poly, n int
+
+*Assume:*
+ karl,id,q are invariant under the vector field m,
+ moreover, q must be a variable
+
+*Return:*
+ list of two ideals, the first ideal contains further invariants of
+ the vector field
+
+ m = sum m[i,1]*d/dx(i) with respect to id,p,q,
+
+ i.e. we compute elements in the (invariant) subring generated by id
+ which are divisible by q and divide them by q as much as possible
+ the second ideal contains all invariants given before if n=1, a
+ different algorithm is chosen which is sometimes faster (default:
+ n=0)
+
+*Example:*
+ LIB "ainvar.lib";
+ ring r=0,(x,y,z,u),dp;
+ matrix m[4][1];
+ m[2,1]=x;
+ m[3,1]=y;
+ m[4,1]=z;
+ ideal id=localInvar(m,z,y,x),localInvar(m,u,y,x);
+ ideal karl=id,x;
+ list in=furtherInvar(m,id,karl,x);
+ in;
+ ==> [1]:
+ ==> _[1]=y2z2-8/3xz3-2y3u+6xyzu-3x2u2
+ ==> [2]:
+ ==> _[1]=-1/2y2+xz
+ ==> _[2]=1/3y3-xyz+x2u
+ ==> _[3]=x
+
+
+File: sing.htm, Node: sortier, Prev: furtherInvar, Up: ainvar_lib
+
+D.6.2.8 sortier
+...............
+
+Procedure from library `ainvar.lib' (*note ainvar_lib::).
+
+*Usage:*
+ sortier(id); id ideal/module
+
+*Return:*
+ the same ideal/module but with generators ordered by there leading
+ term, starting with the smallest
+
+*Example:*
+ LIB "ainvar.lib";
+ ring q=0,(x,y,z,u,v,w),dp;
+ ideal i=w,x,z,y,v;
+ sortier(i);
+ ==> _[1]=w
+ ==> _[2]=v
+ ==> _[3]=z
+ ==> _[4]=y
+ ==> _[5]=x
+
+
+File: sing.htm, Node: rinvar_lib, Next: stratify_lib, Prev: ainvar_lib,
Up: Invariant theory
+
+D.6.3 rinvar_lib
+----------------
+
+*Library:*
+ rinvar.lib
+
+*Purpose:*
+ Invariant Rings of Reductive Groups
+
+*Author:*
+ Thomas Bayer, address@hidden
+ http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current
+ Adress: Institut fuer Informatik, TU Muenchen
+
+*Overview:*
+ Implementation based on Derksen's algorithm. Written in the frame
+ of the diploma thesis (advisor: Prof. Gert-Martin Greuel)
+ 'Computations of moduli spaces of semiquasihomogeneous
+ singularities and an implementation in Singular'
+
+*Procedures:*
+
+* Menu:
+
+* HilbertSeries:: Hilbert series of the ideal I w.r.t. weight w
+* HilbertWeights:: weighted degrees of the generators of I
+* ImageVariety:: ideal of the image variety F(variety(I))
+* ImageGroup:: ideal of G w.r.t. the induced representation
+* InvariantRing:: generators of the invariant ring of G
+* InvariantQ:: decide if f is invariant w.r.t. G
+* LinearizeAction:: linearization of the action 'Gaction' of G
+* LinearActionQ:: decide if action is linear in var(s..nvars)
+* LinearCombinationQ:: decide if f is in the linear hull of 'base'
+* MinimalDecomposition:: minimal decomposition of f (like coef)
+* NullCone:: ideal of the null cone of the action 'act' of G
+* ReynoldsImage:: image of f under the Reynolds operator 'RO'
+* ReynoldsOperator:: Reynolds operator of the group G
+* SimplifyIdeal:: simplify the ideal I (try to reduce variables)
+* TransferIdeal:: transfer the ideal 'name' from R to basering
+
+* Menu:
+
+See also:
+* qhmoduli_lib::
+* zeroset_lib::
+
+*See also:* *note qhmoduli_lib::; *note zeroset_lib::.
+
+
+File: sing.htm, Node: HilbertSeries, Next: HilbertWeights, Up: rinvar_lib
+
+D.6.3.1 HilbertSeries
+.....................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ HilbertSeries(I, w); ideal I, intvec wt
+
+*Purpose:*
+ compute the polynomial p of the Hilbert Series,represented by p/q,
+ of the ring K[t_1,...,t_m,y_1,...,y_r]/I1 where 'w' are the weights
+ of the variables, computed, e.g., by 'HilbertWeights', 'I1' is of
+ the form I[1] - y_1,...,I[r] - y_r and is quasihomogeneous w.r.t.
+ 'w'
+
+*Return:*
+ intvec
+
+*Note:*
+ the leading 0 of the result does not belong to p, but is needed in
+ the hilbert-driven 'std'.
+
+
+File: sing.htm, Node: HilbertWeights, Next: ImageVariety, Prev:
HilbertSeries, Up: rinvar_lib
+
+D.6.3.2 HilbertWeights
+......................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Purpose:*
+ compute the weights of the "slack" variables needed for the
+ computation of the algebraic relations of the generators of 'I'
+ s.t. the Hilbert driven 'std' can be used.
+
+*Return:*
+ intvec
+
+*Assume:*
+ basering = K[t_1,...,t_m,...], 'I' is quasihomogeneous w.r.t. 'w'
+ and contains only polynomials in t_1,...,t_m
+
+
+File: sing.htm, Node: ImageVariety, Next: ImageGroup, Prev: HilbertWeights,
Up: rinvar_lib
+
+D.6.3.3 ImageVariety
+....................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ ImageVariety(ideal I, F [, w]);ideal I; F is a list/ideal, intvec
+ w.
+
+*Purpose:*
+ compute the Zariski closure of the image of the variety of I under
+ the morphism F.
+
+*Note:*
+ if 'I' and 'F' are quasihomogeneous w.r.t. 'w' then the
+ Hilbert-driven 'std' is used.
+
+*Return:*
+ polynomial ring over the same ground field, containing the ideal
+ 'imageid'. The variables are Y(1),...,Y(k) where k = size(F) -
+ 'imageid' is the ideal of the Zariski closure of F(X) where X is
+ the variety of I.
+
+*Example:*
+ LIB "rinvar.lib";
+ ring B = 0,(x,y),dp;
+ ideal I = x4 - y4;
+ ideal F = x2, y2, x*y;
+ def R = ImageVariety(I, F);
+ setring R;
+ imageid;
+ ==> imageid[1]=Y(1)*Y(2)-Y(3)^2
+ ==> imageid[2]=Y(1)^2-Y(2)^2
+ ==> imageid[3]=Y(2)^3-Y(1)*Y(3)^2
+
+
+File: sing.htm, Node: ImageGroup, Next: InvariantRing, Prev: ImageVariety,
Up: rinvar_lib
+
+D.6.3.4 ImageGroup
+..................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ ImageGroup(G, action); ideal G, action;
+
+*Purpose:*
+ compute the ideal of the image of G in GL(m,K) induced by the
+ linear action 'action', where G is an algebraic group and 'action'
+ defines an action of G on K^m (size(action) = m).
+
+*Return:*
+ ring, a polynomial ring over the same ground field as the basering,
+ containing the ideals 'groupid' and 'actionid'.
+ - 'groupid' is the ideal of the image of G (order <= order of G) -
+ 'actionid' defines the linear action of 'groupid' on K^m.
+
+*Note:*
+ 'action' and 'actionid' have the same orbits
+ all variables which give only rise to 0's in the m x m matrices of
+ G have been omitted.
+
+*Assume:*
+ basering K[s(1..r),t(1..m)] has r + m variables, G is the ideal of
+ an algebraic group and F is an action of G on K^m. G contains only
+ the variables s(1)...s(r). The action 'action' is given by
+ polynomials f_1,...,f_m in basering, s.t. on the ring level we have
+ K[t_1,...,t_m] -> K[s_1,...,s_r,t_1,...,t_m]/G
+ t_i -> f_i(s_1,...,s_r,t_1,...,t_m)
+
+*Example:*
+ LIB "rinvar.lib";
+ ring B = 0,(s(1..2), t(1..2)),dp;
+ ideal G = s(1)^3-1, s(2)^10-1;
+ ideal action = s(1)*s(2)^8*t(1), s(1)*s(2)^7*t(2);
+ def R = ImageGroup(G, action);
+ setring R;
+ groupid;
+ ==> groupid[1]=-s(1)+s(2)^4
+ ==> groupid[2]=s(1)^8-s(2)^2
+ ==> groupid[3]=s(1)^7*s(2)^2-1
+ actionid;
+ ==> actionid[1]=s(1)*t(1)
+ ==> actionid[2]=s(2)*t(2)
+
+
+File: sing.htm, Node: InvariantRing, Next: InvariantQ, Prev: ImageGroup,
Up: rinvar_lib
+
+D.6.3.5 InvariantRing
+.....................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ InvariantRing(G, Gact [, opt]); ideal G, Gact; int opt
+
+*Purpose:*
+ compute generators of the invariant ring of G w.r.t. the action
+ 'Gact'
+
+*Assume:*
+ G is a finite group and 'Gact' is a linear action.
+
+*Return:*
+ polynomial ring over a simple extension of the ground field of the
+ basering (the extension might be trivial), containing the ideals
+ 'invars' and 'groupid' and the poly 'newA'
+ - 'invars' contains the algebra-generators of the invariant ring -
+ 'groupid' is the ideal of G in the new ring
+ - 'newA' if the minpoly changes this is the new representation of
+ the algebraic number, otherwise it is set to 'a'.
+
+*Note:*
+ the delivered ring might have a different minimal polynomial
+
+*Example:*
+ LIB "rinvar.lib";
+ ring B = 0, (s(1..2), t(1..2)), dp;
+ ideal G = -s(1)+s(2)^3, s(1)^4-1;
+ ideal action = s(1)*t(1), s(2)*t(2);
+ def R = InvariantRing(std(G), action);
+ setring R;
+ invars;
+ ==> invars[1]=t(1)^4
+ ==> invars[2]=t(1)^3*t(2)^3
+ ==> invars[3]=t(1)^2*t(2)^6
+ ==> invars[4]=t(1)*t(2)^9
+ ==> invars[5]=t(2)^12
+
+
+File: sing.htm, Node: InvariantQ, Next: LinearizeAction, Prev:
InvariantRing, Up: rinvar_lib
+
+D.6.3.6 InvariantQ
+..................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ InvariantQ(f, G, action); poly f; ideal G, action
+
+*Purpose:*
+ check if the polynomial f is invariant w.r.t. G where G acts via
+ 'action' on K^m.
+
+*Assume:*
+ basering = K[s_1,...,s_m,t_1,...,t_m] where K = Q of K = Q(a) and
+ minpoly != 0, f contains only t_1,...,t_m, G is the ideal of an
+ algebraic group and a standard basis.
+
+*Return:*
+ int;
+ 0 if f is not invariant,
+ 1 if f is invariant
+
+*Note:*
+ G need not be finite
+
+
+File: sing.htm, Node: LinearizeAction, Next: LinearActionQ, Prev:
InvariantQ, Up: rinvar_lib
+
+D.6.3.7 LinearizeAction
+.......................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ LinearizeAction(G,action,r); ideal G, action; int r
+
+*Purpose:*
+ linearize the group action 'action' and find an equivariant
+ embedding of K^m where m = size(action).
+
+*Assume:*
+ G contains only variables var(1..r) (r = nrs)
+ basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0.
+
+*Return:*
+ polynomial ring containing the ideals 'actionid', 'embedid',
+ 'groupid' - 'actionid' is the ideal defining the linearized action
+ of G - 'embedid' is a parameterization of an equivariant embedding
+ (closed) - 'groupid' is the ideal of G in the new ring
+
+*Note:*
+ set printlevel > 0 to see a trace
+
+*Example:*
+ LIB "rinvar.lib";
+ ring B = 0,(s(1..5), t(1..3)),dp;
+ ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1,
s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3,
s(5)^5-s(1)^2*s(5);
+ ideal action = -s(4)*t(1)+s(5)*t(1),
-s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
+ LinearActionQ(action, 5);
+ ==> 0
+ def R = LinearizeAction(G, action, 5);
+ setring R;
+ R;
+ ==> // characteristic : 0
+ ==> // number of vars : 9
+ ==> // block 1 : ordering dp
+ ==> // : names s(1) s(2) s(3) s(4) s(5) t(1) t(2)
t(3) t(\
+ 4)
+ ==> // block 2 : ordering C
+ actionid;
+ ==> actionid[1]=-s(4)*t(1)+s(5)*t(1)
+ ==> actionid[2]=-s(4)^2*t(2)+s(5)^2*t(2)+2*s(4)^2*t(4)
+ ==> actionid[3]=s(4)*t(3)+s(5)*t(3)
+ ==> actionid[4]=s(4)^2*t(4)+s(5)^2*t(4)
+ embedid;
+ ==> embedid[1]=t(1)
+ ==> embedid[2]=t(2)
+ ==> embedid[3]=t(3)
+ ==> embedid[4]=t(3)^2
+ groupid;
+ ==> groupid[1]=s(3)-s(4)
+ ==> groupid[2]=s(2)-s(5)
+ ==> groupid[3]=s(4)*s(5)
+ ==> groupid[4]=s(1)^2*s(4)+s(1)^2*s(5)-1
+ ==> groupid[5]=s(1)^2*s(5)^2-s(5)
+ ==> groupid[6]=s(4)^4-s(5)^4+s(1)^2
+ ==> groupid[7]=s(1)^4+s(4)^3-s(5)^3
+ ==> groupid[8]=s(5)^5-s(1)^2*s(5)
+ LinearActionQ(actionid, 5);
+ ==> 1
+
+
+File: sing.htm, Node: LinearActionQ, Next: LinearCombinationQ, Prev:
LinearizeAction, Up: rinvar_lib
+
+D.6.3.8 LinearActionQ
+.....................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ LinearActionQ(action,nrs,nrt); ideal action, int nrs
+
+*Purpose:*
+ check if the action defined by 'action' is linear w.r.t. the
+ variables var(nrs + 1...nvars(basering)).
+
+*Return:*
+ 0 action not linear
+ 1 action is linear
+
+*Example:*
+ LIB "rinvar.lib";
+ ring R = 0,(s(1..5), t(1..3)),dp;
+ ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1,
s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3,
s(5)^5-s(1)^2*s(5);
+ ideal Gaction = -s(4)*t(1)+s(5)*t(1),
-s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
+ LinearActionQ(Gaction, 5, 3);
+ ==> // ** too many arguments for LinearActionQ
+ ==> 0
+
+
+File: sing.htm, Node: LinearCombinationQ, Next: MinimalDecomposition, Prev:
LinearActionQ, Up: rinvar_lib
+
+D.6.3.9 LinearCombinationQ
+..........................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ LinearCombination(I, f); ideal I, poly f
+
+*Purpose:*
+ test if f can be written as a linear combination of the generators
+ of I.
+
+*Return:*
+ 0 f is not a linear combination
+ 1 f is a linear combination
+
+
+File: sing.htm, Node: MinimalDecomposition, Next: NullCone, Prev:
LinearCombinationQ, Up: rinvar_lib
+
+D.6.3.10 MinimalDecomposition
+.............................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ MinimalDecomposition(f,a,b); poly f; int a, b.
+
+*Purpose:*
+ decompose f as a sum M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] where
+ M[1,i] contains only s(1..a), M[2,i] contains only t(1...b) s.t. r
+ is minimal
+
+*Assume:*
+ f polynomial in K[s(1..a),t(1..b)], K = Q or K = Q(a) and minpoly
+ != 0
+
+*Return:*
+ 2 x r matrix M s.t. f = M[1,1]*M[2,1] + ... + M[1,r]*M[2,r]
+
+*Example:*
+ LIB "rinvar.lib";
+ ring R = 0, (s(1..2), t(1..2)), dp;
+ poly h = s(1)*(t(1) + t(1)^2) + (t(2) + t(2)^2)*(s(1)^2 + s(2));
+ matrix M = MinimalDecomposition(h, 2, 2);
+ M;
+ ==> M[1,1]=s(1)^2+s(2)
+ ==> M[1,2]=s(1)
+ ==> M[2,1]=t(2)^2+t(2)
+ ==> M[2,2]=t(1)^2+t(1)
+ M[1,1]*M[2,1] + M[1,2]*M[2,2] - h;
+ ==> 0
+
+
+File: sing.htm, Node: NullCone, Next: ReynoldsImage, Prev:
MinimalDecomposition, Up: rinvar_lib
+
+D.6.3.11 NullCone
+.................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ NullCone(G, action); ideal G, action
+
+*Purpose:*
+ compute the ideal of the null cone of the linear action of G on
+ K^n, given by 'action', by means of Derksen's algorithm
+
+*Assume:*
+ basering = K[s(1..r),t(1..n)], K = Q or K = Q(a) and minpoly != 0,
+ G is an ideal of a reductive algebraic group in K[s(1..r)],
+ 'action' is a linear group action of G on K^n (n = ncols(action))
+
+*Return:*
+ ideal of the null cone of G.
+
+*Note:*
+ the generators of the null cone are homogeneous, but i.g. not
+ invariant
+
+*Example:*
+ LIB "rinvar.lib";
+ ring R = 0, (s(1..2), x, y), dp;
+ ideal G = -s(1)+s(2)^3, s(1)^4-1;
+ ideal action = s(1)*x, s(2)*y;
+ ideal inv = NullCone(G, action);
+ inv;
+ ==> inv[1]=x^4
+ ==> inv[2]=x^3*y^3
+ ==> inv[3]=x^2*y^6
+ ==> inv[4]=x*y^9
+ ==> inv[5]=y^12
+
+
+File: sing.htm, Node: ReynoldsImage, Next: ReynoldsOperator, Prev:
NullCone, Up: rinvar_lib
+
+D.6.3.12 ReynoldsImage
+......................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ ReynoldsImage(RO, f); list RO, poly f
+
+*Purpose:*
+ compute the Reynolds image of the polynomial f where RO represents
+ the Reynolds operator
+
+*Return:*
+ poly
+
+
+File: sing.htm, Node: ReynoldsOperator, Next: SimplifyIdeal, Prev:
ReynoldsImage, Up: rinvar_lib
+
+D.6.3.13 ReynoldsOperator
+.........................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Usage:*
+ ReynoldsOperator(G, action [, opt); ideal G, action; int opt
+
+*Purpose:*
+ compute the Reynolds operator of the group G which act via 'action'
+
+*Return:*
+ polynomial ring R over a simple extension of the ground field of
+ the basering (the extension might be trivial), containing a list
+ 'ROelements', the ideals 'id', 'actionid' and the polynomial
+ 'newA'. R = K(a)[s(1..r),t(1..n)].
+ - 'ROelements' is a list of ideal, each ideal represents a
+ substitution map F : R -> R according to the zero-set of G - 'id'
+ is the ideal of G in the new ring
+ - 'newA' is the new representation of a' in terms of a. If the
+ basering does not contain a parameter then 'newA' = 'a'.
+
+*Assume:*
+ basering = K[s(1..r),t(1..n)], K = Q or K = Q(a') and minpoly != 0,
+ G is the ideal of a finite group in K[s(1..r)], 'action' is a
+ linear group action of G
+
+
+File: sing.htm, Node: SimplifyIdeal, Next: TransferIdeal, Prev:
ReynoldsOperator, Up: rinvar_lib
+
+D.6.3.14 SimplifyIdeal
+......................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+*Purpose:*
+ simplify ideal I to the ideal I', do not change the names of the
+ first m variables, new ideal I' might contain less variables. I'
+ contains variables var(1..m)
+
+*Return:*
+ list
+ _[1] ideal I'
+ _[2] ideal representing a map phi to a ring with probably less
+ vars. s.t. phi(I) = I'
+ _[3] list of variables
+ _[4] list from 'elimpart'
+
+
+File: sing.htm, Node: TransferIdeal, Prev: SimplifyIdeal, Up: rinvar_lib
+
+D.6.3.15 TransferIdeal
+......................
+
+Procedure from library `rinvar.lib' (*note rinvar_lib::).
+
+
+File: sing.htm, Node: stratify_lib, Prev: rinvar_lib, Up: Invariant theory
+
+D.6.4 stratify_lib
+------------------
+
+*Library:*
+ stratify.lib
+
+*Purpose:*
+ Algorithmic Stratification for Unipotent Group-Actions
+
+*Author:*
+ Anne Fruehbis-Krueger, address@hidden
+
+*Overview:*
+ This library provides an implementation of the algorithm of Greuel
+ and Pfister introduced in the article <Geometric quotients of
+ unipotent group actions>.
+
+*Procedures:*
+
+* Menu:
+
+* prepMat:: list of submatrices corresp. to given filtration
+* stratify:: algorithmic stratification (main procedure)
+
+
+File: sing.htm, Node: prepMat, Next: stratify, Up: stratify_lib
+
+D.6.4.1 prepMat
+...............
+
+Procedure from library `stratify.lib' (*note stratify_lib::).
+
+*Usage:*
+ prepMat(M,wr,ws,step);
+ where M is a matrix, wr is an intvec of size ncols(M), ws an intvec
+ of size nrows(M) and step is an integer
+
+*Return:*
+ 2 lists of submatrices corresponding to the filtrations specified
+ by wr and ws
+ the first list corresponds to the list for the filtration of AdA,
+ i.e. the ranks of these matrices will be the r_i, the second one to
+ the list for the filtration of L, i.e. the ranks of these matrices
+ will be the s_i
+
+*Note:*
+ * the entries of the matrix M are M_ij=delta_i(x_j),
+ * wr is used to determine what subset of the set of all dx_i is
+ generating AdF^l(A):
+ if (k-1)*step <= wr[i] < k*step, then dx_i is in the set of
+ generators of AdF^l(A) for all l>=k and the i-th column of M
+ appears in each submatrix starting from the k-th
+ * ws is used to determine what subset of the set of all delta_i is
+ generating Z_l(L):
+ if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of
+ generators of Z_l(A) for l < k and the i-th row of M appears in
+ each submatrix up to the (k-1)th
+ * the entries of wr and ws as well as step should be positive
+ integers
+
+*Example:*
+ LIB "stratify.lib";
+ ring r=0,(t(1..3)),dp;
+ matrix M[2][3]=0,t(1),3*t(2),0,0,t(1);
+ print(M);
+ ==> 0,t(1),3*t(2),
+ ==> 0,0, t(1)
+ intvec wr=1,3,5;
+ intvec ws=2,4;
+ int step=2;
+ prepMat(M,wr,ws,step);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[2,1]=0
+ ==> [2]:
+ ==> _[1,1]=0
+ ==> _[1,2]=t(1)
+ ==> _[2,1]=0
+ ==> _[2,2]=0
+ ==> [3]:
+ ==> _[1,1]=0
+ ==> _[1,2]=t(1)
+ ==> _[1,3]=3*t(2)
+ ==> _[2,1]=0
+ ==> _[2,2]=0
+ ==> _[2,3]=t(1)
+ ==> [2]:
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[1,2]=t(1)
+ ==> _[1,3]=3*t(2)
+ ==> _[2,1]=0
+ ==> _[2,2]=0
+ ==> _[2,3]=t(1)
+ ==> [2]:
+ ==> _[1,1]=0
+ ==> _[1,2]=0
+ ==> _[1,3]=t(1)
+
+
+File: sing.htm, Node: stratify, Prev: prepMat, Up: stratify_lib
+
+D.6.4.2 stratify
+................
+
+Procedure from library `stratify.lib' (*note stratify_lib::).
+
+*Usage:*
+ stratify(M,wr,ws,step);
+ where M is a matrix, wr is an intvec of size ncols(M), ws an intvec
+ of size nrows(M) and step is an integer
+
+*Return:*
+ list of lists, each entry of the big list corresponds to one
+ locally closed set and has the following entries:
+ 1) intvec giving the corresponding rs-vector
+ 2) ideal determining the closed set
+ 3) list d of polynomials determining the open set D(d[1]) empty
+ list if there is more than one open set
+ 4-n) lists of polynomials determining open sets which all lead to
+ the same rs-vector
+
+*Note:*
+ * ring ordering should be global, i.e. the ring should be a
+ polynomial ring
+ * the entries of the matrix M are M_ij=delta_i(x_j),
+ * wr is used to determine what subset of the set of all dx_i is
+ generating AdF^l(A):
+ if (k-1)*step < wr[i] <= k*step, then dx_i is in the set of
+ generators of AdF^l(A) for all l>=k
+ * ws is used to determine what subset of the set of all delta_i is
+ generating Z_l(L):
+ if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of
+ generators of Z_l(A) for l < k
+ * the entries of wr and ws as well as step should be positive
+ integers
+ * the filtrations have to be known, no sanity checks concerning the
+ filtrations are performed !!!
+
+*Example:*
+ LIB "stratify.lib";
+ ring r=0,(t(1..3)),dp;
+ matrix M[2][3]=0,t(1),3*t(2),0,0,t(1);
+ intvec wr=1,3,5;
+ intvec ws=2,4;
+ int step=2;
+ stratify(M,wr,ws,step);
+ ==> [1]:
+ ==> [1]:
+ ==> 0,0,0,0
+ ==> [2]:
+ ==> _[1]=t(2)
+ ==> _[2]=t(1)
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> [1]:
+ ==> 0,1,0,1
+ ==> [2]:
+ ==> _[1]=t(1)
+ ==> [3]:
+ ==> [1]:
+ ==> t(2)
+ ==> [2]:
+ ==> t(2)
+ ==> [3]:
+ ==> [1]:
+ ==> 1,2,1,2
+ ==> [2]:
+ ==> _[1]=0
+ ==> [3]:
+ ==> [1]:
+ ==> t(1)
+ ==> [2]:
+ ==> t(1)
+
+
+File: sing.htm, Node: Symbolic-numerical solving, Next: Visualization,
Prev: Invariant theory, Up: SINGULAR libraries
+
+D.7 Symbolic-numerical solving
+==============================
+
+* Menu:
+
+* presolve_lib:: procedures for pre-solving polynomial equations
+* solve_lib:: procedures to solve polynomial systems
+* triang_lib:: procedures for decomposing zero-dimensional ideals
+* ntsolve_lib:: one real solution of polynomial systems (Newton iteration)
+* zeroset_lib:: procedures for roots and factorization
+
+
+File: sing.htm, Node: presolve_lib, Next: solve_lib, Prev:
Symbolic-numerical solving, Up: Symbolic-numerical solving
+
+D.7.1 presolve_lib
+------------------
+
+*Library:*
+ presolve.lib
+
+*Purpose:*
+ Pre-Solving of Polynomial Equations
+
+*Author:*
+ Gert-Martin Greuel, email: address@hidden,
+
+*Procedures:*
+
+* Menu:
+
+* degreepart:: elements of id of total degree >= d1 and <= d2
+* elimlinearpart:: linear part eliminated from id
+* elimpart:: partial elimination of vars [among first n vars]
+* elimpartanyr:: factors of p partially eliminated from i in any ring
+* fastelim:: fast elimination of factors of p from i [options]
+* findvars:: ideal of variables occurring in id [more information]
+* hilbvec:: intvec of Hilbert-series of id [in char c and ord o]
+* linearpart:: elements of id of total degree <=1
+* tolessvars:: maps id to new basering having only vars occurring in id
+* solvelinearpart:: reduced std-basis of linear part of id
+* sortandmap:: map to new basering with vars sorted w.r.t. complexity
+* sortvars:: sort vars w.r.t. complexity in id [different blocks]
+* shortid:: generators of id having <= n terms
+* valvars:: valuation of vars w.r.t. to their complexity in id
+* idealSimplify:: eliminates variables which are linear in id
+* idealSplit:: intersection of the ideals has the same radical as id
+
+
+File: sing.htm, Node: degreepart, Next: elimlinearpart, Up: presolve_lib
+
+D.7.1.1 degreepart
+..................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ degreepart(id,d1,d2[,v]); id=ideal/module, d1,d1=integers, v=intvec
+
+*Return:*
+ generators of id of [v-weighted] total degree >= d1 and <= d2
+ (default: v = 1,...,1)
+
+*Example:*
+ LIB "presolve.lib";
+ ring r=0,(x,y,z),dp;
+ ideal i=1+x+x2+x3+x4,3,xz+y3+z8;
+ degreepart(i,0,4);
+ ==> _[1]=x4+x3+x2+x+1
+ ==> _[2]=3
+ module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1];
+ intvec v=2,3,6;
+ show(degreepart(m,8,8,v));
+ ==> // module, 1 generator(s)
+ ==> [x4,xy2,xz]
+
+
+File: sing.htm, Node: elimlinearpart, Next: elimpart, Prev: degreepart,
Up: presolve_lib
+
+D.7.1.2 elimlinearpart
+......................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ elimlinearpart(i[,n]); i=ideal, n=integer,
+ default: n=nvars(basering)
+
+*Return:*
+ list L with 5 entries:
+
+ L[1]: (interreduced) ideal obtained from i by substituing
+ from the first n variables those, which appear in a linear part
+ of i, by putting this part into triangular form
+ L[2]: ideal of variables which have been substituted
+ L[3]: ideal, j-th element defines substitution of j-th var in [2]
+ L[4]: ideal of variables of basering, eliminated ones are set to 0
+ L[5]: ideal, describing the map from the basering to itself such that
+ L[1] is the image of i
+
+*Note:*
+ the procedure does always interreduce the ideal i internally w.r.t.
+ ordering dp.
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z),dp;
+ ideal i = x3+y2+z,x2y2+z3,y+z+1;
+ elimlinearpart(i);
+ ==> [1]:
+ ==> _[1]=x3+z2+3z+1
+ ==> _[2]=x2z2+2x2z+z3+x2
+ ==> [2]:
+ ==> _[1]=y
+ ==> [3]:
+ ==> _[1]=y+z+1
+ ==> [4]:
+ ==> _[1]=x
+ ==> _[2]=0
+ ==> _[3]=z
+ ==> [5]:
+ ==> _[1]=x
+ ==> _[2]=-z-1
+ ==> _[3]=z
+
+
+File: sing.htm, Node: elimpart, Next: elimpartanyr, Prev: elimlinearpart,
Up: presolve_lib
+
+D.7.1.3 elimpart
+................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ elimpart(i [,n,e] ); i=ideal, n,e=integers
+ n : only the first n vars are considered for substitution,
+ e =0: substitute from linear part of i (same as elimlinearpart)
+ e!=0: eliminate also by direct substitution
+ (default: n = nvars(basering), e = 1)
+
+*Return:*
+ list of 5 objects:
+
+ [1]: ideal obtained by substituting from the first n variables those
+ from i, which appear in the linear part of i (or, if e!=0, which
+ can be expressed directly in the remaining vars)
+ [2]: ideal, variables which have been substituted
+ [3]: ideal, i-th element defines substitution of i-th var in [2]
+ [4]: ideal of variables of basering, substituted ones are set to 0
+ [5]: ideal, describing the map from the basering, say k[x(1..m)], to
+ itself onto k[..variables fom [4]..] and [1] is the image of i
+
+ The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5]
+ maps [3] to 0, hence induces an isomorphism
+
+ k[x(1..m)]/i -> k[..variables fom [4]..]/[1]
+
+*Note:*
+ If the basering has ordering (c,dp), this is faster for big ideals,
+ since it avoids internal ring change and mapping.
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z),dp;
+ ideal i =x2+y2,x2+y+1;
+ elimpart(i,3,0);
+ ==> [1]:
+ ==> _[1]=y2-y-1
+ ==> _[2]=x2+y+1
+ ==> [2]:
+ ==> _[1]=0
+ ==> [3]:
+ ==> _[1]=0
+ ==> [4]:
+ ==> _[1]=x
+ ==> _[2]=y
+ ==> _[3]=z
+ ==> [5]:
+ ==> _[1]=x
+ ==> _[2]=y
+ ==> _[3]=z
+ elimpart(i,3,1);
+ ==> [1]:
+ ==> _[1]=x4+3x2+1
+ ==> [2]:
+ ==> _[1]=y
+ ==> [3]:
+ ==> _[1]=x2+y+1
+ ==> [4]:
+ ==> _[1]=x
+ ==> _[2]=0
+ ==> _[3]=z
+ ==> [5]:
+ ==> _[1]=x
+ ==> _[2]=-x2-1
+ ==> _[3]=z
+
+
+File: sing.htm, Node: elimpartanyr, Next: fastelim, Prev: elimpart, Up:
presolve_lib
+
+D.7.1.4 elimpartanyr
+....................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ elimpartanyr(i [,p,e] ); i=ideal, p=polynomial, e=integer
+ p: product of vars to be eliminated,
+ e =0: substitute from linear part of i (same as elimlinearpart)
+ e!=0: eliminate also by direct substitution
+ (default: p=product of all vars, e=1)
+
+*Return:*
+ list of 6 objects:
+
+ [1]: (interreduced) ideal obtained by substituting from i those vars
+ appearing in p, which occur in the linear part of i (or which can
+ be expressed directly in the remaining variables, if e!=0)
+ [2]: ideal, variables which have been substituted
+ [3]: ideal, i-th element defines substitution of i-th var in [2]
+ [4]: ideal of variables of basering, substituted ones are set to 0
+ [5]: ideal, describing the map from the basering, say k[x(1..m)], to
+ itself onto k[..variables fom [4]..] and [1] is the image of i
+ [6]: int, # of vars considered for substitution (= # of factors of p)
+
+ The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5]
+ maps [3] to 0, hence induces an isomorphism
+
+ k[x(1..m)]/i -> k[..variables fom [4]..]/[1]
+
+*Note:*
+ the proc uses `execute' to create a ring with ordering dp and vars
+ placed correctly and then applies `elimpart'.
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z),dp;
+ ideal i = x3+y2+z,x2y2+z3,y+z+1;
+ elimpartanyr(i,z);
+ ==> [1]:
+ ==> _[1]=x3+y2-y-1
+ ==> _[2]=x2y2-y3-3y2-3y-1
+ ==> [2]:
+ ==> _[1]=z
+ ==> [3]:
+ ==> _[1]=y+z+1
+ ==> [4]:
+ ==> _[1]=0
+ ==> _[2]=x
+ ==> _[3]=y
+ ==> [5]:
+ ==> _[1]=-y-1
+ ==> _[2]=x
+ ==> _[3]=y
+ ==> [6]:
+ ==> 1
+
+
+File: sing.htm, Node: fastelim, Next: findvars, Prev: elimpartanyr, Up:
presolve_lib
+
+D.7.1.5 fastelim
+................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ fastelim(i,p[h,o,a,b,e,m]); i=ideal, p=polynomial;
+ h,o,a,b,e=integers p: product of variables to be eliminated;
+ Optional parameters:
+
+ - h !=0: use Hilbert-series driven std-basis computation
+ - o !=0: use proc `valvars' for a - hopefully - optimal ordering of vars
+ - a !=0: order vars to be eliminated w.r.t. increasing complexity
+ - b !=0: order vars not to be eliminated w.r.t. increasing complexity
+ - e !=0: use `elimpart' first to eliminate easy part
+ - m !=0: compute a minimal system of generators
+
+ (default: h,o,a,b,e,m = 0,1,0,0,0,0)
+
+*Return:*
+ ideal obtained from i by eliminating those variables, which occur
+ in p
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=31991,(e,f,x,y,z,t,u,v,w,a,b,c,d),dp;
+ ideal i = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1,
+ d2+e2-1, f4+2u, wa+tf, xy+tu+ab;
+ fastelim(i,xytua,1,1); //with hilb,valvars
+ ==> _[1]=f2+w2-1
+ ==> _[2]=z2+v2+c2-1
+ ==> _[3]=e2+d2-1
+ fastelim(i,xytua,1,0,1); //with hilb,minbase
+ ==> _[1]=z2+v2+c2-1
+ ==> _[2]=f2+w2-1
+ ==> _[3]=e2+d2-1
+
+
+File: sing.htm, Node: findvars, Next: hilbvec, Prev: fastelim, Up:
presolve_lib
+
+D.7.1.6 findvars
+................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ findvars(id [,any] ); id=poly/ideal/vector/module/matrix, any=any
+ type
+
+*Return:*
+ if no second argument is present: ideal of variables occurring in
+id,
+ if a second argument is given (of any type): list L with 4 entries:
+
+ L[1]: ideal of variables occurring in id
+ L[2]: intvec of variables occurring in id
+ L[3]: ideal of variables not occurring in id
+ L[4]: intvec of variables not occurring in id
+
+*Example:*
+ LIB "presolve.lib";
+ ring s = 0,(e,f,x,y,t,u,v,w,a,d),dp;
+ ideal i = w2+f2-1, x2+t2+a2-1;
+ findvars(i);
+ ==> _[1]=f
+ ==> _[2]=x
+ ==> _[3]=t
+ ==> _[4]=w
+ ==> _[5]=a
+ findvars(i,1);
+ ==> [1]:
+ ==> _[1]=f
+ ==> _[2]=x
+ ==> _[3]=t
+ ==> _[4]=w
+ ==> _[5]=a
+ ==> [2]:
+ ==> 2,3,5,8,9
+ ==> [3]:
+ ==> _[1]=e
+ ==> _[2]=y
+ ==> _[3]=u
+ ==> _[4]=v
+ ==> _[5]=d
+ ==> [4]:
+ ==> 1,4,6,7,10
+
+
+File: sing.htm, Node: hilbvec, Next: linearpart, Prev: findvars, Up:
presolve_lib
+
+D.7.1.7 hilbvec
+...............
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ hilbvec(id[,c,o]); id=poly/ideal/vector/module/matrix, c,o=strings,
+ c=char, o=ordering used by `hilb'
+ (default: c="32003", o="dp")
+
+*Return:*
+ intvec of 1-st Hilbert-series of id, computed in char c and
+ ordering o
+
+*Note:*
+ id must be homogeneous (i.e. all vars have weight 1)
+
+*Example:*
+ LIB "presolve.lib";
+ ring s = 0,(e,f,x,y,z,t,u,v,w,a,b,c,d,H),dp;
+ ideal id = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1,
+ d2+e2-1, f4+2u, wa+tf, xy+tu+ab;
+ id = homog(id,H);
+ hilbvec(id);
+ ==> 1,0,-7,0,20,0,-28,0,14,0,14,0,-28,0,20,0,-7,0,1,0
+
+
+File: sing.htm, Node: linearpart, Next: tolessvars, Prev: hilbvec, Up:
presolve_lib
+
+D.7.1.8 linearpart
+..................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ linearpart(id); id=ideal/module
+
+*Return:*
+ generators of id of total degree <= 1
+
+*Example:*
+ LIB "presolve.lib";
+ ring r=0,(x,y,z),dp;
+ ideal i=1+x+x2+x3,3,x+3y+5z;
+ linearpart(i);
+ ==> _[1]=3
+ ==> _[2]=x+3y+5z
+ module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1];
+ show(linearpart(m));
+ ==> // module, 1 generator(s)
+ ==> [x,y,z]
+
+
+File: sing.htm, Node: tolessvars, Next: solvelinearpart, Prev: linearpart,
Up: presolve_lib
+
+D.7.1.9 tolessvars
+..................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ tolessvars(id [,s1,s2] ); id poly/ideal/vector/module/matrix,
+s1,s2=strings
+ s1: name of new ring,
+ s2: new ordering
+ (default: s1="R(n)" where n is the # of vars in the new ring,
+ s2="dp" or "ds" depending whether the first block of the old
+ ordering is a p- resp. an s-ordering)
+
+*Create:*
+ nothing, if id contains all vars of the basering.
+ Else, create a ring with same char as the basering, but possibly
+ less variables (only those variables which actually occur in id)
+ and map id to the new ring, which will be the basering after the
+ proc has finished.
+
+*Display:*
+ If printlevel >=0, display ideal of vars, which have been omitted
+ from the old ring
+
+*Return:*
+ the original ideal id (see NOTE)
+
+*Note:*
+ You must not type, say, 'ideal id=tolessvars(id);' since the ring
+ to which 'id' would belong will only be defined by the r.h.s.. But
+ you may type 'def id=tolessvars(id);' or 'list id=tolessvars(id);'
+ since then 'id' does not a priory belong to a ring, its type will
+ be defined by the right hand side. Moreover, do not use a name
+ which occurs in the old ring, for the same reason.
+
+*Example:*
+ LIB "presolve.lib";
+ ring r = 0,(x,y,z),dp;
+ ideal i = y2-x3,x-3,y-2x;
+ def j = tolessvars(i,"R_r","lp");
+ ==>
+ ==> // variables which did not occur:
+ ==> z
+ ==> // basering is now R_r
+ show(basering);
+ ==> // ring: (0),(x,y),(lp(2),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // j [0] ideal, 3 generator(s)
+ j;
+ ==> j[1]=-x3+y2
+ ==> j[2]=x-3
+ ==> j[3]=-2x+y
+ kill R_r;
+
+
+File: sing.htm, Node: solvelinearpart, Next: sortandmap, Prev: tolessvars,
Up: presolve_lib
+
+D.7.1.10 solvelinearpart
+........................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ solvelinearpart(id [,n] ); id=ideal/module, n=integer,
+ (default: n=0)
+
+*Return:*
+ (interreduced) generators of id of degree <=1 in reduced triangular
+ form if n=0 [non-reduced triangular form if n!=0]
+
+*Assume:*
+ monomial ordering is a global ordering (p-ordering)
+
+*Note:*
+ may be used to solve a system of linear equations see proc
+ `gauss_row' from 'matrix.lib' for a different method
+
+*Warning:*
+ the result is very likely to be false for 'real' coefficients, use
+ char 0 instead!
+
+*Example:*
+ LIB "presolve.lib";
+ // Solve the system of linear equations:
+ // 3x + y + z - u = 2
+ // 3x + 8y + 6z - 7u = 1
+ // 14x + 10y + 6z - 7u = 0
+ // 7x + 4y + 3z - 3u = 3
+ ring r = 0,(x,y,z,u),lp;
+ ideal i= 3x + y + z - u,
+ 13x + 8y + 6z - 7u,
+ 14x + 10y + 6z - 7u,
+ 7x + 4y + 3z - 3u;
+ ideal j= 2,1,0,3;
+ j = i-j; // difference of 1x4 matrices
+ // compute reduced triangular form, setting
+ solvelinearpart(j); // the RHS equal 0 gives the solutions!
+ ==> _[1]=u-4
+ ==> _[2]=z-4
+ ==> _[3]=y+1
+ ==> _[4]=x-1
+ solvelinearpart(j,1); ""; // triangular form, not reduced
+ ==> _[1]=u-4
+ ==> _[2]=3z-8u+20
+ ==> _[3]=18y-6z+7u+14
+ ==> _[4]=13x+8y+6z-7u-1
+ ==>
+
+
+File: sing.htm, Node: sortandmap, Next: sortvars, Prev: solvelinearpart,
Up: presolve_lib
+
+D.7.1.11 sortandmap
+...................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+sortandmap(id,s1,s2[,n1,p1,n2,p2...,o1,m1,o2,m2...]);
+id=poly/ideal/vector/module,
+ s1,s2 = strings (names for new ring and mapped id),
+ p1,p2,...= polynomials (product of variables),
+ n1,n2,...= integers,
+ o1,o2,...= strings,
+ m1,m2,...= integers
+ (default: p1=product of all vars, n1=0, o1="dp",m1=0)
+ the last pi (containing the remaining vars) may be omitted
+
+*Create:*
+ a new ring and map id into it, the new ring has same char as
+ basering but with new ordering and vars sorted in the following
+ manner:
+
+ - each block of vars occurring in pi is sorted w.r.t. its complexity in
id,
+ - ni controls the sorting in i-th block (= vars occurring in pi):
+ ni=0 (resp.!=0) means that less (resp. more) complex vars come first
+ - oi and mi define the monomial ordering of the i-th block:
+ if mi =0, oi=ordstr(i-th block)
+ if mi!=0, the ordering of the i-th block itself is a blockordering,
+ each subblock having ordstr=oi, such that vars of same complexity
are
+ in one block
+
+ Note that only simple ordstrings oi are allowed:
+ "lp","dp","Dp","ls","ds","Ds".
+
+*Return:*
+ nothing
+
+*Note:*
+ We define a variable x to be more complex than y (with respect to
+ id) if val(x) > val(y) lexicographically, where val(x) denotes the
+ valuation vector of x:
+ consider id as list of polynomials in x with coefficients in the
+ remaining variables. Then:
+ val(x) = (maximal occurring power of x, # of all monomials in
+ leading coefficient, # of all monomials in coefficient of next
+ smaller power of x,...).
+
+*Example:*
+ LIB "presolve.lib";
+ ring s = 32003,(x,y,z),dp;
+ ideal i=x3+y2,xz+z2;
+ sortandmap(i,"R_r","i");
+ // i is now an ideal in the new basering R_r
+ show(R_r);
+ ==> // ring: (32003),(y,z,x),(dp(3),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // i [0] ideal, 2 generator(s)
+ kill R_r; setring s;
+ sortandmap(i,"R_r","i",1,xy,0,z,0,"ds",0,"lp",0);
+ show(R_r);
+ ==> // ring: (32003),(x,y,z),(ds(2),lp(1),C);
+ ==> // minpoly = 0
+ ==> // objects belonging to this ring:
+ ==> // i [0] ideal, 2 generator(s)
+ kill R_r;
+
+
+File: sing.htm, Node: sortvars, Next: shortid, Prev: sortandmap, Up:
presolve_lib
+
+D.7.1.12 sortvars
+.................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+sortvars(id[,n1,p1,n2,p2,...]);
+id=poly/ideal/vector/module,
+ p1,p2,...= polynomials (product of vars),
+n1,n2,...=integers
+ (default: p1=product of all vars, n1=0)
+ the last pi (containing the remaining vars) may be omitted
+
+*Compute:*
+ sort variables with respect to their complexity in id
+
+*Return:*
+ list of two elements, an ideal and a list:
+
+ [1]: ideal, variables of basering sorted w.r.t their complexity in id
+ ni controls the ordering in i-th block (= vars occurring in pi):
+ ni=0 (resp.!=0) means that less (resp. more) complex vars come
first
+ [2]: a list with 4 entries for each pi:
+ ideal ai : vars of pi in correct order,
+ intvec vi: permutation vector describing the ordering in ai,
+ intmat Mi: valuation matrix of ai, the columns of Mi being the
+ valuation vectors of the vars in ai
+ intvec wi: size of 1-st, 2-nd,... block of identical columns of Mi
+ (vars with same valuation)
+
+*Note:*
+ We define a variable x to be more complex than y (with respect to
+ id) if val(x) > val(y) lexicographically, where val(x) denotes the
+ valuation vector of x:
+ consider id as list of polynomials in x with coefficients in the
+ remaining variables. Then:
+ val(x) = (maximal occurring power of x, # of all monomials in
+ leading coefficient, # of all monomials in coefficient of next
+ smaller power of x,...).
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z,w),dp;
+ ideal i = x3+y2+yw2,xz+z2,xyz-w2;
+ sortvars(i,0,xy,1,zw);
+ ==> [1]:
+ ==> _[1]=y
+ ==> _[2]=x
+ ==> _[3]=w
+ ==> _[4]=z
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=y
+ ==> _[2]=x
+ ==> [2]:
+ ==> 2,1
+ ==> [3]:
+ ==> 2,3,
+ ==> 1,1,
+ ==> 2,0,
+ ==> 0,2
+ ==> [4]:
+ ==> 1,1
+ ==> [5]:
+ ==> _[1]=w
+ ==> _[2]=z
+ ==> [6]:
+ ==> 2,1
+ ==> [7]:
+ ==> 2,2,
+ ==> 2,1,
+ ==> 0,2
+ ==> [8]:
+ ==> 1,1
+
+
+File: sing.htm, Node: shortid, Next: valvars, Prev: sortvars, Up:
presolve_lib
+
+D.7.1.13 shortid
+................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ shortid(id,n[,e]); id= ideal/module, n,e=integers
+
+*Return:*
+ - if called with two arguments or e=0:
+ same type as id, containing generators of id having <= n terms.
+ - if called with three arguments and e!=0:
+ a list L:
+ L[1]: same type as id, containing generators of id having <= n
+ terms.
+ L[2]: number of corresponding generator of id
+
+*Note:*
+ May be used to compute partial standard basis in case id is to hard
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z,w),dp;
+ ideal i = (x3+y2+yw2)^2,(xz+z2)^2,xyz-w2-xzw;
+ shortid(i,3);
+ ==> _[1]=x2z2+2xz3+z4
+ ==> _[2]=xyz-xzw-w2
+
+
+File: sing.htm, Node: valvars, Next: idealSimplify, Prev: shortid, Up:
presolve_lib
+
+D.7.1.14 valvars
+................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+valvars(id[,n1,p1,n2,p2,...]);
+id=poly/ideal/vector/module,
+ p1,p2,...= polynomials (product of vars),
+ n1,n2,...= integers,
+
+ ni controls the ordering of vars occurring in pi: ni=0 (resp.!=0)
+ means that less (resp. more) complex vars come first
+ (default: p1=product of all vars, n1=0)
+ the last pi (containing the remaining vars) may be omitted
+
+*Compute:*
+ valuation (complexity) of variables with respect to id.
+ ni controls the ordering of vars occurring in pi:
+ ni=0 (resp.!=0) means that less (resp. more) complex vars come
+ first.
+
+*Return:*
+ list with 3 entries:
+
+ [1]: intvec, say v, describing the permutation such that the permuted
+ ringvariables are ordered with respect to their complexity in id
+ [2]: list of intvecs, i-th intvec, say v(i) describing permutation
+ of vars in a(i) such that v=v(1),v(2),...
+ [3]: list of ideals and intmat's, say a(i) and M(i), where
+ a(i): factors of pi,
+ M(i): valuation matrix of a(i), such that the j-th column of M(i)
+ is the valuation vector of j-th generator of a(i)
+
+*Note:*
+ Use `sortvars' in order to actually sort the variables! We define
+ a variable x to be more complex than y (with respect to id) if
+ val(x) > val(y) lexicographically, where val(x) denotes the
+ valuation vector of x:
+ consider id as list of polynomials in x with coefficients in the
+ remaining variables. Then:
+ val(x) = (maximal occurring power of x, # of all monomials in
+ leading coefficient, # of all monomials in coefficient of next
+ smaller power of x,...).
+
+*Example:*
+ LIB "presolve.lib";
+ ring s=0,(x,y,z,a,b),dp;
+ ideal i=ax2+ay3-b2x,abz+by2;
+ valvars (i,0,xyz);
+ ==> [1]:
+ ==> 3,1,2,4,5
+ ==> [2]:
+ ==> [1]:
+ ==> 3,1,2
+ ==> [2]:
+ ==> 1,2
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=x
+ ==> _[2]=y
+ ==> _[3]=z
+ ==> [2]:
+ ==> 2,3,1,
+ ==> 1,1,1,
+ ==> 1,1,0
+ ==> [3]:
+ ==> _[1]=a
+ ==> _[2]=b
+ ==> [4]:
+ ==> 1,2,
+ ==> 3,1,
+ ==> 0,2
+
+
+File: sing.htm, Node: idealSimplify, Next: idealSplit, Prev: valvars, Up:
presolve_lib
+
+D.7.1.15 idealSimplify
+......................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ idealSimplify(id); id ideal
+
+*Return:*
+ ideal I = eliminate(Id,m) m is a product of variables which are
+ only linearly involved in the generators of id
+
+*Example:*
+ LIB "presolve.lib";
+ ring r=0,(x,y,z,w,t),dp;
+ ideal i=
+ t,
+ x3+y2+2z,
+ x2+3y,
+ x2+y2+z2,
+ w2+z;
+ ideal j=idealSimplify(i);
+ ideal k=eliminate(i,zyt);
+ reduce(k,std(j));
+ ==> _[1]=0
+ ==> _[2]=0
+ reduce(j,std(k));
+ ==> _[1]=0
+ ==> _[2]=0
+
+
+File: sing.htm, Node: idealSplit, Prev: idealSimplify, Up: presolve_lib
+
+D.7.1.16 idealSplit
+...................
+
+Procedure from library `presolve.lib' (*note presolve_lib::).
+
+*Usage:*
+ idealSplit(id,timeF,timeS); id ideal and optional
+ timeF ,timeS integers to bound the time which can be used for
+ factorization resp. standard basis computation
+
+*Return:*
+ a list of ideals such that their intersection
+ has the same radical as id
+
+*Example:*
+ LIB "presolve.lib";
+ ring r=32003,(b,s,t,u,v,w,x,y,z),dp;
+ ideal i=
+ bv+su,
+ bw+tu,
+ sw+tv,
+ by+sx,
+ bz+tx,
+ sz+ty,
+ uy+vx,
+ uz+wx,
+ vz+wy,
+ bvz;
+ idealSplit(i);
+ ==> [1]:
+ ==> _[1]=x
+ ==> _[2]=u
+ ==> _[3]=t
+ ==> _[4]=s
+ ==> _[5]=b
+ ==> _[6]=wy+vz
+ ==> [2]:
+ ==> _[1]=z
+ ==> _[2]=w
+ ==> _[3]=t
+ ==> _[4]=s
+ ==> _[5]=b
+ ==> _[6]=vx+uy
+ ==> [3]:
+ ==> _[1]=z
+ ==> _[2]=x
+ ==> _[3]=w
+ ==> _[4]=u
+ ==> _[5]=t
+ ==> _[6]=b
+ ==> [4]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=t
+ ==> _[5]=s
+ ==> _[6]=b
+ ==> [5]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=u
+ ==> _[5]=b
+ ==> _[6]=tv+sw
+ ==> [6]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=w
+ ==> _[5]=t
+ ==> _[6]=su+bv
+ ==> [7]:
+ ==> _[1]=w
+ ==> _[2]=v
+ ==> _[3]=u
+ ==> _[4]=t
+ ==> _[5]=s
+ ==> _[6]=b
+ ==> [8]:
+ ==> _[1]=x
+ ==> _[2]=w
+ ==> _[3]=v
+ ==> _[4]=u
+ ==> _[5]=b
+ ==> _[6]=ty+sz
+ ==> [9]:
+ ==> _[1]=z
+ ==> _[2]=w
+ ==> _[3]=v
+ ==> _[4]=u
+ ==> _[5]=t
+ ==> _[6]=sx+by
+ ==> [10]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=w
+ ==> _[5]=v
+ ==> _[6]=u
+ ==> [11]:
+ ==> _[1]=y
+ ==> _[2]=v
+ ==> _[3]=t
+ ==> _[4]=s
+ ==> _[5]=b
+ ==> _[6]=wx+uz
+ ==> [12]:
+ ==> _[1]=y
+ ==> _[2]=x
+ ==> _[3]=v
+ ==> _[4]=u
+ ==> _[5]=s
+ ==> _[6]=b
+ ==> [13]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=x
+ ==> _[4]=v
+ ==> _[5]=s
+ ==> _[6]=tu+bw
+ ==> [14]:
+ ==> _[1]=z
+ ==> _[2]=y
+ ==> _[3]=w
+ ==> _[4]=v
+ ==> _[5]=t
+ ==> _[6]=s
+ ==> [15]:
+ ==> _[1]=y
+ ==> _[2]=w
+ ==> _[3]=v
+ ==> _[4]=u
+ ==> _[5]=s
+ ==> _[6]=tx+bz
+
+
+File: sing.htm, Node: solve_lib, Next: triang_lib, Prev: presolve_lib, Up:
Symbolic-numerical solving
+
+D.7.2 solve_lib
+---------------
+
+*Library:*
+ solve.lib
+
+*Purpose:*
+ Complex Solving of Polynomial Systems
+
+*Author:*
+ Moritz Wenk, email: address@hidden
+ Wilfred Pohl, email: address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* laguerre_solve:: find all roots of univariate polynomial p
+* solve:: all roots of 0-dim. ideal i using triangular sets
+* ures_solve:: find all roots of 0-dimensional ideal i with resultants
+* mp_res_mat:: multipolynomial resultant matrix of ideal i
+* interpolate:: interpolate poly from evaluation points i and results j
+* fglm_solve:: find roots of 0-dim. ideal using FGLM and lex_solve
+* lex_solve:: find roots of reduced lexicographic standard basis
+* simplexOut:: prints solution of simplex in nice format
+* triangLf_solve:: find roots using triangular sys. (factorizing Lazard)
+* triangM_solve:: find roots of given triangular system (Moeller)
+* triangL_solve:: find roots using triangular system (Lazard)
+* triang_solve:: find roots of given triangular system
+
+
+File: sing.htm, Node: laguerre_solve, Next: solve, Up: solve_lib
+
+D.7.2.1 laguerre_solve
+......................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ laguerre_solve(f [, m, l, n, s] ); f = polynomial,
+ m, l, n, s = integers (control parameters of the method)
+
+ m: precision of output in digits ( 4 <= m), if basering is not ring of
+ complex numbers;
+ l: precision of internal computation in decimal digits ( l >=8 )
+ only if the basering is not complex or complex with smaller
precision;
+ n: control of multiplicity of roots or of splitting of f into
+ squarefree factors
+ n < 0, no split of f (good, if all roots are simple)
+ n >= 0, try to split
+ n = 0, return only different roots
+ n > 0, find all roots (with multiplicity)
+ s: s != 0, returns ERROR if | f(root) | > 0.1^m (when computing in the
+ current ring)
+ ( default: m, l, n, s = 8, 30, 1, 0 )
+
+*Assume:*
+ f is a univariate polynomial;
+ basering has characteristic 0 and is either complex or without
+ parameters.
+
+*Return:*
+ list of (complex) roots of the polynomial f, depending on n. The
+ result is of type
+
+ string: if the basering is not complex,
+ number: otherwise.
+
+*Note:*
+ If printlevel >0: displays comments ( default = 0 ).
+ If s != 0 and if the procedure stops with ERROR, try a higher
+ internal precision m.
+
+*Example:*
+ LIB "solve.lib";
+ // Find all roots of an univariate polynomial using Laguerre's method:
+ ring rs1= 0,(x,y),lp;
+ poly f = 15x5 + x3 + x2 - 10;
+ // 10 digits precision
+ laguerre_solve(f,10);
+ ==> [1]:
+ ==> (0.2930464644-i*0.9003002396)
+ ==> [2]:
+ ==> (0.2930464644+i*0.9003002396)
+ ==> [3]:
+ ==> (-0.7392783383-i*0.5355190078)
+ ==> [4]:
+ ==> (-0.7392783383+i*0.5355190078)
+ ==> [5]:
+ ==> 0.8924637479
+ // Now with complex coefficients,
+ // internal precision is 30 digits (default)
+ printlevel=2;
+ ring rsc= (real,10,i),x,lp;
+ poly f = (15.4+i*5)*x^5 + (25.0e-2+i*2)*x^3 + x2 - 10*i;
+ list l = laguerre_solve(f);
+ ==> //BEGIN laguerre_solve
+ ==> //control: complex ring with precision 30
+ ==> //working in: ring lagc=(complex,30,30),x,lp;
+ ==> // polynomial has complex coefficients
+ ==> //split in working ring:
+ ==> // split without result
+ ==> //END laguerre_solve
+ l;
+ ==> [1]:
+ ==> (0.04588498039+i*0.9133296179)
+ ==> [2]:
+ ==> (0.5037408279-i*0.8058051828)
+ ==> [3]:
+ ==> (-0.5462895588-i*0.6796668873)
+ ==> [4]:
+ ==> (0.8524014357+i*0.2163760334)
+ ==> [5]:
+ ==> (-0.8557376852+i*0.3557664188)
+ // check result, value of substituted poly should be near to zero
+ // remember that l contains a list of strings
+ // in the case of a different ring
+ subst(f,x,l[1]);
+ ==> 0
+ subst(f,x,l[2]);
+ ==> 0
+
+
+File: sing.htm, Node: solve, Next: ures_solve, Prev: laguerre_solve, Up:
solve_lib
+
+D.7.2.2 solve
+.............
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Assume:*
+ the ideal is 0-dimensional;
+ basering has characteristic 0 and is either complex or without
+ parameters;
+
+*Return:*
+ list of solutions of the ideal G, depending on n; one solution is a
+ list of complex numbers in the generated output ring (the new
+ basering).
+
+ The result is a list L
+ n = 0: a list of all different solutions (L[i]),
+ n != 0: a list of two elements,
+ L[i][1] contains all different solutions with the same
multiplicity
+ L[i][2] the multiplicity
+ L is ordered w.r.t. multiplicity (the smallest first).
+
+*Note:*
+ If the problem is not 0-dim. the procedure stops with ERROR, if the
+ ideal G is not a lex. standard basis, it is generated with internal
+ computation (Hilbert driven), if the input-ring (with char 0) has
+ the name "<A>", the lexicographical and complex output-ring has the
+ name "<A>C".
+
+*Example:*
+ LIB "solve.lib";
+ // Find all roots of a multivariate ideal using triangular sets:
+ int d=4;// with these 3 parameters you may construct
+ int t=3;// very hard problems for 'solve'
+ int s=2;
+ int i;
+ ring A=0,(x(1..d)),dp;
+ poly p=-1;
+ for(i=d;i>0;i--){p=p+x(i)^s;}
+ ideal I=x(d)^t-x(d)^s+p;
+ for(i=d-1;i>0;i--){I=x(i)^t-x(i)^s+p,I;}
+ I;
+ ==> I[1]=x(1)^3+x(2)^2+x(3)^2+x(4)^2-1
+ ==> I[2]=x(2)^3+x(1)^2+x(3)^2+x(4)^2-1
+ ==> I[3]=x(3)^3+x(1)^2+x(2)^2+x(4)^2-1
+ ==> I[4]=x(4)^3+x(1)^2+x(2)^2+x(3)^2-1
+ // the mutiplicity is
+ vdim(std(I));
+ ==> 81
+ list l1=solve(I,6,0);
+ ==> // name of new current ring: AC
+ // the current ring is
+ AC;
+ ==> // characteristic : 0 (complex:6 digits, additional 6 digits)
+ ==> // 1 parameter : i
+ ==> // minpoly : (i^2+1)
+ ==> // number of vars : 4
+ ==> // block 1 : ordering lp
+ ==> // : names x(1) x(2) x(3) x(4)
+ ==> // block 2 : ordering C
+ // you must start with char. 0
+ setring A;
+ list l2=solve(I,6,1);
+ ==> // name of current ring: AC
+ // the number of different solutions is
+ size(l1);
+ ==> 37
+ // this is equal to
+ size(l2[1][1])+size(l2[2][1]);
+ ==> 37
+ // the number of solutions with multiplicity is
+ size(l2[1][1])*l2[1][2]+size(l2[2][1])*l2[2][2];
+ ==> 81
+ // the solutions with multiplicity
+ l2[2][2];
+ ==> 12
+ // are
+ l2[2][1];
+ ==> [1]:
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> 0
+ ==> [3]:
+ ==> 1
+ ==> [4]:
+ ==> 0
+ ==> [2]:
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> 1
+ ==> [3]:
+ ==> 0
+ ==> [4]:
+ ==> 0
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> 0
+ ==> [3]:
+ ==> 0
+ ==> [4]:
+ ==> 0
+ ==> [4]:
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> 0
+ ==> [3]:
+ ==> 0
+ ==> [4]:
+ ==> 1
+
+
+File: sing.htm, Node: ures_solve, Next: mp_res_mat, Prev: solve, Up:
solve_lib
+
+D.7.2.3 ures_solve
+..................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ ures_solve(i [, k, p] ); i = ideal, k, p = integers
+
+ k=0: use sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
+ k=1: use resultant matrix of Macaulay which works only for
+ homogeneous ideals,
+ p>0: defines precision of the long floats for internal computation
+ if the basering is not complex (in decimal digits),
+ (default: k=0, p=30)
+
+*Assume:*
+ i is a zerodimensional ideal with
+ nvars(basering) = ncols(i) = number of vars
+ actually occurring in i,
+
+*Return:*
+ list of all (complex) roots of the polynomial system i = 0; the
+ result is of type
+
+ string: if the basering is not complex,
+ number: otherwise.
+
+*Example:*
+ LIB "solve.lib";
+ // compute the intersection points of two curves
+ ring rsq = 0,(x,y),lp;
+ ideal gls= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ ures_solve(gls,0,16);
+ ==> [1]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [2]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+ ==> [3]:
+ ==> [1]:
+ ==> 2.82842712474619
+ ==> [2]:
+ ==> 1.414213562373095
+ ==> [4]:
+ ==> [1]:
+ ==> -2.82842712474619
+ ==> [2]:
+ ==> -1.414213562373095
+ // result is a list (x,y)-coordinates as strings
+ // now with complex coefficient field, precision is 20 digits
+ ring rsc= (real,20,I),(x,y),lp;
+ ideal i = (2+3*I)*x2 + (0.35+I*45.0e-2)*y2 - 8, x2 + xy + (42.7)*y2;
+ list l= ures_solve(i,0,10);
+ // result is a list of (x,y)-coordinates of complex numbers
+ l;
+ ==> [1]:
+ ==> [1]:
+ ==> (-1.315392899374542198+I*0.70468233142752928117)
+ ==> [2]:
+ ==> (0.12292646536251281054+I*0.19245727404407015049)
+ ==> [2]:
+ ==> [1]:
+ ==> (1.315392899374542198-I*0.70468233142752928117)
+ ==> [2]:
+ ==> (-0.12292646536251281054-I*0.19245727404407015049)
+ ==> [3]:
+ ==> [1]:
+ ==> (1.31584587549391830705-I*0.70396753310002259573)
+ ==> [2]:
+ ==> (0.092006639590217681983+I*0.20902112035965287775)
+ ==> [4]:
+ ==> [1]:
+ ==> (-1.31584587549391830705+I*0.70396753310002259573)
+ ==> [2]:
+ ==> (-0.092006639590217681983-I*0.20902112035965287775)
+ // check the result
+ subst(subst(i[1],x,l[1][1]),y,l[1][2]);
+ ==> 0
+
+
+File: sing.htm, Node: mp_res_mat, Next: interpolate, Prev: ures_solve, Up:
solve_lib
+
+D.7.2.4 mp_res_mat
+..................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ mp_res_mat(i [, k] ); i ideal, k integer,
+
+ k=0: sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
+ k=1: resultant matrix of Macaulay (k=0 is default)
+
+*Assume:*
+ The number of elements in the input system must be the number of
+ variables in the basering plus one;
+ if k=1 then i must be homogeneous.
+
+*Return:*
+ module representing the multipolynomial resultant matrix
+
+*Example:*
+ LIB "solve.lib";
+ // compute resultant matrix in ring with parameters (sparse resultant
matrix)
+ ring rsq= (0,u0,u1,u2),(x1,x2),lp;
+ ideal i= u0+u1*x1+u2*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
+ module m = mp_res_mat(i);
+ print(m);
+ ==> -16,0, -10,0, (u0),0, 0, 0, 0, 0,
+ ==> 0, -16,0, -10,(u2),(u0),0, 0, 0, 0,
+ ==> 2, 0, 1, 0, 0, (u2),0, 0, 0, 0,
+ ==> 0, 2, 0, 1, 0, 0, 0, 0, 0, 0,
+ ==> 0, 0, 0, 0, (u1),0, -10,(u0),0, -16,
+ ==> 1, 0, 0, 0, 0, (u1),0, (u2),(u0),0,
+ ==> 0, 1, 0, 0, 0, 0, 1, 0, (u2),2,
+ ==> 1, 0, 1, 0, 0, 0, 0, (u1),0, 0,
+ ==> 0, 1, 0, 1, 0, 0, 0, 0, (u1),1,
+ ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
+ // computing sparse resultant
+ det(m);
+ ==>
(-2*u0^4+18*u0^2*u1^2+4*u0^2*u1*u2+22*u0^2*u2^2-16*u1^4+80*u1^3*u2-52*u1^\
+ 2*u2^2-120*u1*u2^3-36*u2^4)
+ // compute resultant matrix (Macaulay resultant matrix)
+ ring rdq= (0,u0,u1,u2),(x0,x1,x2),lp;
+ ideal h= homog(imap(rsq,i),x0);
+ h;
+ ==> h[1]=(u0)*x0+(u1)*x1+(u2)*x2
+ ==> h[2]=-10*x0^2+x1^2+x2^2
+ ==> h[3]=-16*x0^2+x1^2+x1*x2+2*x2^2
+ module m = mp_res_mat(h,1);
+ print(m);
+ ==> x0, x1, x2, 0, 0, 0, 0,0, 0, 0,
+ ==> 0, x0, 0, x1,x2,0, 0,0, 0, 0,
+ ==> 0, 0, x0, 0, x1,x2,0,0, 0, 0,
+ ==> -10,0, 0, 1, 0, 1, 0,0, 0, 0,
+ ==> 0, 0, 0, 0, x0,0, 0,x1,x2,0,
+ ==> -16,0, 0, 1, 1, 2, 0,0, 0, 0,
+ ==> 0, -10,0, 0, 0, 0, 1,0, 1, 0,
+ ==> 0, 0, -10,0, 0, 0, 0,1, 0, 1,
+ ==> 0, -16,0, 0, 0, 0, 1,1, 2, 0,
+ ==> 0, 0, -16,0, 0, 0, 0,1, 1, 2
+ // computing Macaulay resultant (should be the same as above!)
+ det(m);
+ ==>
2*x0^4-18*x0^2*x1^2-4*x0^2*x1*x2-22*x0^2*x2^2+16*x1^4-80*x1^3*x2+52*x1^2*\
+ x2^2+120*x1*x2^3+36*x2^4
+ // compute numerical sparse resultant matrix
+ setring rsq;
+ ideal ir= 15+2*x1+5*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
+ module mn = mp_res_mat(ir);
+ print(mn);
+ ==> 15,0, -10,0, 0, 0, 0, -16,0, 0,
+ ==> 5, 15,0, -10,0, 0, 0, 0, -16,0,
+ ==> 0, 5, 1, 0, 0, 0, 0, 2, 0, 0,
+ ==> 0, 0, 0, 1, 0, 0, 0, 0, 2, 0,
+ ==> 2, 0, 0, 0, 15,0, -10,0, 0, -16,
+ ==> 0, 2, 0, 0, 5, 15,0, 1, 0, 0,
+ ==> 0, 0, 0, 0, 0, 5, 1, 0, 1, 2,
+ ==> 0, 0, 1, 0, 2, 0, 0, 1, 0, 0,
+ ==> 0, 0, 0, 1, 0, 2, 0, 0, 1, 1,
+ ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
+ // computing sparse resultant
+ det(mn);
+ ==> -7056
+
+
+File: sing.htm, Node: interpolate, Next: fglm_solve, Prev: mp_res_mat, Up:
solve_lib
+
+D.7.2.5 interpolate
+...................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ interpolate(p,v,d); p,v=ideals of numbers, d=integer
+
+*Assume:*
+ Ground field K is the field of rational numbers, p and v are lists
+ of elements of the ground field K with p[j] != -1,0,1, size(p) = n
+ (= number of vars) and size(v)=N=(d+1)^n.
+
+*Return:*
+ poly f, the unique polynomial f of degree n*d with prescribed
+ values v[i] at the points p(i)=(p[1]^(i-1),..,p[n]^(i-1)),
+ i=1,..,N.
+
+*Note:*
+ mainly useful when n=1, i.e. f is satisfying f(p^(i-1)) = v[i],
+ i=1..d+1.
+
+*Example:*
+ LIB "solve.lib";
+ ring r1 = 0,(x),lp;
+ // determine f with deg(f) = 4 and
+ // v = values of f at points 3^0, 3^1, 3^2, 3^3, 3^4
+ ideal v=16,0,11376,1046880,85949136;
+ interpolate( 3, v, 4 );
+ ==> 2x4-22x2+36
+
+* Menu:
+
+See also:
+* vandermonde::
+
+*See also:* *note vandermonde::.
+
+
+File: sing.htm, Node: fglm_solve, Next: lex_solve, Prev: interpolate, Up:
solve_lib
+
+D.7.2.6 fglm_solve
+..................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ fglm_solve(i [, p] ); i ideal, p integer
+
+*Assume:*
+ the ground field has char 0.
+
+*Return:*
+ a list of numbers, the complex roots of i;
+ p>0: gives precision of complex numbers in decimal digits (default:
+ p=30).
+
+*Note:*
+ The procedure uses a standard basis of i to determine all complex
+ roots of i.
+ It creates a ring rC with the same number of variables but with
+ complex coefficients (and precision p).
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ fglm_solve(s,10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [2]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [4]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+
+
+File: sing.htm, Node: lex_solve, Next: simplexOut, Prev: fglm_solve, Up:
solve_lib
+
+D.7.2.7 lex_solve
+.................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ lex_solve( i[,p] ); i=ideal, p=integer,
+
+ p>0: gives precision of complex numbers in decimal digits (default:
p=30).
+
+*Assume:*
+ i is a reduced lexicographical Groebner bases of a zero-dimensional
+ ideal, sorted by increasing leading terms.
+
+*Return:*
+ nothing
+
+*Create:*
+ The procedure creates a complec ring with the same variables but
+ with complex coefficients (and precision p).
+ In this ring a list rlist of numbers is created, in which the
+ complex roots of i are stored.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ lex_solve(stdfglm(s),10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [2]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [4]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+
+
+File: sing.htm, Node: simplexOut, Next: triangLf_solve, Prev: lex_solve,
Up: solve_lib
+
+D.7.2.8 simplexOut
+..................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ simplexOut(l); l list
+
+*Assume:*
+ l is the output of simplex.
+
+*Return:*
+ nothing. The procedure prints the computed solution of simplex (as
+ strings) in a nice format.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = (real,10),(x),lp;
+ // consider the max. problem:
+ //
+ // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4)
+ //
+ // with constraints: x(1) + 2*x(3) <= 740
+ // 2*x(2) - 7*x(4) <= 0
+ // x(2) - x(3) + 2*x(4) >= 0.5
+ // x(1) + x(2) + x(3) + x(4) = 9
+ //
+ matrix sm[5][5]= 0, 1, 1, 3,-0.5,
+ 740,-1, 0,-2, 0,
+ 0, 0,-2, 0, 7,
+ 0.5, 0,-1, 1,-2,
+ 9,-1,-1,-1,-1;
+ int n = 4; // number of constraints
+ int m = 4; // number of variables
+ int m1= 2; // number of <= constraints
+ int m2= 1; // number of >= constraints
+ int m3= 1; // number of == constraints
+ list sol=simplex(sm, n, m, m1, m2, m3);
+ simplexOut(sol);
+ ==> z = 17.025
+ ==> x2 = 3.325
+ ==> x4 = 0.95
+ ==> x3 = 4.725
+
+* Menu:
+
+See also:
+* simplex::
+
+*See also:* *note simplex::.
+
+
+File: sing.htm, Node: triangLf_solve, Next: triangM_solve, Prev:
simplexOut, Up: solve_lib
+
+D.7.2.9 triangLf_solve
+......................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ triangLf_solve(i [, p] ); i ideal, p integer,
+ p>0: gives precision of complex numbers in digits (default: p=30).
+
+*Assume:*
+ the ground field has char 0; i is a zero-dimensional ideal
+
+*Return:*
+ nothing
+
+*Create:*
+ The procedure creates a ring rC with the same number of variables
+ but with complex coefficients (and precision p).
+ In rC a list rlist of numbers is created, in which the complex
+ roots of i are stored.
+ The proc uses a triangular system (Lazard's Algorithm with
+ factorization) computed from a standard basis to determine
+ recursively all complex roots with Laguerre's algorithm of input
+ ideal i.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ triangLf_solve(s,10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+ ==> [2]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [3]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [4]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+
+
+File: sing.htm, Node: triangM_solve, Next: triangL_solve, Prev:
triangLf_solve, Up: solve_lib
+
+D.7.2.10 triangM_solve
+......................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ triangM_solve(i [, p ] ); i=ideal, p=integer,
+ p>0: gives precision of complex numbers in digits (default: p=30).
+
+*Assume:*
+ the ground field has char 0;
+ i zero-dimensional ideal
+
+*Return:*
+ nothing
+
+*Create:*
+ The procedure creates a ring rC with the same number of variables
+ but with complex coefficients (and precision p).
+ In rC a list rlist of numbers is created, in which the complex
+ roots of i are stored.
+ The proc uses a triangular system (Moellers Algorithm) computed
+ from a standard basis to determine recursively all complex roots
+ with Laguerre's algorithm of input ideal i.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ triangM_solve(s,10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [2]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [4]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+
+
+File: sing.htm, Node: triangL_solve, Next: triang_solve, Prev:
triangM_solve, Up: solve_lib
+
+D.7.2.11 triangL_solve
+......................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ triangL_solve(i [, p] ); i=ideal, p=integer,
+ p>0: gives precision of complex numbers in digits (default: p=30).
+
+*Assume:*
+ the ground field has char 0; i is a zero-dimensional ideal.
+
+*Return:*
+ nothing
+
+*Create:*
+ The procedure creates a ring rC with the same number of variables
+ but with complex coefficients (and precision p).
+ In rC a list rlist of numbers is created, in which the complex
+ roots of i are stored.
+ The proc uses a triangular system (Lazard's Algorithm) computed
+ from a standard basis to determine recursively all complex roots
+ with Laguerre's algorithm of input ideal i.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ triangL_solve(s,10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [2]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+ ==> [3]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [4]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+
+
+File: sing.htm, Node: triang_solve, Prev: triangL_solve, Up: solve_lib
+
+D.7.2.12 triang_solve
+.....................
+
+Procedure from library `solve.lib' (*note solve_lib::).
+
+*Usage:*
+ triang_solve(l,p [, d] ); l=list, p,d=integers,
+ l a list of finitely many triangular systems, such that the union
+ of their varieties equals the variety of the initial ideal.
+ p>0: gives precision of complex numbers in digits,
+ d>0: gives precision (1<d<p) for near-zero-determination,
+ (default: d=1/2*p).
+
+*Assume:*
+ the ground field has char 0;
+ l was computed using Algorithm of Lazard or Algorithm of Moeller
+ (see triang.lib).
+
+*Return:*
+ nothing
+
+*Create:*
+ The procedure creates a ring rC with the same number of variables
+ but with complex coefficients (and precision p).
+ In rC a list rlist of numbers is created, in which the complex
+ roots of i are stored.
+
+*Example:*
+ LIB "solve.lib";
+ ring r = 0,(x,y),lp;
+ // compute the intersection points of two curves
+ ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
+ triang_solve(triangLfak(stdfglm(s)),10);
+ ==> // name of new ring: rC
+ ==> // list of roots: rlist
+ rlist;
+ ==> [1]:
+ ==> [1]:
+ ==> -1
+ ==> [2]:
+ ==> 3
+ ==> [2]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> -3
+ ==> [3]:
+ ==> [1]:
+ ==> 2.8284271247
+ ==> [2]:
+ ==> 1.4142135624
+ ==> [4]:
+ ==> [1]:
+ ==> -2.8284271247
+ ==> [2]:
+ ==> -1.4142135624
+
+
+File: sing.htm, Node: triang_lib, Next: ntsolve_lib, Prev: solve_lib, Up:
Symbolic-numerical solving
+
+D.7.3 triang_lib
+----------------
+
+*Library:*
+ triang.lib
+
+*Purpose:*
+ Decompose Zero-dimensional Ideals into Triangular Sets
+
+*Author:*
+ D. Hillebrand
+
+*Procedures:*
+
+* Menu:
+
+* triangL:: Decomposition of (G) into triangular systems (Lazard).
+* triangLfak:: Decomp. of (G) into tri. systems plus factorization.
+* triangM:: Decomposition of (G) into triangular systems (Moeller).
+* triangMH:: Decomp. of (G) into tri. syst. with disjoint varieties.
+
+
+File: sing.htm, Node: triangL, Next: triangLfak, Up: triang_lib
+
+D.7.3.1 triangL
+...............
+
+Procedure from library `triang.lib' (*note triang_lib::).
+
+*Usage:*
+ triangL(G); G=ideal
+
+*Assume:*
+ G is the reduced lexicographical Groebner bases of the
+ zero-dimensional ideal (G), sorted by increasing leading terms.
+
+*Return:*
+ a list of finitely many triangular systems, such that the union of
+ their varieties equals the variety of (G).
+
+*Note:*
+ Algorithm of Lazard (see: Lazard, D.: Solving zero-dimensional
+ algebraic systems, J. Symb. Comp. 13, 117 - 132, 1992).
+
+*Example:*
+ LIB "triang.lib";
+ ring rC5 = 0,(e,d,c,b,a),lp;
+ triangL(stdfglm(cyclic(5)));
+
+
+File: sing.htm, Node: triangLfak, Next: triangM, Prev: triangL, Up:
triang_lib
+
+D.7.3.2 triangLfak
+..................
+
+Procedure from library `triang.lib' (*note triang_lib::).
+
+*Usage:*
+ triangLfak(G); G=ideal
+
+*Assume:*
+ G is the reduced lexicographical Groebner bases of the
+ zero-dimensional ideal (G), sorted by increasing leading terms.
+
+*Return:*
+ a list of finitely many triangular systems, such that the union of
+ their varieties equals the variety of (G).
+
+*Note:*
+ Algorithm of Lazard with factorization (see: Lazard, D.: Solving
+ zero-dimensional algebraic systems, J. Symb. Comp. 13, 117 - 132,
+ 1992).
+
+*Remark:*
+ each polynomial of the triangular systems is factorized.
+
+*Example:*
+ LIB "triang.lib";
+ ring rC5 = 0,(e,d,c,b,a),lp;
+ triangLfak(stdfglm(cyclic(5)));
+
+
+File: sing.htm, Node: triangM, Next: triangMH, Prev: triangLfak, Up:
triang_lib
+
+D.7.3.3 triangM
+...............
+
+Procedure from library `triang.lib' (*note triang_lib::).
+
+*Usage:*
+ triangM(G[,i]); G=ideal, i=integer,
+
+*Assume:*
+ G is the reduced lexicographical Groebner bases of the
+ zero-dimensional ideal (G), sorted by increasing leading terms.
+
+*Return:*
+ a list of finitely many triangular systems, such that the union of
+ their varieties equals the variety of (G). If i = 2, then each
+ polynomial of the triangular systems is factorized.
+
+*Note:*
+ Algorithm of Moeller (see: Moeller, H.M.:
+ On decomposing systems of polynomial equations with
+ finitely many solutions, Appl. Algebra Eng. Commun. Comput. 4, 217
+ - 230, 1993).
+
+*Example:*
+ LIB "triang.lib";
+ ring rC5 = 0,(e,d,c,b,a),lp;
+ triangM(stdfglm(cyclic(5))); //oder: triangM(stdfglm(cyclic(5)),2);
+
+
+File: sing.htm, Node: triangMH, Prev: triangM, Up: triang_lib
+
+D.7.3.4 triangMH
+................
+
+Procedure from library `triang.lib' (*note triang_lib::).
+
+*Usage:*
+ triangMH(G[,i]); G=ideal, i=integer
+
+*Assume:*
+ G is the reduced lexicographical Groebner bases of the
+ zero-dimensional ideal (G), sorted by increasing leading terms.
+
+*Return:*
+ a list of finitely many triangular systems, such that the disjoint
+ union of their varieties equals the variety of (G). If i = 2, then
+ each polynomial of the triangular systems is factorized.
+
+*Note:*
+ Algorithm of Moeller and Hillebrand (see: Moeller, H.M.: On
+ decomposing systems of polynomial equations with finitely many
+ solutions, Appl. Algebra Eng. Commun. Comput. 4, 217 - 230, 1993
+ and Hillebrand, D.: Triangulierung nulldimensionaler Ideale -
+ Implementierung und Vergleich zweier Algorithmen, master thesis,
+ Universitaet Dortmund, Fachbereich Mathematik, Prof. Dr. H.M.
+ Moeller, 1999).
+
+*Example:*
+ LIB "triang.lib";
+ ring rC5 = 0,(e,d,c,b,a),lp;
+ triangMH(stdfglm(cyclic(5)));
+
+
+File: sing.htm, Node: ntsolve_lib, Next: zeroset_lib, Prev: triang_lib,
Up: Symbolic-numerical solving
+
+D.7.4 ntsolve_lib
+-----------------
+
+*Library:*
+ ntsolve.lib
+
+*Purpose:*
+ Real Newton Solving of Polynomial Systems
+
+*Authors:*
+ Wilfred Pohl, email: address@hidden
+ Dietmar Hillebrand
+
+*Procedures:*
+
+* Menu:
+
+* nt_solve:: find one real root of 0-dimensional ideal G
+* triMNewton:: find one real root for 0-dim triangular system G
+
+
+File: sing.htm, Node: nt_solve, Next: triMNewton, Up: ntsolve_lib
+
+D.7.4.1 nt_solve
+................
+
+Procedure from library `ntsolve.lib' (*note ntsolve_lib::).
+
+*Usage:*
+ nt_solve(gls,ini[,ipar]); gls,ini= ideals, ipar=list/intvec,
+ gls: contains the equations, for which a solution will be computed
+ ini: ideal of initial values (approximate solutions to start with),
+ ipar: control integers (default: ipar = 100,10)
+
+ ipar[1]: max. number of iterations
+ ipar[2]: accuracy (we have the l_2-norm ||.||): accept solution `sol'
+ if ||gls(sol)|| < eps0*(0.1^ipar[2])
+ where eps0 = ||gls(ini)|| is the initial error
+
+*Assume:*
+ gls is a zerodimensional ideal with nvars(basering) = size(gls)
+ (>1)
+
+*Return:*
+ ideal, coordinates of one solution (if found), 0 else
+
+*Note:*
+ if printlevel >0: displays comments (default =0)
+
+*Example:*
+ LIB "ntsolve.lib";
+ ring rsq = (real,40),(x,y,z,w),lp;
+ ideal gls = x2+y2+z2-10, y2+z3+w-8, xy+yz+xz+w5 - 1,w3+y;
+ ideal ini = 3.1,2.9,1.1,0.5;
+ intvec ipar = 200,0;
+ ideal sol = nt_solve(gls,ini,ipar);
+ sol;
+ ==> sol[1]=0.8698104581550055082008024750939710335537
+ ==> sol[2]=2.8215774457503246008496262517717182369409
+ ==> sol[3]=1.1323120084664179900060940157112668717318
+ ==> sol[4]=-1.413071026406678849397999475590194239628
+
+
+File: sing.htm, Node: triMNewton, Prev: nt_solve, Up: ntsolve_lib
+
+D.7.4.2 triMNewton
+..................
+
+Procedure from library `ntsolve.lib' (*note ntsolve_lib::).
+
+*Usage:*
+ triMNewton(G,a[,ipar]); G,a= ideals, ipar=list/intvec
+
+*Assume:*
+ G: g1,..,gn, a triangular system of n equations in n vars, i.e.
+gi=gi(var(n-i+1),..,var(n)),
+ a: ideal of numbers, coordinates of an approximation of a common
+ zero of G to start with (with a[i] to be substituted in var(i)),
+ ipar: control integer vector (default: ipar = 100,10)
+
+ ipar[1]: max. number of iterations
+ ipar[2]: accuracy (we have as norm |.| absolute value ):
+ accept solution `sol' if |G(sol)| < |G(a)|*(0.1^ipar[2]).
+
+*Return:*
+ an ideal, coordinates of a better approximation of a zero of G
+
+*Example:*
+ LIB "ntsolve.lib";
+ ring r = (real,30),(z,y,x),(lp);
+ ideal i = x^2-1,y^2+x4-3,z2-y4+x-1;
+ ideal a = 2,3,4;
+ intvec e = 20,10;
+ ideal l = triMNewton(i,a,e);
+ l;
+ ==> l[1]=-2.000000000042265738880279143423
+ ==> l[2]=1.41421356237309504880168872421
+ ==> l[3]=1
+
+
+File: sing.htm, Node: zeroset_lib, Prev: ntsolve_lib, Up:
Symbolic-numerical solving
+
+D.7.5 zeroset_lib
+-----------------
+
+*Library:*
+ zeroset.lib
+
+*Purpose:*
+ Procedures For Roots and Factorization
+
+*Author:*
+ Thomas Bayer, email: address@hidden
+ http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current
+ Adress: Institut fuer Informatik, TU Muenchen
+
+*Overview:*
+ Algorithms for finding the zero-set of a zero-dim. ideal in
+ Q(a)[x_1,..,x_n], Roots and Factorization of univariate polynomials
+ over Q(a)[t] where a is an algebraic number. Written in the frame
+ of the diploma thesis (advisor: Prof. Gert-Martin Greuel)
+ 'Computations of moduli spaces of semiquasihomogeneous
+ singularities and an implementation in Singular'. This library is
+ meant as a preliminary extension of the functionality of Singular
+ for univariate factorization of polynomials over simple algebraic
+ extensions in characteristic 0.
+ Subprocedures with postfix 'Main' require that the ring contains a
+ variable 'a' and no parameters, and the ideal 'mpoly', where
+ 'minpoly' from the basering is stored.
+
+*Procedures:*
+
+* Menu:
+
+* EGCD:: gcd over an algebraic extension field of Q
+* Factor:: factorization of f over an algebraic extension field
+* Quotient:: quotient q of f w.r.t. g (in f = q*g + remainder)
+* Remainder:: remainder of the division of f by g
+* Roots:: computes all roots of f in an extension field of Q
+* SQFRNorm:: norm of f (f must be squarefree)
+* ZeroSet:: zero-set of the 0-dim. ideal I
+
+*Auxiliary procedures:*
+
+* Menu:
+
+* EGCDMain:: gcd over an algebraic extension field of Q
+* FactorMain:: factorization of f over an algebraic extension field
+* InvertNumberMain:: inverts an element of an algebraic extension field
+* QuotientMain:: quotient of f w.r.t. g
+* RemainderMain:: remainder of the division of f by g
+* RootsMain:: computes all roots of f, might extend the ground field
+* SQFRNormMain:: norm of f (f must be squarefree)
+* ContainedQ:: f in data ?
+* SameQ:: a == b (list a,b)
+
+
+File: sing.htm, Node: EGCD, Next: Factor, Up: zeroset_lib
+
+D.7.5.1 EGCD
+............
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ EGCD(f, g); where f,g are polynomials
+
+*Purpose:*
+ compute the polynomial gcd of f and g over Q(a)[x]
+
+*Return:*
+ polynomial h s.t. h is a greatest common divisor of f and g (not
+ nec. monic)
+
+*Assume:*
+ basering = Q(a)[t]
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x4 - 1;
+ poly g = x2 - 2*a*x - 1;
+ EGCD(f, g);
+ ==> (-4a)*x-4
+
+
+File: sing.htm, Node: Factor, Next: Quotient, Prev: EGCD, Up: zeroset_lib
+
+D.7.5.2 Factor
+..............
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ Factor(f); where f is a polynomial
+
+*Purpose:*
+ compute the factorization of the squarefree poly f over Q(a)[t]
+
+*Return:*
+ list with two entries
+
+ _[1] = factors (monic), first entry is the leading coefficient
+ _[2] = multiplicities (not yet implemented)
+
+*Assume:*
+ basering must be the univariate polynomial ring over a field, which
+ is Q or a simple extension of Q given by a minpoly.
+
+*Note:*
+ if basering = Q[t] then this is the built-in `factorize'
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x4 - 1;
+ list fl = Factor(f);
+ fl;
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=(40a+60)*x+(40a+60)
+ ==> _[3]=(1/65a-29/130)*x+(-1/65a+29/130)
+ ==> _[4]=(4a)*x+4
+ ==> _[5]=(7/520a+1/130)*x+(1/130a-7/520)
+ ==> [2]:
+ ==> _[1]=1
+ ==> _[2]=1
+ ==> _[3]=1
+ ==> _[4]=1
+ ==> _[5]=1
+ fl[1][1]*fl[1][2]*fl[1][3]*fl[1][4]*fl[1][5] - f;
+ ==> 0
+
+
+File: sing.htm, Node: Quotient, Next: Remainder, Prev: Factor, Up:
zeroset_lib
+
+D.7.5.3 Quotient
+................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ Quotient(f, g); where f,g are polynomials;
+
+*Purpose:*
+ compute the quotient q and remainder r s.t. f = g*q + r, deg(r) <
+ deg(g)
+
+*Return:*
+ list of polynomials
+
+ _[1] = quotient q
+ _[2] = remainder r
+
+*Assume:*
+ basering = Q[x] or Q(a)[x]
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x4 - 2;
+ poly g = x - a;
+ list qr = Quotient(f, g);
+ qr;
+ ==> [1]:
+ ==> x3+(a)*x2-x+(-a)
+ ==> [2]:
+ ==> 0
+ qr[1]*g + qr[2] - f;
+ ==> 1
+
+
+File: sing.htm, Node: Remainder, Next: Roots, Prev: Quotient, Up:
zeroset_lib
+
+D.7.5.4 Remainder
+.................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ Remainder(f, g); where f,g are polynomials
+
+*Purpose:*
+ compute the remainder of the division of f by g, i.e. a polynomial
+ r s.t. f = g*q + r, deg(r) < deg(g).
+
+*Return:*
+ poly
+
+*Assume:*
+ basering = Q[x] or Q(a)[x]
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x4 - 1;
+ poly g = x3 - 1;
+ Remainder(f, g);
+ ==> x-1
+
+
+File: sing.htm, Node: Roots, Next: SQFRNorm, Prev: Remainder, Up:
zeroset_lib
+
+D.7.5.5 Roots
+.............
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ Roots(f); where f is a polynomial
+
+*Purpose:*
+ compute all roots of f in a finite extension of the ground field
+ without multiplicities.
+
+*Return:*
+ ring, a polynomial ring over an extension field of the ground
+ field, containing a list 'roots' and polynomials 'newA' and 'f':
+
+ - 'roots' is the list of roots of the polynomial f (no multiplicities)
+ - if the ground field is Q(a') and the extension field is Q(a), then
+ 'newA' is the representation of a' in Q(a).
+ If the basering contains a parameter 'a' and the minpoly remains
unchanged
+ then 'newA' = 'a'.
+ If the basering does not contain a parameter then 'newA' = 'a'
(default).
+ - 'f' is the polynomial f in Q(a) (a' being substituted by 'newA')
+
+*Assume:*
+ ground field to be Q or a simple extension of Q given by a minpoly
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x3 - a;
+ def R1 = Roots(f);
+ ==>
+ ==> // 'Roots' created a new ring which contains the list 'roots' and
+ ==> // the polynomials 'f' and 'newA'
+ ==> // To access the roots, newA and the new representation of f, type
+ ==> def R = Roots(f); setring R; roots; newA; f;
+ ==>
+ setring R1;
+ minpoly;
+ ==> (a4-a2+1)
+ newA;
+ ==> (a3)
+ f;
+ ==> x3+(-a3)
+ roots;
+ ==> [1]:
+ ==> (-a3)
+ ==> [2]:
+ ==> (a3-a)
+ ==> [3]:
+ ==> (a)
+ map F;
+ F[1] = roots[1];
+ F(f);
+ ==> 0
+
+
+File: sing.htm, Node: SQFRNorm, Next: ZeroSet, Prev: Roots, Up: zeroset_lib
+
+D.7.5.6 SQFRNorm
+................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ SQFRNorm(f); where f is a polynomial
+
+*Purpose:*
+ compute the norm of the squarefree polynomial f in Q(a)[x].
+
+*Return:*
+ list with 3 entries
+
+ _[1] = squarefree norm of g (poly)
+ _[2] = g (= f(x - s*a)) (poly)
+ _[3] = s (int)
+
+*Assume:*
+ f must be squarefree, basering = Q(a)[x] and minpoly != 0.
+
+*Note:*
+ the norm is an element of Q[x]
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), x, lp;
+ minpoly = a2+1;
+ poly f = x4 - 2*x + 1;
+ SQFRNorm(f);
+ ==> [1]:
+ ==> x8+4*x6-4*x5+8*x4+8*x3-4*x2+8*x+8
+ ==> [2]:
+ ==> x4+(-4a)*x3-6*x2+(4a-2)*x+(2a+2)
+ ==> [3]:
+ ==> 1
+
+
+File: sing.htm, Node: ZeroSet, Next: EGCDMain, Prev: SQFRNorm, Up:
zeroset_lib
+
+D.7.5.7 ZeroSet
+...............
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ ZeroSet(I [,opt] ); I=ideal, opt=integer
+
+*Purpose:*
+ compute the zero-set of the zero-dim. ideal I, in a finite
+ extension of the ground field.
+
+*Return:*
+ ring, a polynomial ring over an extension field of the ground
+ field, containing a list 'zeroset', a polynomial 'newA', and an
+ ideal 'id':
+
+ - 'zeroset' is the list of the zeros of the ideal I, each zero is an
ideal.
+ - if the ground field is Q(a') and the extension field is Q(a), then
+ 'newA' is the representation of a' in Q(a).
+ If the basering contains a parameter 'a' and the minpoly remains
unchanged
+ then 'newA' = 'a'.
+ If the basering does not contain a parameter then 'newA' = 'a'
(default).
+ - 'id' is the ideal I in Q(a)[x_1,...] (a' substituted by 'newA')
+
+*Assume:*
+ dim(I) = 0, and ground field to be Q or a simple extension of Q
+ given by a minpoly.
+
+*Options:*
+ opt = 0 no primary decomposition (default)
+ opt > 0 primary decomposition
+
+*Note:*
+ If I contains an algebraic number (parameter) then 'I' must be
+ transformed w.r.t. 'newA' in the new ring.
+
+*Example:*
+ LIB "zeroset.lib";
+ ring R = (0,a), (x,y,z), lp;
+ minpoly = a2 + 1;
+ ideal I = x2 - 1/2, a*z - 1, y - 2;
+ def T = ZeroSet(I);
+ ==> 1
+ setring T;
+ minpoly;
+ ==> (4a4+4a2+9)
+ newA;
+ ==> (1/3a3+5/6a)
+ id;
+ ==> id[1]=(1/3a3+5/6a)*z-1
+ ==> id[2]=y-2
+ ==> id[3]=2*x2-1
+ zeroset;
+ ==> [1]:
+ ==> _[1]=(1/3a3-1/6a)
+ ==> _[2]=2
+ ==> _[3]=(-1/3a3-5/6a)
+ ==> [2]:
+ ==> _[1]=(-1/3a3+1/6a)
+ ==> _[2]=2
+ ==> _[3]=(-1/3a3-5/6a)
+ map F1 = basering, zeroset[1];
+ map F2 = basering, zeroset[2];
+ F1(id);
+ ==> _[1]=0
+ ==> _[2]=0
+ ==> _[3]=0
+ F2(id);
+ ==> _[1]=0
+ ==> _[2]=0
+ ==> _[3]=0
+
+
+File: sing.htm, Node: EGCDMain, Next: FactorMain, Prev: ZeroSet, Up:
zeroset_lib
+
+D.7.5.8 EGCDMain
+................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Purpose:*
+ compute the polynomial gcd of f and g over Q(a)[x]
+
+*Return:*
+ poly
+
+*Assume:*
+ basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
+ represents the ring Q(a)[x] together with its minimal polynomial.
+
+
+File: sing.htm, Node: FactorMain, Next: InvertNumberMain, Prev: EGCDMain,
Up: zeroset_lib
+
+D.7.5.9 FactorMain
+..................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Purpose:*
+ compute the factorization of the squarefree poly f over Q(a)[t],
+ minpoly = p(a).
+
+*Return:*
+ list with 2 entries
+
+ _[1] = factors, first is a constant
+ _[2] = multiplicities (not yet implemented)
+
+*Assume:*
+ basering = Q[x,a], representing Q(a)[x]. An ideal mpoly must be
+ defined, representing the minimal polynomial (it might be 0!).
+
+
+File: sing.htm, Node: InvertNumberMain, Next: QuotientMain, Prev:
FactorMain, Up: zeroset_lib
+
+D.7.5.10 InvertNumberMain
+.........................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ InvertNumberMain(f); where f is a polynomial
+
+*Purpose:*
+ compute 1/f if f is a number in Q(a) i.e., f is represented by a
+ polynomial in Q[a].
+
+*Return:*
+ poly 1/f
+
+*Assume:*
+ basering = Q[x_1,...,x_n,a], ideal mpoly must be defined and != 0 !
+
+
+File: sing.htm, Node: QuotientMain, Next: RemainderMain, Prev:
InvertNumberMain, Up: zeroset_lib
+
+D.7.5.11 QuotientMain
+.....................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ QuotientMain(f, g); where f,g are polynomials
+
+*Purpose:*
+ compute the quotient q and remainder r s.t. f = g*q + r, deg(r) <
+ deg(g)
+
+*Return:*
+ list of polynomials
+
+ _[1] = quotient q
+ _[2] = remainder r
+
+*Assume:*
+ basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
+ represents the ring Q(a)[x] together with its minimal polynomial.
+
+
+File: sing.htm, Node: RemainderMain, Next: RootsMain, Prev: QuotientMain,
Up: zeroset_lib
+
+D.7.5.12 RemainderMain
+......................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ RemainderMain(f, g); where f,g are polynomials
+
+*Purpose:*
+ compute the remainder r s.t. f = g*q + r, deg(r) < deg(g)
+
+*Return:*
+ poly
+
+*Assume:*
+ basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
+ represents the ring Q(a)[x] together with its minimal polynomial.
+
+
+File: sing.htm, Node: RootsMain, Next: SQFRNormMain, Prev: RemainderMain,
Up: zeroset_lib
+
+D.7.5.13 RootsMain
+..................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ RootsMain(f); where f is a polynomial
+
+*Purpose:*
+ compute all roots of f in a finite extension of the ground field
+ without multiplicities.
+
+*Return:*
+ list, all entries are polynomials
+
+ _[1] = roots of f, each entry is a polynomial
+ _[2] = 'newA' - if the ground field is Q(a') and the extension field
+ is Q(a), then 'newA' is the representation of a' in Q(a)
+ _[3] = minpoly of the algebraic extension of the ground field
+
+*Assume:*
+ basering = Q[x,a] ideal mpoly must be defined, it might be 0!
+
+*Note:*
+ might change the ideal mpoly !!
+
+
+File: sing.htm, Node: SQFRNormMain, Next: ContainedQ, Prev: RootsMain, Up:
zeroset_lib
+
+D.7.5.14 SQFRNormMain
+.....................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ SQFRNorm(f); where f is a polynomial
+
+*Purpose:*
+ compute the norm of the squarefree polynomial f in Q(a)[x].
+
+*Return:*
+ list with 3 entries
+
+ _[1] = squarefree norm of g (poly)
+ _[2] = g (= f(x - s*a)) (poly)
+ _[3] = s (int)
+
+*Assume:*
+ f must be squarefree, basering = Q[x,a] and ideal mpoly is equal to
+ 'minpoly',this represents the ring Q(a)[x] together with 'minpoly'.
+
+*Note:*
+ the norm is an element of Q[x]
+
+
+File: sing.htm, Node: ContainedQ, Next: SameQ, Prev: SQFRNormMain, Up:
zeroset_lib
+
+D.7.5.15 ContainedQ
+...................
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ ContainedQ(data, f [, opt]); data=list; f=any type, opt=integer
+
+*Purpose:*
+ test if f is an element of data.
+
+*Return:*
+ int
+ 0 if f not contained in data
+ 1 if f contained in data
+
+*Options:*
+ opt = 0 : use '==' for comparing f with elements from data
+ opt = 1 : use `SameQ' for comparing f with elements from data
+
+
+File: sing.htm, Node: SameQ, Prev: ContainedQ, Up: zeroset_lib
+
+D.7.5.16 SameQ
+..............
+
+Procedure from library `zeroset.lib' (*note zeroset_lib::).
+
+*Usage:*
+ SameQ(a, b); a,b=list/intvec
+
+*Purpose:*
+ test a == b elementwise, i.e., a[i] = b[i].
+
+*Return:*
+ int
+ 0 if a != b
+ 1 if a == b
+
+
+File: sing.htm, Node: Visualization, Next: Coding theory, Prev:
Symbolic-numerical solving, Up: SINGULAR libraries
+
+D.8 Visualization
+=================
+
+* Menu:
+
+* graphics_lib:: procedures to draw with Mathematica
+* latex_lib:: procedures for typesetting in TeX
+* paramet_lib:: procedures for parametrizations
+* surf_lib:: interface to the surf program
+
+
+File: sing.htm, Node: graphics_lib, Next: latex_lib, Prev: Visualization,
Up: Visualization
+
+D.8.1 graphics_lib
+------------------
+
+*Library:*
+ graphics.lib
+
+*Purpose:*
+ Procedures to use Graphics with Mathematica
+
+*Author:*
+ Christian Gorzel, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* staircase:: Mathematica text for displaying staircase of I
+* mathinit:: string for loading Mathematica's ImplicitPlot
+* mplot:: Mathematica text for various plots
+
+
+File: sing.htm, Node: staircase, Next: mathinit, Up: graphics_lib
+
+D.8.1.1 staircase
+.................
+
+Procedure from library `graphics.lib' (*note graphics_lib::).
+
+*Usage:*
+ staircase(s,I); s a string, I ideal in two variables
+
+*Return:*
+ string with Mathematica input for displaying staircase diagrams of
+ an ideal I, i.e. exponent vectors of the initial ideal of I
+
+*Note:*
+ ideal I should be given by a standard basis. Let s="" and copy and
+ paste the result into a Mathematica notebook.
+
+*Example:*
+ LIB "graphics.lib";
+ ring r0 = 0,(x,y),ls;
+ ideal I = -1x2y6-1x4y2, 7x6y5+1/2x7y4+6x4y6;
+ staircase("",std(I));
+ ring r1 = 0,(x,y),dp;
+ ideal I = fetch(r0,I);
+ staircase("",std(I));
+ ring r2 = 0,(x,y),wp(2,3);
+ ideal I = fetch(r0,I);
+ staircase("",std(I));
+ // Paste the output into a Mathematica notebook
+ // active evalutation of the cell with SHIFT RETURN
+
+
+File: sing.htm, Node: mathinit, Next: mplot, Prev: staircase, Up:
graphics_lib
+
+D.8.1.2 mathinit
+................
+
+Procedure from library `graphics.lib' (*note graphics_lib::).
+
+*Usage:*
+ mathinit();
+
+*Return:*
+ initializing string for loading Mathematica's ImplicitPlot
+
+*Example:*
+ LIB "graphics.lib";
+ mathinit();
+ // Paste the output into a Mathematica notebook
+ // active evalutation of the cell with SHIFT RETURN
+
+
+File: sing.htm, Node: mplot, Prev: mathinit, Up: graphics_lib
+
+D.8.1.3 mplot
+.............
+
+Procedure from library `graphics.lib' (*note graphics_lib::).
+
+*Usage:*
+ mplot(fname, I [,I1,I2,..,s] ); fname=string; I,I1,I2,..=ideals,
+ s=string representing the plot region.
+ Use the ideals I1,I2,.. in order to produce multiple plots (they
+ need to have the same number of entries as I!).
+
+*Return:*
+ string, text with Mathematica commands to display a plot
+
+*Note:*
+ The plotregion is defaulted to -1,1 around zero.
+ For implicit given curves enter first the string returned by proc
+ mathinit into Mathematica in order to load ImplicitPlot. The
+ following conventions for I are used:
+
+ - ideal with 2 entries in one variable means a parametrised plane curve,
+ - ideal with 3 entries in one variable means a parametrised space curve,
+ - ideal with 3 entries in two variables means a parametrised surface,
+ - ideal with 2 entries in two variables means an implicit curve
+ given as I[1]==I[2],
+ - ideal with 1 entry (or one polynomial) in two variables means
+ an implicit curve given as f == 0,
+
+*Example:*
+ LIB "graphics.lib";
+ // --------- plane curves ------------
+ ring rr0 = 0,x,dp; export rr0;
+ ideal I = x3 + x, x2;
+ ideal J = x2, -x+x3;
+ mplot("",I,J,"-2,2");
+ // Paste the output into a Mathematica notebook
+ // active evalutation of the cell with SHIFT RETURN
+ // --------- space curves --------------
+ I = x3,-1/10x3+x2,x2;
+ mplot("",I);
+ // Paste the output into a Mathematica notebook
+ // active evalutation of the cell with SHIFT RETURN
+ // ----------- surfaces -------------------
+ ring rr1 = 0,(x,y),dp; export rr1;
+ ideal J = xy,y,x2;
+ mplot("",J,"-2,1","1,2");
+ // Paste the output into a Mathematica notebook
+ // active evalutation of the cell with SHIFT RETURN
+ kill rr0,rr1;
+
+
+File: sing.htm, Node: latex_lib, Next: paramet_lib, Prev: graphics_lib,
Up: Visualization
+
+D.8.2 latex_lib
+---------------
+
+*Library:*
+ latex.lib
+
+*Purpose:*
+ Typesetting of Singular-Objects in LaTeX2e
+
+*Author:*
+ Christian Gorzel, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* closetex:: writes closing line for LaTeX-document
+* opentex:: writes header for LaTeX-file fnm
+* tex:: calls LaTeX2e for LaTeX-file fnm
+* texdemo:: produces a file explaining the features of this lib
+* texfactorize:: creates string in LaTeX-format for factors of poly f
+* texmap:: creates string in LaTeX-format for map m:r1->r2
+* texname:: creates string in LaTeX-format for identifier
+* texobj:: creates string in LaTeX-format for any (basic) type
+* texpoly:: creates string in LaTeX-format for poly
+* texproc:: creates string in LaTeX-format of text from proc p
+* texring:: creates string in LaTeX-format for ring/qring
+* rmx:: removes .aux and .log files of LaTeX-files
+* xdvi:: calls xdvi for dvi-files
+
+*Global variables:*
+ TeXwidth, TeXnofrac, TeXbrack, TeXproj, TeXaligned, TeXreplace,
+ NoDollars are used to control the typesetting. Call `texdemo();'
+ to obtain a LaTeX2e file `texlibdemo.tex' explaining the features
+ of `latex.lib' and its global variables.
+
+ `TeXwidth' (int) -1, 0, 1..9, >9: controls breaking of long polynomials
+ `TeXnofrac' (int) flag: write 1/2 instead of \frac{1}{2}
+ `TeXbrack' (string) "{", "(", "<", "|", empty string:
+ controls brackets around ideals and
matrices
+ `TeXproj' (int) flag: write ":" instead of "," in vectors
+ `TeXaligned' (int) flag: write maps (and ideals) aligned
+ `TeXreplace' (list) list entries = 2 strings: replacing symbols
+ `NoDollars' (int) flag: suppresses surrounding $ signs
+
+
+File: sing.htm, Node: closetex, Next: opentex, Up: latex_lib
+
+D.8.2.1 closetex
+................
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ closetex(fname); fname string
+
+*Return:*
+ nothing; writes a LaTeX2e closing line into file `<fname>'.
+
+*Note:*
+ preceding ">>" are deleted and suffix ".tex" (if not given) is
+ added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ opentex("exmpl");
+ texobj("exmpl","{\\large \\bf hello}");
+ closetex("exmpl");
+
+
+File: sing.htm, Node: opentex, Next: tex, Prev: closetex, Up: latex_lib
+
+D.8.2.2 opentex
+...............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ opentex(fname); fname string
+
+*Return:*
+ nothing; writes a LaTeX2e header into a new file `<fname>'.
+
+*Note:*
+ preceding ">>" are deleted and suffix ".tex" (if not given) is
+ added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ opentex("exmpl");
+ texobj("exmpl","hello");
+ closetex("exmpl");
+
+
+File: sing.htm, Node: tex, Next: texdemo, Prev: opentex, Up: latex_lib
+
+D.8.2.3 tex
+...........
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ tex(fname); fname string
+
+*Return:*
+ nothing; calls latex (LaTeX2e) for compiling the file fname
+
+*Note:*
+ preceding ">>" are deleted and suffix ".tex" (if not given) is
+ added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ ring r;
+ ideal I = maxideal(7);
+ opentex("exp001"); // open latex2e document
+ texobj("exp001","An ideal ",I);
+ closetex("exp001");
+ tex("exp001");
+ ==> calling latex2e for : exp001.tex
+ ==>
+ ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
+ ==> (exp001.tex
+ ==> LaTeX2e <1998/12/01> patch level 1
+ ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
+ man, i
+ ==> talian, nohyphenation, loaded.
+ ==> (/usr/share/texmf/tex/latex/base/article.cls
+ ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
+ ==> (/usr/share/texmf/tex/latex/base/size10.clo))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
+ ==> No file exp001.aux.
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
+ ==> Output written on exp001.dvi (1 page, 2912 bytes).
+ ==> Transcript written on exp001.log.
+ system("sh","rm exp001.*");
+ ==> 0
+
+
+File: sing.htm, Node: texdemo, Next: texfactorize, Prev: tex, Up: latex_lib
+
+D.8.2.4 texdemo
+...............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texdemo();
+
+*Return:*
+ nothing; generates a LaTeX2e file called `texlibdemo.tex'
+ explaining the features of `latex.lib' and its global variables.
+
+*Note:*
+ this proc may take some time.
+
+
+File: sing.htm, Node: texfactorize, Next: texmap, Prev: texdemo, Up:
latex_lib
+
+D.8.2.5 texfactorize
+....................
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texfactorize(fname,f); fname string, f poly
+
+*Return:*
+ if `fname=""': string, f as a product of its irreducible factors
+ otherwise: append this string to the file `<fname>', and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted and suffix ".tex" (if not given) is
+ added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ ring r2 = 13,(x,y),dp;
+ poly f = (x+1+y)^2*x3y*(2x-2y)*y12;
+ texfactorize("",f);
+ ==> $-2\cdot x^{3}\cdot y^{13}\cdot (-x+y)\cdot (x+y+1)^{2}$
+ ring R49 = (7,a),x,dp;
+ minpoly = a2+a+3;
+ poly f = (a24x5+x3)*a2x6*(x+1)^2;
+ f;
+ ==> (a+3)*x13+(2a-1)*x12+(-2a+1)*x10+(-a-3)*x9
+ texfactorize("",f);
+ ==> $(a+3)\cdot (x-1)\cdot (x+1)^{3}\cdot x^{9}$
+
+
+File: sing.htm, Node: texmap, Next: texname, Prev: texfactorize, Up:
latex_lib
+
+D.8.2.6 texmap
+..............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texmap(fname,m,@r1,@r2); fname string, m string/map, @r1,@r2 rings
+
+*Return:*
+ if `fname=""': string, the map m from @r1 to @r2 (preceded by its
+ name if m = string) in TeX-typesetting;
+ otherwise: append this string to the file `<fname>', and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted in `fname', and suffix ".tex" (if not
+ given) is added to `fname'. If m is a string then it has to be the
+ name of an existing map from @r1 to @r2.
+
+*Example:*
+ LIB "latex.lib";
+ // -------- prepare for example ---------
+ if (defined(TeXaligned)) {int Teali=TeXaligned; kill TeXaligned;}
+ if (defined(TeXreplace)) {list Terep=TeXreplace; kill TeXreplace;}
+ // -------- the example starts here ---------
+ //
+ string fname = "tldemo";
+ ring @r1=0,(x,y,z),dp;
+ if(system("with","Namespaces")) { exportto(Current, @r1); }
+ else { export @r1; }
+ ==> // ** address@hidden is already global
+ ring r2=0,(u,v),dp;
+ map @phi =(@r1,u2,uv -v,v2); export @phi;
+ ==> // ** address@hidden is already global
+ list TeXreplace;
+ TeXreplace[1] = list("@phi","\\phi"); // @phi --> \phi
+ export TeXreplace;
+ ==> // ** `TeXreplace` is already global
+ texmap("","@phi",@r1,r2); // standard form
+ ==> $$
+ ==> \begin{array}{rcc}
+ ==> \phi:\Q[x,y,z] & \longrightarrow & \Q[u,v]\\[2mm]
+ ==> \left(x,y,z\right) & \longmapsto &
+ ==> \left(
+ ==> \begin{array}{c}
+ ==> u^{2}\\
+ ==> uv-v\\
+ ==> v^{2}
+ ==> \end{array}
+ ==> \right)
+ ==> \end{array}
+ ==> $$
+ //
+ int TeXaligned; export TeXaligned; // map in one line
+ ==> // ** `TeXaligned` is already global
+ texmap("",@phi,@r1,r2);
+ ==> $\Q[x,y,z]\longrightarrow\Q[u,v], \ \left(x,y,z\right)\longmapsto
\left(u\
+ ^{2},uv-v,v^{2}\right)$
+ //
+ kill @r1,TeXreplace,TeXaligned;
+ //
+ // --- restore global variables if previously defined ---
+ if (defined(Teali)) {int TeXaligned=Teali; export TeXaligned; kill Teali;}
+ if (defined(Terep)) {list TeXreplace=Terep; export TeXreplace; kill
Terep;}
+
+
+File: sing.htm, Node: texname, Next: texobj, Prev: texmap, Up: latex_lib
+
+D.8.2.7 texname
+...............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texname(fname,s); fname,s strings
+
+*Return:*
+ if `fname=""': string, the transformed string s, where the
+ following rules apply:
+
+ s' + "~" --> "\\tilde{"+ s' +"}"
+ "_" + int --> "_{" + int +"}"
+ "[" + s' + "]" --> "_{" + s' + "}"
+ "A..Z" + int --> "A..Z" + "^{" + int + "}"
+ "a..z" + int --> "a..z" + "_{" + int + "}"
+ "(" + int + "," + s' + ")" --> "_{"+ int +"}" + "^{" + s'+"}"
+
+ Anyhow, strings which begin with a `"{"' are only changed by
+ deleting the first and last character (intended to remove the
+ surrounding curly brackets).
+
+ if `fname!=""': append the transformed string s to the file
+ `<fname>', and return nothing.
+
+*Note:*
+ preceding ">>" are deleted in `fname', and suffix ".tex" (if not
+ given) is added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ ring r = 0,(x,y),lp;
+ poly f = 3xy4 + 2xy2 + x5y3 + x + y6;
+ texname("","{f(10)}");
+ ==> f(10)
+ texname("","f(10) =");
+ ==> f_{10} =
+ texname("","n1");
+ ==> n_{1}
+ texname("","T1_12");
+ ==> T^{1}_{12}
+ texname("","g'_11");
+ ==> g'_{11}
+ texname("","f23");
+ ==> f_{23}
+ texname("","M[2,3]");
+ ==> M_{2,3}
+ texname("","A(0,3);");
+ ==> A_{0}^{3};
+ texname("","E~(3)");
+ ==> \tilde{E}_{3}
+
+
+File: sing.htm, Node: texobj, Next: texpoly, Prev: texname, Up: latex_lib
+
+D.8.2.8 texobj
+..............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texobj(fname,l); fname string, l list
+
+*Return:*
+ if `fname=""': string, the entries of l in LaTeX-typesetting;
+ otherwise: append this string to the file `<fname>', and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted in `fname', and suffix ".tex" (if not
+ given) is added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ // -------- prepare for example ---------
+ if (defined(TeXaligned)) {int Teali=TeXaligned; kill TeXaligned;}
+ if (defined(TeXbrack)){string Tebra=TeXbrack; kill TeXbrack;}
+ //
+ // -------------- typesetting for polynomials ----------
+ ring r = 0,(x,y),lp;
+ poly f = x5y3 + 3xy4 + 2xy2 + y6;
+ f;
+ ==> x5y3+3xy4+2xy2+y6
+ texobj("",f);
+ ==> $$\begin{array}{rl}
+ ==> & x^{5}y^{3}+3xy^{4}+2xy^{2}+y^{6}\\
+ ==> \end{array}
+ ==> $$
+ ==>
+ // -------------- typesetting for ideals ----------
+ ideal G = jacob(f);
+ G;
+ ==> G[1]=5x4y3+3y4+2y2
+ ==> G[2]=3x5y2+12xy3+4xy+6y5
+ texobj("",G);
+ ==> $$\left(
+ ==> \begin{array}{c}
+ ==> 5x^{4}y^{3}+3y^{4}+2y^{2}, \\
+ ==> 3x^{5}y^{2}+12xy^{3}+4xy+6y^{5}
+ ==> \end{array}
+ ==> \right)$$
+ ==>
+ // -------------- variation of typesetting for ideals ----------
+ int TeXaligned = 1; export TeXaligned;
+ ==> // ** `TeXaligned` is already global
+ string TeXbrack = "<"; export TeXbrack;
+ ==> // ** `TeXbrack` is already global
+ texobj("",G);
+ ==>
$\left<5x^{4}y^{3}+3y^{4}+2y^{2},3x^{5}y^{2}+12xy^{3}+4xy+6y^{5}\right>$
+ ==>
+ kill TeXaligned, TeXbrack;
+ // -------------- typesetting for matrices ----------
+ matrix J = jacob(G);
+ texobj("",J);
+ ==> $$\left(
+ ==> \begin{array}{*{2}{c}}
+ ==> 20x^{3}y^{3} & 15x^{4}y^{2}+12y^{3}+4y \\
+ ==> 15x^{4}y^{2}+12y^{3}+4y & 6x^{5}y+36xy^{2}+4x+30y^{4}
+ ==> \end{array}
+ ==> \right)
+ ==> $$
+ ==>
+ // -------------- typesetting for intmats ----------
+ intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7;
+ texobj("",m);
+ ==> $$\left(
+ ==> \begin{array}{*{4}{r}}
+ ==> 9 & 2 & 4 & 5\\
+ ==> 2 & 5 & -2 & 4\\
+ ==> -6 & 10 & -1 & 2
+ ==> \end{array}
+ ==> \right)
+ ==> $$
+ ==>
+ //
+ // --- restore global variables if previously defined ---
+ if (defined(Teali)){int TeXaligned=Teali; export TeXaligned; kill Teali;}
+ if (defined(Tebra)){string TeXbrack=Tebra; export TeXbrack; kill Tebra;}
+
+
+File: sing.htm, Node: texpoly, Next: texproc, Prev: texobj, Up: latex_lib
+
+D.8.2.9 texpoly
+...............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texpoly(fname,p); fname string, p poly
+
+*Return:*
+ if `fname=""': string, the poly p in LaTeX-typesetting;
+ otherwise: append this string to the file `<fname>', and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted in `fname', and suffix ".tex" (if not
+ given) is added to `fname'.
+
+*Example:*
+ LIB "latex.lib";
+ ring r0=0,(x,y,z),dp;
+ poly f = -1x^2 + 2;
+ texpoly("",f);
+ ==> $-x^{2}+2$
+ ring rr= real,(x,y,z),dp;
+ texpoly("",2x2y23z);
+ ==> $2.000x^{2}y^{23}z$
+ ring r7= 7,(x,y,z),dp;
+ poly f = 2x2y23z;
+ texpoly("",f);
+ ==> $2x^{2}y^{23}z$
+ ring rab =(0,a,b),(x,y,z),dp;
+ poly f = (-2a2 +b3 -2)/a * x2y4z5 + (a2+1)*x + a+1;
+ f;
+ ==> (-2a2+b3-2)/(a)*x2y4z5+(a2+1)*x+(a+1)
+ texpoly("",f);
+ ==> $-\frac{2a^{2}-b^{3}+2}{a}x^{2}y^{4}z^{5}+(a^{2}+1)x+(a+1)$
+
+
+File: sing.htm, Node: texproc, Next: texring, Prev: texpoly, Up: latex_lib
+
+D.8.2.10 texproc
+................
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texproc(fname,pname); fname,pname strings
+
+*Assume:*
+ ``pname`' is a procedure.
+
+*Return:*
+ if `fname=""': string, the proc ``pname`' in a verbatim environment
+ in LaTeX-typesetting;
+ otherwise: append this string to the file `<fname>', and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted in `fname', and suffix ".tex" (if not
+ given) is added to `fname'.
+ `texproc' cannot be applied to itself correctly.
+
+*Example:*
+ LIB "latex.lib";
+ proc exp(int i,int j,list #)
+ { string s;
+ if (size(#))
+ {
+ for(i;i<=j;i++)
+ { s = s + string(j) + string(#); }
+ }
+ return(s);
+ }
+ export exp;
+ ==> // ** `exp` is already global
+ texproc("","exp");
+ ==> \begin{verbatim}
+ ==> proc exp(int i,int j,list #)
+ ==> {
+ ==> string s;
+ ==> if (size(#))
+ ==> {
+ ==> for(i;i<=j;i++)
+ ==> { s = s + string(j) + string(#); }
+ ==> }
+ ==> return(s);
+ ==>
+ ==> }
+ ==> \end{verbatim}
+ ==>
+ kill exp;
+
+
+File: sing.htm, Node: texring, Next: rmx, Prev: texproc, Up: latex_lib
+
+D.8.2.11 texring
+................
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ texring(fname, r[,L]); fname string, r ring, L list
+
+*Return:*
+ if `fname=""': string, the ring in TeX-typesetting;
+ otherwise: append this string to the file `<fname>' and return
+ nothing.
+
+*Note:*
+ preceding ">>" are deleted and suffix ".tex" (if not given) is
+ added to `fname'.
+ The optional list L is assumed to be a list of strings which
+ control, e.g., the symbol for the field of coefficients.
+ For more details call `texdemo();' (generates a LaTeX2e file called
+ `texlibdemo.tex' which explains all features of `texring').
+
+*Example:*
+ LIB "latex.lib";
+ ring r0 = 0,(x,y),dp; // char = 0, polynomial ordering
+ texring("",r0);
+ ==> $\Q[x,y]$
+ //
+ ring r7 =7,(x(0..2)),ds; // char = 7, local ordering
+ texring("",r7);
+ ==> $\Z_{7}[[x_{0},x_{1},x_{2}]]$
+ //
+ ring r1 = 0,(x1,x2,y1,y2),wp(1,2,3,4);
+ texring("",r1);
+ ==> $\Q[x_{1},x_{2},y_{1},y_{2}]$
+ //
+ ring rr = real,(x),dp; // real numbers
+ texring("",rr);
+ ==> $\R[x]$
+ //
+ ring rabc =(0,t1,t2,t3),(x,y),dp; // ring with parameters
+ texring("",rabc);
+ ==> $\Q(t_{1},t_{2},t_{3})[x,y]$
+ //
+ ring ralg = (7,a),(x1,x2),ds; // algebraic extension
+ minpoly = a2-a+3;
+ texring("",ralg);
+ ==> $\Z_{7}(a)[[x_{1},x_{2}]]$
+ texring("",ralg,"mipo");
+ ==> $\Z_{7}(a)/(a^{2}-a+3)[[x_{1},x_{2}]]$
+ //
+ ring r49=(49,a),x,dp; // Galois field
+ texring("",r49);
+ ==> $\F_{49}[x]$
+ //
+ setring r0; // quotient ring
+ ideal i = x2-y3;
+ qring q = std(i);
+ texring("",q);
+ ==> $\Q[x,y]/\left(y^{3}-x^{2}\right)
+ ==> $
+ //
+ // ------------------ additional features -------------------
+ ring r9 =0,(x(0..9)),ds;
+ texring("",r9,1);
+ ==> $\Q[[x_{0},\ldots,x_{9}]]$
+ texring("",r9,"C","{","^G");
+ ==> $\C\{x_{0},x_{1},x_{2},x_{3},x_{4},x_{5},x_{6},x_{7},x_{8},x_{9}\}^G$
+ //
+ ring rxy = 0,(x(1..5),y(1..6)),ds;
+ intvec v = 5,6;
+ texring("",rxy,v);
+ ==> $\Q[[x_{1},\ldots,x_{5},y_{1},\ldots,y_{6}]]$
+
+
+File: sing.htm, Node: rmx, Next: xdvi, Prev: texring, Up: latex_lib
+
+D.8.2.12 rmx
+............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ rmx(fname); fname string
+
+*Return:*
+ nothing; removes the `.log' and `.aux' files associated to the
+ LaTeX file <fname>.
+
+*Note:*
+ If `fname' ends by `".dvi"' or `".tex"', the `.dvi' or `.tex' file
+ will be deleted, too.
+
+*Example:*
+ LIB "latex.lib";
+ ring r;
+ poly f = x+y+z;
+ opentex("exp001"); // defaulted latex2e document
+ texobj("exp001","A polynom",f);
+ closetex("exp001");
+ tex("exp001");
+ ==> calling latex2e for : exp001.tex
+ ==>
+ ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
+ ==> (exp001.tex
+ ==> LaTeX2e <1998/12/01> patch level 1
+ ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
+ man, i
+ ==> talian, nohyphenation, loaded.
+ ==> (/usr/share/texmf/tex/latex/base/article.cls
+ ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
+ ==> (/usr/share/texmf/tex/latex/base/size10.clo))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
+ ==> No file exp001.aux.
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
+ ==> Output written on exp001.dvi (1 page, 308 bytes).
+ ==> Transcript written on exp001.log.
+ rmx("exp001"); // removes aux and log file of exp001
+ system("sh","rm exp001.*");
+ ==> 0
+
+
+File: sing.htm, Node: xdvi, Prev: rmx, Up: latex_lib
+
+D.8.2.13 xdvi
+.............
+
+Procedure from library `latex.lib' (*note latex_lib::).
+
+*Usage:*
+ xdvi(fname[,style]); fname,style = string
+
+*Return:*
+ nothing; displays dvi-file fname.dvi with previewer xdvi
+
+*Note:*
+ ending .dvi may miss in fname
+ style overwrites the default setting xdvi
+
+*Example:*
+ LIB "latex.lib";
+ intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7;
+ opentex("exp001");
+ texobj("exp001","An intmat: ",m);
+ closetex("exp001");
+ tex("exp001");
+ ==> calling latex2e for : exp001.tex
+ ==>
+ ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
+ ==> (exp001.tex
+ ==> LaTeX2e <1998/12/01> patch level 1
+ ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
+ man, i
+ ==> talian, nohyphenation, loaded.
+ ==> (/usr/share/texmf/tex/latex/base/article.cls
+ ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
+ ==> (/usr/share/texmf/tex/latex/base/size10.clo))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
+ ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
+ ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
+ ==> No file exp001.aux.
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
+ ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
+ ==> Output written on exp001.dvi (1 page, 524 bytes).
+ ==> Transcript written on exp001.log.
+ xdvi("exp001");
+ ==> calling xdvi for : exp001
+ ==>
+ system("sh","rm exp001.*");
+ ==> 0
+
+
+File: sing.htm, Node: paramet_lib, Next: surf_lib, Prev: latex_lib, Up:
Visualization
+
+D.8.3 paramet_lib
+-----------------
+
+*Library:*
+ paramet.lib
+
+*Purpose:*
+ Parametrization of Varieties
+
+*Author:*
+ Thomas Keilen, address@hidden
+
+*Procedures:*
+
+* Menu:
+
+* parametrize:: parametrizes a prime ideal via the normalization
+* parametrizepd:: calculates the prim.dec. and parametrizes the components
+* parametrizesing:: parametrizes an isolated plane curve singularity
+
+*Overview:*
+ A library to compute parametrizations of algebraic varieties (if
+ possible) with the aid of a normalization, or a primary
+ decomposition, resp. to compute a parametrization of a plane curve
+ singularity with the aid of a Hamburger-Noether expansion.
+
+* Menu:
+
+See also:
+* hnoether_lib::
+* normal_lib::
+* primdec_lib::
+
+*See also:* *note hnoether_lib::; *note normal_lib::; *note
+primdec_lib::.
+
+
+File: sing.htm, Node: parametrize, Next: parametrizepd, Up: paramet_lib
+
+D.8.3.1 parametrize
+...................
+
+Procedure from library `paramet.lib' (*note paramet_lib::).
+
+*Usage:*
+ parametrize(I); I ideal in an arbitrary number of variables, whose
+ radical is prime, in a ring with global ordering
+
+*Create:*
+ If the parametrization is successful, the basering will be changed
+ to the parametrization ring, that is to the ring PR=0,(s,t),dp;
+ respectively PR=0,t(1..d),dp;, depending on the dimension of the
+ parametrized variety.
+
+*Return:*
+ a list containing the parametrization ideal resp. the original
+ ideal, the number of variables needed for the parametrization resp.
+ 0, and 1 resp. 0 depending on whether the parametrization was
+ successful or not
+
+*Example:*
+ LIB "paramet.lib";
+ ring RING=0,(x,y,z),dp;
+ ideal I=z2-y2x2+x3;
+ parametrize(I);
+ ==> [1]:
+ ==> _[1]=s2-t2
+ ==> _[2]=s
+ ==> _[3]=s2t-t3
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+
+* Menu:
+
+See also:
+* normal::
+* parametrizepd::
+* primdecGTZ::
+* radical::
+
+*See also:* *note normal::; *note parametrizepd::; *note primdecGTZ::;
+*note radical::.
+
+
+File: sing.htm, Node: parametrizepd, Next: parametrizesing, Prev:
parametrize, Up: paramet_lib
+
+D.8.3.2 parametrizepd
+.....................
+
+Procedure from library `paramet.lib' (*note paramet_lib::).
+
+*Usage:*
+ parametrizepd(I); I ideal in a polynomial ring with global ordering
+
+*Create:*
+ If the parametrization is successful, the basering will be changed
+ to the parametrization ring, that is to the ring PR=0,(s,t),dp;
+ respectively PR=0,t(1..d),dp;, depending on the dimension of the
+ parametrized variety.
+
+*Return:*
+ a list of lists, where each entry contains the parametrization of a
+ primary component of I resp. 0, the number of variables resp. 0,
+ and 1 resp. 0 depending on whether the parametrization of the
+ component was successful or not
+
+*Example:*
+ LIB "paramet.lib";
+ ring RING=0,(x,y,z),dp;
+ ideal I=(x2-y2z2+z3)*(x2-z2-z3),(x2-y2z2+z3)*yz;
+ parametrizepd(I);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=s2t-t3
+ ==> _[2]=s
+ ==> _[3]=s2-t2
+ ==> [2]:
+ ==> 2
+ ==> [3]:
+ ==> 1
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=0
+ ==> _[2]=s
+ ==> _[3]=0
+ ==> [2]:
+ ==> 1
+ ==> [3]:
+ ==> 1
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=s3-s
+ ==> _[2]=0
+ ==> _[3]=s2-1
+ ==> [2]:
+ ==> 1
+ ==> [3]:
+ ==> 1
+
+* Menu:
+
+See also:
+* normal::
+* parametrize::
+* primdecGTZ::
+
+*See also:* *note normal::; *note parametrize::; *note primdecGTZ::.
+
+
+File: sing.htm, Node: parametrizesing, Prev: parametrizepd, Up: paramet_lib
+
+D.8.3.3 parametrizesing
+.......................
+
+Procedure from library `paramet.lib' (*note paramet_lib::).
+
+*Usage:*
+ parametrizesing(f); f a polynomial in two variables, ordering ls or
+ ds
+
+*Create:*
+ If the parametrization is successful, the basering will be changed
+ to the parametrization ring, that is to the ring 0,(x,y),ls;
+
+*Return:*
+ a list containing the parametrizations of the different branches of
+ the singularity at the origin resp. 0, if f was not of the desired
+ kind
+
+*Example:*
+ LIB "paramet.lib";
+ ring RING=0,(x,y),ls;
+ poly f=(x^2-y^3)*(x^2-y^2-y^3);
+ parametrizesing(f);
+ ==> [1]:
+ ==> _[1]=x
+ ==> _[2]=x-1/2x2
+ ==> [2]:
+ ==> _[1]=x
+ ==> _[2]=-x-1/2x2
+ ==> [3]:
+ ==> _[1]=x3
+ ==> _[2]=x2
+
+* Menu:
+
+See also:
+* develop::
+* hnexpansion::
+* hnoether_lib::
+
+*See also:* *note develop::; *note hnexpansion::; *note hnoether_lib::.
+
+
+File: sing.htm, Node: surf_lib, Prev: paramet_lib, Up: Visualization
+
+D.8.4 surf_lib
+--------------
+
+*Library:*
+ surf.lib
+
+*Purpose:*
+ Procedures for Graphics with Surf
+
+*Author:*
+ Hans Schoenemann,
+ the program surf is written by Stefan Endrass
+
+*Note:*
+ To use this library requires the program `surf' to be installed.
+ `surf' is only available for Linux PCs and Sun workstations. You
+ can download `surf' either from
+ `http://sourceforge.net/projects/surf' or from
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'.
+
+*Procedures:*
+
+* Menu:
+
+* plot:: plots plane curves and surfaces
+
+
+File: sing.htm, Node: plot, Up: surf_lib
+
+D.8.4.1 plot
+............
+
+Procedure from library `surf.lib' (*note surf_lib::).
+
+*Usage:*
+ plot(I); I ideal or poly
+
+*Assume:*
+ I defines a plane curve or a surface given by one equation
+
+*Return:*
+ nothing
+
+*Note:*
+ requires the external program 'surf' to be installed
+
+*Example:*
+ LIB "surf.lib";
+ // --------- plane curves ------------
+ ring rr0 = 0,(x1,x2),dp;
+ ideal I = x1^3 - x2^2;
+ plot(I);
+ ring rr1 = 0,(x,y,z),dp;
+ ideal I(1) = 2x2-1/2x3 +1-y+1;
+ plot(I(1));
+ // ---- Singular Logo --------------
+ poly logo = ((x+3)^3 + 2*(x+3)^2 - y^2)*(x^3 -
y^2)*((x-3)^3-2*(x-3)^2-y^2);
+ plot(logo);
+ // Steiner surface
+ ideal J(2) = x^2*y^2+x^2*z^2+y^2*z^2-17*x*y*z;
+ plot(J(2));
+ // --------------------
+ plot(x*(x2-y2)+z2);
+ // E7
+ plot(x^3-x*y^3+z^2);
+ // Whitney umbrella
+ plot(z^2-x^2*y);
+
+
+File: sing.htm, Node: Coding theory, Prev: Visualization, Up: SINGULAR
libraries
+
+D.9 Coding theory
+=================
+
+* Menu:
+
+* brnoeth_lib:: Brill-Noether algorithm, Weierstrass semigroups and AG codes
+
+
+File: sing.htm, Node: brnoeth_lib, Up: Coding theory
+
+D.9.1 brnoeth_lib
+-----------------
+
+*Library:*
+ brnoeth.lib
+
+*Purpose:*
+ Brill-Noether Algorithm, Weierstrass-SG and AG-codes
+
+*Authors:*
+ Jose Ignacio Farran Martin, address@hidden
+ Christoph Lossen, address@hidden
+
+*Overview:*
+ Implementation of the Brill-Noether algorithm for solving the
+ Riemann-Roch problem and applications in Algebraic Geometry codes.
+ The computation of Weierstrass semigroups is also implemented.
+ The procedures are intended only for plane (singular) curves
+ defined over a prime field of positive characteristic.
+ For more information about the library see the end of the file
+ brnoeth.lib.
+
+*Main procedures:*
+
+* Menu:
+
+* Adj_div:: computes the conductor of a curve
+* NSplaces:: computes non-singular places with given degrees
+* BrillNoether:: computes a vector space basis of the linear system L(D)
+* Weierstrass:: computes the Weierstrass semigroup of C at P up to m
+* extcurve:: extends the curve C to an extension of degree d
+* AGcode_L:: computes the evaluation AG code with divisors G and D
+* AGcode_Omega:: computes the residual AG code with divisors G and D
+* prepSV:: preprocessing for the basic decoding algorithm
+* decodeSV:: decoding of a word with the basic decoding algorithm
+
+*Auxiliary procedures:*
+
+* Menu:
+
+* closed_points:: computes the zero-set of a zero-dim. ideal in 2 vars
+* dual_code:: computes the dual code
+* sys_code:: computes an equivalent systematic code
+* permute_L:: applies a permutation to a list
+
+* Menu:
+
+See also:
+* hnoether_lib::
+* triang_lib::
+
+*See also:* *note hnoether_lib::; *note triang_lib::.
+
+
+File: sing.htm, Node: Adj_div, Next: NSplaces, Up: brnoeth_lib
+
+D.9.1.1 Adj_div
+...............
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ Adj_div( f [,l] ); f a poly, [l a list]
+
+*Return:*
+ list L with the computed data:
+
+ L[1] a list of rings: L[1][1]=aff_r (affine), L[1][2]=Proj_R
(projective),
+ L[2] an intvec with 2 entries (degree, genus),
+ L[3] a list of intvec (closed places),
+ L[4] an intvec (conductor),
+ L[5] a list of lists:
+ L[5][d][1] a (local) ring over an extension of degree d,
+ L[5][d][2] an intvec (degrees of base points of places of degree d)
+
+*Note:*
+ `Adj_div(f);' computes and stores the fundamental data of the plane
+ curve defined by f as needed for AG codes.
+ In the affine ring you can find the following data:
+
+ poly CHI: affine equation of the curve,
+ ideal Aff_SLocus: affine singular locus (std),
+ list Inf_Points: points at infinity
+ Inf_Points[1]: singular points
+ Inf_Points[2]: non-singular points,
+ list Aff_SPoints: affine singular points (if not empty).
+
+ In the projective ring you can find the projective equation CHI of
+ the curve (poly).
+ In the local rings L[5][d][1] you find:
+
+ list POINTS: base points of the places of degree d,
+ list LOC_EQS: local equations of the curve at the base points,
+ list BRANCHES: Hamburger-Noether developments of the places,
+ list PARAMETRIZATIONS: local parametrizations of the places,
+
+ Each entry of the list L[3] corresponds to one closed place (i.e.,
+ a place and all its conjugates) which is represented by an intvec
+ of size two, the first entry is the degree of the place (in
+ particular, it tells the local ring where to find the data
+ describing one representative of the closed place), and the second
+ one is the position of those data in the lists POINTS, etc., inside
+ this local ring.
+ In the intvec L[4] (conductor) the i-th entry corresponds to the
+ i-th entry in the list of places L[3].
+
+ With no optional arguments, the conductor is computed by local
+ invariants of the singularities; otherwise it is computed by the
+ Dedekind formula.
+ An affine point is represented by a list P where P[1] is std of a
+ prime ideal and P[2] is an intvec containing the position of the
+ places above P in the list of closed places L[3].
+ If the point is at infinity, P[1] is a homogeneous irreducible
+ polynomial in two variables.
+
+ If `printlevel>=0' additional comments are displayed (default:
+ `printlevel=0').
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list C=Adj_div(y9+y8+xy6+x2y3+y2+x3);
+ ==> The genus of the curve is 3
+ def aff_R=C[1][1]; // the affine ring
+ setring aff_R;
+ listvar(aff_R); // data in the affine ring
+ ==> // aff_R [0] *ring
+ ==> // Inf_Points [0] list, size: 2
+ ==> // Aff_SPoints [0] list, size: 3
+ ==> // Aff_SLocus [0] ideal (SB), 2 generator(s)
+ ==> // CHI [0] poly
+ CHI; // affine equation of the curve
+ ==> x3+x2y3+xy6+y9+y8+y2
+ Aff_SLocus; // ideal of the affine singular locus
+ ==> Aff_SLocus[1]=y8+y2
+ ==> Aff_SLocus[2]=x2+y6
+ Aff_SPoints[1]; // 1st affine singular point: (1:1:1), no.1
+ ==> [1]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x+1
+ ==> [2]:
+ ==> 1
+ Inf_Points[1]; // singular point(s) at infinity: (1:0:0), no.4
+ ==> [1]:
+ ==> [1]:
+ ==> y
+ ==> [2]:
+ ==> 4
+ Inf_Points[2]; // list of non-singular points at infinity
+ ==> empty list
+ //
+ def proj_R=C[1][2]; // the projective ring
+ setring proj_R;
+ CHI; // projective equation of the curve
+ ==> x3z6+x2y3z4+xy6z2+y9+y8z+y2z7
+ C[2][1]; // degree of the curve
+ ==> 9
+ C[2][2]; // genus of the curve
+ ==> 3
+ C[3]; // list of computed places
+ ==> [1]:
+ ==> 2,1
+ ==> [2]:
+ ==> 1,1
+ ==> [3]:
+ ==> 1,2
+ ==> [4]:
+ ==> 1,3
+ C[4]; // adjunction divisor (all points are singular!)
+ ==> 2,2,2,42
+ //
+ // we look at the place(s) of degree 2 by changing to the ring
+ C[5][2][1];
+ ==> // characteristic : 2
+ ==> // 1 parameter : a
+ ==> // minpoly : ...
+ ==> // number of vars : 3
+ ==> // block 1 : ordering ls
+ ==> // : names x y t
+ ==> // block 2 : ordering C
+ def S(2)=C[5][2][1];
+ setring S(2);
+ POINTS; // base point(s) of place(s) of degree 2: (1:a:1)
+ ==> [1]:
+ ==> [1]:
+ ==> 1
+ ==> [2]:
+ ==> (a)
+ ==> [3]:
+ ==> 1
+ LOC_EQS; // local equation(s)
+ ==> [1]:
+ ==>
y2+y3+(a+1)*y4+y6+(a+1)*y8+y9+(a)*xy2+(a+1)*xy4+xy6+(a+1)*x2y+(a)*x2y2\
+ +x2y3+x3
+ PARAMETRIZATIONS; // parametrization(s) and exactness
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=t2+(a+1)*t3
+ ==> _[2]=t3+(a+1)*t4
+ ==> [2]:
+ ==> 3,4
+ BRANCHES; // Hamburger-Noether development
+ ==> [1]:
+ ==> [1]:
+ ==> _[1,1]=0
+ ==> _[1,2]=x
+ ==> _[1,3]=0
+ ==> _[2,1]=0
+ ==> _[2,2]=1
+ ==> _[2,3]=(a+1)
+ ==> [2]:
+ ==> 1,-4
+ ==> [3]:
+ ==> 0
+ ==> [4]:
+ ==>
y+(a+1)*xy+(a)*x2y+(a)*x2y2+(a+1)*x3+x3y+x3y3+(a)*x4+(a+1)*x4y2+(a+\
+
1)*x4y3+x5+x5y2+(a)*x6+(a+1)*x6y2+x6y4+x6y5+x7y+(a+1)*x8+(a+1)*x8y+x8y4+(\
+
a+1)*x8y6+x9+x9y7+(a+1)*x10+x11y6+(a+1)*x12y4+x13y5+x14+x14y+x15y4+x16+(a\
+ +1)*x16y2+x17y3+x19y2+(a+1)*x20+x21y+x23
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* NSplaces::
+* closed_points::
+
+*See also:* *note NSplaces::; *note closed_points::.
+
+
+File: sing.htm, Node: NSplaces, Next: BrillNoether, Prev: Adj_div, Up:
brnoeth_lib
+
+D.9.1.2 NSplaces
+................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ NSplaces( h, CURVE ), where h is an intvec and CURVE is a list
+
+*Return:*
+ list L with updated data of CURVE after computing all non-singular
+ affine closed places whose degrees are in the intvec h:
+
+ in L[1][1]: (affine ring) lists Aff_Points(d) with affine non-singular
+ (closed) points of degree d (if non-empty),
+ in L[3]: the newly computed closed places are added,
+ in L[5]: local rings created/updated to store (repres. of) new
places.
+
+ See *note Adj_div:: for a description of the entries in L.
+
+*Note:*
+ The list_expression should be the output of the procedure Adj_div.
+ If `printlevel>=0' additional comments are displayed (default:
+ `printlevel=0').
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list C=Adj_div(x3y+y3+x);
+ ==> The genus of the curve is 3
+ // The list of computed places:
+ C[3];
+ ==> [1]:
+ ==> 1,1
+ ==> [2]:
+ ==> 1,2
+ // create places up to degree 4
+ list L=NSplaces(1..4,C);
+ // The list of computed places is now:
+ L[3];
+ ==> [1]:
+ ==> 1,1
+ ==> [2]:
+ ==> 1,2
+ ==> [3]:
+ ==> 1,3
+ ==> [4]:
+ ==> 2,1
+ ==> [5]:
+ ==> 3,1
+ ==> [6]:
+ ==> 3,2
+ ==> [7]:
+ ==> 3,3
+ ==> [8]:
+ ==> 3,4
+ ==> [9]:
+ ==> 3,5
+ ==> [10]:
+ ==> 3,6
+ ==> [11]:
+ ==> 3,7
+ ==> [12]:
+ ==> 4,1
+ ==> [13]:
+ ==> 4,2
+ ==> [14]:
+ ==> 4,3
+ // e.g., affine non-singular points of degree 4 :
+ def aff_r=L[1][1];
+ setring aff_r;
+ Aff_Points(4);
+ ==> [1]:
+ ==> [1]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x2+xy+x+1
+ ==> [2]:
+ ==> 12
+ ==> [2]:
+ ==> [1]:
+ ==> _[1]=y4+y3+y2+y+1
+ ==> _[2]=x+y2+y+1
+ ==> [2]:
+ ==> 13
+ ==> [3]:
+ ==> [1]:
+ ==> _[1]=y4+y3+1
+ ==> _[2]=x+y3+y
+ ==> [2]:
+ ==> 14
+ // e.g., base point of the 1st place of degree 4 :
+ def S(4)=L[5][4][1];
+ setring S(4);
+ POINTS[1];
+ ==> [1]:
+ ==> (a3)
+ ==> [2]:
+ ==> (a2+a)
+ ==> [3]:
+ ==> 1
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* Adj_div::
+* closed_points::
+
+*See also:* *note Adj_div::; *note closed_points::.
+
+
+File: sing.htm, Node: BrillNoether, Next: Weierstrass, Prev: NSplaces, Up:
brnoeth_lib
+
+D.9.1.3 BrillNoether
+....................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ BrillNoether(G,CURVE); G an intvec, CURVE a list
+
+*Return:*
+ list of ideals (each of them with two homogeneous generators, which
+ represent the numerator, resp. denominator, of a rational
+function).
+ The corresponding rational functions form a vector basis of the
+ linear system L(G), G a rational divisor over a non-singular curve.
+
+*Note:*
+ The procedure must be called from the ring CURVE[1][2], where CURVE
+ is the output of the procedure `NSplaces'.
+ The intvec G represents a rational divisor supported on the closed
+ places of CURVE[3] (e.g. `G=2,0,-1;' means 2 times the closed place
+ 1 minus 1 times the closed place 3).
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list C=Adj_div(x3y+y3+x);
+ ==> The genus of the curve is 3
+ C=NSplaces(1..4,C);
+ // the first 3 Places in C[3] are of degree 1.
+ // we define the rational divisor G = 4*C[3][1]+4*C[3][3] (of degree 8):
+ intvec G=4,0,4;
+ def R=C[1][2];
+ setring R;
+ list LG=BrillNoether(G,C);
+ ==> Vector basis successfully computed
+ // here is the vector basis of L(G):
+ LG;
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=1
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=x
+ ==> [3]:
+ ==> _[1]=z
+ ==> _[2]=x
+ ==> [4]:
+ ==> _[1]=y2
+ ==> _[2]=x2
+ ==> [5]:
+ ==> _[1]=xz2+y3
+ ==> _[2]=x3
+ ==> [6]:
+ ==> _[1]=xyz2+y4
+ ==> _[2]=x4
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* Adj_div::
+* NSplaces::
+* Weierstrass::
+
+*See also:* *note Adj_div::; *note NSplaces::; *note Weierstrass::.
+
+
+File: sing.htm, Node: Weierstrass, Next: extcurve, Prev: BrillNoether, Up:
brnoeth_lib
+
+D.9.1.4 Weierstrass
+...................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ Weierstrass( i, m, CURVE ); i,m integers and CURVE a list
+
+*Return:*
+ list WS of two lists:
+
+ WS[1] list of integers (Weierstr. semigroup of the curve at place i up
to m)
+ WS[2] list of ideals (the associated rational functions)
+
+*Note:*
+ The procedure must be called from the ring CURVE[1][2], where CURVE
+ is the output of the procedure `NSplaces'.
+ i represents the place CURVE[3][i].
+ Rational functions are represented by numerator/denominator in form
+ of ideals with two homogeneous generators.
+
+*Warning:*
+ The place must be rational, i.e., necessarily CURVE[3][i][1]=1.
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list C=Adj_div(x3y+y3+x);
+ ==> The genus of the curve is 3
+ C=NSplaces(1..4,C);
+ def R=C[1][2];
+ setring R;
+ // Place C[3][1] has degree 1 (i.e it is rational);
+ list WS=Weierstrass(1,7,C);
+ ==> Vector basis successfully computed
+ // the first part of the list is the Weierstrass semigroup up to 7 :
+ WS[1];
+ ==> [1]:
+ ==> 0
+ ==> [2]:
+ ==> 3
+ ==> [3]:
+ ==> 5
+ ==> [4]:
+ ==> 6
+ ==> [5]:
+ ==> 7
+ // and the second part are the corresponding functions :
+ WS[2];
+ ==> [1]:
+ ==> _[1]=1
+ ==> _[2]=1
+ ==> [2]:
+ ==> _[1]=y
+ ==> _[2]=z
+ ==> [3]:
+ ==> _[1]=xy
+ ==> _[2]=z2
+ ==> [4]:
+ ==> _[1]=y2
+ ==> _[2]=z2
+ ==> [5]:
+ ==> _[1]=y3
+ ==> _[2]=xz2
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* Adj_div::
+* BrillNoether::
+* NSplaces::
+
+*See also:* *note Adj_div::; *note BrillNoether::; *note NSplaces::.
+
+
+File: sing.htm, Node: extcurve, Next: AGcode_L, Prev: Weierstrass, Up:
brnoeth_lib
+
+D.9.1.5 extcurve
+................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ extcurve( d, CURVE ); d an integer, CURVE a list
+
+*Return:*
+ list L which is the update of the list CURVE with additional
+ entries
+
+ L[1][3]: ring (p,a),(x,y),lp (affine),
+ L[1][4]: ring (p,a),(x,y,z),lp (projective),
+ L[1][5]: ring (p,a),(x,y,t),ls (local),
+ L[2][3]: int (the number of rational places),
+
+ the rings being defined over a field extension of degree d.
+ If d<2 then `extcurve(d,CURVE);' creates a list L which is the
+ update of the list CURVE with additional entries
+
+ L[1][5]: ring p,(x,y,t),ls,
+ L[2][3]: int (the number of computed places over the base field).
+
+ In both cases, in the ring L[1][5] lists with the data for all the
+ computed rational places (after a field extension of degree d) are
+ created (see *note Adj_div::):
+
+ lists POINTS, LOC_EQS, BRANCHES, PARAMETRIZATIONS.
+
+*Note:*
+ The list CURVE should be the output of `NSplaces', and must contain
+ (at least) one place of degree d.
+ You actually need all the places with degree dividing d.
+ Otherwise, not all the places are computed, but only part of them.
+ This procedure must be executed before constructing AG codes, even
+ if no extension is needed. The ring L[1][4] must be active when
+ constructing codes over the field extension.
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list C=Adj_div(x5+y2+y);
+ ==> The genus of the curve is 2
+ C=NSplaces(1..4,C);
+ // since we have all points up to degree 4, we can extend the curve
+ // to that extension, in order to get rational points over F_16;
+ C=extcurve(4,C);
+ ==> Total number of rational places : NrRatPl = 33
+ // e.g., display the basepoint of place no. 32:
+ def R=C[1][5];
+ setring R;
+ POINTS[32];
+ ==> [1]:
+ ==> (a3+a2+a+1)
+ ==> [2]:
+ ==> (a2+a)
+ ==> [3]:
+ ==> 1
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* AGcode_L::
+* AGcode_Omega::
+* Adj_div::
+* NSplaces::
+* closed_points::
+
+*See also:* *note AGcode_L::; *note AGcode_Omega::; *note Adj_div::;
+*note NSplaces::; *note closed_points::.
+
+
+File: sing.htm, Node: AGcode_L, Next: AGcode_Omega, Prev: extcurve, Up:
brnoeth_lib
+
+D.9.1.6 AGcode_L
+................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ AGcode_L( G, D, EC ); G,D intvec, EC a list
+
+*Return:*
+ a generator matrix for the evaluation AG code defined by the
+ divisors G and D.
+
+*Note:*
+ The procedure must be called within the ring EC[1][4], where EC is
+ the output of `extcurve(d)' (or within the ring EC[1][2] if d=1).
+ The entry i in the intvec D refers to the i-th rational place in
+ EC[1][5] (i.e., to POINTS[i], etc., see *note extcurve::).
+ The intvec G represents a rational divisor (see *note
+ BrillNoether:: for more details).
+ The code evaluates the vector basis of L(G) at the rational places
+ given by D.
+
+*Warnings:*
+ G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
+ , which is not checked by the algorithm.
+ G and D should have disjoint supports (checked by the algorithm).
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list HC=Adj_div(x3+y2+y);
+ ==> The genus of the curve is 1
+ HC=NSplaces(1..2,HC);
+ HC=extcurve(2,HC);
+ ==> Total number of rational places : NrRatPl = 9
+ def ER=HC[1][4];
+ setring ER;
+ intvec G=5; // the rational divisor G = 5*HC[3][1]
+ intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
+ // let us construct the corresponding evaluation AG code :
+ matrix C=AGcode_L(G,D,HC);
+ ==> Vector basis successfully computed
+ // here is a linear code of type [8,5,>=3] over F_4
+ print(C);
+ ==> 0,0,(a), (a+1),1, 1, (a+1),(a),
+ ==> 1,0,(a), (a+1),(a),(a+1),(a), (a+1),
+ ==> 1,1,1, 1, 1, 1, 1, 1,
+ ==> 0,0,(a+1),(a), 1, 1, (a), (a+1),
+ ==> 0,0,(a+1),(a), (a),(a+1),1, 1
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* AGcode_Omega::
+* Adj_div::
+* BrillNoether::
+* extcurve::
+
+*See also:* *note AGcode_Omega::; *note Adj_div::; *note BrillNoether::;
+*note extcurve::.
+
+
+File: sing.htm, Node: AGcode_Omega, Next: prepSV, Prev: AGcode_L, Up:
brnoeth_lib
+
+D.9.1.7 AGcode_Omega
+....................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ AGcode_Omega( G, D, EC ); G,D intvec, EC a list
+
+*Return:*
+ a generator matrix for the residual AG code defined by the divisors
+ G and D.
+
+*Note:*
+ The procedure must be called within the ring EC[1][4], where EC is
+ the output of `extcurve(d)' (or within the ring EC[1][2] if d=1).
+ The entry i in the intvec D refers to the i-th rational place in
+ EC[1][5] (i.e., to POINTS[i], etc., see *note extcurve::).
+ The intvec G represents a rational divisor (see *note
+ BrillNoether:: for more details).
+ The code computes the residues of a vector space basis of
+
+ \Omega(G-D) $\Omega(G-D)$
+ at the rational places given by D.
+
+*Warnings:*
+ G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
+ , which is not checked by the algorithm.
+ G and D should have disjoint supports (checked by the algorithm).
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list HC=Adj_div(x3+y2+y);
+ ==> The genus of the curve is 1
+ HC=NSplaces(1..2,HC);
+ HC=extcurve(2,HC);
+ ==> Total number of rational places : NrRatPl = 9
+ def ER=HC[1][4];
+ setring ER;
+ intvec G=5; // the rational divisor G = 5*HC[3][1]
+ intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
+ // let us construct the corresponding residual AG code :
+ matrix C=AGcode_Omega(G,D,HC);
+ ==> Vector basis successfully computed
+ // here is a linear code of type [8,3,>=5] over F_4
+ print(C);
+ ==> 0, (a),(a),(a), (a+1),1,0, 0,
+ ==> (a+1),1, (a),0, (a), 0,(a),0,
+ ==> (a+1),0, (a),(a+1),(a+1),0,0, 1
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* AGcode_L::
+* Adj_div::
+* BrillNoether::
+* extcurve::
+
+*See also:* *note AGcode_L::; *note Adj_div::; *note BrillNoether::;
+*note extcurve::.
+
+
+File: sing.htm, Node: prepSV, Next: decodeSV, Prev: AGcode_Omega, Up:
brnoeth_lib
+
+D.9.1.8 prepSV
+..............
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ prepSV( G, D, F, EC ); G,D,F intvecs and EC a list
+
+*Return:*
+ list E of size n+3, where n=size(D). All its entries but E[n+3] are
+ matrices:
+
+ E[1]: parity check matrix for the current AG code
+ E[2] ... E[n+2]: matrices used in the procedure decodeSV
+ E[n+3]: intvec with
+ E[n+3][1]: correction capacity
+ epsilon
+$epsilon$
+ of the algorithm
+ E[n+3][2]: designed Goppa distance
+ delta
+$delta$
+ of the current AG code
+
+*Note:*
+ Computes the preprocessing for the basic (Skorobogatov-Vladut)
+ decoding algorithm.
+ The procedure must be called within the ring EC[1][4], where EC is
+ the output of `extcurve(d)' (or in the ring EC[1][2] if d=1)
+ The intvec G and F represent rational divisors (see *note
+ BrillNoether:: for more details).
+ The intvec D refers to rational places (see *note AGcode_Omega::
+ for more details.). The current AG code is `AGcode_Omega(G,D,EC)'.
+ If you know the exact minimum distance d and you want to use it in
+ `decodeSV' instead of delta $delta$
+ , you can change the value of E[n+3][2] to d before applying
+ decodeSV.
+ If you have a systematic encoding for the current code and want to
+ keep it during the decoding, you must previously permute D (using
+ `permute_L(D,P);'), e.g., according to the permutation P=L[3], L
+ being the output of `sys_code'.
+
+*Warnings:*
+ F must be a divisor with support disjoint from the support of D and
+ with degree epsilon + genus $epsilon + genus$
+ , where
+
+ epsilon:=[(deg(G)-3*genus+1)/2] $epsilon:=[(deg(G)-3*genus+1)/2]$
+.
+ G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
+ , which is not checked by the algorithm.
+ G and D should also have disjoint supports (checked by the
+ algorithm).
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list HC=Adj_div(x3+y2+y);
+ ==> The genus of the curve is 1
+ HC=NSplaces(1..2,HC);
+ HC=extcurve(2,HC);
+ ==> Total number of rational places : NrRatPl = 9
+ def ER=HC[1][4];
+ setring ER;
+ intvec G=5; // the rational divisor G = 5*HC[3][1]
+ intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
+ // construct the corresp. residual AG code of type [8,3,>=5] over F_4:
+ matrix C=AGcode_Omega(G,D,HC);
+ ==> Vector basis successfully computed
+ // we can correct 1 error and the genus is 1, thus F must have degree 2
+ // and support disjoint from that of D;
+ intvec F=2;
+ list SV=prepSV(G,D,F,HC);
+ ==> Vector basis successfully computed
+ ==> Vector basis successfully computed
+ ==> Vector basis successfully computed
+ // now everything is prepared to decode with the basic algorithm;
+ // for example, here is a parity check matrix to compute the syndrome :
+ print(SV[1]);
+ ==> 0,0,(a), (a+1),1, 1, (a+1),(a),
+ ==> 1,0,(a), (a+1),(a),(a+1),(a), (a+1),
+ ==> 1,1,1, 1, 1, 1, 1, 1,
+ ==> 0,0,(a+1),(a), 1, 1, (a), (a+1),
+ ==> 0,0,(a+1),(a), (a),(a+1),1, 1
+ // and here you have the correction capacity of the algorithm :
+ int epsilon=SV[size(D)+3][1];
+ epsilon;
+ ==> 1
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* AGcode_Omega::
+* decodeSV::
+* extcurve::
+* permute_L::
+* sys_code::
+
+*See also:* *note AGcode_Omega::; *note decodeSV::; *note extcurve::;
+*note permute_L::; *note sys_code::.
+
+
+File: sing.htm, Node: decodeSV, Next: closed_points, Prev: prepSV, Up:
brnoeth_lib
+
+D.9.1.9 decodeSV
+................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ decodeSV( y, K ); y a row-matrix and K a list
+
+*Return:*
+ a codeword (row-matrix) if possible, resp. the 0-matrix (of size 1)
+ if decoding is impossible.
+ For decoding the basic (Skorobogatov-Vladut) decoding algorithm is
+ applied.
+
+*Note:*
+ The list_expression should be the output K of the procedure
+`prepSV'.
+ The matrix_expression should be a (1 x n)-matrix, where n =
+ncols(K[1]).
+ The decoding may fail if the number of errors is greater than the
+ correction capacity of the algorithm.
+
+*Example:*
+ LIB "brnoeth.lib";
+ int plevel=printlevel;
+ printlevel=-1;
+ ring s=2,(x,y),lp;
+ list HC=Adj_div(x3+y2+y);
+ ==> The genus of the curve is 1
+ HC=NSplaces(1..2,HC);
+ HC=extcurve(2,HC);
+ ==> Total number of rational places : NrRatPl = 9
+ def ER=HC[1][4];
+ setring ER;
+ intvec G=5; // the rational divisor G = 5*HC[3][1]
+ intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
+ // construct the corresp. residual AG code of type [8,3,>=5] over F_4:
+ matrix C=AGcode_Omega(G,D,HC);
+ ==> Vector basis successfully computed
+ // we can correct 1 error and the genus is 1, thus F must have degree 2
+ // and support disjoint from that of D
+ intvec F=2;
+ list SV=prepSV(G,D,F,HC);
+ ==> Vector basis successfully computed
+ ==> Vector basis successfully computed
+ ==> Vector basis successfully computed
+ // now we produce 1 error on the zero-codeword :
+ matrix y[1][8];
+ y[1,3]=a;
+ // and then we decode :
+ print(decodeSV(y,SV));
+ ==> 0,0,0,0,0,0,0,0
+ printlevel=plevel;
+
+* Menu:
+
+See also:
+* AGcode_Omega::
+* extcurve::
+* prepSV::
+
+*See also:* *note AGcode_Omega::; *note extcurve::; *note prepSV::.
+
+
+File: sing.htm, Node: closed_points, Next: dual_code, Prev: decodeSV, Up:
brnoeth_lib
+
+D.9.1.10 closed_points
+......................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ closed_points(I); I an ideal
+
+*Return:*
+ list of prime ideals (each a Groebner basis), corresponding to the
+ (distinct affine closed) points of V(I)
+
+*Note:*
+ The ideal must have dimension 0, the basering must have 2
+ variables, the ordering must be lp, and the base field must be
+ finite and prime.
+ It might be convenient to set the option(redSB) in advance.
+
+*Example:*
+ LIB "brnoeth.lib";
+ ring s=2,(x,y),lp;
+ // this is just the affine plane over F_4 :
+ ideal I=x4+x,y4+y;
+ list L=closed_points(I);
+ // and here you have all the points :
+ L;
+ ==> [1]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x+y
+ ==> [2]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x+1
+ ==> [3]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x+y+1
+ ==> [4]:
+ ==> _[1]=y2+y+1
+ ==> _[2]=x
+ ==> [5]:
+ ==> _[1]=y+1
+ ==> _[2]=x2+x+1
+ ==> [6]:
+ ==> _[1]=y+1
+ ==> _[2]=x+1
+ ==> [7]:
+ ==> _[1]=y+1
+ ==> _[2]=x
+ ==> [8]:
+ ==> _[1]=y
+ ==> _[2]=x2+x+1
+ ==> [9]:
+ ==> _[1]=y
+ ==> _[2]=x+1
+ ==> [10]:
+ ==> _[1]=y
+ ==> _[2]=x
+
+* Menu:
+
+See also:
+* triang_lib::
+
+*See also:* *note triang_lib::.
+
+
+File: sing.htm, Node: dual_code, Next: sys_code, Prev: closed_points, Up:
brnoeth_lib
+
+D.9.1.11 dual_code
+..................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ dual_code(G); G a matrix of numbers
+
+*Return:*
+ a generator matrix of the dual code generated by G
+
+*Note:*
+ The input should be a matrix G of numbers.
+ The output is also a parity check matrix for the code defined by G
+
+*Example:*
+ LIB "brnoeth.lib";
+ ring s=2,T,lp;
+ // here is the Hamming code of length 7 and dimension 3
+ matrix G[3][7]=1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1;
+ print(G);
+ ==> 1,0,1,0,1,0,1,
+ ==> 0,1,1,0,0,1,1,
+ ==> 0,0,0,1,1,1,1
+ matrix H=dual_code(G);
+ print(H);
+ ==> 1,1,1,0,0,0,0,
+ ==> 1,0,0,1,1,0,0,
+ ==> 0,1,0,1,0,1,0,
+ ==> 1,1,0,1,0,0,1
+
+
+File: sing.htm, Node: sys_code, Next: permute_L, Prev: dual_code, Up:
brnoeth_lib
+
+D.9.1.12 sys_code
+.................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ sys_code(C); C is a matrix of constants
+
+*Return:*
+ list L with:
+
+ L[1] is the generator matrix in standard form of an equivalent code,
+ L[2] is the parity check matrix in standard form of such code,
+ L[3] is an intvec which represents the needed permutation.
+
+*Note:*
+ Computes a systematic code which is equivalent to the given one.
+ The input should be a matrix of numbers.
+ The output has to be interpreted as follows: if the input was the
+ generator matrix of an AG code then one should apply the
+ permutation L[3] to the divisor D of rational points by means of
+ `permute_L(D,L[3]);' before continuing to work with the code (for
+ instance, if you want to use the systematic encoding together with
+ a decoding algorithm).
+
+*Example:*
+ LIB "brnoeth.lib";
+ ring s=3,T,lp;
+ matrix C[2][5]=0,1,0,1,1,0,1,0,0,1;
+ print(C);
+ ==> 0,1,0,1,1,
+ ==> 0,1,0,0,1
+ list L=sys_code(C);
+ L[3];
+ ==> 2,4,3,1,5
+ // here is the generator matrix in standard form
+ print(L[1]);
+ ==> 1,0,0,0,1,
+ ==> 0,1,0,0,0
+ // here is the control matrix in standard form
+ print(L[2]);
+ ==> 0, 0,1,0,0,
+ ==> 0, 0,0,1,0,
+ ==> -1,0,0,0,1
+ // we can check that both codes are dual to each other
+ print(L[1]*transpose(L[2]));
+ ==> 0,0,0,
+ ==> 0,0,0
+
+* Menu:
+
+See also:
+* AGcode_Omega::
+* permute_L::
+* prepSV::
+
+*See also:* *note AGcode_Omega::; *note permute_L::; *note prepSV::.
+
+
+File: sing.htm, Node: permute_L, Prev: sys_code, Up: brnoeth_lib
+
+D.9.1.13 permute_L
+..................
+
+Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
+
+*Usage:*
+ permute_L( L, P ); L,P either intvecs or lists
+
+*Return:*
+ list obtained from L by applying the permutation given by P.
+
+*Note:*
+ If P is a list, all entries must be integers.
+
+*Example:*
+ LIB "brnoeth.lib";
+ list L=list();
+ L[1]="a";
+ L[2]="b";
+ L[3]="c";
+ L[4]="d";
+ intvec P=1,3,4,2;
+ // the list L is permuted according to P :
+ permute_L(L,P);
+ ==> [1]:
+ ==> a
+ ==> [2]:
+ ==> c
+ ==> [3]:
+ ==> d
+ ==> [4]:
+ ==> b
+
+* Menu:
+
+See also:
+* AGcode_Omega::
+* prepSV::
+* sys_code::
+
+*See also:* *note AGcode_Omega::; *note prepSV::; *note sys_code::.
+
+
+File: sing.htm, Node: Release Notes, Next: Index, Prev: SINGULAR libraries,
Up: Top
+
+E Release Notes
+***************
+
+* Menu:
+
+* News and changes::
+* Downloading instructions::
+* Unix installation instructions::
+* Windows installation instructions::
+* Macintosh installation instructions::
+
+
+File: sing.htm, Node: News and changes, Next: Downloading instructions, Up:
Release Notes
+
+E.1 News and changes
+====================
+
+NEWS in SINGULAR 2-0-4
+**********************
+
+The current version 2-0-4 is an update to the release series version
+2-0.
+
+Changes with respect to version 2-0-3:
+
+Factorizing algorithms revisited
+================================
+
+Starting with version 2-0-4, we use NTL (by Victor Shoup) for factoring
+univariate polynomials. The multivariate factoring code in
+libfac/factory does now also work over algebraic extension fields.
+
+Help system is configurable via LIB/help.cnf
+============================================
+
+The help browsers of Singular can be configured via the file
+LIB/help.cnf, also the addition of new help browsers is possible.
+
+Extensions of the ring concept
+==============================
+
+new coefficient domains: arbitrary long real and complex numbers
+
+no restriction on number of parameters
+
+degree bound on exponent values (maximum is now 2^31, standard 2^15)
+
+non-positives weights get a better handling (converts wp/Wp to ws/Ws)
+
+handle blocks of mixed orders correctly
+
+maximal prime characteristic is now 2147483629 instead of 32003
+
+Changes in SINGULAR libraries
+=============================
+
+The documentation of libraries was generally improved.
+*note equising_lib::
+ procedures esStratum, isEquising now also for reducible polynomials
+
+ new procedures: tau_es (codim of mu-const stratum in semi-universal
+ def. base); esIdeal ((Wahl's) equisingularity ideal)
+
+*note gaussman_lib::
+ added bernstein: roots of the Bernstein polynomial of t
+
+*note hnoether_lib::
+ HNdevelop, reddevelop, essdevelop are obsolete, replaced by
+ hnexpansion
+ multsequence is "repaired" (since branches computed by hnexpansion
+ et al) are now ordered according to the needs of multsequence.
+ newtonpoly needs no longer that ordering of the basering is ls
+ new procedures: is_NND test if f is Newton non-degenerate
+
+*note homolog_lib::
+ new procedures: depth, fitting, flatteningStrat, isCM, isFlat,
+ isLocallyFree, isReg, KoszulHomology, tensorMod, Tor
+
+*note matrix_lib::
+ in proc tensor(A,B): check if ncols(A)==0
+
+*note normal_lib::
+ new procedure: deltaLoc(f,S); (sum of) delta invariant(s) at
+ conjugated singular points
+ proc genus makes now use of is_NND of hnoether.lib
+
+*note primdec_lib::
+ optimizations again
+
+*note solve_lib::
+ procedure laguerre_solve ignores no longer the 2nd parameter
+ (precision of internal computation)
+ new procedure simplexOut: prints solution of simplex in nice
+ format
+
+Internal Changes
+================
+
+normal form computation uses
+ Bucket representation of polynomials.
+
+factorization
+ revisited, missing cases implemented
+
+NTL
+ NTL is used for univariate factorization
+
+source code
+ adapted for use with gcc 3.1/3.2, gmp 4.x
+
+Porting
+=======
+
+ * Singular is available for ix86-libc5, ix86-libc6, HPUX_9, HPUX_10,
+ SunOS-4, SunOS-5, IRIX-6, ix86-Win (Windows 95/98/ME/NT/2K/XP),
+ FreeBSD 4.x, MacOS X Windows 95/98/ME/NT/2K/XP and MacOS X
+
+ * `MP' functionality is not available on Windows 95/98/ME/NT/2K/XP
+ and MacOS X.
+
+ * Singular 2-0-2 was the last version for MacOS 9
+
+
+File: sing.htm, Node: Downloading instructions, Next: Unix installation
instructions, Prev: News and changes, Up: Release Notes
+
+E.2 Downloading instructions
+============================
+
+SINGULAR is available as binary program for most common hard- and
+software platforms. Release versions of SINGULAR can be downloaded with
+ftp from our FTP site
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/',
+or, using your favorite WWW browser, from
+ `http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/'.
+
+To download SINGULAR for a Unix platform
+========================================
+
+Make sure that you have approximately 20 MByte of free disk space and
+follow these steps.
+
+ 1. You need to download two (archive) files:
+
+ `Singular-2-0-4-share.tar.gz'
+ contains architecture independent data like documentation and
+ libraries
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-share.tar.gz'
+
+ `Singular-2-0-4-<uname>.tar.gz'
+ contains architecture dependent executables, like the SINGULAR
+ program.
+
+ `<uname>' is a description of the processor and operating system
+ for which SINGULAR is compiled. Choose one of the following:
+ `ix86-Linux' PC's running under Linux with `libc' version 6 (e.g.,
+ for SuSe Linux distribution version >= 6; RedHat Linux
+ distribution version >= 5.2).
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-Linux.tar.gz'
+ `ix86-Linux-libc5'PC's running under Linux with `libc' version 5 (if you
+ are not sure which `libc' version you have, run `ldd
+ /bin/ls').
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-Linux-libc5.tar.gz'
+ `ix86-freebsd' 's running under FreeBSD
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-freebsd.tar.gz'
+ `ix86-Win' PC's running Windows 95/98/ME/NT/2K/XP which have Cygwin
+ version 1.3.9 (or higher) already installed. Unless you
+ are familiar with Cygwin, we recommend that you download
+ one of the self-extracting archives as described below.
+ `HPUX-9' HP workstations running under HPUX version 9
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-HPUX-9.tar.gz'
+ `HPUX-10' HP workstations running under HPUX version 10
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-HPUX-10.tar.gz'
+ `SunOS-5' Sun workstations running Solaris version 5
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-SunOS-5.tar.gz'
+ `IRIX-6' IRIX workstations running IRIX version 6
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-IRIX-6.tar.gz'
+ `AIX-4' AIX workstations running AIX version 4
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-AIX-4.tar.gz'
+ `PowerMacintosh-darwin'PowerMacintosh running Mac OS X
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/OsX/Singular-2-0-4-PowerMacintosh-darwin.tar.gz'
+ `DecAlpha-Linux'Digital Dec Alpha running Linux (RedHat 5.2)
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-DecAlpha-Linux.tar.gz'
+ `DecAlpha-OSF1'Digital Dec Alpha running OSF 1
+
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-DecAlpha-OSF1.tar.gz'
+ Please contact us if you can not find an appropriate architecture
+ dependent archive.
+
+ 2. Simply change to the directory in which you wish to install
+ SINGULAR (usually wherever you install 3rd-party software):
+
+ cd /usr/local/
+
+ SINGULAR specific subdirectories will be created in such a way that
+ multiple versions and multiple architecture dependent files of
+ SINGULAR can peaceably coexist under the same `/usr/local/' tree.
+
+ 3. Unpack the archives:
+
+ gzip -dc Singular-2-0-4-<uname>.tar.gz | tar -pxf -
+ gzip -dc Singular-2-0-4-share.tar.gz | tar -pxf -
+
+ If you have downloaded `Singular-2-0-4-share.zip', unpack with
+
+ unzip -u Singular-2-0-4-share.zip
+
+ 4. After unpacking, see the created file `Singular/2-0-4/INSTALL'
+ (which is also located at
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/INSTALL_unix.html'
+ for details on how to finish the installation.
+
+To download SINGULAR for Windows 95/98/ME/NT/2K/XP
+==================================================
+
+ 1. Download one of the following self-extracting archives:
+
+ `Singular-2-0-4-Compact.exe
(ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-2-0-4-Compact.exe)'
+ Minimal archive to download. Installs Singular and minimal set
+ of needed tools and DLLs.
+
+ `Singular-2-0-4-Typical.exe
(ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-2-0-4-Typical.exe)'
+ Typical archive to download. Installs Singular and the XEmacs
+ editor to run ESingular.
+
+ 2. Double-click (or, execute), the self-extracting archives, and
+ *carefully* follow the instructions given there.
+
+ 3. If, while running setup, you obtain the following message `Setup
+ failed to launch installation engine:' `Error loading type
+ library/DLL', then you need to download and execute Microsoft
+ DCOM98 package
+ `http://www.microsoft.com/com/dcom/dcom98/download.asp'. Such a
+ problem could appear on Win 95/98.
+
+ 4. In case of problems, see the created file `/etc/INSTALL.txt' (which
+ is also located at
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/INSTALL_win.htm'
+ for details on how to finish the installation.
+
+To download SINGULAR for the Macintosh
+======================================
+
+For the SINGULAR version for Mac OS X refer to the Unix section.
+The SINGULAR version for Mac OS 9 is available as
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-html.sea.hqx'
+(documentation) and
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-ppc-MPW.sea.hqx'
+(binaries and libraries). The file
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.html'
+gives details on how to finish the installation.
+
+
+File: sing.htm, Node: Unix installation instructions, Next: Windows
installation instructions, Prev: Downloading instructions, Up: Release Notes
+
+E.3 Unix installation instructions
+==================================
+
+To install SINGULAR on a Unix platform, you need the following two
+archives:
+`Singular-2-0-4-share.tar.gz'
+ contains architecture independent data like documentation and
+ libraries (alternatively, you may also download
+ `Singular-2-0-4-share.zip').
+
+`Singular-2-0-4-<uname>.tar.gz'
+ contains architecture dependent executables, like the SINGULAR
+ program.
+
+`<uname>' is a description of the processor and operating system for
+which SINGULAR is compiled (e.g, `ix86-Linux'). Please contact us if you
+can not find an appropriate architecture dependent archive.
+
+You can obtain these (and other) archives from
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular'.
+
+To install SINGULAR
+===================
+
+Make sure that you have approximately 12MByte of free disk space and
+follow these steps.
+ 1. Simply change to the directory in which you wish to install
+ SINGULAR (usually wherever you install 3rd-party software), for
+ example:
+
+ cd /usr/local
+ or
+ mkdir install;cd install
+ (you do not need root privileges in this case)
+
+ SINGULAR specific subdirectories will be created in such a way that
+ multiple versions and multiple architecture dependent files of
+ SINGULAR can peaceably coexist under the same `/usr/local' tree.
+
+ 2. Unpack the archives:
+
+ gzip -dc <path_to>/Singular-2-0-4-<uname>.tar.gz | tar -pxf -
+ gzip -dc <path_to>/Singular-2-0-4-share.tar.gz | tar -pxf -
+
+ This creates the the directory Singular/2-0-4 with
+ (sub)directories which contain
+ `<uname>' `Singular' and `ESingular' executables
+ `LIB' SINGULAR libraries (`*.lib' files)
+ `emacs' files for the SINGULAR Emacs user interface
+ `info' info files of SINGULAR manual
+ `html' html files of SINGULAR manual
+ `doc' miscellaneous documentation files
+ `examples' SINGULAR examples (`*.sing' files)
+
+ For the executable to work, the directory layout must look pretty
+ much like this; the executable looks for "sibling" directories at
+ run-time to figure out where its SINGULAR libraries and on-line
+ documentation files are. These constraints on the local directory
+ layout are necessary to avoid having to hard-code pathnames into
+ the executables, or require that environment variables be set
+ before running the executable. In particular, you *must not move or
+ copy* the SINGULAR executables to another place, but use soft-links
+ instead.
+
+The following steps are optional:
+
+ * Arrange that typing `Singular' at the shell prompt starts up the
+ installed SINGULAR executable.
+
+ If you have root permission, do:
+
+ ln -s `pwd`/Singular/2-0-4/<uname>/Singular
/usr/local/bin/Singular-2-0-4
+ ln -s `pwd`/Singular/2-0-4/<uname>/ESingular
/usr/local/bin/ESingular-2-0-4
+ ln -s /usr/local/bin/Singular-2-0-4 /usr/local/bin/Singular
+ ln -s /usr/local/bin/ESingular-2-0-4 /usr/local/bin/ESingular
+
+ Otherwise, append the directory ``pwd`/Singular/2-0-4/<uname>/' to
+ your `$PATH' environment variable. For the `csh' (or, `tcsh') shell
+ do:
+
+ set path=(`pwd`/Singular/2-0-4/<uname> $path)
+
+ For the `bash' (or, `ksh') shell do:
+
+ export PATH=`pwd`/Singular/2-0-4/<uname>/:$PATH
+
+ You also might want to adjust your personal start-up files
+ (`~/.cshrc' for `csh', `~/.tcshrc' for `tcsh', or `~/.profile' for
+ `bash') accordingly, so that the `$PATH' variable is set
+ automatically each time you login.
+
+ *IMPORTANT:* Do _never_ move or copy the file
+ `Singular/2-0-4/<uname>/Singular' to another place, but use
+ soft-links instead.
+
+ * If you wish to use any of following features of SINGULAR, make sure
+ that the respective programs are installed on your system:
+
+ *Feature* *Requires*
+ running `ESingular', or `Singular' Emacs version 20 or higher, or,
+ within Emacs XEmacs version 20.3 or higher
+ (ESingular is only included in the
+ Linux distribution, on other Unix
+ platforms you can download the
+ Singular emacs lisp files but we
+ give no warranties for specific
+ platforms).
+ on-line `html' help netscape browser
+ on-line `info' help info, or tkinfo texinfo browser
+ programs
+ TAB completion and history shared readline library, i.e.
+ mechanism of ASCII-terminal `/usr/lib/libreadline.so'
+ interface
+ visualization of curves and surf version 0.9 or higher (only
+ surfaces available for Linux and Solaris).
+
+ You may download most of these programs from
+
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'.
+
+ * Customize the on-line help system:
+
+ By default, on-line help is displayed in the `html' format using
+ the `netscape' program.
+
+ However, this behavior can be customized in several ways using the
+ SINGULAR commands `system("--browser",<browser>)' and
+ `system("--allow-net", 1)' (or, by starting up SINGULAR with the
+ respective command line options).
+
+ In particular, creating the file `Singular/2-0-4/LIB/.singularrc'
+ and putting the SINGULAR command
+
+ system("--allow-net", 1);
+
+ in it, allows the on-line help system to fetch its `html' pages
+ from Singular's WWW home site (http://www.singular.uni-kl.de) in
+ case its local html pages are not found. That is, you may delete
+ your local html pages, after setting this option.
+
+ See also *note The online help system::, *note Command line
+ options::, and *note Startup sequence::, for more details on
+ customizing the on-line help system.
+
+ * Add the line
+
+ * Singular:(singular.hlp). A system for polynomial computations
+
+ to your system-wide `dir' file (usually `/usr/info/dir' or
+ `/usr/local/info/dir' and copy or soft-link the file
+ `Singular/2-0-4/info/singular.hlp' to the directory of your `dir'
+ file.
+ This assures that the SINGULAR manual can be accessed from
+ stand-alone texinfo browser programs such as `info' or `Emacs'.
+ (It is not necessary for the use of the help system from within
+ `Singular'.)
+
+Troubleshooting
+===============
+
+ * General: SINGULAR can not find its libraries or on-line help
+
+ 1. Make sure that you have read and/or execute permission the
+ files and directories of the Singular distribution. If in
+ doubt, `cd' to the directory where you unpacked SINGULAR, and
+ do (as root, if necessary):
+
+ chmod -R a+rX Singular
+
+ 2. Start up SINGULAR, and issue the command
+ `system("Singular");'. If this does not return the correct
+ and expanded location of the SINGULAR executable, then you
+ found a bug in SINGULAR, which we ask you to report (see
+ below).
+
+ 3. Check whether the directories containing the libraries and
+ on-line help files can be found by SINGULAR: If `$bindir'
+ denotes the directory where the SINGULAR executable resides,
+ then SINGULAR looks for library files as follows:
+ (0) the current directory
+ (1) all dirs of the environment variable SINGULARPATH
+ (2) `$bindir/LIB'
+ (3) `$bindir/../LIB'
+ (4) `/usr/local/Singular/2-0-4/LIB'
+ (4) `/usr/local/Singular/LIB'
+ The on-line `info' files need to be at `$bindir/../info' and
+ the `html' pages at `$bindir/../html'.
+
+ You can inspect the found library and `info'/`html' directories by
+ starting up SINGULAR with the `--version' option, or by issuing the
+ SINGULAR command `system("--version");'.
+
+ * Under SuSE-Linux, ESINGULAR does not display a prompt: This is due
+ to the very restrictive access rights of `/dev/pty*' of the
+ standard SuSE (http:/www.suse.de) distribution (starting from
+ version 6.3 on). As root, do one of the following: Either
+
+ chmod 666 /dev/pty*
+
+ or,
+
+ chmod g+s $(which emacs)
+ chgrp tty $(which emacs)
+ chmod g+s $(which xemacs)
+ chgrp tty $(which xemacs)
+
+ See also `http://sdb.suse.de/sdb/de/html/ke_devpts-63.html' for
+ details.
+
+ * For `HPUX' systems:
+ The /etc/termcap files which are pre-installed on these systems are
+ broken which leads to messages like
+
+ Name collision between 9826 9836
+
+ when SINGULAR is started. To fix this, you can get fixed termcap
+ files from `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils'
+ by downloading the files termcap-<uname-description> and either
+ replace your /etc/termcap file by the file found there, or view,
+ and redo the respective changes by `diff''ing the downloaded and
+ the original file.
+
+ * For `ix86-Linux' systems:
+ Due to some incompatibilities of shared libraries, the start-up of
+ SINGULAR might fail with messages like
+
+ Can not find shared library ...
+
+ For DEBIAN systems, try to do `ln -s /usr/lib/libncurses.so
+ /usr/lib/libncurses.so.4'.
+ If this fails (and on other systems) download and install
+ `Singular-2-0-4-ix86-Linux-static.tar.gz'.
+
+ * For `AIX' systems:
+ The default `info' program of the system is not GNU's texinfo
+ browser which is used to display the on-line documentation in the
+ `info' format. Therefore, the distribution of the AIX executable
+ already contains the `info' browser program. If you remove this
+ program, make sure that the GNU `info' program is executed if you
+ call '`info'' from your shell.
+
+ * For any other troubles:
+ Please send an email to <address@hidden> and include
+ the header which is displayed by starting up SINGULAR with the `-v'
+ option, and a description of your machine (issue the command `uname
+ -a' on your shell) in your report.
+
+
+File: sing.htm, Node: Windows installation instructions, Next: Macintosh
installation instructions, Prev: Unix installation instructions, Up: Release
Notes
+
+E.4 Windows installation instructions
+=====================================
+
+For the impatient:
+==================
+
+ * If you run Windows NT/2K/XP, make sure you are logged in with the
+ `Administrator' rights.
+
+ * If you have some older version of `Singular' installed, please
+ uninstall it before installing `Singular-2-0-4'. It is recommended
+ to install the new `Singular' in the same directory where the
+ previous version was installed. Thus your existing environment will
+ be used automatically.
+
+ * If you have `Cygwin' or `XEmacs' installed and they do not belong
+ of some previous `Singular' installation, please read the
+ information below.
+
+ * Execute the self-extracting installation archive and *carefully*
+ follow the instructions given there. Setup will analyze your
+ system, create the corresponding configuration and give you further
+ tips on the installation process.
+
+ * In case of troubles, see the installed files `/etc/INSTALL.txt',
+ `/etc/TROUBLESHOOTING.txt' or visit the *Singular Forum* at
+ `http://www.singular.uni-kl.de/forum'.
+
+Installation preliminaries
+==========================
+
+Running `Singular' on MS Windows requires that the Cygwin DLL
+(dynamically linked library) version 1.3.9 or higher is installed on
+your system (see `http://sources.redhat.com/cygwin/' for details about
+Cygwin). We install and configure `Cygwin' version 1.3.9 automatically,
+if the `BasicCygwin' component is selected (default setting).
+
+To run `ESingular' (i.e. `Singular' within its Emacs interface) on MS
+Windows requires furthermore that the `XEmacs' editor is installed on
+your system. We install and configure `XEmacs' version 21.1.13
+automatically, if the `XEmacs' component is selected.
+
+The `Singular' installation is divided into the following components
+(you see them explicitly if you choose the Custom Setup Type during the
+installation):
+`*Program Files:*'
+
+ `Singular'
+ Contains the `Singular' Program, documentation and example
+ files.
+ All files of this component are installed under the directory
+ `/usr/local/Singular/2-0-4'
+
+ `BasicCygwin'
+ Contains the Cygwin DLL and basic tools/programs (like `bash'
+ or `info') of the Cygwin environment.
+ The Cygwin DLL and programs are installed in the directory
+ `/bin'. Miscellaneous documentation and configuration files
+ are installed into the directory `/etc'.
+
+ `XEmacs'
+ Contains the Cygwin port of the `XEmacs' editor (see
+ `http://www.xemacs.org' for more about `XEmacs') version
+ 21.1.13.
+ All files of this component are installed under the directory
+ `/usr/local'.
+
+ `ESingular'
+ Contains the `ESingular', the most comfortable Singular
+ interface. Requires `XEmacs' to run.
+
+`*Remark:*'
+ All essential DLLs, some programs and symbolic links are installed
+ in the directory `/usr/local/Singular/2-0-4/ix86-Win', which must
+ be present in your `PATH' system variable.
+
+`*Help Files:*'
+
+ `WinHelp'
+ Contains Singular Manual, converted to Windows help format
+ (.hlp). We recommend to install it, because it is small in
+ size. Moreover, we set it as default help browser in all the
+ Singular executables.
+
+ `HTML Help'
+ Contains the "native" Singular Manual. It's not included by
+ default, because it is much bigger than WinHelp, though it has
+ better typesetting of mathematical formulae.
+
+The Typical Setup Type of the Singular-2-0-4-Typical.exe contains
+`BasicCygwin', `Singular', `XEmacs', `ESingular', `WinHelp' and `HTML
+Help' components. The Compact Setup Type does not contain only the `HTML
+Help' component.
+
+Downloading preliminaries
+=========================
+
+To install `Singular' on a PC running Windows 95/98/ME/NT/2K/XP, you
+need to download *one* of the following archive files:
+
+Minimal archive: Singular-2-0-4-Compact.exe (Singular-2-0-4-Compact.exe)
+(`BasicCygwin', `Singular', `WinHelp' components)
+
+Typical archive : Singular-2-0-4-Typical.exe
+(Singular-2-0-4-Typical.exe) (`BasicCygwin', `Singular', `XEmacs',
+`ESingular', `WinHelp', `HTML Help' components)
+
+You can obtain these (and other) archives either from the `WINDOWS'
+directory on the `Singular' CD or from
+ `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/'.
+
+Installing Singular
+===================
+
+The recent Setup program analyzes your system, e.g. it detects whether
+Cygwin and XEmacs are present and functional. Then it gives you hints
+and/or error messages with instructions during the installation.
+
+`If you have Cygwin installed'
+ If the version of `cygwin1.dll' is not less than 1.3.9, you
+ will be prompted that the `BasicCygwin' component will not
+ be installed. Moreover, the existing Cygwin root directory will be
+ proposed as the default installation directory. You can
+ accept it, then `Singular' will be placed into the existing
+ Cygwin environment. If you choose another destination,
+ `Singular' will use Cygwin programs anyway. If your Cygwin
+ has incorrect settings (like inconsistent mount points
+ among the important ones), `Singular' Setup will correct
+ them.
+ If setup could not detect `cygwin', present in the system, you
+ can try to break the installation, start it once more, choose the
+ "Custom" setup type and unselect the `BasicCygwin' component.
+
+`If you have XEmacs installed'
+ The `Cygwin' port of `XEmacs' version 21.1.13 together with
+ the most important packages is included in the
+ distribution. The use of non-`Cygwin' ports or earlier
+ `Cygwin' ports has some quirks and does not work
+ properly together with `Singular' (i.e., running `ESingular'
+ results in problems). Nevertheless, if you want to test the
+ compatibility of `ESingular' with your own `XEmacs', just
+ de-select the XEmacs component, but leave `ESingular' selected.
+ If your `XEmacs' happens to be incompatible with ESingular, you can
+ install just the XEmacs component and use in fact two different
+ `XEmacs' programs. The setup program will search for
+ `XEmacs' and packages in `<TARGETDIR>/usr/local/lib' (here
+ `<TARGETDIR>' is the directory which you selected while running
+ setup). If you have `Cygwin' and the Cygwin port of
+ `XEmacs', you might have `XEmacs' installed there. To avoid
+ overwriting your `XEmacs' files, setup will ask you what to do.
+
+Customizing Singular
+====================
+
+The following step(s) are optional:
+ * To conveniently access all files on your computer, mount the drives
+ of your disk(s):
+
+ 1. Open a rxvt terminal (from Start->Programs->Singular
+ 2.0->Tools).
+
+ 2. For each drive (letter) issue the following command (the drive
+ `C:' is used in the example):
+
+ mount -f -s -t C: /C
+
+ After mounting the drive(s) this way, you can conveniently access
+ the files on a drive from the `bash' shell and from `XEmacs' using
+ the `/C/' prefix. Otherwise, you need to type `/cygdrive/C' - that
+ is the Cygwin convention. You can get more information on `mount'
+ command by invoking `mount --help'. Command `umount' unmount the
+ selected mount point.
+
+ * Create your personal `HOME' directory.
+ Various applications (e.g., `bash' or `XEmacs') store user-specific
+ configuration/customization files in the `HOME' directory of the
+ current user. During the installation, the `HOME' directory is
+ globally set for all users to `/home/Singular'. To create your
+ individual `HOME' directory follow these steps:
+
+ 1. Create a directory (folder), say, `C:\home\MyHome'.
+
+ 2. Copy all files from `/home/Singular' to `C:\home\MyHome'.
+
+ 3. Set the _user_ environment variable `HOME' to
+ `C:\home\MyHome':
+ On Windows 95/98/ME, edit the respective line the
+ `AUTOEXEC.BAT' file.
+ On Windows NT/2K/XP add an entry in your `Environment' control
+ panel.
+
+ 4. Restart your computer (On Windows 95/98/ME).
+
+ You may furthermore examine the files copied into your `HOME'
+ directory and adjust (i.e. edit) them to your personal
+ preferences/needs. System-wide settings are stored in the file
+ `/etc/profile'.
+
+Uninstalling Singular
+=====================
+
+You can uninstall individual or all installed components by opening the
+`Software' shortcut of the `Control panel'. Simply double-click the
+`Singular' item and follow the instructions given there.
+
+For any other troubles, please send an email to
+<address@hidden> and include the header which is
+displayed by starting up `Singular' with the `-v' option, and a
+description of your machine and operating system.
+
+
+File: sing.htm, Node: Macintosh installation instructions, Prev: Windows
installation instructions, Up: Release Notes
+
+E.5 Macintosh installation instructions
+=======================================
+
+For the SINGULAR version for Mac OS X refer to the Unix section. The
+SINGULAR version for Mac OS 9 is available as
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-4-html.sea.hqx'
+(documentation) and
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-4-ppc-MPW.sea.hqx'
+(binaries and libraries). The file
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.txt'
+gives details on how to finish the installation.
+
+Installation preliminaries
+==========================
+
+This is the final distribution of SINGULAR as MPW tool. Newer versions
+of SINGULAR will only be available for MacOS X (which is handled like
+other UNIX-systems). To install SINGULAR on a Macintosh (PPC only), you
+need the file `Singular-2-0-2-ppc-MPW.sea.hqx' resp.
+`Singular-2-0-2-ppc-MPW.hqx' which you can obtain by public ftp from
+`ftp://www.mathematik.uni-kl.de/pub/Math/Singular'. Furthermore, you
+need MacOS version >= 8.5 with an installed MPW shell. This version
+works also without Carbon.
+
+Installing SINGULAR on MacOS X
+==============================
+
+Please see `INSTALL_unix.html'. In contrast to other Unix systems,
+under MacOS X, SINGULAR is only available as a shell command and there
+is no Emacs interface. Enter `Singular' in a terminal under Aqua to run
+SINGULAR. Alternatively, you may choose `Terminal' as the application
+to open the file `Singular' with and put it into the dock.
+
+Installing Singular
+===================
+
+ 1. Make sure that you have MPW installed on your system. See below
+ for instructions on how to install MPW and how to avoid conflicts
+ with the `Carbon.lib'.
+
+ 2. Download the file `Singular-2-0-2-ppc-MPW.sea.hqx'.
+
+ 3. Expand the downloaded file using a standard Expander (like Compact
+ Pro or StuffIt) to obtain the corresponding self-extracting
+ `Singular-2-0-2-ppc-MPW.sea' file.
+
+ 4. Click on the self-extracting `Singular-2-0-2-ppc-MPW.sea' file.
+ This will create a new folder named `Singular:' which contains the
+ SINGULAR program in the subfolder `2-0-2:ppc-MPW:'. Do not change
+ the structure of the subfolders.
+
+ 5. Make the folder which contains the executable to the working
+ directory of the MPW shell. To start SINGULAR, you need to type
+ `Singular' in the MPW worksheet. Clicking on the SINGULAR icon on
+ the desktop, starts up the MPW shell (the working directory of the
+ MPW shell is then the directory of the executable). If you start
+ the MPW shell manually, you must set the working directory to the
+ directory of the SINGULAR program. You may use the directory menu
+ or write into the startup file of the MPW shell the line
+
+ setdirectory "{Boot}"Singular:2-0-2:ppc-MPW:
+
+ if `"{Boot}"Singular:2-0-2:ppc-MPW:' is the folder of the
+ executable.
+
+ After unpacking, you will have a directory structure like:
+
+ `Singular:2-0-2:ppc-MPW:Singular'
+ Singular executable
+
+ `Singular:2-0-2:ppc-MPW:libparse'
+ parser for Singular libraries
+
+ `Singular:2-0-2:LIB:'
+ Singular libraries
+
+ `Singular:2-0-2:LIB:gftables:'
+ Singular gftables
+
+ `Singular:2-0-2:doc:singular.idx'
+ index of inline help
+
+ `Singular:2-0-2:doc:singular.hlp'
+ file for inline help
+
+ `Singular:2-0-2:README'
+ information of the distribution
+
+ `Singular:2-0-2:README.hlml'
+
+ `Singular:2-0-2:COPYING'
+ license information
+
+ `Singular:2-0-2:COPYING.html'
+
+ `Singular:2-0-2:NEWS'
+ news in the distribution
+
+ `Singular:2-0-2:NEWS.html'
+
+ `Singular:2-0-2:INSTALL'
+ instructions like this file
+
+ The SINGULAR libraries have a special form to work here. Do not
+ use the libraries from other distributions. They are not
+ compatible. A supplementary file is `Singular-2-0-2-html.sea.hqx'
+ which contains the html pages. You can use this with a browser but
+ not from the program SINGULAR. The self-extracting archive will
+ create the folder `html:' and you may extract it at
+ `"{Boot}"Singular:2-0-2:'.
+
+Installing MPW
+==============
+
+The final version of MPW is downloadable from Apple at
+`ftp://ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/'.
+Older versions of `Carbon.lib' may conflict with the latest MPW. In
+this case, you need to update `Carbon.lib' or work without it.
+
+Restrictions
+============
+
+Some typical Unix features of SINGULAR are not working with MPW, e.g.
+links and cooperation with other programs like XEmacs and xterm.
+
+For any other troubles, please send an email to
+<address@hidden> and include the header which is
+displayed by starting up SINGULAR with the `-v' option, and a
+description of your machine and operating system.
+
+
+File: sing.htm, Node: Index, Prev: Release Notes, Up: Top
+
+F Index
+*******
+
+ [index ]
+* Menu:
+
+* !: Special characters. (line 58)
+* !=: Special characters. (line 42)
+* != <1>: boolean expressions. (line 5)
+* ": Special characters. (line 67)
+* #: Special characters. (line 104)
+* $: Special characters. (line 107)
+* %: Special characters. (line 33)
+* &&: Special characters. (line 61)
+* && <1>: boolean operations. (line 5)
+* (: Special characters. (line 11)
+* ): Special characters. (line 11)
+* *: Special characters. (line 26)
+* **: Special characters. (line 36)
+* +: Special characters. (line 20)
+* -: Special characters. (line 23)
+* -allow-net: Command line options.
+ (line 26)
+* -b: Command line options.
+ (line 109)
+* -batch: Command line options.
+ (line 109)
+* -browser: Command line options.
+ (line 31)
+* -c: Command line options.
+ (line 73)
+* -d: Command line options.
+ (line 13)
+* -e: Command line options.
+ (line 17)
+* -echo: Command line options.
+ (line 17)
+* -emacs: Command line options.
+ (line 128)
+* -emacs-dir: Command line options.
+ (line 132)
+* -emacs-load: Command line options.
+ (line 136)
+* -execute: Command line options.
+ (line 73)
+* -h: Command line options.
+ (line 23)
+* -help: Command line options.
+ (line 23)
+* -min-time: Command line options.
+ (line 95)
+* -MPhost: Command line options.
+ (line 120)
+* -MPport: Command line options.
+ (line 115)
+* -no-out: Command line options.
+ (line 50)
+* -no-rc: Command line options.
+ (line 39)
+* -no-stdlib: Command line options.
+ (line 43)
+* -no-tty: Command line options.
+ (line 53)
+* -no-warn: Command line options.
+ (line 47)
+* -q: Command line options.
+ (line 57)
+* -quiet: Command line options.
+ (line 57)
+* -r: Command line options.
+ (line 88)
+* -random: Command line options.
+ (line 88)
+* -sdb: Command line options.
+ (line 13)
+* -singular: Command line options.
+ (line 139)
+* -ticks-per-sec: Command line options.
+ (line 103)
+* -u: Command line options.
+ (line 80)
+* -user-option: Command line options.
+ (line 80)
+* -v: Command line options.
+ (line 63)
+* -verbose: Command line options.
+ (line 63)
+* ..: Special characters. (line 94)
+* .singularrc file: Startup sequence. (line 10)
+* .singularrc file, no loading: Command line options.
+ (line 39)
+* /: Special characters. (line 29)
+* //: Special characters. (line 76)
+* // <1>: Special characters. (line 79)
+* // <2>: Special characters. (line 82)
+* ;: Special characters. (line 85)
+* <: Special characters. (line 54)
+* < <1>: filecmd. (line 5)
+* <=: Special characters. (line 51)
+* <= <1>: boolean expressions. (line 5)
+* <>: Special characters. (line 42)
+* <> <1>: boolean expressions. (line 5)
+* =: Special characters. (line 8)
+* ==: Special characters. (line 39)
+* == <1>: boolean expressions. (line 5)
+* >: Special characters. (line 48)
+* >=: Special characters. (line 45)
+* >= <1>: boolean expressions. (line 5)
+* ?: Special characters. (line 73)
+* ? <1>: help. (line 20)
+* [: Special characters. (line 14)
+* \: Special characters. (line 91)
+* ]: Special characters. (line 14)
+* ^: Special characters. (line 36)
+* _: Special characters. (line 98)
+* `: Special characters. (line 70)
+* ||: Special characters. (line 64)
+* || <1>: boolean operations. (line 5)
+* ~: Special characters. (line 101)
+* ~ <1>: ~. (line 5)
+* a, ordering: Extra weight vector. (line 5)
+* absValue: absValue. (line 5)
+* actionIsProper: actionIsProper. (line 5)
+* addcol: addcol. (line 5)
+* addrow: addrow. (line 5)
+* adjoint: adjoint. (line 5)
+* adjunction divisor: Adj_div. (line 65)
+* Adj_div: Adj_div. (line 5)
+* AGcode_L: AGcode_L. (line 5)
+* AGcode_Omega: AGcode_Omega. (line 5)
+* ainvar.lib: ainvar_lib. (line 5)
+* ainvar_lib: ainvar_lib. (line 5)
+* algDependent: algDependent. (line 5)
+* algebra.lib: algebra_lib. (line 5)
+* Algebraic dependence: Algebraic dependence.
+ (line 5)
+* algebraic field extension: splitring. (line 35)
+* Algebraic Geometry codes: brnoeth_lib. (line 47)
+* algebra_containment: algebra_containment. (line 5)
+* algebra_lib: algebra_lib. (line 5)
+* algorithm of Bigatti, La Scala and Robbiano: Bigatti and La Scala and
Robbiano.
+ (line 5)
+* algorithm of Conti and Traverso: Conti and Traverso. (line 5)
+* algorithm of Di Biase and Urbanke: Di Biase and Urbanke.
+ (line 5)
+* algorithm of Hosten and Sturmfels: Hosten and Sturmfels.
+ (line 5)
+* algorithm of Pottier: Pottier. (line 5)
+* alg_kernel: alg_kernel. (line 5)
+* all.lib: all_lib. (line 5)
+* allowing net access: Command line options.
+ (line 26)
+* allprint: allprint. (line 5)
+* allsquarefree: allsquarefree. (line 5)
+* all_lib: all_lib. (line 5)
+* and: boolean operations. (line 5)
+* and <1>: Evaluation of logical expressions.
+ (line 5)
+* Ann: Ann. (line 5)
+* annil: annil. (line 5)
+* ArnoldAction: ArnoldAction. (line 5)
+* ASCII: ASCII. (line 5)
+* ASCII links: ASCII links. (line 5)
+* attrib: attrib. (line 5)
+* A_L: A_L. (line 5)
+* A_Z: A_Z. (line 5)
+* Bachmann, Olaf: Preface. (line 105)
+* Background: Background. (line 5)
+* bareiss: bareiss. (line 5)
+* basicinvariants: basicinvariants. (line 5)
+* bernstein: bernstein. (line 5)
+* Bernstein polynomial: bernstein. (line 21)
+* betti: betti. (line 5)
+* Betti number: Syzygies and resolutions.
+ (line 79)
+* Bigatti-La Scala-Robbiano algorithm: Bigatti and La Scala and Robbiano.
+ (line 5)
+* BinDir: Loading of a library.
+ (line 5)
+* binomial: binomial. (line 5)
+* block: Flow control. (line 5)
+* block <1>: Control structures. (line 5)
+* blowup0: blowup0. (line 5)
+* boolean expressions: boolean expressions. (line 5)
+* boolean operations: boolean operations. (line 5)
+* bracket: Usage of brackets. (line 5)
+* Branches of an Isolated Space Curve Singularity: Branches of an Isolated
Space Curve Singularity.
+ (line 5)
+* break: break. (line 5)
+* break point: ~. (line 5)
+* breakpoint: breakpoint. (line 5)
+* Brieskorn lattice: gaussman_lib. (line 46)
+* Brieskorn lattice <1>: gmsring. (line 28)
+* Brieskorn lattice <2>: gmsnf. (line 23)
+* Brieskorn lattice <3>: gmscoeffs. (line 23)
+* Brieskorn lattice <4>: bernstein. (line 21)
+* Brieskorn lattice <5>: monodromy. (line 25)
+* Brieskorn lattice <6>: spectrum. (line 23)
+* Brieskorn lattice <7>: sppairs. (line 25)
+* Brieskorn lattice <8>: vfilt. (line 27)
+* Brieskorn lattice <9>: vwfilt. (line 29)
+* Brieskorn lattice <10>: tmatrix. (line 22)
+* Brieskorn lattice <11>: endvfilt. (line 26)
+* Brieskorn lattice <12>: mondromy_lib. (line 33)
+* Brill-Noether algorithm: brnoeth_lib. (line 47)
+* BrillNoether: BrillNoether. (line 5)
+* brnoeth.lib: brnoeth_lib. (line 5)
+* brnoeth_lib: brnoeth_lib. (line 5)
+* browser, command line option: Command line options.
+ (line 31)
+* browser, setting the: system. (line 80)
+* browsers: The online help system.
+ (line 14)
+* browsers, setting the: system. (line 80)
+* Buchberger algorithm for toric ideals: Buchberger algorithm.
+ (line 5)
+* bug, ESingular: Unix installation instructions.
+ (line 195)
+* busadj: busadj. (line 5)
+* C programming language: Major differences to the C
programming language.
+ (line 5)
+* C, module ordering: Module orderings. (line 25)
+* c, module ordering: Module orderings. (line 64)
+* case: No case or switch statement.
+ (line 5)
+* category in a library: Format of a library. (line 56)
+* Change of rings: Change of rings. (line 5)
+* changechar: changechar. (line 5)
+* changeord: changeord. (line 5)
+* changes: News and changes. (line 5)
+* changevar: changevar. (line 5)
+* char: char. (line 5)
+* characteristic exponents: invariants. (line 55)
+* Characteristic sets: Characteristic sets. (line 5)
+* charpoly: charpoly. (line 5)
+* charstr: charstr. (line 5)
+* char_series: char_series. (line 5)
+* Classification: Classification. (line 5)
+* classify: classify. (line 5)
+* classify.lib: classify_lib. (line 5)
+* classify_lib: classify_lib. (line 5)
+* cleardenom: cleardenom. (line 5)
+* close: close. (line 5)
+* closed_points: closed_points. (line 5)
+* closetex: closetex. (line 5)
+* closureFrac: closureFrac. (line 5)
+* closureRingtower: closureRingtower. (line 5)
+* clrSBmod: clrSBmod. (line 5)
+* CMtype: CMtype. (line 5)
+* Coding theory: Coding theory. (line 5)
+* coef: coef. (line 5)
+* coefficient field: number. (line 5)
+* coeffs: coeffs. (line 5)
+* colred: colred. (line 5)
+* comma: Usage of commas. (line 5)
+* Command line options: Command line options.
+ (line 5)
+* command-line option, setting value of: system. (line 80)
+* command-line option, value of: system. (line 75)
+* command-line options, print all values of: system. (line 72)
+* command-line options, short help: Command line options.
+ (line 23)
+* Commands: Functions and system variables.
+ (line 5)
+* Commutative algebra: Commutative algebra. (line 5)
+* completeReduction: completeReduction. (line 5)
+* complex: Rings and orderings. (line 23)
+* Components of Windows installation: Windows installation instructions.
+ (line 44)
+* compress: compress. (line 5)
+* concat: concat. (line 5)
+* conductor, degree: invariants. (line 55)
+* ContainedQ: ContainedQ. (line 5)
+* content: content. (line 5)
+* Conti-Traverso algorithm: Conti and Traverso. (line 5)
+* continue: continue. (line 5)
+* continue <1>: Behavior of continue.
+ (line 5)
+* contract: contract. (line 5)
+* contributors: system. (line 52)
+* Control structures: Control structures. (line 5)
+* control_Matrix: control_Matrix. (line 5)
+* copyright: Preface. (line 5)
+* corank: corank. (line 5)
+* Critical points: Critical points. (line 5)
+* cup: cup. (line 5)
+* cupproduct: cupproduct. (line 5)
+* curve singularities: hnoether_lib. (line 53)
+* curve singularities <1>: parametrizesing. (line 21)
+* Customization of the Emacs interface: Customization of the Emacs interface.
+ (line 5)
+* cyclic: cyclic. (line 5)
+* Cyclic roots: Cyclic roots. (line 5)
+* cyclotomic: cyclotomic. (line 5)
+* Data types: Data types. (line 5)
+* DBM links: DBM links. (line 5)
+* dbprint: dbprint. (line 5)
+* debugger: Source code debugger.
+ (line 5)
+* debugging library code: Source code debugger.
+ (line 5)
+* Debugging tools: Debugging tools. (line 5)
+* debugLib, option: option. (line 150)
+* debug_log: debug_log. (line 5)
+* dec1var: dec1var. (line 5)
+* decodeSV: decodeSV. (line 5)
+* def: def. (line 5)
+* def declarations: def declarations. (line 5)
+* DefaultDir: Loading of a library.
+ (line 5)
+* defined: defined. (line 5)
+* deform: deform. (line 5)
+* deform.lib: deform_lib. (line 5)
+* Deformations: Deformations. (line 5)
+* deform_lib: deform_lib. (line 5)
+* defring: defring. (line 5)
+* defringp: defringp. (line 5)
+* defrings: defrings. (line 5)
+* deg: deg. (line 5)
+* degBound: degBound. (line 5)
+* degree: degree. (line 5)
+* degree <1>: Miscellaneous oddities.
+ (line 51)
+* degree lexicographical ordering: Global orderings. (line 38)
+* degree reverse lexicographical ordering: Global orderings. (line 24)
+* degreepart: degreepart. (line 5)
+* delete: delete. (line 5)
+* deleteSublist: deleteSublist. (line 5)
+* delta: delta. (line 5)
+* delta invariant: deltaLoc. (line 36)
+* delta invariant <1>: delta. (line 26)
+* delta invariant.: normal. (line 37)
+* deltaLoc: deltaLoc. (line 5)
+* Demo mode: Demo mode. (line 5)
+* denominator: denominator. (line 5)
+* Depth: Depth. (line 5)
+* depth: depth. (line 5)
+* derivate: derivate. (line 5)
+* det: det. (line 5)
+* detadj: detadj. (line 5)
+* det_B: det_B. (line 5)
+* develop: develop. (line 5)
+* Di Biase-Urbanke algorithm: Di Biase and Urbanke.
+ (line 5)
+* diag: diag. (line 5)
+* diag_test: diag_test. (line 5)
+* diff: diff. (line 5)
+* dim: dim. (line 5)
+* dim_slocus: dim_slocus. (line 5)
+* discr: discr. (line 5)
+* DISPLAY environment variable: The online help system.
+ (line 90)
+* displayHNE: displayHNE. (line 5)
+* displayInvariants: displayInvariants. (line 5)
+* displayMultsequence: displayMultsequence. (line 5)
+* div: int operations. (line 5)
+* div <1>: Miscellaneous oddities.
+ (line 6)
+* division: division. (line 5)
+* Documentation of a library: Documentation of a library.
+ (line 5)
+* downloading: Downloading instructions.
+ (line 5)
+* dp, global ordering: Global orderings. (line 24)
+* Dp, global ordering: Global orderings. (line 38)
+* ds, local ordering: Local orderings. (line 19)
+* Ds, local ordering: Local orderings. (line 33)
+* dsum: dsum. (line 5)
+* dual_code: dual_code. (line 5)
+* dump: dump. (line 5)
+* echo: echo. (line 5)
+* Editing input: Editing input. (line 5)
+* Editing SINGULAR input files with Emacs: Editing SINGULAR input files with
Emacs.
+ (line 5)
+* EGCD: EGCD. (line 5)
+* EGCDMain: EGCDMain. (line 5)
+* eigenvals: eigenvals. (line 5)
+* elim: elim. (line 5)
+* elim.lib: elim_lib. (line 5)
+* elim1: elim1. (line 5)
+* eliminate: eliminate. (line 5)
+* Elimination: Elimination. (line 5)
+* elimlinearpart: elimlinearpart. (line 5)
+* elimpart: elimpart. (line 5)
+* elimpartanyr: elimpartanyr. (line 5)
+* elim_lib: elim_lib. (line 5)
+* else: if. (line 5)
+* Emacs: Emacs user interface.
+ (line 5)
+* Emacs, a quick guide: A quick guide to Emacs.
+ (line 5)
+* Emacs, customization of Singular mode: Customization of the Emacs interface.
+ (line 5)
+* Emacs, editing Singular input files: Editing SINGULAR input files with
Emacs.
+ (line 5)
+* Emacs, important commands: Top 20 Emacs commands.
+ (line 5)
+* Emacs, overview: A quick guide to Emacs.
+ (line 5)
+* Emacs, running Singular under: Running SINGULAR under Emacs.
+ (line 5)
+* Emacs, Singular demo mode: Demo mode. (line 5)
+* Emacs, user interface: Emacs user interface.
+ (line 5)
+* endomorphism filtration: endvfilt. (line 26)
+* endvfilt: endvfilt. (line 5)
+* environment variable, DISPLAY: The online help system.
+ (line 90)
+* equidim: equidim. (line 5)
+* equidimMax: equidimMax. (line 5)
+* equidimMaxEHV: equidimMaxEHV. (line 5)
+* equiRadical: equiRadical. (line 5)
+* equising.lib: equising_lib. (line 5)
+* equisingular stratum: esStratum. (line 42)
+* equisingularity ideal: esIdeal. (line 26)
+* equising_lib: equising_lib. (line 5)
+* ERROR: ERROR. (line 5)
+* error recovery: The SINGULAR prompt. (line 5)
+* esIdeal: esIdeal. (line 5)
+* ESingular, no prompt: Unix installation instructions.
+ (line 195)
+* esStratum: esStratum. (line 5)
+* eval: eval. (line 5)
+* evaluate_reynolds: evaluate_reynolds. (line 5)
+* Evaluation of logical expressions: Evaluation of logical expressions.
+ (line 5)
+* evnf: evnf. (line 5)
+* example: example. (line 5)
+* Examples: Examples. (line 5)
+* Examples of ring declarations: Examples of ring declarations.
+ (line 5)
+* execute: execute. (line 5)
+* exit: exit. (line 5)
+* exit <1>: quit. (line 5)
+* export: export. (line 5)
+* expression list: Data types. (line 5)
+* Ext: Computation of Ext. (line 5)
+* Ext <1>: Ext. (line 5)
+* extcurve: extcurve. (line 5)
+* extdevelop: extdevelop. (line 5)
+* extendring: extendring. (line 5)
+* extension of rings: splitring. (line 35)
+* extgcd: extgcd. (line 5)
+* Extra weight vector: Extra weight vector. (line 5)
+* Ext_R: Ext_R. (line 5)
+* facstd: facstd. (line 5)
+* Factor: Factor. (line 5)
+* factorH: factorH. (line 5)
+* factorial: factorial. (line 5)
+* Factorization: Factorization. (line 5)
+* factorize: factorize. (line 5)
+* FactorMain: FactorMain. (line 5)
+* factory: Preface. (line 5)
+* Fast lexicographical GB: Fast lexicographical GB.
+ (line 5)
+* fastelim: fastelim. (line 5)
+* fastHC, option: option. (line 61)
+* fetch: fetch. (line 5)
+* fetchall: fetchall. (line 5)
+* fglm: fglm. (line 5)
+* fglm <1>: stdfglm. (line 21)
+* fglmquot: fglmquot. (line 5)
+* fglm_solve: fglm_solve. (line 5)
+* fibonacci: fibonacci. (line 5)
+* field: number. (line 5)
+* file, .singularrc: Startup sequence. (line 10)
+* filecmd: filecmd. (line 5)
+* find: find. (line 5)
+* finduni: finduni. (line 5)
+* findvars: findvars. (line 5)
+* finite field: number. (line 5)
+* Finite fields: Finite fields. (line 5)
+* finitenessTest: finitenessTest. (line 5)
+* finvar.lib: finvar_lib. (line 5)
+* finvar_lib: finvar_lib. (line 5)
+* First steps: First steps. (line 5)
+* fitting: fitting. (line 5)
+* flatten: flatten. (line 5)
+* flatteningStrat: flatteningStrat. (line 5)
+* Flow control: Flow control. (line 5)
+* for: for. (line 5)
+* Format of a library: Format of a library. (line 5)
+* Formatting output: Formatting output. (line 5)
+* fprintf: fprintf. (line 5)
+* Free resolution: Free resolution. (line 5)
+* freemodule: freemodule. (line 5)
+* freerank: freerank. (line 5)
+* Fru"bis-Kru"ger, Anne: Preface. (line 105)
+* Functions: Functions. (line 5)
+* furtherInvar: furtherInvar. (line 5)
+* further_hn_proc: further_hn_proc. (line 5)
+* galois field: number. (line 5)
+* Gauss-Manin connection: Gauss-Manin connection.
+ (line 5)
+* Gauss-Manin connection <1>: gaussman_lib. (line 46)
+* Gauss-Manin connection <2>: gmsring. (line 28)
+* Gauss-Manin connection <3>: gmsnf. (line 23)
+* Gauss-Manin connection <4>: gmscoeffs. (line 23)
+* Gauss-Manin connection <5>: bernstein. (line 21)
+* Gauss-Manin connection <6>: monodromy. (line 25)
+* Gauss-Manin connection <7>: spectrum. (line 23)
+* Gauss-Manin connection <8>: sppairs. (line 25)
+* Gauss-Manin connection <9>: vfilt. (line 27)
+* Gauss-Manin connection <10>: vwfilt. (line 29)
+* Gauss-Manin connection <11>: tmatrix. (line 22)
+* Gauss-Manin connection <12>: endvfilt. (line 26)
+* Gauss-Manin connection <13>: mondromy_lib. (line 33)
+* Gauss-Manin connection <14>: spectrumnd. (line 27)
+* gaussman.lib: gaussman_lib. (line 5)
+* gaussman_lib: gaussman_lib. (line 5)
+* gaussred: gaussred. (line 5)
+* gaussred_pivot: gaussred_pivot. (line 5)
+* gauss_col: gauss_col. (line 5)
+* gauss_nf: gauss_nf. (line 5)
+* gauss_row: gauss_row. (line 5)
+* gcd: gcd. (line 5)
+* gen: gen. (line 5)
+* General command syntax: General command syntax.
+ (line 5)
+* General concepts: General concepts. (line 5)
+* General purpose: General purpose. (line 5)
+* General syntax of a ring declaration: General syntax of a ring declaration.
+ (line 5)
+* general weighted lexicographical ordering: Local orderings. (line 53)
+* general weighted reverse lexicographical ordering: Local orderings.
+ (line 46)
+* general.lib: general_lib. (line 5)
+* general_lib: general_lib. (line 5)
+* genericid: genericid. (line 5)
+* genericmat: genericmat. (line 5)
+* genus: genus. (line 5)
+* German Umlaute: Limitations. (line 40)
+* getData: getData. (line 5)
+* getdump: getdump. (line 5)
+* getenv: system. (line 37)
+* Getting started: Getting started. (line 5)
+* Global orderings: Global orderings. (line 5)
+* GMP: Preface. (line 5)
+* gmscoeffs: gmscoeffs. (line 5)
+* gmsnf: gmsnf. (line 5)
+* gmsring: gmsring. (line 5)
+* graphics.lib: graphics_lib. (line 5)
+* graphics_lib: graphics_lib. (line 5)
+* Grassmann, Hubert: Preface. (line 108)
+* Greuel, Gert-Martin: Preface. (line 101)
+* groebner: groebner. (line 5)
+* ground field: number. (line 5)
+* group_reynolds: group_reynolds. (line 5)
+* GTZmod: GTZmod. (line 5)
+* GTZopt: GTZopt. (line 5)
+* Guidelines for writing a library: Guidelines for writing a library.
+ (line 5)
+* G_a -Invariants: G_a -Invariants. (line 5)
+* H2basis: H2basis. (line 5)
+* Hamburger-Noether expansion: hnoether_lib. (line 53)
+* Hamburger-Noether expansions: Adj_div. (line 65)
+* hardware platform: system. (line 33)
+* Hcode: Hcode. (line 5)
+* headStand: headStand. (line 5)
+* help: help. (line 5)
+* help browsers: The online help system.
+ (line 14)
+* help browsers, dummy: The online help system.
+ (line 40)
+* help browsers, dummy <1>: The online help system.
+ (line 46)
+* help browsers, emacs: The online help system.
+ (line 43)
+* help browsers, html: The online help system.
+ (line 21)
+* help browsers, info: The online help system.
+ (line 37)
+* help browsers, netscape: The online help system.
+ (line 27)
+* help browsers, setting command to use: The online help system.
+ (line 93)
+* help browsers, setting the: system. (line 80)
+* help browsers, tkinfo: The online help system.
+ (line 30)
+* help browsers, winhlp: The online help system.
+ (line 24)
+* help browsers, xinfo: The online help system.
+ (line 33)
+* help string of a library: The help string of a library.
+ (line 5)
+* help string of a procedure: The help string of procedures.
+ (line 5)
+* help, accessing over the net: Command line options.
+ (line 26)
+* help, online help system: The online help system.
+ (line 5)
+* hessenberg: hessenberg. (line 5)
+* highcorner: highcorner. (line 5)
+* hilb: hilb. (line 5)
+* Hilbert function: stdhilb. (line 24)
+* Hilbert function <1>: Hilbert function. (line 5)
+* Hilbert series: Hilbert function. (line 5)
+* HilbertSeries: HilbertSeries. (line 5)
+* HilbertWeights: HilbertWeights. (line 5)
+* hilbPoly: hilbPoly. (line 5)
+* hilbvec: hilbvec. (line 5)
+* hnexpansion: hnexpansion. (line 5)
+* hnoether.lib: hnoether_lib. (line 5)
+* hnoether_lib: hnoether_lib. (line 5)
+* Hom: Hom. (line 5)
+* HomJJ: HomJJ. (line 5)
+* homog: homog. (line 5)
+* homolog.lib: homolog_lib. (line 5)
+* homology: homology. (line 5)
+* homolog_lib: homolog_lib. (line 5)
+* Hosten-Sturmfels algorithm: Hosten and Sturmfels.
+ (line 5)
+* How to enter and exit: How to enter and exit.
+ (line 5)
+* How to use this manual: How to use this manual.
+ (line 5)
+* howto, download: Downloading instructions.
+ (line 5)
+* howto, install on Macintosh: Macintosh installation instructions.
+ (line 5)
+* howto, install on Unix: Unix installation instructions.
+ (line 5)
+* howto, install on Windows: Windows installation instructions.
+ (line 5)
+* hres: hres. (line 5)
+* html, default help: The online help system.
+ (line 21)
+* html, default help <1>: The online help system.
+ (line 24)
+* hypersurface singularity: mondromy_lib. (line 33)
+* id2mod: id2mod. (line 5)
+* ideal: ideal. (line 5)
+* ideal declarations: ideal declarations. (line 5)
+* ideal expressions: ideal expressions. (line 5)
+* Ideal membership: Standard bases. (line 41)
+* ideal operations: ideal operations. (line 5)
+* ideal related functions: ideal related functions.
+ (line 5)
+* ideal, toric: Toric ideals. (line 5)
+* ideals: Miscellaneous oddities.
+ (line 67)
+* idealSimplify: idealSimplify. (line 5)
+* idealSplit: idealSplit. (line 5)
+* identifier: Identifier resolution.
+ (line 5)
+* Identifiers, syntax of: Names. (line 5)
+* if: if. (line 5)
+* ImageGroup: ImageGroup. (line 5)
+* ImageVariety: ImageVariety. (line 5)
+* image_of_variety: image_of_variety. (line 5)
+* imap: imap. (line 5)
+* Imap, option: option. (line 143)
+* imapall: imapall. (line 5)
+* impart: impart. (line 5)
+* Implemented algorithms: Implemented algorithms.
+ (line 5)
+* IN: lead. (line 18)
+* indepSet: indepSet. (line 5)
+* Index: Index. (line 5)
+* indexed names: Special characters. (line 11)
+* indSet: indSet. (line 5)
+* info: The online help system.
+ (line 37)
+* info <1>: The online help system.
+ (line 135)
+* INFO environment variable: The online help system.
+ (line 93)
+* info in a library: Format of a library. (line 15)
+* info string of a library: The help string of a library.
+ (line 5)
+* init_debug: init_debug. (line 5)
+* inout.lib: inout_lib. (line 5)
+* inout_lib: inout_lib. (line 5)
+* input: Input and output. (line 5)
+* insert: insert. (line 5)
+* instructions, downloading: Downloading instructions.
+ (line 5)
+* instructions, Macintosh installation: Macintosh installation instructions.
+ (line 5)
+* instructions, Unix installation: Unix installation instructions.
+ (line 5)
+* instructions, Windows installation: Windows installation instructions.
+ (line 5)
+* inSubring: inSubring. (line 5)
+* int: int. (line 5)
+* int declarations: int declarations. (line 5)
+* int expressions: int expressions. (line 5)
+* int operations: int operations. (line 5)
+* int related functions: int related functions.
+ (line 5)
+* integer division: Miscellaneous oddities.
+ (line 6)
+* integer programming: Integer programming. (line 5)
+* Interactive use: Interactive use. (line 5)
+* interface, Emacs: Emacs user interface.
+ (line 5)
+* internalfunctions: internalfunctions. (line 5)
+* interpolate: interpolate. (line 5)
+* interred: interred. (line 5)
+* Interrupting SINGULAR: Interrupting SINGULAR.
+ (line 5)
+* intersect: intersect. (line 5)
+* intersection: intersection. (line 5)
+* intersection multiplicity: intersection. (line 20)
+* intmat: intmat. (line 5)
+* intmat declarations: intmat declarations. (line 5)
+* intmat expressions: intmat expressions. (line 5)
+* intmat operations: intmat operations. (line 5)
+* intmat related functions: intmat related functions.
+ (line 5)
+* intmat type cast: intmat type cast. (line 5)
+* intprog.lib: intprog_lib. (line 5)
+* intprog_lib: intprog_lib. (line 5)
+* Introduction: Introduction. (line 5)
+* intStrategy, option: option. (line 66)
+* intvec: intvec. (line 5)
+* intvec declarations: intvec declarations. (line 5)
+* intvec expressions: intvec expressions. (line 5)
+* intvec operations: intvec operations. (line 5)
+* intvec related functions: intvec related functions.
+ (line 5)
+* Invariant theory: Invariant theory. (line 5)
+* InvariantQ: InvariantQ. (line 5)
+* invariantRing: invariantRing. (line 5)
+* InvariantRing: InvariantRing. (line 5)
+* invariants: invariants. (line 5)
+* Invariants of a finite group: Invariants of a finite group.
+ (line 5)
+* invariant_basis: invariant_basis. (line 5)
+* invariant_basis_reynolds: invariant_basis_reynolds.
+ (line 5)
+* invariant_ring: invariant_ring. (line 5)
+* invariant_ring_random: invariant_ring_random.
+ (line 5)
+* inverse: inverse. (line 5)
+* inverse_B: inverse_B. (line 5)
+* inverse_L: inverse_L. (line 5)
+* InvertNumberMain: InvertNumberMain. (line 5)
+* invunit: invunit. (line 5)
+* irreducible power series: is_irred. (line 26)
+* isCM: isCM. (line 5)
+* isCMcod2: isCMcod2. (line 5)
+* isEquising: isEquising. (line 5)
+* isFlat: isFlat. (line 5)
+* isLocallyFree: isLocallyFree. (line 5)
+* isReg: isReg. (line 5)
+* is_active: is_active. (line 5)
+* is_bijective: is_bijective. (line 5)
+* is_ci: is_ci. (line 5)
+* is_complex: is_complex. (line 5)
+* is_homog: is_homog. (line 5)
+* is_injective: is_injective. (line 5)
+* is_irred: is_irred. (line 5)
+* is_is: is_is. (line 5)
+* is_NND: is_NND. (line 5)
+* is_reg: is_reg. (line 5)
+* is_regs: is_regs. (line 5)
+* is_surjective: is_surjective. (line 5)
+* is_zero: is_zero. (line 5)
+* jacob: jacob. (line 5)
+* jacoblift: jacoblift. (line 5)
+* jet: jet. (line 5)
+* jordan: jordan. (line 5)
+* jordanbasis: jordanbasis. (line 5)
+* jordanmatrix: jordanmatrix. (line 5)
+* jordannf: jordannf. (line 5)
+* katsura: katsura. (line 5)
+* kbase: kbase. (line 5)
+* keepring: keepring. (line 5)
+* Keilen, Thomas: Preface. (line 105)
+* kernel: preimage. (line 5)
+* kernel <1>: kernel. (line 5)
+* Kernel of module homomorphisms: Kernel of module homomorphisms.
+ (line 5)
+* kill: kill. (line 5)
+* killall: killall. (line 5)
+* killattrib: killattrib. (line 5)
+* kill_rings: kill_rings. (line 5)
+* kmemory: kmemory. (line 5)
+* kohom: kohom. (line 5)
+* kontrahom: kontrahom. (line 5)
+* koszul: koszul. (line 5)
+* KoszulHomology: KoszulHomology. (line 5)
+* Kru"ger, Kai: Preface. (line 105)
+* KSpencerKernel: KSpencerKernel. (line 5)
+* laguerre: laguerre. (line 5)
+* laguerre_solve: laguerre_solve. (line 5)
+* latex.lib: latex_lib. (line 5)
+* latex_lib: latex_lib. (line 5)
+* lcm: lcm. (line 5)
+* lead: lead. (line 5)
+* leadcoef: leadcoef. (line 5)
+* leadexp: leadexp. (line 5)
+* leadmonom: leadmonom. (line 5)
+* Levandovskyy, Viktor: Preface. (line 105)
+* lexicographical ordering: Global orderings. (line 10)
+* lex_solve: lex_solve. (line 5)
+* LIB: LIB. (line 5)
+* lib2doc: lib2doc. (line 5)
+* libfac: Preface. (line 5)
+* libparse: libparse. (line 5)
+* Libraries: Libraries. (line 5)
+* library, documentation: Documentation of a library.
+ (line 5)
+* library, Guidelines for writing: Guidelines for writing a library.
+ (line 5)
+* library, help string: The help string of a library.
+ (line 5)
+* library, info string: The help string of a library.
+ (line 5)
+* library, info string <1>: template_lib. (line 138)
+* library, procedures: Procedures in a library.
+ (line 5)
+* library, template: template_lib. (line 5)
+* library, template.lib: template_lib. (line 138)
+* library, typesetting of help strings: Typesetting of help strings.
+ (line 5)
+* LIBs: SINGULAR libraries. (line 5)
+* lift: lift. (line 5)
+* liftstd: liftstd. (line 5)
+* lift_kbase: lift_kbase. (line 5)
+* lift_rel_kb: lift_rel_kb. (line 5)
+* Limitations: Limitations. (line 5)
+* linalg.lib: linalg_lib. (line 5)
+* linalg_lib: linalg_lib. (line 5)
+* Linear algebra: Linear algebra. (line 5)
+* linear code, dual: dual_code. (line 18)
+* linear code, systematic: sys_code. (line 28)
+* LinearActionQ: LinearActionQ. (line 5)
+* LinearCombinationQ: LinearCombinationQ. (line 5)
+* LinearizeAction: LinearizeAction. (line 5)
+* linearpart: linearpart. (line 5)
+* link: link. (line 5)
+* link <1>: Parallelization with MPtcp links.
+ (line 5)
+* link declarations: link declarations. (line 5)
+* link expressions: link expressions. (line 5)
+* link related functions: link related functions.
+ (line 5)
+* list: list. (line 5)
+* list declarations: list declarations. (line 5)
+* list expressions: list expressions. (line 5)
+* list operations: list operations. (line 5)
+* list related functions: list related functions.
+ (line 5)
+* listvar: listvar. (line 5)
+* Loading of a library: Loading of a library.
+ (line 5)
+* loadLib, option: option. (line 147)
+* loadProc, option: option. (line 153)
+* local names: Names in procedures. (line 5)
+* Local orderings: Local orderings. (line 5)
+* local weighted lexicographical ordering: Local orderings. (line 53)
+* local weighted reverse lexicographical ordering: Local orderings.
+ (line 46)
+* localInvar: localInvar. (line 5)
+* locstd: locstd. (line 5)
+* Long coefficients: Long coefficients. (line 5)
+* Lossen, Christoph: Preface. (line 105)
+* lp, global ordering: Global orderings. (line 10)
+* lprint: lprint. (line 5)
+* lres: lres. (line 5)
+* ls, local ordering: Local orderings. (line 12)
+* M, ordering: Matrix orderings. (line 5)
+* Macintosh installation: Macintosh installation instructions.
+ (line 5)
+* map: map. (line 5)
+* map declarations: map declarations. (line 5)
+* map expressions: map expressions. (line 5)
+* map operations: map operations. (line 5)
+* mapall: mapall. (line 5)
+* mapIsFinite: mapIsFinite. (line 5)
+* Mathematical background: Mathematical background.
+ (line 5)
+* mathematical objects: Representation of mathematical
objects.
+ (line 5)
+* mathinit: mathinit. (line 5)
+* matrix: matrix. (line 5)
+* matrix declarations: matrix declarations. (line 5)
+* matrix expressions: matrix expressions. (line 5)
+* matrix operations: matrix operations. (line 5)
+* Matrix orderings: Matrix orderings. (line 5)
+* matrix related functions: matrix related functions.
+ (line 5)
+* matrix type cast: matrix type cast. (line 5)
+* matrix.lib: matrix_lib. (line 5)
+* matrixT1: matrixT1. (line 5)
+* matrix_lib: matrix_lib. (line 5)
+* mat_rk: mat_rk. (line 5)
+* Max: Max. (line 5)
+* maxcoef: maxcoef. (line 5)
+* maxdeg: maxdeg. (line 5)
+* maxdeg1: maxdeg1. (line 5)
+* maxideal: maxideal. (line 5)
+* mdouble: mdouble. (line 5)
+* mem, option: option. (line 156)
+* memory: memory. (line 5)
+* memory managment: memory. (line 5)
+* Milnor: Milnor and Tjurina. (line 5)
+* milnor: milnor. (line 5)
+* milnorcode: milnorcode. (line 5)
+* Min: Min. (line 5)
+* minAssChar: minAssChar. (line 5)
+* minAssGTZ: minAssGTZ. (line 5)
+* minbase: minbase. (line 5)
+* mindeg: mindeg. (line 5)
+* mindeg1: mindeg1. (line 5)
+* minimal display time, setting the: system. (line 80)
+* MinimalDecomposition: MinimalDecomposition.
+ (line 5)
+* minipoly: minipoly. (line 5)
+* minor: minor. (line 5)
+* minpoly: minpoly. (line 5)
+* minres: minres. (line 5)
+* minRes, option: option. (line 77)
+* minSatMod: minSatMod. (line 5)
+* mixed Hodge structure: gaussman_lib. (line 46)
+* mixed Hodge structure <1>: spectrum. (line 23)
+* mixed Hodge structure <2>: sppairs. (line 25)
+* mixed Hodge structure <3>: vfilt. (line 27)
+* mixed Hodge structure <4>: vwfilt. (line 29)
+* mixed Hodge structure <5>: tmatrix. (line 22)
+* mixed Hodge structure <6>: endvfilt. (line 26)
+* mod: int operations. (line 5)
+* mod <1>: number operations. (line 5)
+* mod2id: mod2id. (line 5)
+* modDec: modDec. (line 5)
+* ModEqn: ModEqn. (line 5)
+* module: module. (line 5)
+* module declarations: module declarations. (line 5)
+* module expressions: module expressions. (line 5)
+* module operations: module operations. (line 5)
+* module ordering C: Module orderings. (line 25)
+* module ordering c: Module orderings. (line 64)
+* Module orderings: Module orderings. (line 5)
+* module related functions: module related functions.
+ (line 5)
+* Modules and and their annihilator: Modules and their annihilator.
+ (line 5)
+* modulesEqual: modulesEqual. (line 5)
+* module_containment: module_containment. (line 5)
+* modulo: modulo. (line 5)
+* mod_versal: mod_versal. (line 5)
+* molien: molien. (line 5)
+* mondromy.lib: mondromy_lib. (line 5)
+* mondromy_lib: mondromy_lib. (line 5)
+* monitor: monitor. (line 5)
+* monodromy: gaussman_lib. (line 46)
+* monodromy <1>: monodromy. (line 5)
+* monodromy <2>: monodromy. (line 25)
+* Monodromy: mondromy_lib. (line 33)
+* monodromyB: monodromyB. (line 5)
+* Monomial orderings: Monomial orderings. (line 5)
+* monomial orderings: General definitions for orderings.
+ (line 5)
+* monomial orderings introduction: Introduction to orderings.
+ (line 5)
+* Monomial orderings, Term orderings: Term orderings. (line 5)
+* monomials and precedence: Miscellaneous oddities.
+ (line 39)
+* morsesplit: morsesplit. (line 5)
+* MP: Preface. (line 5)
+* MP links: MP links. (line 5)
+* MP, groebner basis computations: groebner. (line 33)
+* MPfile links: MPfile links. (line 5)
+* mplot: mplot. (line 5)
+* mpresmat: mpresmat. (line 5)
+* mprimdec.lib: mprimdec_lib. (line 5)
+* mprimdec_lib: mprimdec_lib. (line 5)
+* MPtcp: Parallelization with MPtcp links.
+ (line 5)
+* MPtcp links: MPtcp links. (line 5)
+* mp_res_mat: mp_res_mat. (line 5)
+* mregular.lib: mregular_lib. (line 5)
+* mregular_lib: mregular_lib. (line 5)
+* mres: mres. (line 5)
+* mstd: mstd. (line 5)
+* msum: msum. (line 5)
+* mtripple: mtripple. (line 5)
+* mult: mult. (line 5)
+* mult <1>: Miscellaneous oddities.
+ (line 51)
+* multBound: multBound. (line 5)
+* multcol: multcol. (line 5)
+* multiplicities, sequence of: invariants. (line 55)
+* multiplicity sequence: multsequence. (line 53)
+* multrow: multrow. (line 5)
+* multsequence: multsequence. (line 5)
+* nameof: nameof. (line 5)
+* Names: Names. (line 5)
+* names: names. (line 5)
+* Names in procedures: Names in procedures. (line 5)
+* nblocks: system. (line 63)
+* ncols: ncols. (line 5)
+* negative degree lexicographical ordering: Local orderings. (line 33)
+* negative degree reverse lexicographical ordering: Local orderings.
+ (line 19)
+* negative lexicographical ordering: Local orderings. (line 12)
+* net access: Command line options.
+ (line 26)
+* netscape: The online help system.
+ (line 27)
+* NETSCAPE environment variable: The online help system.
+ (line 93)
+* Neumann, Wolfgang: Preface. (line 108)
+* newline: string. (line 5)
+* news: News and changes. (line 5)
+* Newton non-degenerate: is_NND. (line 19)
+* Newton polygon: newtonpoly. (line 22)
+* Newton polygon <1>: is_NND. (line 19)
+* newtonpoly: newtonpoly. (line 5)
+* NF: reduce. (line 5)
+* nf_icis: nf_icis. (line 5)
+* noether: noether. (line 5)
+* noetherNormal: noetherNormal. (line 5)
+* non-english special characters: Limitations. (line 40)
+* none, option: option. (line 53)
+* normal: normal. (line 5)
+* Normal form: Standard bases. (line 24)
+* normal.lib: normal_lib. (line 5)
+* normalform: normalform. (line 5)
+* normalI: normalI. (line 5)
+* Normalization: Normalization. (line 5)
+* normalization: normal. (line 37)
+* normalization <1>: parametrize. (line 24)
+* normalization <2>: parametrizepd. (line 23)
+* normalize: normalize. (line 5)
+* normal_lib: normal_lib. (line 5)
+* not: boolean operations. (line 5)
+* notBuckets, option: option. (line 89)
+* notRegularity, option: option. (line 82)
+* notSugar, option: option. (line 86)
+* npars: npars. (line 5)
+* nres: nres. (line 5)
+* nrows: nrows. (line 5)
+* nselect: nselect. (line 5)
+* NSplaces: NSplaces. (line 5)
+* ntsolve.lib: ntsolve_lib. (line 5)
+* ntsolve_lib: ntsolve_lib. (line 5)
+* nt_solve: nt_solve. (line 5)
+* NullCone: NullCone. (line 5)
+* number: number. (line 5)
+* number declarations: number declarations. (line 5)
+* number expressions: number expressions. (line 5)
+* number operations: number operations. (line 5)
+* number related functions: number related functions.
+ (line 5)
+* number_e: number_e. (line 5)
+* number_pi: number_pi. (line 5)
+* numerator: numerator. (line 5)
+* nvars: nvars. (line 5)
+* Objects: Objects. (line 5)
+* oldStd, option: option. (line 72)
+* online help: The online help system.
+ (line 5)
+* open: open. (line 5)
+* opentex: opentex. (line 5)
+* opposite Hodge filtration: tmatrix. (line 22)
+* option: option. (line 5)
+* or: boolean operations. (line 5)
+* or <1>: Evaluation of logical expressions.
+ (line 5)
+* orbit_variety: orbit_variety. (line 5)
+* ord: ord. (line 5)
+* orderings: General definitions for orderings.
+ (line 5)
+* orderings introduction: Introduction to orderings.
+ (line 5)
+* orderings, a: Extra weight vector. (line 5)
+* orderings, global: Global orderings. (line 5)
+* orderings, local: Local orderings. (line 5)
+* orderings, M: Matrix orderings. (line 5)
+* orderings, product: Product orderings. (line 5)
+* ordstr: ordstr. (line 5)
+* ord_test: ord_test. (line 5)
+* orthogonalize: orthogonalize. (line 5)
+* outer: outer. (line 5)
+* output: Input and output. (line 5)
+* par: par. (line 5)
+* Parallelization: Parallelization with MPtcp links.
+ (line 5)
+* paramet.lib: paramet_lib. (line 5)
+* Parameter list: Parameter list. (line 5)
+* parameter, as numbers: number. (line 5)
+* Parameters: Parameters. (line 5)
+* parametrisation: parametrisation. (line 5)
+* parametrization: parametrisation. (line 39)
+* parametrization <1>: parametrize. (line 24)
+* parametrization <2>: parametrizepd. (line 23)
+* parametrization <3>: parametrizesing. (line 21)
+* parametrize: parametrize. (line 5)
+* parametrizepd: parametrizepd. (line 5)
+* parametrizesing: parametrizesing. (line 5)
+* paramet_lib: paramet_lib. (line 5)
+* pardeg: pardeg. (line 5)
+* parstr: parstr. (line 5)
+* partial_molien: partial_molien. (line 5)
+* path: Loading of a library.
+ (line 5)
+* pause: pause. (line 5)
+* permcol: permcol. (line 5)
+* permrow: permrow. (line 5)
+* permute_L: permute_L. (line 5)
+* Pfister, Gerhard: Preface. (line 101)
+* pid: system. (line 30)
+* plot: plot. (line 5)
+* pmat: pmat. (line 5)
+* Pohl, Wilfred: Preface. (line 105)
+* Polar curves: Polar curves. (line 5)
+* poly: poly. (line 5)
+* poly declarations: poly declarations. (line 5)
+* poly expressions: poly expressions. (line 5)
+* poly operations: poly operations. (line 5)
+* poly related functions: poly related functions.
+ (line 5)
+* poly.lib: poly_lib. (line 5)
+* Polynomial data: Polynomial data. (line 5)
+* poly_lib: poly_lib. (line 5)
+* posweight: posweight. (line 5)
+* pos_def: pos_def. (line 5)
+* Pottier algorithm: Pottier. (line 5)
+* power: power. (line 5)
+* power_products: power_products. (line 5)
+* preComp: preComp. (line 5)
+* Preface: Preface. (line 5)
+* preimage: preimage. (line 5)
+* prepareAss: prepareAss. (line 5)
+* prepMat: prepMat. (line 5)
+* prepSV: prepSV. (line 5)
+* presolve.lib: presolve_lib. (line 5)
+* presolve_lib: presolve_lib. (line 5)
+* Primary decomposition: Primary decomposition.
+ (line 5)
+* primary_char0: primary_char0. (line 5)
+* primary_char0_no_molien: primary_char0_no_molien.
+ (line 5)
+* primary_char0_no_molien_random: primary_char0_no_molien_random.
+ (line 5)
+* primary_char0_random: primary_char0_random.
+ (line 5)
+* primary_charp: primary_charp. (line 5)
+* primary_charp_no_molien: primary_charp_no_molien.
+ (line 5)
+* primary_charp_no_molien_random: primary_charp_no_molien_random.
+ (line 5)
+* primary_charp_random: primary_charp_random.
+ (line 5)
+* primary_charp_without: primary_charp_without.
+ (line 5)
+* primary_charp_without_random: primary_charp_without_random.
+ (line 5)
+* primary_invariants: primary_invariants. (line 5)
+* primary_invariants_random: primary_invariants_random.
+ (line 5)
+* primdec.lib: primdec_lib. (line 5)
+* PrimdecA: PrimdecA. (line 5)
+* PrimdecB: PrimdecB. (line 5)
+* primdecGTZ: primdecGTZ. (line 5)
+* primdecSY: primdecSY. (line 5)
+* primdec_lib: primdec_lib. (line 5)
+* prime: prime. (line 5)
+* primeClosure: primeClosure. (line 5)
+* primecoeffs: primecoeffs. (line 5)
+* primefactors: primefactors. (line 5)
+* primes: primes. (line 5)
+* primitiv.lib: primitiv_lib. (line 5)
+* primitive: primitive. (line 5)
+* primitive element: primitive. (line 34)
+* primitive_extra: primitive_extra. (line 5)
+* primitiv_lib: primitiv_lib. (line 5)
+* primTest: primTest. (line 5)
+* print: print. (line 5)
+* printf: printf. (line 5)
+* printlevel: printlevel. (line 5)
+* proc: proc. (line 5)
+* proc declaration: proc declaration. (line 5)
+* Procedure commands: Procedure commands. (line 5)
+* Procedure definition: Procedure definition.
+ (line 5)
+* procedure, ASCII help: mdouble. (line 19)
+* procedure, ASCII/Texinfo help: msum. (line 37)
+* procedure, texinfo help: mtripple. (line 23)
+* Procedures: Procedures. (line 5)
+* Procedures and LIB: Procedures and LIB. (line 5)
+* Procedures and libraries: Procedures and libraries.
+ (line 5)
+* Procedures in a library: Procedures in a library.
+ (line 5)
+* procedures, help string: The help string of procedures.
+ (line 5)
+* procedures, static: Procedure definition.
+ (line 5)
+* product: product. (line 5)
+* Product orderings: Product orderings. (line 5)
+* progress watch: option. (line 95)
+* prompt: The SINGULAR prompt. (line 5)
+* prompt, option: option. (line 159)
+* prot, option: option. (line 95)
+* protocoll of computations: option. (line 95)
+* prune: prune. (line 5)
+* Puiseux expansion: hnoether_lib. (line 53)
+* Puiseux pairs: Puiseux pairs. (line 5)
+* Puiseux pairs <1>: invariants. (line 55)
+* puiseux2generators: puiseux2generators. (line 5)
+* qhmatrix: qhmatrix. (line 5)
+* qhmoduli.lib: qhmoduli_lib. (line 5)
+* qhmoduli_lib: qhmoduli_lib. (line 5)
+* qhspectrum: qhspectrum. (line 5)
+* qhweight: qhweight. (line 5)
+* qring: qring. (line 5)
+* qring <1>: Miscellaneous oddities.
+ (line 73)
+* qring declaration: qring declaration. (line 5)
+* quickclass: quickclass. (line 5)
+* quit: quit. (line 5)
+* quot: quot. (line 5)
+* quote: quote. (line 5)
+* quotient: quotient. (line 5)
+* Quotient: Quotient. (line 5)
+* QuotientEquations: QuotientEquations. (line 5)
+* QuotientMain: QuotientMain. (line 5)
+* radical: radical. (line 5)
+* radicalEHV: radicalEHV. (line 5)
+* rad_con: rad_con. (line 5)
+* random: random. (line 5)
+* random number generator, seed: system. (line 80)
+* random.lib: random_lib. (line 5)
+* randomBinomial: randomBinomial. (line 5)
+* randomid: randomid. (line 5)
+* randomLast: randomLast. (line 5)
+* randommat: randommat. (line 5)
+* random_lib: random_lib. (line 5)
+* read: read. (line 5)
+* reading, option: option. (line 162)
+* readline: Preface. (line 5)
+* real: Rings and orderings. (line 23)
+* redefine, option: option. (line 165)
+* redSB, option: option. (line 101)
+* redTail, option: option. (line 105)
+* redThrough, option: option. (line 111)
+* reduce: reduce. (line 5)
+* reduced standard basis: option. (line 101)
+* reduction: reduction. (line 5)
+* ReesAlgebra: ReesAlgebra. (line 5)
+* reesclos.lib: reesclos_lib. (line 5)
+* reesclos_lib: reesclos_lib. (line 5)
+* References: References. (line 5)
+* regularity: regularity. (line 5)
+* regularity <1>: Syzygies and resolutions.
+ (line 79)
+* reg_CM: reg_CM. (line 5)
+* reg_curve: reg_curve. (line 5)
+* reg_moncurve: reg_moncurve. (line 5)
+* relative_orbit_variety: relative_orbit_variety.
+ (line 5)
+* Release Notes: Release Notes. (line 5)
+* relweight: relweight. (line 5)
+* Remainder: Remainder. (line 5)
+* RemainderMain: RemainderMain. (line 5)
+* repart: repart. (line 5)
+* representation, math objects: Representation of mathematical
objects.
+ (line 5)
+* res: res. (line 5)
+* reservedName: reservedName. (line 5)
+* Resolution: Resolution. (line 5)
+* resolution: resolution. (line 5)
+* resolution declarations: resolution declarations.
+ (line 5)
+* resolution expressions: resolution expressions.
+ (line 5)
+* resolution related functions: resolution related functions.
+ (line 5)
+* resolution, computation of: res. (line 7)
+* resolution, hilbert-driven: hres. (line 5)
+* resolution, La Scala's method: lres. (line 5)
+* resultant: resultant. (line 5)
+* return: return. (line 5)
+* return type of procedures: Return type of procedures.
+ (line 5)
+* returnSB, option: option. (line 56)
+* reverse lexicographical ordering: Global orderings. (line 17)
+* ReynoldsImage: ReynoldsImage. (line 5)
+* ReynoldsOperator: ReynoldsOperator. (line 5)
+* reynolds_molien: reynolds_molien. (line 5)
+* ring: ring. (line 5)
+* ring declarations: ring declarations. (line 5)
+* ring operations: ring operations. (line 5)
+* ring related functions: ring related functions.
+ (line 5)
+* ring.lib: ring_lib. (line 5)
+* Rings and orderings: Rings and orderings. (line 5)
+* Rings and standard bases: Rings and standard bases.
+ (line 5)
+* ringtensor: ringtensor. (line 5)
+* ringweights: ringweights. (line 5)
+* ring_lib: ring_lib. (line 5)
+* rinvar.lib: rinvar_lib. (line 5)
+* rinvar_lib: rinvar_lib. (line 5)
+* rMacaulay: rMacaulay. (line 5)
+* rmx: rmx. (line 5)
+* rm_unitcol: rm_unitcol. (line 5)
+* rm_unitrow: rm_unitrow. (line 5)
+* RootDir: Loading of a library.
+ (line 5)
+* Roots: Roots. (line 5)
+* RootsMain: RootsMain. (line 5)
+* rowred: rowred. (line 5)
+* rp, global ordering: Global orderings. (line 17)
+* Running SINGULAR under Emacs: Running SINGULAR under Emacs.
+ (line 5)
+* rvalue: No rvalue of increments and
assignments.
+ (line 5)
+* rvar: rvar. (line 5)
+* SameQ: SameQ. (line 5)
+* sat: sat. (line 5)
+* Saturation: Saturation. (line 5)
+* Schmidt, Jens: Preface. (line 108)
+* Scho"nemann, Hans: Preface. (line 101)
+* Schulze, Mathias: Preface. (line 105)
+* SDB breakpoint: Source code debugger.
+ (line 55)
+* SDB debugger: Source code debugger.
+ (line 55)
+* sdb, source code debugger: Source code debugger.
+ (line 5)
+* SearchPath: Loading of a library.
+ (line 5)
+* secondary_and_irreducibles_no_molien: secondary_and_irreducibles_no_molien.
+ (line 5)
+* secondary_char0: secondary_char0. (line 5)
+* secondary_charp: secondary_charp. (line 5)
+* secondary_not_cohen_macaulay: secondary_not_cohen_macaulay.
+ (line 5)
+* secondary_no_molien: secondary_no_molien. (line 5)
+* select: select. (line 5)
+* select1: select1. (line 5)
+* semiCMcod2: semiCMcod2. (line 5)
+* semigroup of values: invariants. (line 55)
+* separateHNE: separateHNE. (line 5)
+* separator: separator. (line 5)
+* setenv: system. (line 41)
+* sethnering: sethnering. (line 5)
+* setring: setring. (line 5)
+* sh: system. (line 26)
+* short: short. (line 5)
+* shortid: shortid. (line 5)
+* show: show. (line 5)
+* showrecursive: showrecursive. (line 5)
+* simplex: simplex. (line 5)
+* simplexOut: simplexOut. (line 5)
+* simplify: simplify. (line 5)
+* SimplifyIdeal: SimplifyIdeal. (line 5)
+* sing.lib: sing_lib. (line 5)
+* Singular: system. (line 68)
+* SINGULAR libraries: SINGULAR libraries. (line 5)
+* Singular, customization of Emacs user interface: Customization of the Emacs
interface.
+ (line 5)
+* Singular, demo mode: Demo mode. (line 5)
+* Singular, editing input files with Emacs: Editing SINGULAR input files with
Emacs.
+ (line 5)
+* Singular, important commands of Emacs interface: Top 20 Emacs commands.
+ (line 5)
+* Singular, running within Emacs: Running SINGULAR under Emacs.
+ (line 5)
+* SINGULARHIST: Editing input. (line 5)
+* Singularities: Singularities. (line 5)
+* singularities: gaussman_lib. (line 46)
+* singularities <1>: gmsring. (line 28)
+* singularities <2>: gmsnf. (line 23)
+* singularities <3>: gmscoeffs. (line 23)
+* singularities <4>: bernstein. (line 21)
+* singularities <5>: monodromy. (line 25)
+* singularities <6>: spectrum. (line 23)
+* singularities <7>: sppairs. (line 25)
+* singularities <8>: vfilt. (line 27)
+* singularities <9>: vwfilt. (line 29)
+* singularities <10>: tmatrix. (line 22)
+* singularities <11>: endvfilt. (line 26)
+* singularities <12>: spectrumnd. (line 27)
+* singularity: singularity. (line 5)
+* SINGULARPATH: Loading of a library.
+ (line 5)
+* singularrc: Startup sequence. (line 10)
+* sing_lib: sing_lib. (line 5)
+* size: size. (line 5)
+* size <1>: Miscellaneous oddities.
+ (line 67)
+* skewmat: skewmat. (line 5)
+* sleep: status. (line 5)
+* slocus: slocus. (line 5)
+* solve: solve. (line 5)
+* solve.lib: solve_lib. (line 5)
+* solvelinearpart: solvelinearpart. (line 5)
+* solve_IP: solve_IP. (line 5)
+* solve_lib: solve_lib. (line 5)
+* sort: sort. (line 5)
+* sortandmap: sortandmap. (line 5)
+* sortier: sortier. (line 5)
+* sortvars: sortvars. (line 5)
+* sortvec: sortvec. (line 5)
+* Source code debugger, invocation: Command line options.
+ (line 13)
+* source code debugger, sdb: Source code debugger.
+ (line 5)
+* spadd: spadd. (line 5)
+* sparseid: sparseid. (line 5)
+* sparsemat: sparsemat. (line 5)
+* sparsematrix: sparsematrix. (line 5)
+* sparsepoly: sparsepoly. (line 5)
+* sparsetriag: sparsetriag. (line 5)
+* spcurve.lib: spcurve_lib. (line 5)
+* spcurve_lib: spcurve_lib. (line 5)
+* Special characters: Special characters. (line 5)
+* special characters, non-english: Limitations. (line 40)
+* specialModulesEqual: specialModulesEqual. (line 5)
+* spectral pairs: gaussman_lib. (line 46)
+* spectral pairs <1>: sppairs. (line 25)
+* spectral pairs <2>: vwfilt. (line 29)
+* spectrum: gaussman_lib. (line 46)
+* spectrum <1>: spectrum. (line 5)
+* spectrum <2>: spectrum. (line 23)
+* spectrum <3>: sppairs. (line 25)
+* spectrum <4>: vfilt. (line 27)
+* spectrum <5>: vwfilt. (line 29)
+* spectrum <6>: spectrumnd. (line 27)
+* spectrum.lib: spectrum_lib. (line 5)
+* spectrumnd: spectrumnd. (line 5)
+* spectrum_lib: spectrum_lib. (line 5)
+* spgamma: spgamma. (line 5)
+* spgeomgenus: spgeomgenus. (line 5)
+* spissemicont: spissemicont. (line 5)
+* split: split. (line 5)
+* splitring: splitring. (line 5)
+* splitting: splitting. (line 5)
+* spmilnor: spmilnor. (line 5)
+* spmul: spmul. (line 5)
+* spnf: spnf. (line 5)
+* sppairs: sppairs. (line 5)
+* sppnf: sppnf. (line 5)
+* sppprint: sppprint. (line 5)
+* spprint: spprint. (line 5)
+* sprintf: sprintf. (line 5)
+* spsemicont: spsemicont. (line 5)
+* spsub: spsub. (line 5)
+* SQFRNorm: SQFRNorm. (line 5)
+* SQFRNormMain: SQFRNormMain. (line 5)
+* squarefree: squarefree. (line 5)
+* sres: sres. (line 5)
+* StabEqn: StabEqn. (line 5)
+* StabEqnId: StabEqnId. (line 5)
+* StabOrder: StabOrder. (line 5)
+* staircase: staircase. (line 5)
+* Standard bases: Standard bases. (line 5)
+* standard.lib: standard_lib. (line 10)
+* standard_lib: standard_lib. (line 10)
+* Startup sequence: Startup sequence. (line 5)
+* static procedures: Procedure definition.
+ (line 5)
+* status: status. (line 5)
+* std: std. (line 5)
+* stdfglm: stdfglm. (line 5)
+* stdhilb: stdhilb. (line 5)
+* stdModulesEqual: stdModulesEqual. (line 5)
+* Stobbe, Ru"diger: Preface. (line 108)
+* stratify: stratify. (line 5)
+* stratify.lib: stratify_lib. (line 5)
+* stratify_lib: stratify_lib. (line 5)
+* string: string. (line 5)
+* string <1>: Miscellaneous oddities.
+ (line 83)
+* string declarations: string declarations. (line 5)
+* string expressions: string expressions. (line 5)
+* string operations: string operations. (line 5)
+* string related functions: string related functions.
+ (line 5)
+* string type cast: string type cast. (line 5)
+* stripHNE: stripHNE. (line 5)
+* submat: submat. (line 5)
+* subrInterred: subrInterred. (line 5)
+* subst: subst. (line 5)
+* substitute: substitute. (line 5)
+* sugarCrit, option: option. (line 118)
+* sum: sum. (line 5)
+* surf.lib: surf_lib. (line 5)
+* surf_lib: surf_lib. (line 5)
+* SuSE, ESingular bug: Unix installation instructions.
+ (line 195)
+* suspend: status. (line 5)
+* SV-decoding algorithm: decodeSV. (line 25)
+* SV-decoding algorithm, preprocessing: prepSV. (line 57)
+* swap: swap. (line 5)
+* switch: No case or switch statement.
+ (line 5)
+* Symbolic-numerical solving: Symbolic-numerical solving.
+ (line 5)
+* symmat: symmat. (line 5)
+* sym_gauss: sym_gauss. (line 5)
+* system: system. (line 5)
+* System variables: System variables. (line 5)
+* system, -: system. (line 72)
+* system, -long_option_name: system. (line 75)
+* system, -long_option_name=value: system. (line 80)
+* system, browsers: system. (line 88)
+* system, contributors: system. (line 52)
+* system, gen: system. (line 56)
+* system, getenv: system. (line 37)
+* system, nblocks: system. (line 63)
+* system, pid: system. (line 30)
+* system, setenv: system. (line 41)
+* system, sh: system. (line 26)
+* system, Singular: system. (line 68)
+* system, tty: system. (line 46)
+* system, uname: system. (line 33)
+* system, version: system. (line 49)
+* sys_code: sys_code. (line 5)
+* syz: syz. (line 5)
+* Syzygies and resolutions: Syzygies and resolutions.
+ (line 5)
+* T1: T1 and T2. (line 5)
+* T2: T1 and T2. (line 5)
+* tab: tab. (line 5)
+* Table: Table. (line 5)
+* tangentcone: tangentcone. (line 5)
+* tau_es: tau_es. (line 5)
+* Template for writing a library: template_lib. (line 5)
+* template.lib: template_lib. (line 128)
+* template.lib <1>: template_lib. (line 138)
+* template_lib: template_lib. (line 5)
+* template_lib <1>: template_lib. (line 128)
+* tensor: tensor. (line 5)
+* tensorMod: tensorMod. (line 5)
+* term orderings: General definitions for orderings.
+ (line 5)
+* term orderings introduction: Introduction to orderings.
+ (line 5)
+* testPrimary: testPrimary. (line 5)
+* tex: tex. (line 5)
+* texdemo: texdemo. (line 5)
+* texfactorize: texfactorize. (line 5)
+* texmap: texmap. (line 5)
+* texname: texname. (line 5)
+* texobj: texobj. (line 5)
+* texpoly: texpoly. (line 5)
+* texproc: texproc. (line 5)
+* texring: texring. (line 5)
+* The online help system: The online help system.
+ (line 5)
+* The SINGULAR language: The SINGULAR language.
+ (line 5)
+* time limit on computations: groebner. (line 33)
+* timeFactorize: timeFactorize. (line 5)
+* timer: timer. (line 5)
+* timer <1>: rtimer. (line 5)
+* timer resolution, setting the: system. (line 80)
+* timeStd: timeStd. (line 5)
+* Tjurina: Milnor and Tjurina. (line 5)
+* Tjurina <1>: Tjurina. (line 5)
+* tjurina: tjurina. (line 5)
+* Tjurina number: deltaLoc. (line 36)
+* tkinfo: The online help system.
+ (line 30)
+* tmatrix: tmatrix. (line 5)
+* tolessvars: tolessvars. (line 5)
+* Top 20 Emacs commands: Top 20 Emacs commands.
+ (line 5)
+* Tor: Tor. (line 5)
+* toric ideals: Toric ideals. (line 5)
+* Toric ideals and integer programming: Toric ideals and integer programming.
+ (line 5)
+* toric.lib: toric_lib. (line 5)
+* toric_ideal: toric_ideal. (line 5)
+* toric_lib: toric_lib. (line 5)
+* toric_std: toric_std. (line 5)
+* trace: trace. (line 5)
+* TRACE: TRACE var. (line 5)
+* TransferIdeal: TransferIdeal. (line 5)
+* transpose: transpose. (line 5)
+* triagmatrix: triagmatrix. (line 5)
+* triang.lib: triang_lib. (line 5)
+* triangL: triangL. (line 5)
+* triangLfak: triangLfak. (line 5)
+* triangLf_solve: triangLf_solve. (line 5)
+* triangL_solve: triangL_solve. (line 5)
+* triangM: triangM. (line 5)
+* triangMH: triangMH. (line 5)
+* triangM_solve: triangM_solve. (line 5)
+* triang_lib: triang_lib. (line 5)
+* triang_solve: triang_solve. (line 5)
+* Tricks and pitfalls: Tricks and pitfalls. (line 5)
+* triMNewton: triMNewton. (line 5)
+* tty: system. (line 46)
+* type: type. (line 5)
+* Type casting: Type conversion and casting.
+ (line 45)
+* Type conversion: Type conversion and casting.
+ (line 8)
+* typeof: typeof. (line 5)
+* Typesetting of help strings: Typesetting of help strings.
+ (line 5)
+* T_1: T_1. (line 5)
+* T_12: T_12. (line 5)
+* T_2: T_2. (line 5)
+* uname: system. (line 33)
+* unitmat: unitmat. (line 5)
+* Unix installation: Unix installation instructions.
+ (line 5)
+* untyped definitions: def. (line 5)
+* UpperMonomials: UpperMonomials. (line 5)
+* uressolve: uressolve. (line 5)
+* ures_solve: ures_solve. (line 5)
+* usage, option: option. (line 168)
+* user interface, Emacs: Emacs user interface.
+ (line 5)
+* U_D_O: U_D_O. (line 5)
+* V-filtration: gaussman_lib. (line 46)
+* V-filtration <1>: spectrum. (line 23)
+* V-filtration <2>: sppairs. (line 25)
+* V-filtration <3>: vfilt. (line 27)
+* V-filtration <4>: vwfilt. (line 29)
+* V-filtration <5>: tmatrix. (line 22)
+* V-filtration <6>: endvfilt. (line 26)
+* valvars: valvars. (line 5)
+* vandermonde: vandermonde. (line 5)
+* var: var. (line 5)
+* varstr: varstr. (line 5)
+* vdim: vdim. (line 5)
+* vector: vector. (line 5)
+* vector declarations: vector declarations. (line 5)
+* vector expressions: vector expressions. (line 5)
+* vector operations: vector operations. (line 5)
+* vector related functions: vector related functions.
+ (line 5)
+* versal: versal. (line 5)
+* version: system. (line 49)
+* version in a library: Format of a library. (line 40)
+* vfilt: vfilt. (line 5)
+* Visualization: Visualization. (line 5)
+* voice: voice. (line 5)
+* vwfilt: vwfilt. (line 5)
+* watchdog: watchdog. (line 5)
+* wedge: wedge. (line 5)
+* Weierstrass: Weierstrass. (line 5)
+* Weierstrass semigroup: brnoeth_lib. (line 47)
+* weight: weight. (line 5)
+* weight filtration: gaussman_lib. (line 46)
+* weight filtration <1>: sppairs. (line 25)
+* weight filtration <2>: vwfilt. (line 29)
+* weighted lexicographical ordering: Global orderings. (line 59)
+* weighted reverse lexicographical ordering: Global orderings.
+ (line 52)
+* weightM, option: option. (line 122)
+* Westenberger, Eric: Preface. (line 105)
+* which: which. (line 5)
+* while: while. (line 5)
+* Wichmann, Tim: Preface. (line 105)
+* Windows installation: Windows installation instructions.
+ (line 5)
+* Windows installation, components: Windows installation instructions.
+ (line 44)
+* wp, global ordering: Global orderings. (line 52)
+* WP, global ordering: Global orderings. (line 59)
+* write: write. (line 5)
+* writelist: writelist. (line 5)
+* ws, local ordering: Local orderings. (line 46)
+* Ws, local ordering: Local orderings. (line 53)
+* xdvi: xdvi. (line 5)
+* xinfo: The online help system.
+ (line 33)
+* XINFO environment variable: The online help system.
+ (line 93)
+* XTERM environment variable: The online help system.
+ (line 93)
+* zerodec: zerodec. (line 5)
+* zeroMod: zeroMod. (line 5)
+* zeroOpt: zeroOpt. (line 5)
+* ZeroSet: ZeroSet. (line 5)
+* zeroset.lib: zeroset_lib. (line 5)
+* zeroset_lib: zeroset_lib. (line 5)
+
+<font size="-1">
+ User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
+generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
+</font>
+
+</body>
+</html>
Index: test/formatting/res_info/simplest_test_prefix/simplest.info
===================================================================
RCS file: test/formatting/res_info/simplest_test_prefix/simplest.info
diff -N test/formatting/res_info/simplest_test_prefix/simplest.info
--- test/formatting/res_info/simplest_test_prefix/simplest.info 26 Oct 2009
23:21:58 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,14 +0,0 @@
-This is simplest.info, produced by makeinfo version 4.13 from
-simplest.texi.
-
-
-File: simplest.info, Node: Top, Up: (dir)
-
-This is a very simple texi manual <>.
-
-
-
-Tag Table:
-Node: Top78
-
-End Tag Table
Index: test/formatting/res_info/simplest_test_prefix_info/simplest.info
===================================================================
RCS file: test/formatting/res_info/simplest_test_prefix_info/simplest.info
diff -N test/formatting/res_info/simplest_test_prefix_info/simplest.info
--- test/formatting/res_info/simplest_test_prefix_info/simplest.info 26 Oct
2009 23:21:58 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,14 +0,0 @@
-This is simplest.info, produced by makeinfo version 4.13 from
-simplest.texi.
-
-
-File: simplest.info, Node: Top, Up: (dir)
-
-This is a very simple texi manual <>.
-
-
-
-Tag Table:
-Node: Top78
-
-End Tag Table
Index: test/sectionning/res_info/makeinfo_novalidate_unsplit/first.html
===================================================================
RCS file: test/sectionning/res_info/makeinfo_novalidate_unsplit/first.html
diff -N test/sectionning/res_info/makeinfo_novalidate_unsplit/first.html
--- test/sectionning/res_info/makeinfo_novalidate_unsplit/first.html 2 Mar
2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: first</title>
-
-<meta name="description" content="top section: first">
-<meta name="keywords" content="top section: first">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2; url=novalidate.html#first">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a
href="novalidate.html#first">first</a>.</p>
-</body>
Index: test/sectionning/res_info/makeinfo_novalidate_unsplit/index.html
===================================================================
RCS file: test/sectionning/res_info/makeinfo_novalidate_unsplit/index.html
diff -N test/sectionning/res_info/makeinfo_novalidate_unsplit/index.html
--- test/sectionning/res_info/makeinfo_novalidate_unsplit/index.html 2 Mar
2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: Top</title>
-
-<meta name="description" content="top section: Top">
-<meta name="keywords" content="top section: Top">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2; url=novalidate.html#Top">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a
href="novalidate.html#Top">Top</a>.</p>
-</body>
Index:
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-in-menu-before-top.html
===================================================================
RCS file:
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-in-menu-before-top.html
diff -N
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-in-menu-before-top.html
---
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-in-menu-before-top.html
2 Mar 2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: node in menu before top</title>
-
-<meta name="description" content="top section: node in menu before top">
-<meta name="keywords" content="top section: node in menu before top">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2;
url=novalidate.html#node-in-menu-before-top">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a
href="novalidate.html#node-in-menu-before-top">node in menu before top</a>.</p>
-</body>
Index:
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-not-existing.html
===================================================================
RCS file:
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-not-existing.html
diff -N
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-not-existing.html
---
test/sectionning/res_info/makeinfo_novalidate_unsplit/node-not-existing.html
2 Mar 2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: node not existing</title>
-
-<meta name="description" content="top section: node not existing">
-<meta name="keywords" content="top section: node not existing">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2; url=#node-not-existing">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a href="#node-not-existing">node not
existing</a>.</p>
-</body>
Index:
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-in-menu-before-top.html
===================================================================
RCS file:
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-in-menu-before-top.html
diff -N
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-in-menu-before-top.html
---
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-in-menu-before-top.html
2 Mar 2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: other node in menu before top</title>
-
-<meta name="description" content="top section: other node in menu before top">
-<meta name="keywords" content="top section: other node in menu before top">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2;
url=novalidate.html#other-node-in-menu-before-top">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a
href="novalidate.html#other-node-in-menu-before-top">other node in menu before
top</a>.</p>
-</body>
Index:
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-not-existing.html
===================================================================
RCS file:
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-not-existing.html
diff -N
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-not-existing.html
---
test/sectionning/res_info/makeinfo_novalidate_unsplit/other-node-not-existing.html
2 Mar 2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: other node not existing</title>
-
-<meta name="description" content="top section: other node not existing">
-<meta name="keywords" content="top section: other node not existing">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2; url=#other-node-not-existing">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a href="#other-node-not-existing">other
node not existing</a>.</p>
-</body>
Index: test/sectionning/res_info/makeinfo_novalidate_unsplit/second-node.html
===================================================================
RCS file: test/sectionning/res_info/makeinfo_novalidate_unsplit/second-node.html
diff -N test/sectionning/res_info/makeinfo_novalidate_unsplit/second-node.html
--- test/sectionning/res_info/makeinfo_novalidate_unsplit/second-node.html
2 Mar 2010 16:03:08 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,56 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created on a sunny day by texi2html -->
-<!--
-texi2html was written by:
- Lionel Cons <address@hidden> (original author)
- Karl Berry <address@hidden>
- Olaf Bachmann <address@hidden>
- and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
-
--->
-<head>
-<title>top section: second node</title>
-
-<meta name="description" content="top section: second node">
-<meta name="keywords" content="top section: second node">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-div.display {margin-left: 3.2em}
-div.example {margin-left: 3.2em}
-div.lisp {margin-left: 3.2em}
-div.smalldisplay {margin-left: 3.2em}
-div.smallexample {margin-left: 3.2em}
-div.smalllisp {margin-left: 3.2em}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.nocodebreak {white-space:pre}
-span.nolinebreak {white-space:pre}
-span.roman {font-family:serif; font-weight:normal}
-span.sansserif {font-family:sans-serif; font-weight:normal}
-ul.no-bullet {list-style: none}
--->
-</style>
-
-<meta http-equiv="Refresh" content="2; url=novalidate.html#second-node">
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#800080" alink="#FF0000">
-
-<p>The node you are looking for is at <a
href="novalidate.html#second-node">second node</a>.</p>
-</body>
Index: test/singular_manual/res_all/singular/index.htm
===================================================================
RCS file: test/singular_manual/res_all/singular/index.htm
diff -N test/singular_manual/res_all/singular/index.htm
--- test/singular_manual/res_all/singular/index.htm 10 Aug 2009 10:01:22
-0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,59 +0,0 @@
-Short Table of Contents
-***********************
-
-1 Preface
-2 Introduction
-3 General concepts
-4 Data types
-5 Functions and system variables
-6 Tricks and pitfalls
-Appendix A Examples
-Appendix B Polynomial data
-Appendix C Mathematical background
-Appendix D SINGULAR libraries
-E Release Notes
-F Index
-
-
-Top
-***
-
-
-<CENTER>
-<A HREF="http://www.singular.uni-kl.de">
-<IMG SRC="singular.jpg"></A><br>
-<h3> A Computer Algebra System for Polynomial Computations </h3>
-<p></p>
-<h4>HTML User Manual for Singular Version
-2-0-4, October 2002
-</h4>
-</center>
-<CENTER><A HREF="http://www.uni-kl.de/"><I>University of
Kaiserslautern</I></A></CENTER>
-<CENTER><A HREF="http://www.mathematik.uni-kl.de/"><I>Department of
Mathematics</I></A></CENTER>
-<CENTER><A HREF="http://www.mathematik.uni-kl.de/~zca/">
-<I>Centre for Computer Algebra</I></A></CENTER><p></p>
-
-* Preface::
-* Introduction::
-* General concepts::
-* Data types::
-* Functions and system variables::
-* Tricks and pitfalls::
-* Examples::
-* Polynomial data::
-* Mathematical background::
-* SINGULAR libraries::
-* Release Notes::
-* Index::
-
-<blockquote>
-Table of Contents
-<br>
-About this document</blockquote>
-<font size="-1">
- User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
-generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
-</font>
-
-</body>
-</html>
Index: test/singular_manual/res_all/singular/sing_abt.htm
===================================================================
RCS file: test/singular_manual/res_all/singular/sing_abt.htm
diff -N test/singular_manual/res_all/singular/sing_abt.htm
--- test/singular_manual/res_all/singular/sing_abt.htm 31 Jul 2009 10:17:52
-0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,20 +0,0 @@
-About This Document
-*******************
-
-This document is the user manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002.
-<br>
-
-For questions and comments about Singular, send email to <a
href="mailto:address@hidden">address@hidden</a>.
-
-<p></p>
-This document was generated by <a
href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>
-and <a
href="http://www-dsed.llnl.gov/files/programs/unix/latex2html/manual/">LaTeX2<tt>HTML</tt></a>
-and is best viewed with a 16 or 18 point screen font.
-<p></p>
-<font size="-1">
- User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
-generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
-</font>
-
-</body>
-</html>
Index: test/singular_manual/res_info/singular_httex/sing.info
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.info
diff -N test/singular_manual/res_info/singular_httex/sing.info
--- test/singular_manual/res_info/singular_httex/sing.info 23 Jan 2010
00:47:00 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,9853 +0,0 @@
-This is sing.info, produced by makeinfo version 4.13 from singular.texi.
-
-
-This is the texinfo file describing Singular (version 2-0-4)
-
-
-File: sing.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir)
-
-<CENTER>
-<A HREF="http://www.singular.uni-kl.de">
-<IMG SRC="singular.jpg"></A><br>
-<h3> A Computer Algebra System for Polynomial Computations </h3>
-<p></p>
-<h4>HTML User Manual for Singular Version
-2-0-4, October 2002 </h4>
-</center>
-<CENTER><A HREF="http://www.uni-kl.de/"><I>University of
Kaiserslautern</I></A></CENTER>
-<CENTER><A HREF="http://www.mathematik.uni-kl.de/"><I>Department of
Mathematics</I></A></CENTER>
-<CENTER><A HREF="http://www.mathematik.uni-kl.de/~zca/">
-<I>Centre for Computer Algebra</I></A></CENTER><p></p>
-
-* Menu:
-
-* Preface::
-* Introduction::
-* General concepts::
-* Data types::
-* Functions and system variables::
-* Tricks and pitfalls::
-* Examples::
-* Polynomial data::
-* Mathematical background::
-* SINGULAR libraries::
-* Release Notes::
-* Index::
-
-<blockquote>
-Table of Contents
-<br>
-About this document</blockquote>
-
-File: sing.info, Node: Preface, Next: Introduction, Prev: Top, Up: Top
-
-1 Preface
-*********
-
- SINGULAR version 2-0-4
- University of Kaiserslautern
- Department of Mathematics and Centre for Computer Algebra
- Authors: G.-M. Greuel, G. Pfister, H. Schoenemann
-
- Copyright (C) 1986-2003
-
-
- *NOTICE*
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation ( version 2 of the License ); with the
-following additional restrictions (which override any conflicting
-restrictions in the GPL):
-
-The following software used with SINGULAR have their own copyright: the
-omalloc library, the readline library, the Gnu Multiple Precision
-Library (GMP), NTL: A Library for doing Number Theory (NTL), the Multi
-Protocol library (MP), the Singular-Factory library, the Singular-libfac
-library, and, for the Windows distributions the Cygwin DLL and the
-Cygwin tools (Cygwin), and the XEmacs editor (XEmacs).
-
-Their copyrights and licenses can be found in the accompanying files
-which are distributed along with these packages.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (see GPL)
-
-Please send any comments or bug reports to
-<address@hidden>.
-
-Please register yourself as a SINGULAR user by using the registration
-form on the SINGULAR homepage
-`http://www.singular.uni-kl.de'. If for some reason you cannot access
-the registration form, you can also register by sending an email to
-<address@hidden> with subject line `register' and body
-containing the following data: your name, email address,
-organisation, country and platform(s).
-
-If you use Singular or parts thereof in a project and/or publish results
-that were partly obtained using SINGULAR, we ask you to cite SINGULAR
-and inform us thereof - see
-`http://www.singular.uni-kl.de/how_to_cite.html', for information on how
-to cite Singular.
-
-Availability
-============
-
-The latest information about SINGULAR is always available from
-`http://www.singular.uni-kl.de'. The program SINGULAR and the above
-mentioned parts are available via anonymous ftp through the following
-addresses:
-GMP, libreadline
- (C) Free Software Foundation
- `ftp://ftp.gnu.ai.mit.edu' or its mirrors
-
-MP
- (C) Gray/Kajler/Wang, Kent State University
- `http://www.symbolicnet.org/areas/protocols/mp.html'
-
-NTL
- (C) Victor Shoup
- `ftp://www.shoup.net'
-
-Singular-Factory
- (C) Greuel/Stobbe, University of Kaiserslautern:
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Factory'
-
-Singular-libfac
- (C) Messollen, University of Saarbru"cken:
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Libfac'
-
-SINGULAR binaries and sources
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/' or via a WWW
- browser from
- `http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/'
-
-Cygwin
- `http://www.cygwin.com/'
-
-Xemacs
- `http://www.xemacs.org'
-
-Acknowledgements
-================
-
-The development of SINGULAR is directed and coordinated by Gert-Martin
-Greuel, Gerhard Pfister, and Hans Scho"nemann.
-
-Currently, the SINGULAR team has the following members: Olaf Bachmann,
-Anne Fru"bis-Kru"ger, Thomas Keilen, Kai Kru"ger, Christoph Lossen,
-Viktor Levandovskyy, Wilfred Pohl, Mathias Schulze, Eric Westenberger,
-and Tim Wichmann.
-
-Past members of the SINGULAR team are: Hubert Grassmann, Wolfgang
-Neumann, Jens Schmidt, Ru"diger Stobbe.
-
-Further contributions to SINGULAR were made by: Thomas Bayer, Isabelle
-Bermejo, Stephan Endrass, Jose Ignacio Farran Martin, Wolfram Decker,
-Philippe Gimenez, Christian Gorzel, Agnes Heydtmann, Dietmar Hillebrand,
-Tobias Hirsch, Martin Lamm, Bernd Martin, Michael Messollen, Thomas
-Nu"ssler, Moritz Wenk.
-
-We should like to acknowledge the financial support given by the
-Volkswagen-Stiftung, the Deutsche Forschungsgemeinschaft and the
-Stiftung fu"r Innovation des Landes Rheinland-Pfalz to the SINGULAR
-project.
-
-
-File: sing.info, Node: Introduction, Next: General concepts, Prev: Preface,
Up: Top
-
-2 Introduction
-**************
-
-* Menu:
-
-* Background::
-* How to use this manual::
-* Getting started::
-
-
-File: sing.info, Node: Background, Next: How to use this manual, Prev:
Introduction, Up: Introduction
-
-2.1 Background
-==============
-
-SINGULAR is a Computer Algebra system for polynomial computations with
-emphasis on the special needs of commutative algebra, algebraic
-geometry, and singularity theory.
-
-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.
-
-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-resolution computations, and many more related
-functionalities.
-
-Based on an easy-to-use interactive shell and a C-like programming
-language, SINGULAR's internal functionality is augmented and
-user-extendible by libraries written in the SINGULAR programming
-language. A general and efficient implementation of communication links
-allows SINGULAR to make its functionality available to other programs.
-
-SINGULAR's development started in 1984 with an implementation of Mora's
-Tangent Cone algorithm in Modula-2 on an Atari computer (K.P.
-Neuendorf, G. Pfister, H. Schoenemann; Humboldt-Universitaet H.\ Sch\"onemann;
Humboldt-Universit\"at
- 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 SINGULAR's "home-town" moved to Kaiserslautern, a
-general standard basis algorithm was implemented in C and SINGULAR was
-ported to Unix, MS-DOS, Windows NT, and MacOS.
-
-Continuous extensions (like polynomial factorization, gcd computations,
-links) and refinements led in 1997 to the release of 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.)
-
-For the highlights of the new SINGULAR version 2-0-4 see *note News and
-changes::.
-
-
-File: sing.info, Node: How to use this manual, Next: Getting started, Prev:
Background, Up: Introduction
-
-2.2 How to use this manual
-==========================
-
-For the impatient user
-......................
-
-In *note Getting started::, some simple examples explain how to use
-SINGULAR in a step-by-step manner.
-
-*note Examples:: should come next for real learning-by-doing or to
-quickly solve some given mathematical problems without dwelling too
-deeply into SINGULAR. This chapter contains a lot of real-life examples
-and detailed instructions and explanations on how to solve mathematical
-problems using SINGULAR.
-
-For the systematic user
-.......................
-
-In *note General concepts::, all basic concepts which are important to
-use and to understand SINGULAR are developed. But even for users
-preferring the systematic approach it will be helpful to have a look at
-the examples in *note Getting started::, every now and then. The topics
-in the chapter are organized more or less in the order the novice user
-has to deal with them.
-
- * In *note Interactive use::, and its subsections there are some
- words on entering and exiting SINGULAR, followed by a number of
- other aspects concerning the interactive user-interface.
-
- * To do anything more than trivial integer computations, one needs to
- define a basering in SINGULAR. This is explained in detail in
- *note Rings and orderings::.
-
- * An overview of the algorithms implemented in the kernel of SINGULAR
- is given in *note Implemented algorithms::.
-
- * In *note The SINGULAR language::, language specific concepts are
- introduced such as the notions of names and objects, data types and
- conversion between them, etc.
-
- * In *note Input and output::, SINGULAR's mechanisms to store and
- retrieve data are discussed.
-
- * The more complex concepts of procedures and libraries as well as
- tools to debug them are considered in the following sections: *note
- Procedures::, *note Libraries::, and *note Debugging tools::.
-
-*note Data types::, is a complete treatment for SINGULAR's data types
-where each section corresponds to one data type, alphabetically sorted.
-For each data type, its purpose is explained, the syntax of its
-declaration is given, and related operations and functions are listed.
-Examples illustrate its usage.
-
-*note Functions and system variables::, is an alphabetically ordered
-reference list of all of SINGULAR's functions, control structures, and
-system variables. Each entry includes a description of the syntax and
-semantics of the item being explained as well as one or more examples on
-how to use it.
-
-Miscellaneous
-.............
-
-*note Tricks and pitfalls::, is a loose collection of limitations and
-features which may be unexpected by those who expect the SINGULAR
-language to be an exact copy of the C programming language or of some
-Computer Algebra system's languages. But some mathematical hints are
-collected there, as well.
-
-*note Mathematical background::, introduces some of the mathematical
-notions and definitions used throughout this manual. For example, if in
-doubt what exactly SINGULAR means by a "negative degree reverse
-lexicographical ordering" one should refer to this chapter.
-
-*note SINGULAR libraries::, lists the libraries which come with SINGULAR
-and the functions contained in them, respectively.
-
-Typographical conventions
-.........................
-
-Throughout this manual, the following typographical conventions are
-adopted:
-
- * text in `typewriter' denotes SINGULAR input and output as well as
- reserved names:
-
- The basering can be set using the command `setring'.
-
- * the arrow ==> denotes SINGULAR output:
-
- `poly p=x+y+z;'
-
- `p*p;'
-
- `==> x2+2xy+y2+2xz+2yz+z2'
-
- * square brackets are used to denote parts of syntax descriptions
- which are optional:
-
- [optional_text] required_text
-
- * keys are denoted using typewriter, for example:
-
- `N' (press the key `N' to get to the next node in help mode)
-
- `RETURN' (press `RETURN' to finish an input line)
-
- `CTRL-P' (press control key together with the key `P' to get the
- previous input line)
-
-
-File: sing.info, Node: Getting started, Prev: How to use this manual, Up:
Introduction
-
-2.3 Getting started
-===================
-
-SINGULAR is a special purpose system for polynomial computations. Hence,
-most of the powerful computations in SINGULAR require the prior
-definition of a ring. Most important rings are polynomial rings over a
-field, localizations hereof, or quotient rings of such rings modulo an
-ideal. However, some simple computations with integers (machine integers
-of limited size) and manipulations of strings are available without a
-ring.
-
-* Menu:
-
-* First steps::
-* Rings and standard bases::
-* Procedures and libraries::
-* Change of rings::
-* Modules and their annihilator::
-* Resolution::
-
-
-File: sing.info, Node: First steps, Next: Rings and standard bases, Prev:
Getting started, Up: Getting started
-
-2.3.1 First steps
------------------
-
-Once SINGULAR is started, it awaits an input after the prompt `>'.
-Every statement has to be terminated by `;' .
-
- 37+5;
- ==> 42
-
-All objects have a type, e.g., integer variables are defined by the word
-`int'. An assignment is done by the symbol `=' .
-
- int k = 2;
-
-Test for equality resp. inequality is done using `==' resp. `!=' (or
-`<>'), where `0' represents the boolean value FALSE, any other value
-represents TRUE.
-
- k == 2;
- ==> 1
- k != 2;
- ==> 0
-
-The value of an object is displayed by simply typing its name.
-
- k;
- ==> 2
-
-On the other hand the output is suppressed if an assignment is made.
-
- int j;
- j = k+1;
-
-The last displayed (!) result is always available with the special
-symbol `_' .
-
- 2*_; // the value from k displayed above
- ==> 4
-
-Text starting with `//' denotes a comment and is ignored in
-calculations, as seen in the previous example. Furthermore SINGULAR
-maintains a history of the previous lines of input, which may be
-accessed by `CTRL-P' (previous) and `CTRL-N' (next) or the arrows on the
-keyboard. Note that the history is not available on Macintosh systems.
-
-The whole manual is available online by typing the command `help;' .
-Explanation on single topics, e.g., on `intmat', which defines a matrix
-of integers, are obtained by
-
- help intmat;
-
-This shows the text of *note intmat::, in the printed manual.
-
-Next, we define a $3 \times 3$
-3 x 3 matrix of integers and initialize it with some values, row by row
-from left to right:
-
- intmat m[3][3] = 1,2,3,4,5,6,7,8,9;
-
-A single matrix entry may be selected and changed using square brackets
-`[' and `]'.
-
- m[1,2]=0;
- m;
- ==> 1,0,3,
- ==> 4,5,6,
- ==> 7,8,9
-
-To calculate the trace of this matrix, we use a `for' loop. The curly
-brackets `{' and `}' denote the beginning resp. end of a block. If you
-define a variable without giving an initial value, as the variable `tr'
-in the example below, SINGULAR assigns a default value for the specific
-type. In this case, the default value for integers is `0'. Note that the
-integer variable `j' has already been defined above.
-
- int tr;
- for ( j=1; j <= 3; j++ ) { tr=tr + m[j,j]; }
- tr;
- ==> 15
-
-Variables of type string can also be defined and used without a ring
-being active. Strings are delimited by `"' (double quotes). They may be
-used to comment the output of a computation or to give it a nice format.
-If a string contains valid SINGULAR commands, it can be executed using
-the function `execute'. The result is the same as if the commands would
-have been written on the command line. This feature is especially useful
-to define new rings inside procedures.
-
- "example for strings:";
- ==> example for strings:
- string s="The element of m ";
- s = s + "at position [2,3] is:"; // concatenation of strings by +
- s , m[2,3] , ".";
- ==> The element of m at position [2,3] is: 6 .
- s="m[2,1]=0; m;";
- execute(s);
- ==> 1,0,3,
- ==> 0,5,6,
- ==> 7,8,9
-
-This example shows that expressions can be separated by `,' (comma)
-giving a list of expressions. SINGULAR evaluates each expression in this
-list and prints all results separated by spaces.
-
-
-File: sing.info, Node: Rings and standard bases, Next: Procedures and
libraries, Prev: First steps, Up: Getting started
-
-2.3.2 Rings and standard bases
-------------------------------
-
-To calculate with objects as ideals, matrices, modules, and polynomial
-vectors, a ring has to be defined first.
-
- ring r = 0,(x,y,z),dp;
-
-The definition of a ring consists of three parts: the first part
-determines the ground field, the second part determines the names of the
-ring variables, and the third part determines the monomial ordering to
-be used. So the example above declares a polynomial ring called `r' with
-a ground field of characteristic 0 $0$
- (i.e., the rational numbers) and ring variables called `x', `y', and
-`z'. The `dp' at the end means that the degree reverse lexicographical
-ordering should be used.
-
-Other ring declarations:
-
-`ring r1=32003,(x,y,z),dp;'
- characteristic 32003, variables `x', `y', and `z' and ordering
- `dp'.
-
-`ring r2=32003,(a,b,c,d),lp;'
- characteristic 32003, variable names `a', `b', `c', `d' and
- lexicographical ordering.
-
-`ring r3=7,(x(1..10)),ds;'
- characteristic 7, variable names `x(1)',...,`x(10)', negative
- degree reverse lexicographical ordering (`ds').
-
-`ring r4=(0,a),(mu,nu),lp;'
- transcendental extension of Q $Q$
- by a $a$
- , variable names `mu' and `nu'.
-
-`ring r5=real,(a,b),lp;'
- floating point numbers (single machine precision), variable names
- `a' and `b'.
-
-`ring r6=(real,50),(a,b),lp;'
- floating point numbers with extended precision of 50 digits,
- variable names `a' and `b'.
-
-`ring r7=(complex,50,i),(a,b),lp;'
- complex floating point numbers with extended precision of 50 digits
- and imaginary unit `i', variable names `a' and `b'.
-
-Typing the name of a ring prints its definition. The example below shows
-that the default ring in SINGULAR is Z/32003[x,y,z] $Z/32003[x,y,z]$
-
-with degree reverse lexicographical ordering:
-
- ring r8;
- r8;
- ==> // characteristic : 32003
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
-
-Defining a ring makes this ring the current active basering, so each
-ring definition above switches to a new basering. The concept of rings
-in SINGULAR is discussed in detail in *note Rings and orderings::.
-
-The basering is now `r8'. Since we want to calculate in the ring `r',
-which we defined first, we have to switch back to it. This can be done
-using the function `setring':
-
- setring r;
-
-Once a ring is active, we can define polynomials. A monomial, say $x^3$
-x^3 may be entered in two ways: either using the power operator `^',
-saying `x^3', or in short-hand notation without operator, saying `x3'.
-Note that the short-hand notation is forbidden if the name of the ring
-variable consists of more than one character. Note, that SINGULAR always
-expands brackets and automatically sorts the terms with respect to the
-monomial ordering of the basering.
-
- poly f = x3+y3+(x-y)*x2y2+z2;
- f;
- ==> x3y2-x2y3+x3+y3+z2
-
-The command `size' determines in general the number of "single entries"
-in an object. In particular, for polynomials, `size' determines the
-number of monomials.
-
- size(f);
- ==> 5
-
-A natural question is to ask if a point, e.g., `(x,y,z)=(1,2,0)', lies
-on the variety defined by the polynomials `f' and `g'. For this we
-define an ideal generated by both polynomials, substitute the
-coordinates of the point for the ring variables, and check if the result
-is zero:
-
- poly g = f^2 *(2x-y);
- ideal I = f,g;
- ideal J = subst(I,var(1),1);
- J = subst(J,var(2),2);
- J = subst(J,var(3),0);
- J;
- ==> J[1]=5
- ==> J[2]=0
-
-Since the result is not zero, the point `(1,2,0)' does not lie on the
-variety `V(f,g)'.
-
-Another question is to decide whether some function vanishes on a
-variety, or in algebraic terms if a polynomial is contained in a given
-ideal. For this we calculate a standard basis using the command
-`groebner' and afterwards reduce the polynomial with respect to this
-standard basis.
-
- ideal sI = groebner(f);
- reduce(g,sI);
- ==> 0
-
-As the result is `0' the polynomial `g' belongs to the ideal defined by
-`f'.
-
-The function `groebner', like many other functions in SINGULAR, prints a
-protocol during calculations, if desired. The command `option(prot);'
-enables protocolling whereas `option(noprot);' turns it off. *note
-option::, explains the meaning of the different symbols printed during
-calculations.
-
-The command `kbase' calculates a basis of the polynomial ring modulo an
-ideal, if the quotient ring is finite dimensional. As an example we
-calculate the Milnor number of a hypersurface singularity in the global
-and local case. This is the vector space dimension of the polynomial
-ring modulo the Jacobian ideal in the global case resp. of the power
-series ring modulo the Jacobian ideal in the local case. *Note Critical
-points::, for a detailed explanation.
-
-The Jacobian ideal is obtained with the command `jacob'.
-
- ideal J = jacob(f);
- ==> // ** redefining J **
- J;
- ==> J[1]=3x2y2-2xy3+3x2
- ==> J[2]=2x3y-3x2y2+3y2
- ==> J[3]=2z
-
-SINGULAR prints the line `// ** redefining J **'. This indicates that we
-have previously defined a variable with name `J' of type ideal (see
-above).
-
-To obtain a representing set of the quotient vector space we first
-calculate a standard basis, then we apply the function `kbase' to this
-standard basis.
-
- J = groebner(J);
- ideal K = kbase(J);
- K;
- ==> K[1]=y4
- ==> K[2]=xy3
- ==> K[3]=y3
- ==> K[4]=xy2
- ==> K[5]=y2
- ==> K[6]=x2y
- ==> K[7]=xy
- ==> K[8]=y
- ==> K[9]=x3
- ==> K[10]=x2
- ==> K[11]=x
- ==> K[12]=1
-
-Then
-
- size(K);
- ==> 12
-
-gives the desired vector space dimension $K[x,y,z]/\hbox{\rm jacob}(f)$.
-K[x,y,z]/jacob(f). As in SINGULAR the functions may take the input
-directly from earlier calculations, the whole sequence of commands may
-be written in one single statement.
-
- size(kbase(groebner(jacob(f))));
- ==> 12
-
-When we are not interested in a basis of the quotient vector space, but
-only in the resulting dimension we may even use the command `vdim' and
-write:
-
- vdim(groebner(jacob(f)));
- ==> 12
-
-
-File: sing.info, Node: Procedures and libraries, Next: Change of rings,
Prev: Rings and standard bases, Up: Getting started
-
-2.3.3 Procedures and libraries
-------------------------------
-
-SINGULAR offers a comfortable programming language, with a syntax close
-to C. So it is possible to define procedures which collect several
-commands to a new one. Procedures are defined with the keyword `proc'
-followed by a name and an optional parameter list with specified types.
-Finally, a procedure may return values using the command `return'.
-
-Define the following procedure called `Milnor':
-
- proc Milnor (poly h)
- {
- return(vdim(groebner(jacob(h))));
- }
-
-Note: if you have entered the first line of the procedure and pressed
-`RETURN', SINGULAR prints the prompt `.' (dot) instead of the usual
-prompt `>' . This shows that the input is incomplete and SINGULAR
-expects more lines. After typing the closing curly bracket, SINGULAR
-prints the usual prompt indicating that the input is now complete.
-
-Then call the procedure:
-
- Milnor(f);
- ==> 12
-
-Note that the result may depend on the basering as we will see in the
-next chapter.
-
-The distribution of SINGULAR contains several libraries, each of which
-is a collection of useful procedures based on the kernel commands, which
-extend the functionality of SINGULAR. The command `help "all.lib";'
-lists all libraries together with a one-line explanation.
-
-One of these libraries is `sing.lib' which already contains a procedure
-called `milnor' to calculate the Milnor number not only for
-hypersurfaces but more generally for complete intersection
-singularities.
-
-Libraries are loaded with the command `LIB'. Some additional information
-during the process of loading is displayed on the screen, which we omit
-here.
-
- LIB "sing.lib";
-
-As all input in SINGULAR is case sensitive, there is no conflict with
-the previously defined procedure `Milnor', but the result is the same.
-
- milnor(f);
- ==> 12
-
-The procedures in a library have a help part which is displayed by
-typing
-
- help milnor;
-
-as well as some examples, which are executed by
-
- example milnor;
-
-Likewise, the library itself has a help part, to show a list of all the
-functions available for the user which are contained in the library.
-
- help sing.lib;
-
-The output of the help commands is omitted here.
-
-
-File: sing.info, Node: Change of rings, Next: Modules and their annihilator,
Prev: Procedures and libraries, Up: Getting started
-
-2.3.4 Change of rings
----------------------
-
-To calculate the local Milnor number we have to do the calculation with
-the same commands in a ring with local ordering. Define the
-localization of the polynomial ring at the origin (*note Polynomial
-data::, and *note Mathematical background::).
-
- ring rl = 0,(x,y,z),ds;
-
-This ordering determines the standard basis which will be calculated.
-Fetch the polynomial defined in the ring `r' into this new ring, thus
-avoiding retyping the input.
-
- poly f = fetch(r,f);
- f;
- ==> z2+x3+y3+x3y2-x2y3
-
-Instead of `fetch' we can use the function `imap' which is more general
-but less efficient. The most general way to fetch data from one ring to
-another is to use maps, this will be explained in *note map::.
-
-In this ring the terms are ordered by increasing exponents. The local
-Milnor number is now
-
- Milnor(f);
- ==> 4
-
-This shows that `f' has outside the origin in affine 3-space
-singularities with local Milnor number adding up to $12-4=8$.
-12-4=8. Using global and local orderings as above is a convenient way
-to check whether a variety has singularities outside the origin.
-
-The command `jacob' applied twice gives the Hessian of `f', a 3x3 -
-matrix.
-
- matrix H = jacob(jacob(f));
- H;
- ==> H[1,1]=6x+6xy2-2y3
- ==> H[1,2]=6x2y-6xy2
- ==> H[1,3]=0
- ==> H[2,1]=6x2y-6xy2
- ==> H[2,2]=6y+2x3-6x2y
- ==> H[2,3]=0
- ==> H[3,1]=0
- ==> H[3,2]=0
- ==> H[3,3]=2
-
-The `print' command displays the matrix in a nicer form.
-
- print(H);
- ==> 6x+6xy2-2y3,6x2y-6xy2, 0,
- ==> 6x2y-6xy2, 6y+2x3-6x2y,0,
- ==> 0, 0, 2
-
-We may calculate the determinant and (the ideal generated by all) minors
-of a given size.
-
- det(H);
- ==> 72xy+24x4-72x3y+72xy3-24y4-48x4y2+64x3y3-48x2y4
- minor(H,1); // the 1x1 - minors
- ==> _[1]=2
- ==> _[2]=6y+2x3-6x2y
- ==> _[3]=6x2y-6xy2
- ==> _[4]=6x2y-6xy2
- ==> _[5]=6x+6xy2-2y3
-
-The algorithm of the standard basis computations may be affected by the
-command `option'. For example, a reduced standard basis of the ideal
-generated by the $1 \times 1$-minors
-1 x 1 - minors of H is obtained in the following way:
- option(redSB);
- groebner(minor(H,1));
- ==> _[1]=1
-
-This shows that 1 is contained in the ideal of the $1 \times 1$-minors,
-1 x 1 - minors, hence the corresponding variety is empty.
-
-
-File: sing.info, Node: Modules and their annihilator, Next: Resolution,
Prev: Change of rings, Up: Getting started
-
-2.3.5 Modules and their annihilator
------------------------------------
-
-Now we shall give three more advanced examples.
-
-SINGULAR is able to handle modules over all the rings, which can be
-defined as a basering. A free module of rank `n' is defined as follows:
-
- ring rr;
- int n = 4;
- freemodule(4);
- ==> _[1]=gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=gen(3)
- ==> _[4]=gen(4)
- typeof(_);
- ==> module
- print(freemodule(4));
- ==> 1,0,0,0,
- ==> 0,1,0,0,
- ==> 0,0,1,0,
- ==> 0,0,0,1
-
-To define a module, we give a list of vectors generating a submodule of
-a free module. Then this set of vectors may be identified with the
-columns of a matrix. For that reason in SINGULAR matrices and modules
-may be interchanged. However, the representation is different (modules
-may be considered as sparse represented matrices).
-
- ring r =0,(x,y,z),dp;
- module MD = [x,0,x],[y,z,-y],[0,z,-2y];
- matrix MM = MD;
- print(MM);
- ==> x,y,0,
- ==> 0,z,z,
- ==> x,-y,-2y
-
-However the submodule MD $MD$
- may also be considered as the module of relations of the factor module
$r^3/MD$.
-r^3/MD. In this way, SINGULAR can treat arbitrary finitely generated
-modules over the basering (*note Representation of mathematical
-objects::).
-
-In order to get the module of relations of MD $MD$
-, we use the command `syz'.
-
- syz(MD);
- ==> _[1]=x*gen(3)-x*gen(2)+y*gen(1)
-
-We want to calculate, as an application, the annihilator of a given
-module. Let $M = r^3/U$,
-M = r^3/U, where U is our defining module of relations for the module $M$.
-M.
-
- module U =
[z3,xy2,x3],[yz2,1,xy5z+z3],[y2z,0,x3],[xyz+x2,y2,0],[xyz,x2y,1];
-
-Then, by definition, the annihilator of M is the ideal $\hbox{ann}(M) = \{a
\mid aM = 0 \}$
-ann(M) = {a | aM = 0 } which is by the description of M the same as $\{ a \mid
ar^3 \in U \}$.
-{ a | ar^3 contained in U}. Hence we have to calculate the quotient $U \colon
r^3 $.
-U:r^3. The rank of the free module is determined by the choice of U and
-is the number of rows of the corresponding matrix. This may be
-determined by the function `nrows'. All we have to do now is the
-following:
-
- quotient(U,freemodule(nrows(U)));
-
-The result is too big to be shown here.
-
-
-File: sing.info, Node: Resolution, Prev: Modules and their annihilator, Up:
Getting started
-
-2.3.6 Resolution
-----------------
-
-There are several commands in SINGULAR for computing free resolutions.
-The most general command is `res(... ,n)' which determines heuristically
-what method to use for the given problem. It computes the free
-resolution up to the length n $n$
-, where n=0 $n=0$
- corresponds to the full resolution.
-
-Here we use the possibility to inspect the calculation process using the
-option `prot'.
-
- ring R; // the default ring in char 32003
- R;
- ==> // characteristic : 32003
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ideal I = x4+x3y+x2yz,x2y2+xy2z+y2z2,x2z2+2xz3,2x2z2+xyz2;
- option(prot);
- resolution rs = res(I,0);
- ==> using lres
- ==> 4(m0)4(m1).5(m1)g.g6(m1)...6(m2)..
-
-Disable this protocol with
-
- option(noprot);
-
-When we enter the name of the calculated resolution, we get a pictorial
-description of the minimized resolution where the exponents denote the
-rank of the free modules. Note that the calculated resolution itself may
-not yet be minimal.
-
- rs;
- ==> 1 4 5 2 0
- ==>R <-- R <-- R <-- R <-- R
- ==>
- ==>0 1 2 3 4
- print(betti(rs),"betti");
- ==> 0 1 2 3
- ==> ------------------------------
- ==> 0: 1 - - -
- ==> 1: - - - -
- ==> 2: - - - -
- ==> 3: - 4 1 -
- ==> 4: - - 1 -
- ==> 5: - - 3 2
- ==> ------------------------------
- ==> total: 1 4 5 2
-
-In order to minimize the resolution, that is to calculate the maps of
-the minimal free resolution, we use the command `minres':
-
- rs=minres(rs);
-
-A single module in this resolution is obtained (as usual) with the
-brackets `[' and `]'. The `print' command can be used to display a
-module in a more readable format:
-
- print(rs[3]);
- ==> z3, -xyz-y2z-4xz2+16z3,
- ==> 0, -y2,
- ==> -y+4z,48z,
- ==> x+2z, 48z,
- ==> 0, x+y-z
-
-In this case, the output is to be interpreted as follows: the 3rd syzygy
-module of R/I, `rs[3]', is the rank-2-submodule of $R^5$
-R^5 generated by the vectors $(z^3,0,-y+4z,x+2z,0)$ and
$(-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z)$.
-(z^3,0,-y+4z,x+2z,0) and (-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z).
-
-
-File: sing.info, Node: General concepts, Next: Data types, Prev:
Introduction, Up: Top
-
-3 General concepts
-******************
-
-* Menu:
-
-* Interactive use::
-* Emacs user interface::
-* Rings and orderings::
-* Implemented algorithms::
-* The SINGULAR language::
-* Input and output::
-* Procedures::
-* Libraries::
-* Guidelines for writing a library::
-* Debugging tools::
-
-
-File: sing.info, Node: Interactive use, Next: Emacs user interface, Prev:
General concepts, Up: General concepts
-
-3.1 Interactive use
-===================
-
-In this section, aspects of interactive use are discussed. This
-includes how to enter and exit SINGULAR, how to interpret its prompt,
-how to get the online help, and so on.
-
-There are a few important notes which one should not forget:
- * every command has to be terminated by a `;' (semicolon) followed by
- a <RETURN>
-
- * the online help is accessible by means of the `help' function
-
-* Menu:
-
-* How to enter and exit::
-* The SINGULAR prompt::
-* The online help system::
-* Interrupting SINGULAR::
-* Editing input::
-* Command line options::
-* Startup sequence::
-
-
-File: sing.info, Node: How to enter and exit, Next: The SINGULAR prompt,
Prev: Interactive use, Up: Interactive use
-
-3.1.1 How to enter and exit
----------------------------
-
-SINGULAR can either be run in ASCII-terminal or within Emacs.
-
-To start SINGULAR in its ASCII-terminal user interface, enter
-`Singular' at the system prompt. The SINGULAR banner appears which,
-among others, reports the version and the compilation date.
-
-To start SINGULAR in its Emacs user interface, either enter `ESingular'
-at the system prompt, or type `M-x singular' within a running Emacs
-(provided you have loaded the file `singular.el' in your running Emacs,
-see *note Running SINGULAR under Emacs:: for details).
-
-Generally, we recommend to use SINGULAR in its Emacs interface, since
-this offers many more features and is more convenient to use than the
-ASCII-terminal interface (*note Emacs user interface::).
-
-To exit SINGULAR type `quit;', `exit;' or `$' (or, when running within
-Emacs preferably type `C-c $').
-
-SINGULAR and `ESingular' may also be started with command line options
-and with filenames as arguments. More generally, the synopsis of
-SINGULAR is
- Singular [options] [file1 [file2 ...]]
- ESingular [options] [file1 [file2 ...]]
-
-*Note Command line options::, *note Startup sequence::, *note Running
-SINGULAR under Emacs::.
-
-
-File: sing.info, Node: The SINGULAR prompt, Next: The online help system,
Prev: How to enter and exit, Up: Interactive use
-
-3.1.2 The SINGULAR prompt
--------------------------
-
-The SINGULAR prompt `>' (larger than) asks the user for input of
-commands. The "continuation" prompt `.' (period) asks the user for
-input of missing parts of a command (remember the semicolon at the end
-of every command).
-
-SINGULAR does not interpret the semicolon as the end of a command if it
-occurs inside a string. Also, SINGULAR waits for blocks (sequences of
-commands enclosed in curly brackets) to be closed before prompting with
-`>' for more commands. Thus, if SINGULAR does not respond with its
-regular prompt after typing a semicolon it may wait for a `"' or a `}'
-first.
-
-Additional semicolons will not harm SINGULAR since they are interpreted
-as empty statements.
-
-
-File: sing.info, Node: The online help system, Next: Interrupting SINGULAR,
Prev: The SINGULAR prompt, Up: Interactive use
-
-3.1.3 The online help system
-----------------------------
-
-The online help system is invoked with the `help' command. `?' may be
-used as a synonym for `help'. Simply typing `help;' displays the "top"
-of the help system (i.e., the title page of the SINGULAR manual) which
-offers a short table of contents. Typing `help' topic`;' shows the
-available documentation on topic. Here, topic may be either a function
-name or, more generally, any index entry of the SINGULAR manual.
-Furthermore, topic may contain wildcard characters. *Note help::, for
-more information.
-
-Online help information can be displayed in various help browsers. The
-following table lists a summary of the supported browsers. See below for
-more details about particular browsers.
-
-*Browser* *Platform* *Description*
-
-html Windows displays html version of manual in your
- default html browser
-
-winhlp Windows displays Windows help (.hlp) version of
- manual
-
-netscape Unix, uses `netscape' to display html version
- Windows of manual
-
-tkinfo Unix uses the `tkinfo' program to display
- texinfo version of manual
-
-xinfo Unix, uses the `info' program to display
- Windows texinfo version of manual in an extra
- `xterm'
-
-info Unix, uses the `info' program to display
- Windows texinfo version of manual
-
-builtin all simply outputs the help information in
- plain ASCII format
-
-emacs Unix, when running SINGULAR within (X)emacs,
- Windows display help in (X)emacs info buffer.
-
-dummy all displays error message about no available
- help browser
-
-The browser which is used to display the help information, can be either
-set at startup time with the command line option (*note Command line
-options::)
- --brower=<browser>
-or with the SINGULAR command (*note system::)
- system("--browser", <browser>);
-The SINGULAR command
- system("browsers");
-lists all available browsers and the command
- system("--browser");
-returns the currently used browser.
-
-If no browser is explicitly set by the user, then the first (w.r.t. the
-order of the browsers in the table above) available browser is chosen.
-In other words, the default browser is `netscape' for Unix platforms,
-and `html' for Windows, unless your local set-up does not allow to run
-it.
-
-The `.singularrc' (*note Startup sequence::) file is a good place to set
-your default browser. Recall that if a file `$HOME/.singularrc' exists
-on your system, then the content of this file is executed before the
-first user input. Hence, putting
- if (system("version") >= 1306) // keep backwards-compatibility
- {
- if (! system("--emacs")
- {
- // only set help browser if not running within emacs
- system("--browser", "info");
- }
- // if help browser is later on set to netscape,
- // allow it to fetch HTML pages from the net
- system("--allow-net", 1);
- }; // the last semicolon is important: otherwise no ">", but "." prompt
-in your file `$HOME/.singularrc' sets your default browser to `info',
-unless SINGULAR is run within emacs (in which case the default browser
-is set automatically to `emacs').
-
-Obviously, certain external files and programs are required for the
-SINGULAR help system to work correctly. If something is not available or
-goes wrong, here are some tips for troubleshooting the help system:
-
- * Under Unix, the environment variable `DISPLAY' has to be set for
- the browsers `netscape', `tkinfo', and `xinfo' to work.
-
- * The help browsers `netscape', `tkinfo', `xinfo', and `info' are
- only available if the respective programs are installed on your
- system (for `xinfo', the programs `xterm' and `info' are
- necessary). You can explicitly specify which program to use, by
- setting appropriate environment variables (whose names are the
- names of the respective programs in all up-case letters).
- For example, to use the program `navigator' with a private colormap
- as `netscape' help browser, set the environment variable `NETSCAPE'
- to the value `"navigator -install"'.
-
- * If the help browser `netscape' can not find the local html pages of
- the SINGULAR manual (which it looks for at `$RootDir/html' - see
- *note Loading of a library:: for more info on `$RootDir') _and_ the
- (command-line) option `--allow-net' has _explicitly_ been set (see
- *note Command line options:: and *note system:: for more info on
- setting values of command-line options), then it dispatches the
- html pages from `http://www.singular.uni-kl.de/Manual' (note that
- the non-local net-access of HTML pages is disabled, by default).
- An alternative location of a local directory where the html pages
- reside can be specified by setting the environment variable
- `SINGULAR_HTML_DIR'.
-
- * The help browsers `tkinfo', `xinfo', `info', and `builtin' need the
- (info) file `singular.hlp' which it looks for at
- `$RootDir/info/singular.hlp' (see *note Loading of a library:: for
- more info on `$RootDir'). An alternative location of the info file
- of the manual can be specified by setting the environment variable
- `SINGULAR_INFO_FILE'.
-
-* Menu:
-
-See also:
-* Command line options::
-* Loading of a library::
-* Startup sequence::
-* system::
-
-*See also:* *note Command line options::; *note Loading of a library::;
-*note Startup sequence::; *note system::.
-
-Info help browsers
-..................
-
-The help browsers `tkinfo', `xinfo' and `info' (so-called info help
-browsers) are based on the `info' program from the Gnu `texinfo'
-package. *Note An Introduction to Info: (info)Top, for more
-information.
-
-For info help browsers, the online manual is decomposed into "nodes" of
-information, closely related to the division of the printed manual into
-sections and subsections. A node contains text describing a specific
-topic at a specific level of detail. The top line of a node is its
-"header". The node's header tells the name of the current node
-(`Node:'), the name of the next node (`Next:'), the name of the previous
-node (`Prev:'), and the name of the upper node (`Up:').
-
-To move within info, type commands consisting of single characters. Do
-not type `RETURN'. Do not use cursor keys, either. Using some of the
-cursor keys by accident might pop to some totally different node. Type
-`l' to return to the original node. Some of the `info' commands read
-input from the command line at the bottom line. The `TAB' key may be
-used to complete partially entered input.
-
-The most important commands are:
-`q'
- leaves the online help system
-
-`n'
- goes to the next node
-
-`p'
- goes to the previous node
-
-`u'
- goes to the upper node
-
-`m'
- picks a menu item specified by name
-
-`f'
- follows a cross reference
-
-`l'
- goes to the previously visited node
-
-`b'
- goes to the beginning of the current node
-
-`e'
- goes to the end of the current node
-
-`SPACE'
- scrolls forward a page
-
-`DEL'
- scrolls backward a page
-
-`h'
- invokes info tutorial (use `l' to return to the manual or `CTRL-X
- 0' to remove extra window)
-
-`CTRL-H'
- shows a short overview on the online help system (use `l' to return
- to the manual or `CTRL-X 0' to remove extra window)
-
-`s'
- searches through the manual for a specified string, and selects the
- node in which the next occurrence is found
-
-`1', ..., `9'
- picks i-th subtopic from a menu
-
-
-File: sing.info, Node: Interrupting SINGULAR, Next: Editing input, Prev:
The online help system, Up: Interactive use
-
-3.1.4 Interrupting SINGULAR
----------------------------
-
-On Unix-like operating systems and on Windows NT, typing `CTRL-C' (or,
-alternatively `C-c C-c', when running within Emacs), interrupts
-SINGULAR. SINGULAR prints the current command and the current line and
-prompts for further action. The following choices are available:
-`a'
- returns to the top level after finishing the current (kernel)
- command. Notice that commands of the SINGULAR kernel (like `std')
- can not be aborted, i.e. (`a')bort only happens whenever the
- interpreter is active.
-
-`c'
- continues
-
-`q'
- quits SINGULAR
-
-
-File: sing.info, Node: Editing input, Next: Command line options, Prev:
Interrupting SINGULAR, Up: Interactive use
-
-3.1.5 Editing input
--------------------
-
-The following keys can be used for editing the input and retrieving
-previous input lines:
-`TAB'
- provides command line completion for function names and file names
-
-`CTRL-B'
- moves cursor left
-
-`CTRL-F'
- moves cursor right
-
-`CTRL-A'
- moves cursor to beginning of line
-
-`CTRL-E'
- moves cursor to end of line
-
-`CTRL-D'
- deletes character under cursor
- Warning: on an empty line, `CTRL-D' is interpreted as the `EOF'
- character which immediately terminates SINGULAR.
-
-`BACKSPACE'
-`DELETE'
-`CTRL-H'
- deletes character before cursor
-
-`CTRL-K'
- kills from cursor to end of line
-
-`CTRL-U'
- kills from cursor to beginning of line
-
-`CTRL-N'
- saves current line on history and gives next line
-
-`CTRL-P'
- saves current line on history and gives previous line
-
-`RETURN'
- saves the current line to the history and sends it to the SINGULAR
- parser for interpretation
-
-When run under a Unix-like operating system and in its ASCII-terminal
-user interface, SINGULAR tries to dynamically link at runtime with the
-GNU Readline library. *Note GNU Readline Library: (readline)Command Line
-Editing, for more information. If a shared version of this library can
-be found on your machine, then additional command-line editing features
-like history completion are available. In particular, if SINGULAR is
-able to load that library and if the environment variable `SINGULARHIST'
-is set and has a name of a file as value, then the input history is
-stored across sessions using this file. Otherwise, i.e., if the
-environment variable `SINGULARHIST' is not set, then the history of the
-last inputs is only available for the commands of the current session.
-
-
-File: sing.info, Node: Command line options, Next: Startup sequence, Prev:
Editing input, Up: Interactive use
-
-3.1.6 Command line options
---------------------------
-
-The synopsis of SINGULAR is
- Singular [options] [file1 [file2 ...]]
- ESingular [options] [file1 [file2 ...]]
-Options can be given in both, their long and short format. The following
-options control the general behavior of SINGULAR:
-
-`-d', `--sdb'
- Enable the use of the source code debugger. *Note Source code
- debugger::.
-
-`-e', `--echo[=VAL]'
- Set value of variable `echo' to `VAL' (integer in the range 0, ...,
- 9). Without an argument, `echo' is set to 1, which echoes all input
- coming from a file. By default, the value of `echo' is 0. *Note
- echo::.
-
-`-h', `--help'
- Print a one-line description of each command line option and exit.
-
-`--allow-net'
- Allow the `netscape' and `html' help browser to fetch HTML manual
- pages over the net from the WWW home-site of SINGULAR. *Note The
- online help system::, for more info.
-
-`--browser=VAL'
- Use `VAL' as browser for the SINGULAR online manual.
- `VAL' may be one of `html' (Windows only), `netscape', `xinfo',
- `tkinfo', `info', `builtin', or `emacs'. Depending on your platform
- and local installation, only some browsers might be available. The
- default browser is `html' for Windows and `netscape' for Unix
- platforms. *Note The online help system::, for more info.
-
-`--no-rc'
- Do not execute the `.singularrc' file on start-up. By default,
- this file is executed on start-up. *Note Startup sequence::.
-
-`--no-stdlib'
- Do not load the library `standard.lib' on start-up. By default,
- this library is loaded on start-up. *Note Startup sequence::.
-
-`--no-warn'
- Do not display warning messages.
-
-`--no-out'
- Suppress display of all output.
-
-`-t', `--no-tty'
- Do not redefine the terminal characteristics. This option should
- be used for batch processes.
-
-`-q', `--quiet'
- Do not print the start-up banner and messages when loading
- libraries. Furthermore, redirect `stderr' (all error messages) to
- `stdout' (normal output channel). This option should be used if
- SINGULAR's output is redirected to a file.
-
-`-v', `--verbose'
- Print extended information about the version and configuration of
- SINGULAR (used optional parts, compilation date, start of random
- generator etc.). This information should be included if a user
- reports an error to the authors.
-
-The following command line options allow manipulations of the timer and
-the pseudo random generator and enable the passing of commands and
-strings to SINGULAR:
-
-`-c', `--execute=STRING'
- Execute `STRING' as (a sequence of) SINGULAR commands on start-up
- after the `.singularrc' file is executed, but prior to executing
- the files given on the command line. E.g., `Singular -c "help
- all.lib; quit;"' shows the help for the library `all.lib' and
- exits.
-
-`-u', `--user-option=STRING'
- Returns `STRING' on `system("--user-option")'. This is useful for
- passing arbitrary arguments from the command line to the SINGULAR
- interpreter. E.g.,
- `Singular -u "xxx.dump" -c 'getdump(system("--user-option"))''
- reads the file `xxx.dump' at start-up and allows the user to start
- working with all the objects defined in a previous session.
-
-`-r', `--random=SEED'
- Seed (i.e., set the initial value of) the pseudo random generator
- with integer `SEED'. If this option is not given, then the random
- generator is seeded with a time-based `SEED' (the number of seconds
- since January, 1, 1970, on Unix-like operating systems, to be
- precise).
-
-`--min-time=SECS'
- If the `timer' (*note timer::), resp. `rtimer' (*note rtimer::) ,
- variable is set, report only times larger than `SECS' seconds
- (`SECS' needs to be a floating point number greater than 0). By
- default, this value is set to 0.5 (i.e., half a second). E.g., the
- option `--min-time=0.01' forces SINGULAR to report all times larger
- than 1/100 of a second.
-
-`--ticks-per-sec=TICKS'
- Set unit of timer to `TICKS' ticks per second (i.e., the value
- reported by the `timer' and `rtimer' variable divided by `TICKS'
- gives the time in seconds). By default, this value is 1.
-
-The next three options are of interest for the use with MP links:
-`-b', `--batch'
- Run in MP batch mode. Opens a TCP/IP connection with host specified
- by `--MPhost' at the port specified by `--MPport'. Input is read
- from and output is written to this connection in the MP format.
- *Note MPtcp links::.
-
-`--MPport=PORT'
- Use `PORT' as default port number for MP connections (whenever not
- further specified). This option is mandatory when the `--batch'
- option is given. *Note MPtcp links::.
-
-`--MPhost=HOST'
- Use `HOST' as default host for MP connections (whenever not further
- specified). This option is mandatory when the `--batch' option is
- given. *Note MPtcp links::.
-
-Finally, the following options are only available when running
-`ESingular' (see *note Running SINGULAR under Emacs:: for details).
-
-`--emacs=EMACS'
- Use `EMACS' as Emacs program to run the SINGULAR Emacs interface,
- where `EMACS' may e.g. be emacs ore xemacs.
-
-`--emacs-dir=DIR'
- Set the singular-emacs-home-directory, which is the directory where
- singular.el can be found, to `DIR'.
-
-`--emacs-load=FILE'
- Load `FILE' on Emacs start-up, instead of the default load file.
-
-`--singular=PROG'
- Start `PROG' as SINGULAR program within Emacs
-
-The value of options given to SINGULAR (resp. their default values, if
-an option was not given), can be checked with the command
-`system("--'long_option_name`")'. *Note system::.
- system("--quiet"); // if ``quiet'' 1, otherwise 0
- ==> 1
- system("--min-time"); // minimal reported time
- ==> 0.5
- system("--random"); // seed of the random generator
- ==> 12345678
-
-Furthermore, the value of options (e.g., `--browser') can be re-set
-while SINGULAR is running with the command
-`system("--'long_option_name_string `",'expression`)'. *Note system::.
- system("--browser", "builtin"); // sets browser to 'builtin'
- system("--ticks-per-sec", 100); // sets timer resolution to 100
-
-
-File: sing.info, Node: Startup sequence, Prev: Command line options, Up:
Interactive use
-
-3.1.7 Startup sequence
-----------------------
-
-On start-up, SINGULAR
- 1. loads the library `standard.lib' (provided the `--no-stdlib' option
- was not given),
-
- 2. searches the current directory and then the home directory of the
- user, and then all directories contained in the library
- `SearchPath' (see *note Loading of a library:: for more info on
- `SearchPath') for a file named `.singularrc' and executes it, if
- found (provided the `--no-rc' option was not given),
-
- 3. executes the string specified with the `--execute' command line
- option,
-
- 4. executes the files `file1', `file2' ... (given on the command
- line) in that order.
-
-*Note:* `.singularrc' file(s) are an appropriate place for setting some
-default values of (command-line) options.
-
-For example, a system administrator might remove the locally installed
-HTML version of the manual and put a `.singularrc' file with the
-following content
- if (system("version") >= 1306) // assure backwards-compatibility
- {
- system("--allow-net", 1);
- }; // the last semicolon is important: otherwise no ">", but "." prompt
-in the directory containing the SINGULAR libraries, thereby allowing to
-fetch the HTML on-line help from the WWW home-site of SINGULAR.
-
-On the other hand, a single user might put a `.singularrc' with the
-following content
- if (system("version") >= 1306) // assure backwards-compatibility
- {
- if (! system("--emacs"))
- {
- // set default browser to info, unless we run within emacs
- system("--browser", "info");
- }
- }; // the last semicolon is important: otherwise no ">", but "." prompt
-in his home directory, which sets the default help browser to `info'
-(unless SINGULAR is run within emacs) and thereby prevents the execution
-of the"global" `.singularrc' file installed by the system administrator
-(since the `.singularrc' file of the user is found before the "global"
-`.singularrc' file installed by the system administrator).
-
-
-File: sing.info, Node: Emacs user interface, Next: Rings and orderings,
Prev: Interactive use, Up: General concepts
-
-3.2 Emacs user interface
-========================
-
-Besides running SINGULAR in an ASCII-terminal, SINGULAR might also be
-run within Emacs. Emacs (or, XEmacs which is very similar) is a powerful
-and freely available text editor, which, among others, provides a
-framework for the implementation of interactive user interfaces.
-Starting from version 1.3.6, SINGULAR provides such an implementation,
-the so-called SINGULAR Emacs mode, or Emacs user interface.
-
-Generally, we recommend to use the Emacs interface, instead of the
-ASCII-terminal interface: The Emacs interface does not only provide
-everything the ASCII-terminal interface provides, but offers much more.
-Among others, it offers
- * color-highlighting
-
- * truncation of long lines
-
- * folding of input and output
-
- * TAB-completion for help topics
-
- * highlighting of matching parentheses
-
- * key-bindings and interactive menus for most user interface commands
- and for basic SINGULAR commands (such as loading of libraries and
- files)
-
- * a mode for running interactive SINGULAR demonstrations
-
- * convenient ways to edit SINGULAR input files
-
- * interactive customization of nearly all aspects of the
- user-interface.
-
-To use the SINGULAR-Emacs interface you need to have Emacs version 20 or
-higher, or XEmacs version 20.3 or higher installed on your system. These
-editors can be downloaded for most hard- and software platforms
-(including Windows 95/98/NT, but excluding the Macintosh), from either
-`http://www.fsf.org/software/emacs/emacs.html' (Emacs), from
-`http://www.xemacs.org' (XEmacs), or from our ftp site at
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'. The
-differences between Emacs and XEmacs w.r.t. the SINGULAR-Emacs
-interface are marginal - which editor to use is mainly a matter of
-personal preferences.
-
-The simplest way to start-up SINGULAR in its Emacs interface is by
-running the program `ESingular' which is contained in the Singular
-distribution. Alternatively, SINGULAR can be started within an already
-running Emacs - see *note Running SINGULAR under Emacs:: for details.
-
-The next section gives a tutorial-like introduction to Emacs. This
-introductory section is followed by sections which explain the
-functionality of various aspects of the Emacs user interface in more
-detail: how to start/restart/kill SINGULAR within Emacs, how to run an
-interactive demonstration, how to customize the Emacs user interface,
-etc. Finally, the 20 most important commands of the Emacs interface
-together with their key bindings are listed.
-
-* Menu:
-
-* A quick guide to Emacs::
-* Running SINGULAR under Emacs::
-* Demo mode::
-* Customization of the Emacs interface::
-* Editing SINGULAR input files with Emacs::
-* Top 20 Emacs commands::
-
-
-File: sing.info, Node: A quick guide to Emacs, Next: Running SINGULAR under
Emacs, Prev: Emacs user interface, Up: Emacs user interface
-
-3.2.1 A quick guide to Emacs
-----------------------------
-
-This section gives a tutorial-like introduction to Emacs. Especially to
-users who are not familiar with Emacs, we recommend that they go through
-this section and try out the described features.
-
-Emacs commands generally involve the `CONTROL' key (sometimes labeled
-`CTRL' or `CTL') or the `META' key. On some keyboards, the `META' key
-is labeled `ALT' or `EDIT' or something else (for example, on Sun
-keyboards, the diamond key to the left of the space-bar is `META'). If
-there is no `META' key, the `ESC' key can be used, instead. Rather than
-writing out `META' or `CONTROL' each time we want to prefix a character,
-we will use the following abbreviations:
-
-`C-<chr>' means hold the `CONTROL' key while typing the character
- `<chr>'. Thus, `C-f' would be: hold the `CONTROL' key
- and type `f'.
-`M-<chr>' means hold the `META' key down while typing `<chr>'. If
- there is no `META' key, type <ESC>, release it, then
- type the character `<chr>'.
-
-For user new to Emacs, we highly recommend that they go through the
-interactive Emacs tutorial: type `C-h t' to start it.
-
-For others, it is important to understand the following Emacs concepts:
-window
- In Emacs terminology, a window refers to separate panes within the
- same window of the window system, and not to overlapping, separate
- windows. When using SINGULAR within Emacs, extra windows may appear
- which display help or output from certain commands. The most
- important window commands are:
- `C-x 1'
`File->Un-Split' Un-Split window (i.e., kill other
-
windows)
- `C-x o'
Goto other window, i.e. move
-
cursor into other window.
-
-cursor and point
- The location of the cursor in the text is also called "point". To
- paraphrase, the cursor shows on the screen where point is located
- in the text. Here is a summary of simple cursor-moving operations:
- `C-f' Move forward a character
- `C-b' Move backward a character
- `M-f' Move forward a word
- `M-b' Move backward a word
- `C-a' Move to the beginning of line
- `C-e' Move to the end of line
-
-buffer
- Any text you see in an Emacs window is always part of some buffer.
- For example, each file you are editing with Emacs is stored inside
- a buffer, but also SINGULAR is running inside an Emacs buffer. Each
- buffer has a name: for example, the buffer of a file you edit
- usually has the same name as the file, SINGULAR is running in a
- buffer which has the name `*singular*' (or, `*singular<2>*',
- `*singular<3>*', etc., if you have multiple SINGULAR sessions
- within the same Emacs).
-
- When you are asked for input to an Emacs command, the cursor moves
- to the bottom line of Emacs, i.e., to a special buffer, called the
- "minibuffer". Typing <RETURN> within the minibuffer, ends the
- input, typing <SPACE> within the minibuffer, lists all possible
- input values to the interactive Emacs command.
-
- The most important buffer commands are
- `C-x b' Switch buffer
- `C-x k' Kill current buffer
- Alternatively, you can switch to or kill buffers using the `Buffer'
- menu.
-
-Executing commands
- Emacs commands are executed by typing `M-x <command-name>'
- (remember that <SPACE> completes partial command names). Important
- and frequently used commands have short-cuts for their execution:
- Key bindings or even menu entries. For example, a file can be
- loaded with `M-x load-file', or `C-x C-f', or with the `File->Open'
- menu.
-
-How to exit
- To end the Emacs (and, SINGULAR) session, type `C-x C-c' (two
- characters), or use the `File -> Exit' menu.
-
-When Emacs is hung
- If Emacs stops responding to your commands, you can stop it safely
- by typing `C-g', or, if this fails, by typing `C-]'.
-
-More help
- Nearly all aspects of Emacs are very well documented: type `C-h'
- and then a character saying what kind of help you want. For
- example, typing `C-h i' enters the `Info' documentation browser.
-
-Using the mouse
- Emacs is fully integrated with the mouse. In particular, clicking
- the right mouse button brings up a pop-up menu which usually
- contains a few commonly used commands.
-
-
-File: sing.info, Node: Running SINGULAR under Emacs, Next: Demo mode, Prev:
A quick guide to Emacs, Up: Emacs user interface
-
-3.2.2 Running SINGULAR under Emacs
-----------------------------------
-
-There are two ways to start the SINGULAR Emacs interface: Typing
-`ESingular' instead of `Singular' on the command shell launches a new
-Emacs process, initializes the interface and runs SINGULAR within Emacs.
-The other way is to start the interface in an already running Emacs, by
-typing `M-x singular' inside Emacs. This initializes the interface and
-runs SINGULAR within Emacs. Both ways are described in more detail
-below.
-
-Note: To properly run the Emacs interface, several files are needed
-which usually reside in the `emacs' subdirectory of your SINGULAR
-distribution. This directory is called singular-emacs-home-directory in
-the following.
-
-Starting the interface using ESingular
---------------------------------------
-
-As mentioned above, `ESingular' is an "out-of-the-box" solution: You
-don't have to add special things to your `.emacs' startup file to
-initialize the interface; everything is done for you in a special file
-called `.emacs-singular' (which comes along with the SINGULAR
-distribution and resides in the singular-emacs-home-directory) which is
-automatically loaded on Emacs startup (and the loading of the `.emacs'
-file is automatically suppressed).
-
-The customizable variables of the SINGULAR Emacs interface are set to
-defaults which give the novice user a very shell like feeling of the
-interface. Nevertheless, these default settings can be changed, see
-*note Customization of the Emacs interface::. Besides other Emacs
-initializations, such as fontification or blinking parentheses, a new
-menu item called `Singular' is added to the main menu, providing menu
-items for starting SINGULAR. On XEmacs, a button starting SINGULAR is
-added to the main toolbar.
-
-The SINGULAR interface is started automatically; once you see a buffer
-called `*singular*' and the SINGULAR prompt you are ready to start your
-SINGULAR session.
-
-`ESingular' inherits all `Singular' options. For a description off all
-these options, see *note Command line options::. Additionally there are
-the following options which are special to `ESingular':
-
-command-line option functionality
-/
-environment variable
-`--emacs=EMACS' Use `EMACS' as Emacs program to run the SINGULAR
-`ESINGULAR_EMACS' Emacs interface, where `EMACS' may e.g. be emacs
- or xemacs.
-
-`--emacs-dir=DIR' Set the singular-emacs-home-directory, which is
-`ESINGULAR_EMACS_DIR' the directory where singular.el can be found,
- to `DIR'.
-
-`--emacs-load=FILE' Load `FILE' on Emacs start-up, instead of the
-`ESINGULAR_EMACS_LOAD' default load file.
-
-`--singular=PROG' Start `PROG' as SINGULAR program within Emacs
-`ESINGULAR_SINGULAR'
-
-Notice that values of these options can also be given by setting the
-above mentioned environment variables (where values given as
-command-line arguments take priority over values given by environment
-variables).
-
-Starting the interface within a running Emacs
----------------------------------------------
-
-If you are a more experienced Emacs user and you already have your own
-local `.emacs' startup file, you might want to start the interface out
-of your running Emacs without using `ESingular'. For this, you should
-add the following lisp code to your `.emacs' file:
-
- (setq load-path (cons "<singular-emacs-home-directory>" load-path))
- (autoload 'singular "singular"
- "Start Singular using default values." t)
- (autoload 'singular-other "singular"
- "Ask for arguments and start Singular." t)
-
-Then typing `M-x singular' in a running Emacs session initializes the
-interface in a new buffer and launches a SINGULAR process. The SINGULAR
-prompt comes up and you are ready to start your SINGULAR session.
-
-It is a good idea to take a look at the (well documented) file
-`.emacs-singular' in the singular-emacs-home-directory, which comes
-along with the distribution. In it you find some useful initializations
-of the SINGULAR interface as well as some lisp code, which, for example,
-adds a button to the XEmacs toolbar. Some of this code might be useful
-for your `.emacs' file, too. And if you are a Emacs wizard, it is of
-course a good idea to take a look at `singular.el' in the
-singular-emacs-home-directory.
-
-Starting, interrupting and stopping SINGULAR
---------------------------------------------
-
-There are the following commands to start and stop SINGULAR:
-
- * `singular-other' (or menu `Singular', item `Start...')
-
- Starts a SINGULAR process and asks for the following four
- parameters in the minibuffer area:
-
- 1. The Singular executable. This can either be a file name with
- complete path, e.g., `/local/bin/Singular'. Then exactly this
- executable is started. The path may contain the character `~'
- denoting your home directory. Or it can be the name of a
- command without path, e.g., `Singular'. Then the executable is
- searched for in your `$PATH' environment variable.
-
- 2. The default working directory. This is the path to an existing
- directory, e.g., `~/work'. The current directory is set to
- this directory before SINGULAR is started.
-
- 3. Command line options. You can set any SINGULAR command line
- option (see *note Command line options::).
-
- 4. The buffer name. You can specify the name of the buffer the
- interface is running in.
-
- * `singular' (or menu `Singular', item `Start default')
-
- Starts SINGULAR with default settings for the executable, the
- working directory, command line switches, and the buffer name. You
- can customize this default settings, see *note Customization of the
- Emacs interface::.
-
- * `singular-exit-singular' (bound to `C-c $' or menu `Singular', item
- `Exit')
-
- Kills the running SINGULAR process of the current buffer (but does
- not kill the buffer). Once you have killed a SINGULAR process you
- can start a new one in the same buffer with the command `singular'
- (or select the item `Start default' of the `Singular' menu).
-
- * `singular-restart' (bound to `C-c C-r' or menu `Singular', item
- `Restart')
-
- Kills the running SINGULAR process of the current buffer and starts
- a new process in the same buffer with exactly the same command line
- arguments as before.
-
- * `singular-control-c' (bound to `C-c C-c' or menu `Singular', item
- `Interrupt')
-
- Interrupt the Singular process running in the current buffer. Asks
- whether to (`a')bort the current SINGULAR command, (`q')uit or
- (`r')estart the current SINGULAR process, or (`c')ontinue without
- doing anything (default).
-
-Whenever a SINGULAR process is started within the Emacs interface, the
-contents of a special startup file (by default `~/.emacs-singularrc') is
-pasted as input to SINGULAR at the very end of the usual startup
-sequence (see *note Startup sequence::). The name of the startup file
-can be changed, see *note Customization of the Emacs interface::.
-
-
-File: sing.info, Node: Demo mode, Next: Customization of the Emacs
interface, Prev: Running SINGULAR under Emacs, Up: Emacs user interface
-
-3.2.3 Demo mode
----------------
-
-The Emacs interface can be used to run interactive SINGULAR
-demonstrations. A demonstration is started by loading a so-called
-SINGULAR demo file with the Emacs command `singular-demo-load', bound to
-`C-c C-d', or with the menu `Commands->Load Demo'.
-
-A SINGULAR demo file should consist of SINGULAR commands separated by
-blank lines. When running a demo, the input up to the next blank line is
-echoed to the screen. Hitting <RETURN> executes the echoed commands and
-shows their output. Hitting <RETURN> again, echos the next commands to
-the screen, and so on, until all commands of the demo file are executed.
-While running a demo, you can execute other commands on the SINGULAR
-prompt: the next input of from the demo file is then echoed again, if
-you hit <RETURN> on an empty input line.
-
-A SINGULAR demo can prematurely be exited by either starting another
-demo, or by executing the Emacs command `singular-demo-exit' (menu:
-`Commands->Exit Demo').
-
-Some aspects of running SINGULAR demos can be customized. *Note
-Customization of the Emacs interface::, for more info.
-
-
-File: sing.info, Node: Customization of the Emacs interface, Next: Editing
SINGULAR input files with Emacs, Prev: Demo mode, Up: Emacs user interface
-
-3.2.4 Customization of the Emacs interface
-------------------------------------------
-
-Emacs provides a convenient interface to customize the behavior of Emacs
-and the SINGULAR Emacs interface for your own needs. You enter the
-customize environment by either calling `M-x customize' (on XEmacs you
-afterwards have to enter `emacs' in the minibuffer area) or by selecting
-the menu item `Options->Customize->Emacs...' for XEmacs, and the menu
-item `Help->Customize->Toplevel Customization Group' for Emacs, resp. A
-brief introduction to the customization mode comes up with the
-customization buffer. All customizable parameters are hierarchically
-grouped and you can browse through all these groups and change the
-values of the parameters using the mouse. At the end you can safe the
-settings to a special file making your changes permanent.
-
-To change the settings of the SINGULAR Emacs interface you can either
-select the item `Preferences' of the `Singular' menu, call `M-x
-customize-group' and give the argument `singular-interactive' in the
-minibuffer area, or browse from the top-level customization group
-through the path `External->Singular->Singular interactive'.
-
-The SINGULAR interface customization buffer is divided into four groups:
-
- * Singular Faces
-
- Here you can specify various faces used if font-lock-mode is
- enabled (which it is, by default).
-
- * Singular Sections And Foldings
-
- Here you can specify special faces for SINGULAR input and output
- and change the text used as replacement for folded sections.
-
- For doing this, you also might find handy the function
- `customize-face-at-point', which let's you customize the face at
- the current position of point. This function is automatically
- defined if you run `ESingular'). Otherwise, you should add its
- definition (see below) to your personal `.emacs' file.
-
- * Singular Interactive Miscellaneous
-
- Here you can specify various different things such as the behavior
- of the cursor keys, the name of the special SINGULAR startup file,
- the appearance of the help window, or the default values for the
- `singular' command.
-
- * Singular Demo Mode
-
- Here you can specify how chunks of the demo file are divided, or
- specify a default directory for demo files.
-
-When you run `ESingular', the settings of customized variables are saved
-in the file `$HOME/.emacs-singular-cust'. Otherwise, the settings are
-appended to your `.emacs' file. Among others, this means that the
-customized settings of `ESingular' are not automatically taken over by
-a "normal" Emacs, and vice versa.
-
-
-File: sing.info, Node: Editing SINGULAR input files with Emacs, Next: Top 20
Emacs commands, Prev: Customization of the Emacs interface, Up: Emacs user
interface
-
-3.2.5 Editing SINGULAR input files with Emacs
----------------------------------------------
-
-Since SINGULAR's programming language is similar to C, you should use
-the Emacs C/C++-mode to edit SINGULAR input files and SINGULAR
-libraries. Among others, this Emacs mode provides automatic indentation,
-line-breaking and keyword highlighting.
-
-When running `ESingular', the C/C++-mode is automatically turned on
-whenever a file with the suffix `.sing', or `.lib' is loaded.
-
-For Emacs sessions which were not started by `ESingular', you should
-add the following to your `.emacs' file:
- ;; turn on c++-mode for files ending in ".sing" and ".lib"
- (setq auto-mode-alist (cons '("\\.sing\\'" . c++-mode) auto-mode-alist))
- (setq auto-mode-alist (cons '("\\.lib\\'" . c++-mode) auto-mode-alist))
- ;; turn-on fontification for c++-mode
- (add-hook 'c++-mode-hook
- (function (lambda () (font-lock-mode 1))))
- ;; turn on aut-new line and hungry-delete
- (add-hook 'c++-mode-hook
- (function (lambda () (c-toggle-auto-hungry-state 1))))
- ;; a handy function for customization
- (defun customize-face-at-point ()
- "Customize face which point is at."
- (interactive)
- (let ((face (get-text-property (point) 'face)))
- (if face
- (customize-face face)
- (message "No face defined at point"))))
-
-Notice that you can change the default settings for source-code
-highlighting (colors, fonts, etc.) by customizing the respective faces
-using the `Customize' feature of Emacs. For doing this, you might find
-handy the above given function `customize-face-at-point', which lets you
-customize the face of the current position of point (this function is
-automatically defined if you run `ESingular').
-
-
-File: sing.info, Node: Top 20 Emacs commands, Prev: Editing SINGULAR input
files with Emacs, Up: Emacs user interface
-
-3.2.6 Top 20 Emacs commands
----------------------------
-
-Here is a list of the 20 probably most useful commands when using the
-SINGULAR Emacs interface.
-
-Starting and stopping of SINGULAR:
-
- * `singular' (menu `Singular->Start Default...'): starts SINGULAR
- using default arguments.
-
- * `singular-other' (menu `Singular->Start'): starts SINGULAR asking
- for several arguments in the minibuffer area.
-
- * `singular-exit' (key `C-c $' or menu `Singular->Exit'): kills the
- SINGULAR process running in the current buffer (but does not kill
- the buffer).
-
- * `singular-restart' (key `C-c C-r' or menu `Singular->Restart'):
- kills the SINGULAR process running in the current buffer and starts
- a new SINGULAR process with exactly the same arguments as before.
-
-Editing input and output:
-
- * `singular-beginning-of-line' (key `C-a'): moves point to beginning
- of line, then skip past the SINGULAR prompt, if any.
-
- * `singular-toggle-truncate-lines' (key `C-c C-t' or menu
- `Commands->Truncate lines'): toggles whether long lines should be
- truncated or not. If lines are not truncated, the commands
- `singular-scroll-left' and `singular-scroll-right' are useful to
- scroll left and right, resp.
-
- * `singular-dynamic-complete' (key `TAB'): performs context specific
- completion. If point is inside a string, file name completion is
- done. If point is at the end of a help command (i.e., `help' or
- `?'), completion on SINGULAR help topics is done. If point is at
- the end of an example command (i.e., `example'), completion is done
- on SINGULAR examples. In all other cases, completion on SINGULAR
- commands is done.
-
- * `singular-folding-toggle-fold-latest-output' (key `C-c C-o' or menu
- `Commands->Fold/ Unfold Latest Output'): toggles folding of the
- latest output section. If your last SINGULAR command produced a
- huge output, simply type `C-c C-o' and it will be replaced by a
- single line.
-
- * `singular-folding-toggle-fold-at-point' (key `C-c C-f' or menu
- `Commands->Fold/Unfold At Point'): toggles folding of the section
- the point currently is in.
-
- * `singular-folding-fold-all-output' (menu `Commands->Fold All
- Output'): folds all SINGULAR output, replacing each output section
- by a single line.
-
- * `singular-folding-unfold-all-output' (menu `Commands->Unfold All
- Output'): unfolds all SINGULAR output sections showing their true
- contents.
-
-Loading of files and SINGULAR demo mode:
-
- * `singular-load-library' (key `C-c C-l' or menu
- `Commands->Libraries->other...'): asks for a standard library name
- or a library file in the minibuffer (hit `TAB' for completion) and
- loads the library into SINGULAR. The submenu `Libraries' of the
- `Commands' menu also provides a separate menu item for each
- standard library.
-
- * `singular-load-file' (key `C-c <' or menu `Commands->Load
- File...'): asks for a file name in the minibuffer (which is
- expanded using `expand-file-name' if given a prefix argument) and
- loads the file into SINGULAR.
-
- * `singular-demo-load' (key `C-c C-d' or menu `Commands->Load
- Demo...'): asks for a file name of a SINGULAR demo file in the
- minibuffer area (hit `SPACE' for completion) and enters the
- SINGULAR demo mode showing the first chunk of the demo.
-
- * `singular-demo-exit' (menu `Commands->Exit Demo'): exits from
- SINGULAR demo mode and cleans up everything that is left from the
- demo.
-
-Help and Customization:
-
- * `singular-help' (key `C-h C-s' or menu `Singular->Singular Help'):
- asks for a SINGULAR help topic in the minibuffer (hit `TAB' for
- completion) and shows the help text in a separate buffer.
-
- * `singular-example' (key `C-c C-e' or menu `Singular->Singular
- Example'): asks for a SINGULAR command in the minibuffer (hit `TAB'
- for completion) and executes the example of this command in the
- current SINGULAR buffer.
-
- * `customize-group' (menu `Singular->Preferences'): enters the
- customization group of the SINGULAR Emacs interface. (If called via
- `M-x customize-group' give argument `singular-interactive' in the
- minibuffer area.)
-
-
-File: sing.info, Node: Rings and orderings, Next: Implemented algorithms,
Prev: Emacs user interface, Up: General concepts
-
-3.3 Rings and orderings
-=======================
-
-All non-trivial algorithms in SINGULAR require the prior definition of a
-ring. Such a ring can be
-
- 1. a polynomial ring over a field,
-
- 2. a localization of a polynomial ring,
-
- 3. a quotient ring by an ideal of one of 1. or 2.,
-
- 4. a tensor product of one of 1. or 2.
-
-Except for quotient rings, all of these rings are realized by choosing a
-coefficient field, ring variables, and an appropriate global or local
-monomial ordering on the ring variables. *Note Term orderings::, *note
-Mathematical background::.
-
-The coefficient field of the rings may be
-
- 1. the field of rational numbers Q $Q$
- ,
-
- 2. finite fields $Z/p$, $p$ a prime $\le 2147483629$,
- finite fields Z/p, p a prime <= 2147483629,
-
- 3. finite fields $\hbox{GF}(p^n)$ with $p^n$ elements, $p$ a prime, $p^n \le
2^{15}$,
- finite fields GF(p^n) with p^n elements, p a prime, p^n <= 2^15,
-
- 4. transcendental extension of Q $Q$
- or Z/p $Z/p$
- ,
-
- 5. simple algebraic extension of Q $Q$
- or Z/p $Z/p$
- ,
-
- 6. the field of real numbers represented by floating point numbers of
- a user defined precision.
-
- 7. the field of complex numbers represented by (pairs of) floating
- point numbers of a user defined precision.
-
-Throughout this manual, the current active ring in SINGULAR is called
-basering. The reserved name `basering' in SINGULAR is an alias for the
-current active ring. The basering can be set by declaring a new ring as
-described in the following subsections or with the commands `setring'
-and `keepring'. *Note keepring::, *note setring::.
-
-Objects of ring dependent types are local to a ring. To access them
-after a change of the basering they have to be mapped using `map' or by
-the functions `imap' or `fetch'. *Note Objects::, *note fetch::, *note
-imap::, *note map::.
-
-All changes of the basering in a procedure are local to this procedure
-unless a `keepring' command is used as the last statement of the
-procedure. *Note Procedures::, *note keepring::.
-
-* Menu:
-
-* Examples of ring declarations::
-* General syntax of a ring declaration::
-* Term orderings::
-
-
-File: sing.info, Node: Examples of ring declarations, Next: General syntax
of a ring declaration, Prev: Rings and orderings, Up: Rings and orderings
-
-3.3.1 Examples of ring declarations
------------------------------------
-
-The exact syntax of a ring declaration is given in the next two
-subsections; this subsection lists some examples first. Note that the
-ordering has to be chosen such that the unit-elements of the ring are
-precisely those elements with leading monomial 1. For more information,
-see *note Monomial orderings::.
-
-Every floating point number in a ring consists of two parts, which may
-be chosen from the user. The leading part represents the number and the
-rest is for the numerical stability. Two numbers with a difference only
-in the rest are equal.
-
- * the ring Z/32003[x,y,z] $Z/32003[x,y,z]$
- with degree reverse lexicographical ordering. The exact ring
- declaration may be omitted in the first example since this is the
- default ring:
-
- ring r;
- ring r = 32003,(x,y,z),dp;
-
- * the ring Q[a,b,c,d] $Q[a,b,c,d]$
- with lexicographical ordering:
-
- ring r = 0,(a,b,c,d),lp;
-
- * the ring Z/7[x,y,z] $Z/7[x,y,z]$
- with local degree reverse lexicographical ordering. The non-prime
- 10 is converted to the next lower prime in the second example:
-
- ring r = 7,(x,y,z),ds;
- ring r = 10,(x,y,z),ds;
-
- * the ring $Z/7[x_1,\ldots,x_6]$
- Z/7[x1,...,x6] with lexicographical ordering for $x_1,x_2,x_3$
- x1,x2,x3 and degree reverse lexicographical ordering for $x_4,x_5,x_6$:
- x4,x5,x6:
-
- ring r = 7,(x(1..6)),(lp(3),dp);
-
- * the localization of (Q[a,b,c])[x,y,z] $(Q[a,b,c])[x,y,z]$
- at the maximal ideal
-
- (x,y,z) $(x,y,z)$
- :
-
- ring r = 0,(x,y,z,a,b,c),(ds(3), dp(3));
-
- * the ring Q[x,y,z] $Q[x,y,z]$
- with weighted reverse lexicographical ordering. The variables x $x$
- , y $y$
- , and z $z$
- have the weights 2, 1, and 3, respectively, and vectors are first
- ordered by components (in descending order) and then by monomials:
-
- ring r = 0,(x,y,z),(c,wp(2,1,3));
-
- For ascending component order, the component ordering `C' has to be
- used.
-
- * the ring K[x,y,z] $K[x,y,z]$
- , where K=Z/7(a,b,c) $K=Z/7(a,b,c)$
- denotes the transcendental extension of Z/7 $Z/7$
- by a $a$
- , b $b$
- and c $c$
- with degree lexicographical ordering:
-
- ring r = (7,a,b,c),(x,y,z),Dp;
-
- * the ring K[x,y,z] $K[x,y,z]$
- , where K=Z/7[a] $K=Z/7[a]$
- denotes the algebraic extension of degree 2 of Z/7 $Z/7$
- by a. $a.$
- In other words, K $K$
- is the finite field with 49 elements. In the first case, a $a$
- denotes an algebraic element over Z/7 $Z/7$
- with minimal polynomial $\mu_a=a^2+a+3$,
- mu_a=a^2+a+3, in the second case, a $a$
-
- refers to some generator of the cyclic group of units of K $K$
- :
-
- ring r = (7,a),(x,y,z),dp; minpoly = a^2+a+3;
- ring r = (7^2,a),(x,y,z),dp;
-
- * the ring R[x,y,z] $R[x,y,z]$
- , where R $R$
- denotes the field of real numbers represented by simple precision
- floating point numbers. This is a special case:
-
- ring r = real,(x,y,z),dp;
-
- * the ring R[x,y,z] $R[x,y,z]$
- , where R $R$
- denotes the field of real numbers represented by floating point
- numbers of 50 valid decimal digits and the same number of digits
- for the rest:
-
- ring r = (real,50),(x,y,z),dp;
-
- * the ring R[x,y,z] $R[x,y,z]$
- , where R $R$
- denotes the field of real numbers represented by floating point
- numbers of 10 valid decimal digits and with 50 digits for the rest:
-
- ring r = (real,10,50),(x,y,z),dp;
-
- * the ring R(j)[x,y,z] $R(j)[x,y,z]$
- , where R $R$
- denotes the field of real numbers represented by floating point
- numbers of 30 valid decimal digits and the same number for the
- rest. j $j$
- denotes the imaginary unit.
-
- ring r = (complex,30,j),(x,y,z),dp;
-
- * the ring R(i)[x,y,z] $R(i)[x,y,z]$
- , where R $R$
- denotes the field of real numbers represented by floating point
- numbers of 6 valid decimal digits and the same number for the rest.
- i $i$
- is the default for the imaginary unit.
-
- ring r = complex,(x,y,z),dp;
-
- * the quotient ring Z/7[x,y,z] $Z/7[x,y,z]$
- modulo the square of the maximal ideal (x,y,z) $(x,y,z)$
- :
-
- ring R = 7,(x,y,z), dp;
- qring r = std(maxideal(2));
-
-
-File: sing.info, Node: General syntax of a ring declaration, Next: Term
orderings, Prev: Examples of ring declarations, Up: Rings and orderings
-
-3.3.2 General syntax of a ring declaration
-------------------------------------------
-
-Rings
-.....
-
-*Syntax:*
- `ring' name `=' `('coefficient_field`),' `('
- names_of_ring_variables `),' `(' ordering `);'
-
-*Default:*
- `32003,(x,y,z),(dp,C);'
-
-*Purpose:*
- declares a ring and sets it as the current basering.
-
-The coefficient_field is given by one of the following:
- 1. a non-negative int_expression less or equal 32003.
- The int_expression should either be 0, specifying the field of
- rational numbers Q, or a prime number p, specifying the finite
- field with p elements. If it is not a prime number, int_expression
- is converted to the next lower prime number.
-
- 2. an expression_list of an int_expression and one or more names.
- The int_expression specifies the characteristic of the coefficient
- field as described above. The names are used as parameters in
- transcendental or algebraic extensions of the coefficient field.
- Algebraic extensions are implemented for one parameter only. In
- this case, a minimal polynomial has to be defined by assignment to
- `minpoly'. *Note minpoly::.
-
- 3. an expression_list of an int_expression and a name.
- The int_expression has to be a prime number p to the power of a
- positive integer n. This defines the Galois field $\hbox{GF}(p^n)$ with
$p^n$ elements, where $p^n$ has to be smaller or equal $2^{15}$.
- GF(p^n) with p^n elements, where p^n has to be smaller or equal
- 2^15. The given name refers to a primitive element of $\hbox{GF}(p^n)$
- GF(p^n) generating the multiplicative group. Due to a different
- internal representation, the arithmetic operations in these
- coefficient fields are faster than arithmetic operations in
- algebraic extensions as described above.
-
- 4. an expression_list of the name `real' and two optional
- int_expression giving the precision in decimal digits and the size
- for the stabilizing rest. The default for the rest is the same size
- as for the representation. An exception is the name `real' without
- any integers. These numbers are implemented as machine floating
- point numbers of single precision. Note that computations over all
- these fields are not exact.
-
- 5. an expression_list of the name `complex', two optional
- int_expression and a name. This specifies the field of complex
- numbers represented with floating point numbers with a precision
- similar to `real'. An expression_list without int_expression
- defines a precision and rest with length 6. The name of the
- imaginary unit is given by the last parameter. Note that
- computations over these fields are not exact.
-
-'names_of_ring_variables' is a list of names or indexed names.
-
-'ordering' is a list of block orderings where each block ordering is
-either
-
- 1. `lp', `dp', `Dp', `ls', `ds', or `Ds' optionally followed by a size
- parameter in parentheses.
-
- 2. `wp', `Wp', `ws', `Ws', or `a' followed by a weight vector given as
- an intvec_expression in parentheses.
-
- 3. `M' followed by an intmat_expression in parentheses.
-
- 4. `c' or `C'.
-
-For the definition of the orderings, see *note Monomial orderings::.
-
-If one of coefficient_field, names_of_ring_variables, and ordering
-consists of only one entry, the parentheses around this entry may be
-omitted.
-
-Quotient rings
-..............
-
-*Syntax:*
- `qring' name `=' ideal_expression `;'
-
-*Default:*
- none
-
-*Purpose:*
- declares a quotient ring as the basering modulo ideal_expression.
- Sets it as current basering.
-
-ideal_expression has to be represented by a standard basis.
-
-The most convenient way to map objects from a ring to its quotient ring
-and vice versa is to use the `fetch' function (*note fetch::).
-
-SINGULAR computes in a quotient ring as long as possible with the given
-representative of a polynomial, say, `f'. I.e., it usually does not
-reduce `f' w.r.t. the quotient ideal. This is only done when necessary
-during standard bases computations or by an explicit reduction using the
-command `reduce(f, std(0))' (*note reduce::).
-
-*Example:*
- ring r=32003,(x,y),dp;
- poly f=x3+yx2+3y+4;
- qring q=std(maxideal(2));
- basering;
- ==> // characteristic : 32003
- ==> // number of vars : 2
- ==> // block 1 : ordering dp
- ==> // : names x y
- ==> // block 2 : ordering C
- ==> // quotient ring from ideal
- ==> _[1]=y2
- ==> _[2]=xy
- ==> _[3]=x2
- poly g=fetch(r, f);
- g;
- ==> x3+x2y+3y+4
- reduce(g,std(0));
- ==> 3y+4
-
-
-File: sing.info, Node: Term orderings, Prev: General syntax of a ring
declaration, Up: Rings and orderings
-
-3.3.3 Term orderings
---------------------
-
-Any polynomial (resp. vector) in SINGULAR is ordered w.r.t. a term
-ordering (or, monomial ordering), which has to be specified together
-with the declaration of a ring. SINGULAR stores and displays a
-polynomial (resp. vector) w.r.t. this ordering, i.e., the greatest
-monomial (also called the leading monomial) is the first one appearing
-in the output polynomial, and the smallest monomial is the last one.
-
-*Remark:* The novice user should generally use the ordering `dp' for
-computations in the polynomial ring $K[x_1,\ldots,x_n]$,
-K[x1,...,xn], resp. `ds' for computations in the localization
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$.
-Loc_(x)K[x1,...,xn]). For more details, see *note Polynomial data::.
-
-In a ring declaration, SINGULAR offers the following orderings:
- 1. Global orderings
-
- `lp'
- lexicographical ordering
-
- `dp'
- degree reverse lexicographical ordering
-
- `Dp'
- degree lexicographical ordering
-
- `wp(' intvec_expression `)'
- weighted reverse lexicographical ordering; the weight vector
- may consist of positive integers only.
-
- `Wp(' intvec_expression `)'
- weighted lexicographical ordering; the weight vector may
- consist of positive integers only.
-
- Global orderings are well-orderings, i.e., 1 < x $1 < x$
- for each ring variable x $x$
- . They are denoted by a `p' as the second character in their name.
-
- 2. Local orderings
-
- `ls'
- negative lexicographical ordering
-
- `ds'
- negative degree reverse lexicographical ordering
-
- `Ds'
- negative degree lexicographical ordering
-
- `ws(' intvec_expression `)'
- (general) weighted reverse lexicographical ordering; the first
- element of the weight vector has to be non-zero.
-
- `Ws(' intvec_expression `)'
- (general) weighted lexicographical ordering; the first element
- of the weight vector has to be non-zero.
-
- Local orderings are not well-orderings. They are denoted by an `s'
- as the second character in their name.
-
- 3. Matrix orderings
-
- `M(' intmat_expression `)'
- intmat_expression has to be an invertible square matrix
-
- Using matrix orderings, SINGULAR can compute standard bases w.r.t.
- any monomial ordering that is compatible with the natural
- semi-group structure on the monomials. In practice, the predefined
- global and local orderings together with the block orderings should
- be sufficient in most cases. These orderings are faster than their
- corresponding matrix orderings since evaluation of a matrix
- ordering is time consuming.
-
- 4. Extra weight vector
-
- `a(' intvec_expression `)'
- an extra weight vector `a(' intvec_expression `)' may precede
- any monomial ordering
-
- 5. Product ordering
-
- `(' ordering [ `(' int_expression `)' ]`,' ... `)'
- any of the above orderings and the extra weight vector may be
- combined to yield product or block orderings
-
- The orderings `lp', `dp', `Dp', `ls', `ds', and `Ds' may be
- followed by an int_expression in parentheses giving the size of the
- block. For the last block the size is calculated automatically. For
- the weighted orderings the size of the block is given by the size
- of the weight vector. The same holds analogously for matrix
- orderings.
-
- 6. Module orderings
-
- `(' ordering`,' ...`, C )'
-
- `(' ordering`,' ...`, c )'
- sort polynomial vectors by the monomial ordering first, then
- by components
-
- `( C,' ordering`,' ... `)'
-
- `( c,' ordering`,' ... `)'
- sort polynomial vectors by components first, then by the
- monomial ordering
-
- Here a capital `C' sorts generators in ascending order, i.e.,
- `gen(1)' < `gen(2)' < ... A small `c' sorts in descending order,
- i.e., `gen(1)' > `gen(2)' > ... It is not necessary to specify the
- module ordering explicitly since `(' ordering`,' ...`, C )' is the
- default.
-
- In fact, `c' or `C' may be specified anywhere in a product ordering
- specification, not only at its beginning or end. All monomial
- block orderings preceding the component ordering have higher
- precedence, all monomial block orderings following after it have
- lower precedence.
-
-For a mathematical description of these orderings, see *note Polynomial
-data::.
-
-
-File: sing.info, Node: Implemented algorithms, Next: The SINGULAR language,
Prev: Rings and orderings, Up: General concepts
-
-3.4 Implemented algorithms
-==========================
-
-The basic algorithm in SINGULAR is a general standard basis algorithm
-for any monomial ordering which is compatible with the natural
-semi-group structure of the exponents. This includes well-orderings
-(Buchberger algorithm to compute a Groebner basis) and tangent cone
-orderings (Mora algorithm) as special cases.
-
-Nonetheless, there are a lot of other important algorithms:
-
- * Algorithms to compute the standard operations on ideals and
- modules: intersection, ideal quotient, elimination, etc.
-
- * Different Syzygy algorithms and algorithms to compute free
- resolutions of modules.
-
- * Combinatorial algorithms to compute dimensions, Hilbert series,
- multiplicities, etc.
-
- * Algorithms for univariate and multivariate polynomial
- factorization, resultant and gcd computations.
-
-Commands to compute standard bases
-----------------------------------
-
-`facstd'
- *note facstd::
- computes a list of Groebner bases via the Factorizing Groebner
- Basis Algorithm, i.e., their intersection has the same radical as
- the original ideal. It need not be a Groebner basis of the given
- ideal.
-
- The intersection of the zero-sets is the zero-set of the given
- ideal.
-
-`fglm'
- *note fglm::
- computes a Groebner basis provided that a reduced Groebner basis
- w.r.t. another ordering is given.
-
- Implements the so-called FGLM (Faugere, Gianni, Lazard, Mora)
- algorithm. The given ideal must be zero-dimensional.
-
-`groebner'
- *note groebner::
- computes a standard resp. Groebner bases using a heuristically
- chosen method.
-
- This is the preferred method to compute a standard resp. Groebner
- bases.
-
-`mstd'
- *note mstd::
- computes a standard basis and a minimal set of generators.
-
-`std'
- *note std::
- computes a standard resp. Groebner basis.
-
-`stdfglm'
- *note stdfglm::
- computes a Groebner basis in a ring with a "difficult" ordering
- (e.g., lexicographical) via `std' w.r.t. a "simple" ordering and
- `fglm'.
-
- The given ideal must be zero-dimensional.
-
-`stdhilb'
- *note stdhilb::
- computes a Groebner basis in a ring with a "difficult" ordering
- (e.g., lexicographical) via `std' w.r.t. a "simple" ordering and a
- `std' computation guided by the Hilbert series.
-
-Further processing of standard bases
-------------------------------------
-
-The next commands require the input to be a standard basis.
-
-`degree'
- *note degree::
- computes the (Krull) dimension, codimension and the multiplicity.
-
- The result is only displayed on the screen.
-
-`dim'
- *note dim::
- computes the dimension of the ideal resp. module.
-
-`highcorner'
- *note highcorner::
- computes the smallest monomial not contained in the ideal resp.
- module. The ideal resp. module has to be finite dimensional as a
- vector space over the ground field.
-
-`hilb'
- *note hilb::
- computes the first, and resp. or, second Hilbert series of an ideal
- resp. module.
-
-`kbase'
- *note kbase::
- computes a vector space basis (consisting of monomials) of the
- quotient of a ring by an ideal resp. of a free module by a
- submodule.
-
- The ideal resp. module has to be finite dimensional as a vector
- space over the ground field and has to be represented by a standard
- basis w.r.t. the ring ordering.
-
-`mult'
- *note mult::
- computes the degree of the monomial ideal resp. module generated by
- the leading monomials of the input.
-
-`reduce'
- *note reduce::
- reduces a polynomial, vector, ideal or module to its normal form
- with respect to an ideal or module represented by a standard basis.
-
-`vdim'
- *note vdim::
- computes the vector space dimension of a ring (resp. free module)
- modulo an ideal (resp. module).
-
-Commands to compute resolutions
--------------------------------
-
-`res'
- *note res::
- computes a free resolution of an ideal or module using a
- heuristically chosen method. This is the preferred method to
- compute free resolutions of ideals or modules.
-
-`lres'
- *note lres::
- computes a free resolution of an ideal or module with La Scala's
- method. The input needs to be homogeneous.
-
-`mres'
- *note mres::
- computes a minimal free resolution of an ideal or module with the
- Syzygy method.
-
-`sres'
- *note sres::
- computes a free resolution of an ideal or module with Schreyer's
- method. The input has to be a standard basis.
-
-`nres'
- *note nres::
- computes a free resolution of an ideal or module with the standard
- basis method.
-
-`syz'
- *note syz::
- computes the first Syzygy (i.e., the module of relations of the
- given generators).
-
-Further processing of resolutions
----------------------------------
-
-`betti'
- *note betti::
- computes the graded Betti numbers of a module from a free
- resolution.
-
-`minres'
- *note minres::
- minimizes a free resolution of an ideal or module.
-
-`regularity'
- *note regularity::
- computes the regularity of a homogeneous ideal resp. module from a
- given minimal free resolution.
-
-Processing of polynomials
--------------------------
-
-`char_series'
- *note char_series::
- computes characteristic sets of polynomial ideals.
-
-`extgcd'
- *note extgcd::
- computes the extended gcd of two polynomials.
-
- Implemented as extended Euclidean Algorithm. Applicable for
- univariate polynomials only.
-
-`factorize'
- *note factorize::
- computes factorization of univariate and multivariate polynomials
- into irreducible factors.
-
- The most basic algorithm is univariate factorization in prime
- characteristic. The Cantor-Zassenhaus Algorithm is used in this
- case. For characteristic 0, a univariate Hensel-lifting is done to
- lift from prime characteristic to characteristic 0. For
- multivariate factorization in any characteristic, the problem is
- reduced to the univariate case first, then a multivariate
- Hensel-lifting is used to lift the univariate factorization.
-
- Note that there is no factorization of polynomials over algebraic
- extensions of Q.
-
-`gcd'
- *note gcd::
- computes greatest common divisors of univariate and multivariate
- polynomials.
-
- For prime characteristic, a subresultant gcd is used. In
- characteristic 0, a modular algorithm is used for the univariate
- case. For the multivariate case, the EZGCD is used.
-
- Note that there is no gcd calculation for polynomials over
- algebraic extensions of Q.
-
-`resultant'
- *note resultant::
- computes the resultant of two univariate polynomials using the
- subresultant algorithm.
-
- Multivariate polynomials are considered as univariate polynomials
- in the main variable (which has to be specified by the user).
-
-`vandermonde'
- *note vandermonde::
- interpolates a polynomial from its values at several points
-
-Matrix computations
--------------------
-
-`bareiss'
- *note bareiss::
- implements sparse Gauss-Bareiss method for elimination (matrix
- triangularization) in arbitrary integral domains.
-
-`det'
- *note det::
- computes the determinant of a square matrix.
-
- For matrices with integer entries a modular algorithm is used. For
- other domains the Gauss-Bareiss method is used.
-
-`minor'
- *note minor::
- computes all minors (=subdeterminants) of a given size for a
- matrix.
-
-Numeric computations
---------------------
-
-`laguerre'
- *note laguerre::
- computes all (complex) roots of a univariate polynomial
-
-`uressolve'
- *note uressolve::
- find all roots of 0-dimensional ideal i with multivariate
- resultants
-
-Controlling computations
-------------------------
-
-`option'
- *note option::
- allows setting of options for manipulating the behavior of
- computations (such as reduction strategies) and for showing
- protocol information indicating the progress of a computation.
-
-
-File: sing.info, Node: The SINGULAR language, Next: Input and output, Prev:
Implemented algorithms, Up: General concepts
-
-3.5 The SINGULAR language
-=========================
-
-SINGULAR interprets commands given interactively on the command line as
-well as given in the context of user-defined procedures. In fact,
-SINGULAR makes no distinction between these two cases. Thus, SINGULAR
-offers a powerful programming language as well as an easy-to-use command
-line interface without differences in syntax or semantics.
-
-In the following, the basic language concepts such as commands,
-expressions, names, objects, etc., are discussed. *Note Procedures::,
-and *note Libraries::, for the concepts of procedures and libraries.
-
-In many aspects, the SINGULAR language is similar to the C programming
-language. For a description of some of the subtle differences, see
-*note Major differences to the C programming language::.
-
-Elements of the language
-........................
-
-The major building blocks of the SINGULAR language are expressions,
-commands, and control structures. The notion of expressions in the
-SINGULAR and the C programming language are identical, whereas the
-notion of commands and control structures only roughly corresponds to
-the C statements.
-
- * An "expression" is a sequence of operators, functions, and operands
- that specifies a computation. An expression always results in a
- value of a specific type. *Note Data types::, and its subsections
- (e.g., *note poly expressions::), for information on how to build
- expressions.
-
- * A "command" is either a declaration, an assignment, a call to a
- function without return value, or a print command. For detailed
- information, see *note General command syntax::.
-
- * "Control structures" determine the execution sequence of commands.
- SINGULAR provides control structures for conditional execution
- (`if' ... `else') and iteration (`for' and `while'). Commands may
- be grouped in pairs of `{' `}' (curly brackets) to form blocks.
- *Note Control structures::, for more information.
-
-Other notational conventions
-............................
-
-For user-defined functions, the notion of "procedure" and "function" are
-synonymous.
-
-As already mentioned above, functions without return values are called
-commands. Furthermore, whenever convenient, the term "command" is used
-for a function, even if it does return a value.
-
-* Menu:
-
-* General command syntax::
-* Special characters::
-* Names::
-* Objects::
-* Type conversion and casting::
-* Flow control::
-
-
-File: sing.info, Node: General command syntax, Next: Special characters,
Prev: The SINGULAR language, Up: The SINGULAR language
-
-3.5.1 General command syntax
-----------------------------
-
-In SINGULAR a command is either a declaration, an assignment, a call to
-a function without return value, or a print command. The general form of
-a command is described in the following subsections.
-
-Declaration
-...........
-
- 1. type name `=' expression `;'
- declares a variable with the given name of the given type and
- assigns the expression as initial value to it. Expression is an
- expression of the specified type or one that can be converted to
- that type. *Note Type conversion and casting::.
-
- 2. type name_list `=' expression_list `;'
- declares variables with the given names and assigns successively
- each expression of expression_list to the corresponding name of
- name_list. Both lists must be of the same length. Each expression
- in expression_list is an expression of the specified type or one
- that can be converted to that type. *Note Type conversion and
- casting::.
-
- 3. type name `;'
- declares a variable with the given name of the given type and
- assigns the default value of the specific type to it.
-
-*Note Names::, for more information on declarations. *Note Data
-types::, for a description of all data types known to SINGULAR.
-
- ring r; // the default ring
- poly f,g = x^2+y^3,xy+z2; // the polynomials f=x^2+y^3 and g=x*y+z^2
- ideal I = f,g; // the ideal generated by f and g
- matrix m[3][3]; // a 3 x 3 zero matrix
- int i=2; // the integer i=2
-
-Assignment
-..........
-
- 4. name `=' expression `;'
- assigns expression to name.
-
- 5. name_list `=' expression_list `;'
- assigns successively each expression of expression_list to the
- corresponding name of name_list. Both lists must be of the same
- length. This is not a simultaneous assignment. Thus, `f, g = g,
- f;' does not swap the values of `f' and `g', but rather assigns `g'
- to both `f' and `g'.
-
-There must be a type conversion of the type of expression to the type of
-name. *Note Type conversion and casting::.
-
-An assignment itself does not yield a value. Hence, compound assignments
-like `i = j = k;' are not allowed and result in an error.
-
- f = x^2 + y^2 ; // overwrites the old value of f
- I = jacob(f);
- f,g = I[1],x^2+y^2 ; // overwrites the old values of f and g
-
-Function without return value
-.............................
-
- 6. function_name [ `(' argument_list `)' ] `;'
- calls function function_name with arguments argument_list.
-
-The function may have output (not to be confused with a return value of
-type string). *Note Functions::. Functions without a return value are
-specified there to have a return type 'none'.
-
-Some of these functions have to be called without parentheses, e.g.,
-`help', `LIB'.
-
- ring r;
- ideal i=x2+y2,x;
- i=std(i);
- degree(i); // degree has no return value but prints output
- ==> 2
-
-Print command
-.............
-
- 7. expression `;'
- prints the value of an expression, for example, of a variable.
-
-Use the function `print' (or the procedure show from inout.lib) to get a
-pretty output of various data types, e.g., matrix or intmat. *Note
-print::.
-
- int i=2;
- i;
- ==> 2
- intmat m[2][2]=1,7,10,0;
- print(m);
- ==> 1 7
- ==> 10 0
-
-
-File: sing.info, Node: Special characters, Next: Names, Prev: General
command syntax, Up: The SINGULAR language
-
-3.5.2 Special characters
-------------------------
-
-The following characters and operators have special meaning:
-`='
- assignment
-
-`(', `)'
- in expressions, for indexed names and for argument lists
-
-`[', `]'
- access operator for strings, integer vectors, ideals, matrices,
- polynomials, resolutions, and lists. Used to build vectors of
- polynomials. Example: `s[3]', `m[1,3]', `i[1..3]',
- `[f,g+x,0,0,1]'.
-
-`+'
- addition operator
-
-`-'
- subtraction operator
-
-`*'
- multiplication operator
-
-`/'
- division operator. *Note Miscellaneous oddities::, for the
- difference between the division operators `/' and `div'.
-
-`%'
- modulo operator
-
-`^' or `**'
- exponentiation operator
-
-`=='
- comparison operator equal
-
-`!=' or `<>'
- comparison operator not equal
-
-`>='
- comparison operator bigger or equal
-
-`>'
- comparison operator bigger
-
-`<='
- comparison operator smaller or equal
-
-`<'
- comparison operator smaller. Also used for file input. *Note
- filecmd::.
-
-`!'
- boolean operator not
-
-`&&'
- boolean operator and
-
-`||'
- boolean operator or
-
-`"'
- delimiter for string constants
-
-``'
- delimiter for name substitution
-
-`?'
- synonym for `help'
-
-`//'
- comment delimiter. Comment extends to end of line.
-
-`/*'
- comment delimiter. Starts a comment which ends with `*/'.
-
-`*/'
- comment delimiter. Ends a comment which starts with `/*'.
-
-`;'
- statement separator
-
-`,'
- separator for expression lists and function arguments
-
-`\'
- escape character for `"' and `\' within strings
-
-`..'
- interval specifier returning intvec. E.g., `1..3' which is
- equivalent to the intvec `1, 2, 3'.
-
-`_'
- value of expression last displayed
-
-`~'
- breakpoint in procedures
-
-`#'
- list of parameters in procedures without explicit parameter list
-
-`$'
- terminates SINGULAR
-
-
-File: sing.info, Node: Names, Next: Objects, Prev: Special characters, Up:
The SINGULAR language
-
-3.5.3 Names
------------
-
-SINGULAR is a strongly typed language. This means that all names (=
-identifiers) have to be declared prior to their use. For the general
-syntax of a declaration, see the description of declaration commands
-(*note General command syntax::).
-
-*Note Data types::, for a description of SINGULAR's data types. *Note
-typeof::, for a short overview of possible types. To get information on
-a name and the object named by it, the `type' command may be used (*note
-type::).
-
-It is possible to redefine an already existing name if doing so does not
-change its type. A redefinition first sets the variable to the default
-value and then computes the expression. The difference between
-redefining and overwriting a variable is shown in the following example:
-
- int i=3;
- i=i+1; // overwriting
- i;
- ==> 4
- int i=i+1; // redefinition
- ==> // ** redefining i **
- i;
- ==> 1
-
-User defined names should start with a letter and consist of letters and
-digits only. As an exception to this rule, the characters `@', and `_'
-may be used as part of a name, too. Capital and small letters are
-distinguished. Indexed names are built as a name followed by an
-int_expression in parentheses. A list of indexed names can be built as
-a name followed by an intvec_expression in parentheses.
-
- ring R;
- int n=3;
- ideal j(3);
- ideal j(n); // is equivalent to the above
- ==> // ** redefining j(3) **
- ideal j(2)=x;
- j(2..3);
- ==> j(2)[1]=x j(3)[1]=0
-
-Names may not coincide with reserved names (keywords). Type
-`reservedName();' to get a list of the reserved names. *Note
-reservedName::. Names should not interfere with names of ring variables
-or, more generally, with monomials. *Note Identifier resolution::.
-The command `listvar' provides a list of the names in use (*note
-listvar::).
-
-The most recently printed expression is available under the special name
-`_', e.g.,
- ring r;
- ideal i=x2+y3,y3+z4;
- std(i);
- ==> _[1]=y3+x2
- ==> _[2]=z4-x2
- ideal k=_;
- k*k+x;
- ==> _[1]=y6+2x2y3+x4
- ==> _[2]=y3z4+x2z4-x2y3-x4
- ==> _[3]=z8-2x2z4+x4
- ==> _[4]=x
- size(_[3]);
- ==> 3
-
-A string_expression enclosed in ``'...``' (back ticks) evaluates to the
-value of the variable named by the string_expression. This feature is
-referred to as name substitution.
-
- int foo(1)=42;
- string bar="foo";
- `bar+"(1)"`;
- ==> 42
-
-
-File: sing.info, Node: Objects, Next: Type conversion and casting, Prev:
Names, Up: The SINGULAR language
-
-3.5.4 Objects
--------------
-
-Every object in SINGULAR has a type and a value. In most cases it has
-also a name and in some cases an attribute list. The value of an object
-may be examined simply by printing it with a print command: object`;'.
-The type of an object may be determined by means of the `typeof'
-function, the attributes by means of the `attrib' function (*note
-typeof::, *note attrib::):
-
- ring r=0,x,dp;
- typeof(10);
- ==> int
- typeof(10000000000000000);
- ==> number
- typeof(r);
- ==> ring
- attrib(x);
- ==> no attributes
- attrib(std(ideal(x)));
- ==> attr:isSB, type int
-
-Each object of type `poly', `ideal', `vector', `module', `map',
-`matrix', `number', or `resolution' belongs to a specific ring. Also
-`list', if at least one of the objects contained in the list belongs to
-a ring. These objects are local to the ring. Their names can be used
-for other objects in other rings. Objects from one ring can be mapped
-to another ring using maps or with the commands `fetch' or `imap'.
-*Note map::, *note fetch::, *note imap::.
-
-All other types do not belong to a ring and can be accessed within every
-ring and across rings. They can be declared even if there is no active
-basering.
-
-
-File: sing.info, Node: Type conversion and casting, Next: Flow control,
Prev: Objects, Up: The SINGULAR language
-
-3.5.5 Type conversion and casting
----------------------------------
-
-Type conversion
-...............
-
-Assignments convert the type of the right-hand side to the type of the
-left-hand side of the assignment, if possible. Operators and functions
-which require certain types of operands can also implicitly convert the
-type of an expression. It is, for example, possible to multiply a
-polynomial by an integer because the integer is automatically converted
-to a polynomial. Type conversions do not act transitively. Possible
-conversions are:
-
-1. `int' ==> `ideal'
-2. `poly' ==> `ideal'
-3. `intvec' ==> `intmat'
-4. `int' ==> `intvec'
-5. `int' ==> `intmat'
-6. `string' ==> `link'
-7. `resolution' ==> `list'
-8. `ideal' ==> `matrix'
-9. `int' ==> `matrix'
-10. `intmat' ==> `matrix'
-11. `intvec' ==> `matrix'
-12. `module' ==> `matrix'
-13. `number' ==> `matrix'
-14. `poly' ==> `matrix'
-15. `vector' ==> `matrix'
-16. `ideal' ==> `module'
-17. `matrix' ==> `module'
-18. `vector' ==> `module'
-19. `int' ==> `number'
-20. `int' ==> `poly'
-21. `number' ==> `poly'
-22. `string' ==> `proc'
-23. `list' ==> `resolution'
-24. `int' ==> `vector' (i ==> i*`gen(1)')
-25. `poly' ==> `vector' (p ==> p*`gen(1)')
-
-Type casting
-............
-
-An expression can be casted to another type by using a type cast
-expression:
-type `(' expression `)'.
-
-Possible type casts are:
-
- to from
- `ideal' expression lists of `int', `number', `poly'
- `ideal' `int', `matrix', `module', `number', `poly', `vector'
- `int' `number', `poly'
- `intvec' expression lists of `int', `intmat'
- `intmat' `intvec' (*note intmat type cast::)
- `list' expression lists of any type
- `matrix' `module', `ideal', `vector', `matrix'.
- There are two forms to convert something to a matrix: if
- `matrix(' expression `)' is used then the size of the
- matrix is determined by the size of expression.
- But `matrix(' expression `,' m `,' n `)' may also be used
- - the result is a $ m \times n $
- m x n matrix (*note matrix type cast::)
- `module' expression lists of `int', `number', `poly', `vector'
- `module' `ideal', `matrix', `vector'
- `number' `poly'
- `poly' `int', `number'
- `string' any type (*note string type cast::)
-
-*Example:*
- ring r=0,x,(c,dp);
- number(3x);
- ==> 0
- number(poly(3));
- ==> 3
- ideal i=1,2,3,4,5,6;
- print(matrix(i));
- ==> 1,2,3,4,5,6
- print(matrix(i,3,2));
- ==> 1,2,
- ==> 3,4,
- ==> 5,6
- vector v=[1,2];
- print(matrix(v));
- ==> 1,
- ==> 2
- module(matrix(i,3,2));
- ==> _[1]=[1,3,5]
- ==> _[2]=[2,4,6]
-
-
-File: sing.info, Node: Flow control, Prev: Type conversion and casting, Up:
The SINGULAR language
-
-3.5.6 Flow control
-------------------
-
-A block is a sequence of commands surrounded by { and }.
- {
- command;
- ...
- }
-Blocks are used whenever SINGULAR is used as a structured programming
-language. The `if' and `else' structures allow conditional execution of
-blocks (see *note if::, *note else::). `for' and `while' loops are
-available for repeated execution of blocks (see *note for::, *note
-while::). In procedure definitions the main part and the example
-section are blocks as well(see *note proc::).
-
-* Menu:
-
-* break::
-* quit::
-* keepring::
-* export::
-* if::
-* else::
-* for::
-* while::
-* proc::
-* return::
-* continue::
-
-
-File: sing.info, Node: Input and output, Next: Procedures, Prev: The
SINGULAR language, Up: General concepts
-
-3.6 Input and output
-====================
-
-SINGULAR's input and output (short, I/O) is realized using links. Links
-are the communication channels of SINGULAR, i.e., something SINGULAR can
-write to and read from. In this section, a short overview of the usage
-of links and of the different link types is given.
-
-For loading of libraries, see *note LIB::. For executing program
-scripts, see *note filecmd::.
-
-Monitoring
-----------
-
-A special form of I/O is monitoring. When monitoring is enabled,
-SINGULAR makes a typescript of everything printed on your terminal to a
-file. This is useful to create a protocol of a SINGULAR session. The
-`monitor' command enables and disables this feature (*note monitor::).
-
-How to use links
-----------------
-
-Recall that links are the communication channels of SINGULAR, i.e.,
-something SINGULAR can write to and read from using the functions
-`write' and `read'. There are furthermore the functions `dump' and
-`getdump' which store resp. retrieve the content of an entire SINGULAR
-session to, resp. from, a link. The `dump' and `getdump' commands are
-not available for DBM links.
-
-For more information, see *note write::, *note read::, *note dump::,
-*note getdump::.
-
-*Example:*
- ring r; poly p = x+y;
- dump("MPfile:w test.mp"); // dump the session to the file test.mp
- kill r; // kill the basering
- listvar();
- ==> // LIB [0] string standard.lib
- getdump("MPfile:r test.mp");// read the dump from the file
- listvar();
- ==> // r [0] *ring
- ==> // p [0] poly
- ==> // LIB [0] string standard.lib
-
-Specifying a link can be as easy as specifying a filename as a string.
-Except for MPtcp links, links even do not need to be explicitly opened
-or closed before, resp. after, they are used. To explicitly open or
-close a link, the `open', resp. `close', commands may be used (see *note
-open::, *note close::).
-
-Links have various properties which can be queried using the `status'
-function (*note status::).
-
-*Example:*
- link l = "MPtcp:fork";
- l;
- ==> // type : MPtcp
- ==> // mode : fork
- ==> // name :
- ==> // open : no
- ==> // read : not ready
- ==> // write: not ready
- open(l);
- status(l, "open");
- ==> yes
- close(l);
- status(l, "open");
- ==> no
-
-ASCII links
------------
-
-Data that can be converted to a string that can be written into files
-for storage or communication with other programs. The data are written
-in plain ASCII format. Reading from an ASCII link returns a string --
-conversion into other data is up to the user. This can be done, for
-example, using the command `execute' (*note execute::).
-
-ASCII links should primarily be used for storing small amounts of data,
-especially if it might become necessary to manually inspect or
-manipulate the data.
-
-*Note ASCII links::, for more information.
-
-*Example:*
- // (over)write file test.ascii, link is specified as string
- write(":w test.ascii", "int i =", 3, ";");
- // reading simply returns the string
- read("test.ascii");
- ==> int i =
- ==> 3
- ==> ;
- ==>
- // but now test.ascii is "executed"
- execute(read("test.ascii"));
- i;
- ==> 3
-
-MPfile links
-------------
-
-Data is stored in the binary MP format. Read and write access is very
-fast compared to ASCII links. All data (including such data that cannot
-be converted to a string) can be written to an MPfile link. Reading
-from an MPfile link returns the written expressions (i.e., not a string,
-in general).
-
-MPfile links should primarily be used for storing large amounts of data
-(like dumps of the content of an entire SINGULAR session), and if the
-data to be stored cannot be easily converted from or to a string (like
-rings, or maps).
-
-MPfile links are implemented on Unix-like operating systems only.
-
-*Note MPfile links::, for more information.
-
-*Example:*
- ring r;
- // (over)write MPfile test.mp, link is specified as string
- write("MPfile:w test.mp", x+y);
- kill r;
- def p = read("MPfile:r test.mp");
- typeof(p); p;
- ==> poly
- ==> x+y
-
-MPtcp links
------------
-
-Data is communicated with other processes (e.g., SINGULAR processes)
-which may run on the same computer or on different ones. Data exchange
-is accomplished using TCP/IP links in the binary MP format. Reading
-from an MPtcp link returns the written expressions (i.e., not a string,
-in general).
-
-MPtcp links should primarily be used for communications with other
-programs or for parallel computations (see, for example, *note
-Parallelization with MPtcp links::).
-
-MPtcp links are implemented on Unix-like operating systems only.
-
-*Note MPtcp links::, for more information.
-
-*Example:*
- ring r;
- link l = "MPtcp:launch"; // declare a link explicitly
- open(l); // needs an open, launches another SINGULAR as a server
- write(l, x+y);
- kill r;
- def p = read(l);
- typeof(p); p;
- ==> poly
- ==> x+y
- close(l); // shuts down SINGULAR server
-
-DBM links
----------
-
-Data is stored in and accessed from a data base. Writing is
-accomplished by a key and a value and associates the value with the key
-in the specified data base. Reading is accomplished w.r.t. a key, the
-value associated to it is returned. Both the key and the value have to
-be specified as strings. Hence, DBM links may be used only for data
-which may be converted to or from strings.
-
-DBM links should primarily be used when data needs to be accessed not in
-a sequential way (like with files) but in an associative way (like with
-data bases).
-
-*Note DBM links::, for more information.
-
-*Example:*
- ring r;
- // associate "x+y" with "mykey"
- write("DBM:w test.dbm", "mykey", string(x+y));
- // get from data base what is stored under "mykey"
- execute(read("DBM: test.dbm", "mykey"));
- ==> x+y
-
-
-File: sing.info, Node: Procedures, Next: Libraries, Prev: Input and output,
Up: General concepts
-
-3.7 Procedures
-==============
-
-Procedures contain sequences of commands of the SINGULAR language. They
-are used to extend the set of commands with user defined commands.
-Procedures are defined by either typing them on the command line or by
-loading them from a so-called library file with the LIB command, see
-*note LIB::. Procedures are invoked like normal built-in commands,
-i.e., by typing their name followed by the list of arguments in
-parentheses. The invocation then executes the sequence of commands
-stored in the specified procedure. All defined procedures can be
-displayed by the command `listvar(proc);'.
-
-* Menu:
-
-* Procedure definition::
-* Names in procedures::
-* Parameter list::
-* Procedure commands::
-
-
-File: sing.info, Node: Procedure definition, Next: Names in procedures,
Prev: Procedures, Up: Procedures
-
-3.7.1 Procedure definition
---------------------------
-
-*Syntax:*
- [`static'] `proc' proc_name [parameter_list]
- ["help_text"]
- `{'
-\quad
- procedure_body
- `}'
- [`example'
- `{'
-\quad
- sequence_of_commands;
- `}']
-
-*Purpose:*
- defines a new function, the `proc' proc_name, with the additional
- information help_text, which is copied to the screen by `help
- proc_name;' and the `example' section which is executed by `example
- proc_name;'.
- The help_text, the parameter_list, and the example section are
- optional. The default for a parameter_list is `(list #)', see
- *note Parameter list::. The help and example sections are ignored
- if the procedure is defined interactively, i.e., if it was not
- loaded from a file by a LIB command (*note LIB::).
- Specifying `static' in front of the proc-definition (in a library
- file) makes this procedure local to the library, i.e., accessible
- only for the other procedures in the same library, but not for the
- users. So there is no reason anymore to define a procedure within
- another one (it just makes debugging harder).
-
-Example of an interactive procedure definition
-..............................................
-
- proc milnor_number (poly p)
- {
- ideal i= std(jacob(p));
- int m_nr=vdim(i);
- if (m_nr<0)
- {
- "// not an isolated singularity";
- }
- return(m_nr); // the value of m_nr is returned
- }
- ring r1=0,(x,y,z),ds;
- poly p=x^2+y^2+z^5;
- milnor_number(p);
- ==> 4
-
-Example of a procedure definition in a library
-..............................................
-
-First, the library definition:
- // Example of a user accessible procedure
- proc tab (int n)
- "USAGE: tab(n); (n integer)
- RETURNS: string of n space tabs
- EXAMPLE: example tab; shows an example"
- { return(internal_tab(n)); }
- example
- {
- "EXAMPLE:"; echo=2;
- for(int n=0; n<=4; n=n+1)
- { tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
- }
-
- // Example of a static procedure
- static proc internal_tab (int n)
- { return(" "[1,n]); }
-
-Now, we load the library and execute the procedures defined there:
- LIB "sample.lib"; // load the library sample.lib
- example tab; // show an example
- ==> // proc tab from lib sample.lib
- ==> EXAMPLE:
- ==> for(int n=0; n<=4; n=n+1)
- ==> { tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
- ==> *+*
- ==> * + *
- ==> * + *
- ==> * + *
- ==> * + *
- ==>
- "*"+tab(3)+"*"; // use the procedure tab
- ==> * *
- // the static procedure internal_tab is not accessible
- "*"+internal_tab(3)+"*";
- ==> ? 'sample.lib::internal_tab()' is a local procedure and cannot be
acce\
- ssed by an user.
- ==> ? error occurred in line 5: ` "*"+internal_tab(3)+"*";`
- // show the help section for tab
- help tab;
- ==> // ** Could not get IdxFile.
- ==> // ** Either set environment variable SINGULAR_IDX_FILE to IdxFile,
- ==> // ** or make sure that IdxFile is at
/home/hannes/singular/2-0/doc/singu\
- lar.idx
- ==> // proc tab from lib sample.lib
- ==> proc tab (int n)
- ==> USAGE: tab(n); (n integer)
- ==> RETURNS: string of n space tabs
- ==> EXAMPLE: example tab; shows an example
-
-Guidelines for the help text of a procedure
-...........................................
-
-There are no enforced rules on the format of the help section of a
-procedure.
-
-Nevertheless, we recommend that the help text of a procedure should
-contain information about the usage, purpose, return values and
-generated objects. Particular assumptions or limitations should be
-listed. It should also be mentioned if global objects are generated or
-manipulated.
-
-The help text of procedures contained in libraries of the SINGULAR
-distribution should furthermore comply with certain rules as explained
-in *note The help string of procedures::.
-
-
-File: sing.info, Node: Names in procedures, Next: Parameter list, Prev:
Procedure definition, Up: Procedures
-
-3.7.2 Names in procedures
--------------------------
-
-All variables are local to the procedure they are defined in. Locally
-defined variables cannot interfere with names in other procedures and
-are automatically deleted after leaving the procedure.
-
-Internally, local variables are stored using the nesting level. A
-variable is said to have nesting level 1, if it is local to a procedure
-that was called interactively, nesting level 2, if it is local to a
-procedure that was called by a procedure of nesting level 1 etc.
-`listvar()' also displays the nesting level, nesting level 0 is used for
-global objects (see *note listvar::). A ring may be 'moved up' by one
-nesting level with `keepring' (see *note keepring::). All variables
-living in that ring are moved together with that ring.
-
-To keep local variables after leaving the procedure, they have to be
-exported (i.e. made known) to some higher level by the `export' command
-(*note export::).
-
-*Example:*
- proc xxx
- {
- int k=4; //defines a local variable k
- int result=k+2;
- export(result); //defines the global variable "result".
- }
- xxx();
- listvar(all);
- ==> // result [0] int 6
- ==> // LIB [0] string standard.lib
-Note that the variable `result' became a global variable after the
-execution of `xxx'.
-
-
-File: sing.info, Node: Parameter list, Next: Procedure commands, Prev:
Names in procedures, Up: Procedures
-
-3.7.3 Parameter list
---------------------
-
-`*Syntax:*'
- `( )'
- `(' parameter_definition `)'
-
-`*Purpose:*'
- defines the number, type and names of the arguments to a `proc'.
- The parameter_list is optional. The default for a parameter_list
- is `(list #)' which means the arguments are referenced by `#[1],
- #[2]', etc.
-
-`*Example:*'
-
- proc x0
- {
- // can be called with
- ... // any number of arguments of any type: #[1], #[2],...
- // number of arguments: size(#)
- }
-
- proc x1 ()
- {
- ... // can only be called without arguments
- }
-
- proc x2 (ideal i, int j)
- {
- ... // can only be called with 2 arguments,
- // which can be converted to ideal resp. int
- }
-
- proc x3 (i,j)
- {
- ... // can only be called with 2 arguments
- // of any type
- // (i,j) is the same as (def i,def j)
- }
-
- proc x5 (i,list #)
- {
- ... // can only be called with at least 1 argument
- // number of arguments: size(#)+1
- }
-
-`*Note:*'
-
- The parameter_list may stretch across multiple lines.
- A parameter may have any type (including the types `proc' and
- `ring'). If a parameter is of type ring, then it can only be
- specified by name, but not with a type, e.g.
-
- proc x6 (r)
- {
- ... // this is correct even if the parameter is a ring
- }
-
- proc x7 (ring r)
- {
- ... // this is NOT CORRECT
- }
-
-
-File: sing.info, Node: Procedure commands, Prev: Parameter list, Up:
Procedures
-
-3.7.4 Procedure commands
-------------------------
-
-Some commands only make sense inside a procedure, since they make
-objects known to the nesting level from which the procedure was called
-or to all nesting levels.
-
-* Menu:
-
-See
-* export::
-* keepring::
-* return::
-
-See *note export::; *note keepring::; *note return::.
-
-
-File: sing.info, Node: Libraries, Next: Guidelines for writing a library,
Prev: Procedures, Up: General concepts
-
-3.8 Libraries
-=============
-
-A library is a collection of SINGULAR procedures in a file.
-SINGULAR reads a library with the command `LIB'. General information
-about the library is displayed by the command `help libname_lib'. After
-loading the library, its procedures can be used like the built-in
-SINGULAR functions.
-
-To have the full functionality of a built-in function libraries have to
-comply with the few syntax rules described below.
-
-Furthermore, libraries which are to be included in the SINGULAR
-distribution, have to comply with certain rules as explained in *note
-Guidelines for writing a library::.
-
-* Menu:
-
-* Loading of a library::
-* Format of a library::
-
-
-File: sing.info, Node: Loading of a library, Next: Format of a library, Up:
Libraries
-
-3.8.1 Loading of a library
---------------------------
-
-Libraries can be loaded with the `LIB' command:
-
-`*Syntax:*'
- `LIB' string_expression `;'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- reads a library of procedures from a file. If the given filename
- does not start with `.' or `/' and can not be located in the
- current directory, each directory contained in the library
- `SearchPath' is searched for file of this name.
-
-`*Note on SearchPath:*'
- The the library `SearchPath' is constructed at SINGULAR start-up
- time as follows:
-
- 1. the directories contained in the environment variable
- `SINGULARPATH' are appended
-
- 2. the directories `$BinDir/LIB', `$RootDir/LIB',
- `$RootDir/../LIB', `$DefaultDir/LIB', `$DefaultDir/../LIB' are
- appended, where
-
- * `$BinDir' is the value of the environment variable
- `SINGULAR_BIN_DIR', if set, or, if not set, the directory
- in which the SINGULAR program resides
-
- * `$RootDir' is the value of the environment variable
- `SINGULAR_ROOT_DIR', if set, or, if not set,
- `$BinDir/../'.
-
- * `$DefaultDir' is the value of the environment variable
- `SINGULAR_DEFAULT_DIR', if set, or `/usr/local/Singular/'
- on a Unix platform, `\Singular\' on a Windows 95/98/NT
- platform, and `::Singular:' on a Macintosh.
-
- 3. all directories which do not exist are removed from the
- `SearchPath'.
-
- For setting environment variables see *note system::, or consult
- the manual of your shell.
-
- The library `SearchPath' can be examined by starting up SINGULAR
- with the option `-v', or by issuing the command
- `system("--version");'.
-
-`*Note on standard.lib:*'
- Unless SINGULAR is started with the `--no-stdlib' option, the
- library `standard.lib' is automatically loaded at start-up time.
-
-Only the names of the procedures in the library are loaded, the body of
-the procedures is read during the first call of this procedure. This
-minimizes memory consumption by unused procedures. When SINGULAR is
-started with the `-q' or `--quiet' option, no message about the loading
-of a library is displayed. More precisely, option `-q' (and likewise
-`--quiet') unsets option `loadLib' to inhibit monitoring of library
-loading (*note option::).
-
-All loaded libraries are displayed by the `LIB;' command:
- option(loadLib); // show loading of libraries;
- // standard.lib is loaded
- LIB;
- ==> standard.lib
- // the names of the procedures of inout.lib
- LIB "inout.lib"; // are now known to Singular
- ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
- LIB;
- ==> standard.lib,inout.lib
-
-* Menu:
-
-See
-* Command line options::
-* LIB::
-* Procedures and libraries::
-* SINGULAR libraries::
-* proc::
-* standard_lib::
-* string::
-* system::
-
-See *note Command line options::; *note LIB::; *note Procedures and
-libraries::; *note SINGULAR libraries::; *note proc::; *note
-standard_lib::; *note string::; *note system::.
-
-
-File: sing.info, Node: Format of a library, Prev: Loading of a library, Up:
Libraries
-
-3.8.2 Format of a library
--------------------------
-
-A library file can contain comments, a category-, info- and
-version-string definition, `LIB' commands, `proc' commands and `proc'
-commands with `example' and `help' sections, i.e., the following
-keywords are allowed: `category', `info', `version', `LIB', `/* ... */',
-`//', `[static] proc'. Anything else is not recognized by the parser of
-SINGULAR and leads to an error message while loading the library. If an
-error occurs, loading is aborted and an error message is displayed,
-specifying the type of error and the line where it was detected.
-
-The category-, info- and version-string are defined as follows:
-`*Syntax:*'
- `info' = string_constant `;'
-
-`*Purpose:*'
- defines the general help for the library. This text is displayed on
- `help libname_lib;'.
-
-`*Example:*'
-
- info="
- This could be the general help of a library.
- Quotes must be escaped with a \ such as \"
- ";
-
-`*Note:*'
- In the info-string the characters \ and " must be preceded by a \
- (escaped). It is recommended that the info string is placed on the
- top of a library file and contains general information about the
- library as well as a listing of all procedures available to the
- users (with a one line description of each procedure).
-
- Although there is no enforced format of the info string of a
- library, we recommend that you follow certain rules as explained in
- *note The help string of a library::.
-
-`*Syntax:*'
- `version' = string_constant `;'
-
-`*Purpose:*'
- defines the version number for the library. It is displayed when
- the library is loaded.
-
-`*Example:*'
-
- version="$ Id: sample.lib,v 1.2 1998/05/07 singular Exp $";
- version="some version string";
-
-`*Note:*'
- It is common practice to simply define the version string to be `"$
- I'`d:$"' and let a version control system expand it.
-
-`*Syntax:*'
- `category' = string_constant `;'
-
-`*Purpose:*'
- defines the category for the library.
-
-`*Example:*'
-
- category="Utilities";
-
-`*Note:*'
- reserved for sorting the libraries into categories.
-
-
-File: sing.info, Node: Guidelines for writing a library, Next: Debugging
tools, Prev: Libraries, Up: General concepts
-
-3.9 Guidelines for writing a library
-====================================
-
-Although there are very few enforced rules on how libraries are written
-(see *note Libraries::), it is recommended that the libraries comply
-with the guidelines explained in this section, so that debugging and
-understanding are made easier.
-
-*Note:* For libraries which are to be included in the SINGULAR
-distribution, the following guidelines are mandatory.
-
-* Menu:
-
-* Procedures in a library::
-* Documentation of a library::
-* Typesetting of help strings::
-* The help string of a library::
-* The help string of procedures::
-* template_lib::
-
-
-File: sing.info, Node: Procedures in a library, Next: Documentation of a
library, Up: Guidelines for writing a library
-
-3.9.1 Procedures in a library
------------------------------
-
-In this section we list miscellaneous recommendations on how procedures
-contained in a library should be implemented.
- 1. The info- and version-string should appear at the beginning of the
- library, before procedure definitions.
-
- 2. The info-string should have the format as explained in *note The
- help string of a library::.
-
- 3. Each procedure which should not be accessible by users should be
- declared `static'.
-
- 4. Each procedure which is not declared `static' should have a help
- and example section as explained in *note Procedure definition::.
- Such procedures should furthermore carefully check any assumptions
- made about their input (like the type of list elements), and, if
- necessary, omit an error using the function *note ERROR::.
-
- 5. No procedures should be defined within the body of another
- procedure.
-
- 6. If the value of the reserved variable `printlevel' (*note
- printlevel::) is greater than 0 then interactive user-input, i.e.,
- the usage of functions like `pause("..")' or `read("");' (*note
- read::), may be requested.
-
- 7. If the value of the reserved variable `printlevel' (*note
- printlevel::) is 0 then interactive user-input, i.e., the usage of
- functions like `pause("..")' or `read("");' (*note read::), may
- *not* be requested. Instead, an error (using the function *note
- ERROR::) should be reported together with the recommendation on
- increasing the value of the reserved variable `printlevel'.
-
- 8. It is often useful for a procedure to print out comments, either to
- explain results or to display intermediate computations. However,
- if this procedure is called by another procedure, such comments are
- confusing and disturbing in most cases.
-
- SINGULAR offers an elegant solution, which requires the usage of
- the SINGULAR function *note dbprint:: and the reserved variables
- *note printlevel::, and *note voice:: (`voice' counts the nesting
- of procedures; It has the value 1 on the top level, 2 inside the
- first procedure etc.; `printlevel' has the value 0 by default, but
- can be set to any integer value by the user).
-
- For example, if the following procedure `Test' is called directly
- from the top level then `comment1' is displayed (i.e., printed out)
- but not `comment2'; and nothing is displayed if `Test' is called
- from within any other procedure. However, if `printlevel' is set
- to a value k with k>0, then `comment1' (resp. `comment2') is
- displayed provided that `Test' is called from other procedures,
- with a nesting level up to k (resp. k-1).
-
- Note furthermore, that the example part of a procedure behaves in
- this respect like a procedure (i.e., the value of `voice' is 1).
- Therefore, the command `printlevel=1;' is necessary for `comment1'
- to be displayed on ` example Test;'. However, since printlevel is a
- global variable, it should be reset to the old value at the end of
- the example part.
-
- proc Test
- "USAGE: ...
- ...
- EXAMPLE: example Test; shows an example
- "
- { ...
- int p = printlevel - voice + 3;
- ...
- dbprint(p,"comment1");
- dbprint(p-1,"comment2");
- // dbprint prints only if p > 0
- ...
- }
- example
- { "EXAMPLE:"; echo = 2;
- int p = printlevel; //store old value of printlevel
- printlevel = 1; //assign new value to printlevel
- ...
- Test();
- printlevel = p; //reset printlevel to old value
- }
-
-
-File: sing.info, Node: Documentation of a library, Next: Typesetting of help
strings, Prev: Procedures in a library, Up: Guidelines for writing a library
-
-3.9.2 Documentation of a library
---------------------------------
-
-The typesetting language in which the SINGULAR documentation is written
-is `texinfo'. Based on various tools, `info, dvi, ps,' and `html'
-versions of the `texinfo' documentation are generated.
-
-Starting with SINGULAR version 1-3, the `texinfo' documentation of all
-libraries of the SINGULAR distribution is generated automatically from
-their source code.
-
-More precisely, for each library,
- - the info string of the library is parsed and typeset as explained
- in *note Typesetting of help strings::.
-
- - the help string of each procedure listed in the `PROCEDURE:'
- section of the library info string is parsed and typeset as
- explained in *note Typesetting of help strings::.
-
- - the example of each procedure listed in the `PROCEDURE:' section of
- the library info string is computed and its output is included into
- the documentation.
-
-For a uniform look-and-feel of the library documentation, library
-developers should
- - follow the recommendation of *note The help string of a library::
- and *note The help string of procedures::.
-
- - consult the source code of libraries like `template.lib' (*note
- template_lib::) for examples on how library documentations are
- written.
-
- - make sure that each procedure listed in the `PROCEDURE:' section of
- the library info string has a help string and an example section.
-
- - not use interactive functions like `pause("..")' or `read("");'
- (*note read::) and should limit the length of input lines to 60
- characters in the example section of procedures.
-
- - carefully check the generated documentation of their libraries in
- its various formats using the `lib2doc' (*note lib2doc::) utility.
-
-* Menu:
-
-* lib2doc::
-
-
-File: sing.info, Node: lib2doc, Up: Documentation of a library
-
-3.9.2.1 lib2doc
-...............
-
-`lib2doc' is a utility to generate the stand-alone documentation for a
-SINGULAR library in various formats.
-
-The `lib2doc' utility should be used by developers of SINGULAR libraries
-to check the generation of the documentation of their libraries.
-
-`lib2doc' can be downloaded from
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/misc/lib2doc.tar.gz'
-
-*Important:*
-To use `lib2doc', you need to have `perl' (version 5 or higher),
-`texinfo' (version 3.12 or higher) and `Singular' and `libparse'
-(version 1-3-4 or higher) installed on your system.
-
-To generate the documentation for a library, follow these steps:
- 1. Unpack lib2doc.tar.gz
-
- gzip -dc lib2doc.tar.gz | tar -pxf -
-
- and
-
- cd lib2doc
-
- 2. Edit the beginning of the file `Makefile', filling in the values
- for `SINGULAR' and `LIBPARSE'. Check also the values of `PERL' and
- `LATEX2HTML'.
-
- 3. Copy your library to the current directory:
-
- cp <path-where-your-lib-is>/mylib.lib .
-
- 4. Now you can run the following commands:
-
- `make mylib.hlp'
- Generates the file `mylib.hlp' - the info file for the
- documentation of `mylib.lib'. This file can be viewed with
-
- info -f mylib.hlp
-
- `make mylib.dvi'
- Generates the file `mylib.dvi' - the dvi file for the
- documentation of `mylib.lib'. This file can be viewed with
-
- xdvi mylib.dvi
-
- `make mylib.ps'
- Generates the file `mylib.ps' - the PostScript file for the
- documentation of `mylib.lib'. This file can be viewed with
- (for example)
-
- ghostview mylib.dvi
-
- `make mylib.html'
- Generates the file `mylib.html' - the HTML file for the
- documentation of `mylib.lib'. This file can be viewed with
- (for example)
-
- netscape mylib.html
-
- `make clean'
- Deletes all generated files.
-
- Note that you can safely ignore messages complaining about
- undefined references.
-
-
-File: sing.info, Node: Typesetting of help strings, Next: The help string of
a library, Prev: Documentation of a library, Up: Guidelines for writing a
library
-
-3.9.3 Typesetting of help strings
----------------------------------
-
-The help strings of procedures and info strings of libraries which are
-included in the distribution of SINGULAR are parsed and automatically
-converted into the texinfo format (the typesetting language in which the
-documentation of SINGULAR is written).
-
-For optimal typesetting results, the guidelines for writing libraries
-and procedures should be followed, and the following points should be
-kept in mind:
-
- * If a help string starts with an `@' sign, then no parsing is done,
- and the help string is assumed to be already in the texinfo format.
-
- * help strings are typeset within a address@hidden @asis' environment (which
- is similar to a latex `description' environment).
-
- * If a line starts with only uppercase words and contains a colon,
- then the text up to the colon is taken to be the description-string
- of an item and the text following the colon is taken to be the
- content of the item.
-
- * If the description-string of an item matches
-
- `EXAMPLE'
- then this item and its content is ignored.
-
- `SEE ALSO'
- then the content of the item is assumed to be comma-separated
- words which are valid references to other texinfo nodes of the
- manual. (e.g., all procedure and command names are also
- texinfo nodes).
-
- `KEYWORDS' (or, `KEYPHRASES')
- then the content of the item is assumed to be a
- semicolon-separated list of phrases which are taken as keys
- for the index of the manual (N.B. the name of a
- procedure/library is automatically added to the index keys).
-
- `PROCEDURES'
- then the content of the item is assumed to be a summary
- description of the procedures contained in the library.
- Separate texinfo nodes (subsections in printed documents) are
- *only* created out of the help strings of such procedures
- which appear in the summary description of a library.
-
- `LIBRARY'
- then the content of the item is assumed to be a one-line
- description of a library. If this one-line description consist
- of only uppercase characters, then it is typeset in all
- lowercase characters in the manual (otherwise it is left as
- is).
-
- * For the content of an item, the following texinfo markup elements
- are recognized (and, their content not further manipulated):
-
- address@hidden'
- to enforce a line-break.
-
- Example:
- `old line @* new line'
- ==>
- old line
- new line
-
- address@hidden'
- References to other parts of the SINGULAR manual can be set
- using one of the following address@hidden' constructs. Notice
- that `node' must be the name of a section of the SINGULAR
- manual. In particular, it may be a name of a function, library
- or library procedure.
-
- address@hidden'
- for a reference to the node `node' at the beginning of a
- sentence.
-
- address@hidden'
- for a reference to the node `node' at the end of a
- sentence.
-
- address@hidden'
- for a reference to the node `node' within parenthesis.
-
- Example:
- address@hidden Storms}, for more info.'
- ==>*Note Hurricanes::, for more info.
- ==>See Section 3.1 [Hurricanes], page 24, for more info.
-
- `For more information, see @ref{Hurricanes}.'
- ==>For more information, see *Note Hurricanes::.
- ==>For more information, see Section 3.1 [Hurricanes],
- page 24.
-
- `... storms cause flooding (@pxref{Hurricanes}) ...'
- ==>... storms cause flooding (*Note Hurricanes::) ...
- ==>... storms cause flooding (see Section 3.1
- [Hurricanes], page 24)
-
- address@hidden'
- for typesetting of small (i.e., which do not go over multiple
- lines) mathematical expressions in LaTeX math-mode syntax.
-
- Example:
- address@hidden'
- ==>
- \alpha $\alpha$
-
- Note:
- Mathematical expressions inside address@hidden' may not
- contain curly parenthesis and the "at" sign, i.e., may
- not contain `{,},@'.
-
- address@hidden'
- for typesetting of small (i.e., which do not go over multiple
- lines) strings in typewriter font.
-
- Example:
- address@hidden font}'
- ==>
- `typewriter font'
-
- Note:
- The string inside address@hidden' may not contain curly
- parenthesis and the "at" sign, i.e., may not contain
- `{,},@'.
-
- address@hidden'
- `...'
-
- address@hidden example'
- for pre-formatted text which is indented and typeset in
- typewriter font.
-
- Example:
-
- before example
- @example
- in example
- notice extra identation and
- escape of special characters like @{,@},@@
- @end example
- after example
-
- ==>
- before example
-
- in example
- notice extra identation and
- escape of special characters like {,},@
-
- after example
-
- Note:
- The characters {,},@ have to be escaped by an @ sign
- inside an @example environment.
-
- address@hidden'
- `...'
-
- address@hidden format'
- for pre-formatted text which is not indented and typeset in
- normal font.
-
- Example:
-
- before format
- @format
- in format
- no extra identation but still
- escape of special characters like @{,@},@@
- @end format
- after format
-
- ==>
- before format
-
- in format
- no extra identation but still
- escape of special characters like {,},@
-
- after format
-
- Note:
- The characters {,},@ have to be escaped by an @ sign
- inside an @example environment.
-
- address@hidden'
- `...'
-
- address@hidden texinfo'
- for text which is written in pure texinfo.
-
- Example:
-
- @texinfo
- Among others, within a texinfo environment
- one can use the tex environment to typeset
- more complex mathematical like
- @tex
- $i_{1,1} $
- @tex
- @end texinfo
-
-
- ==>
- Among others, within a texinfo environment one can use
- the tex environment to typeset more complex mathematical
- like $ i_{1,1} $
-
- Furthermore, a line-break is inserted in front of each line whose
- previous line is shorter than 60 characters and does not contain
- any of the above described recognized texinfo markup elements.
-
-See also *note template_lib:: for an examples of the typesetting rules
-explained here.
-
-
-File: sing.info, Node: The help string of a library, Next: The help string
of procedures, Prev: Typesetting of help strings, Up: Guidelines for writing
a library
-
-3.9.4 The help string of a library
-----------------------------------
-
-The help (or, info) string of a library should have the following
-format:
-
- info="
- LIBRARY: <library_name> <one line description of the content>
- AUTHOR: <name, and email address of author>
- [SEE ALSO: <comma-separated words of cross references>]
- [KEYWORDS: <semicolon-separated phrases of index keys>]
- PROCEDURES:
- <procedure1>; <one line description of the purpose>
- .
- .
- <procedureN>; <one line description of the purpose>
- ";
-Only such procedures should be listed in the `PROCEDURE' section which
-are not `static' and which have a help and example section.
-
-The purpose of the one line procedure descriptions is not to give a
-short help for the procedure, but to help the user decide what procedure
-might be the right one for the job. Details can then be found in the
-help section of each procedure. Therefore parameters may be omitted or
-abbreviated if necessary. If this description consists of only
-upper-case characters, then it will be typeset in all lowercase
-characters in the manual.
-
-For more information, see *note Typesetting of help strings::. For an
-example, see *note template_lib::.
-
-
-File: sing.info, Node: The help string of procedures, Next: template_lib,
Prev: The help string of a library, Up: Guidelines for writing a library
-
-3.9.5 The help string of procedures
------------------------------------
-
-The help string of a procedure should have the following format:
-
- USAGE: <proc_name>(<parameters>); <explanation of parameters>
- [CREATE: <description of created objects which are not returned>]
- RETURN: <description of the purpose and return value>
- [NOTE: <particular assumptions or limitations, details>]
- [SEE ALSO: <comma-separated names of related procedures/cross references>]
- [KEYWORDS: <semicolon-separated phrases of index keys>]
- EXAMPLE: example <proc_name>; shows an example
-
-Further arbitrary items (like `THEORY:', or `BACKGROUND:') are
-recognized, as well, but should be used diligently.
-
-Remember that help strings are formatted as explained in *note
-Typesetting of help strings::. In particular, descriptions may contain
-the texinfo markup elements address@hidden, @math{..}, @code{..}, @example,
address@hidden, @texinfo' to better control their typesetting. See *note
-msum::, *note mdouble::, *note mtripple:: for examples.
-
-
-File: sing.info, Node: template_lib, Prev: The help string of procedures,
Up: Guidelines for writing a library
-
-3.9.6 template_lib
-------------------
-
-First, we show the source-code of a template library:
- ////////////////////////////////////////////////////////////////////
- // version string automatically expanded by CVS
-
- version="Id: general.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $";
- category="Miscellaneous";
- // summary description of the library
- info="
- LIBRARY: template.lib A Template for a Singular Library
- AUTHOR: Olaf Bachmann, email: address@hidden
-
- SEE ALSO: standard_lib, Guidelines for writing a library,
- Typesetting of help strings
-
- KEYWORDS: library, template.lib; template.lib; library, info string
-
- PROCEDURES:
- mdouble(int) return double of int argument
- mtripple(int) return three times int argument
- msum([int,..,int]) sum of int arguments
- ";
- ////////////////////////////////////////////////////////////////////
- proc mdouble(int i)
- "USAGE: mdouble(i); i int
- RETURN: int: i+i
- NOTE: Help string is in pure ASCII
- this line starts on a new line since previous line is short
- mdouble(i): no new line
- SEE ALSO: msum, mtripple, Typesetting of help strings
- KEYWORDS: procedure, ASCII help
- EXAMPLE: example mdouble; shows an example"
- {
- return (i + i);
- }
- example
- { "EXAMPLE:"; echo = 2;
- mdouble(0);
- mdouble(-1);
- }
- ////////////////////////////////////////////////////////////////////
- proc mtripple(int i)
- "@c we do texinfo here
- @table @asis
- @item @strong{Usage:}
- @code{mtripple(i)}; @code{i} int
-
- @item @strong{Return:}
- int: @math{i+i+i}
- @item @strong{Note:}
- Help is in pure Texinfo
- @*This help string is written in texinfo, which enables you to use,
- among others, the @@math command for mathematical typesetting (like
- @math{\alpha, \beta}).
- @*It also gives more control over the layout, but is, admittingly,
- more cumbersome to write.
- @end table
- @c use @c ref contstuct for references
- @cindex procedure, texinfo help
- @c ref
- @strong{See also:}
- @ref{mdouble}, @ref{msum}, @ref{Typesetting of help strings}
- @c ref
- "
- {
- return (i + i + i);
- }
- example
- { "EXAMPLE:"; echo = 2;
- mtripple(0);
- mtripple(-1);
- }
- ////////////////////////////////////////////////////////////////////
- proc msum(list #)
- "USAGE: msum([i_1,..,i_n]); @code{i_1,..,i_n} def
- RETURN: Sum of int arguments
- NOTE: This help string is written in a mixture of ASCII and texinfo
- @* Use a @ref constructs for references (like @pxref{mtripple})
- @* Use @code for typewriter font (like @code{i_1})
- @* Use @math for simple math mode typesetting (like @math{i_1}).
- @* Note: No parenthesis like } are allowed inside @math and @code
- @* Use @example for indented preformatted text typeset in
typewriter
- font like
- @example
- this --> that
- @end example
- Use @format for preformatted text typeset in normal font
- @format
- this --> that
- @end format
- Use @texinfo for text in pure texinfo
- @texinfo
- @expansion{}
- @tex
- $i_{1,1}$
- @end tex
-
- @end texinfo
- Notice that
- automatic linebreaking is still in affect (like on this
line).
- SEE ALSO: mdouble, mtripple, Typesetting of help strings
- KEYWORDS: procedure, ASCII/Texinfo help
- EXAMPLE: example msum; shows an example"
- {
- if (size(#) == 0) { return (0);}
- if (size(#) == 1) { return (#[1]);}
- int i;
- def s = #[1];
- for (i=2; i<=size(#); i++)
- {
- s = s + #[i];
- }
- return (s);
- }
- example
- { "EXAMPLE:"; echo = 2;
- msum();
- msum(4);
- msum(1,2,3,4);
- }
-
-After typesetting, the library appears in the document as follows (with
-one subsection for each procedure):
-
-*Library:*
- template.lib
-
-*Purpose:*
- A Template for a Singular Library
-
-*Author:*
- Olaf Bachmann, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* mdouble:: return double of int argument
-* mtripple:: return three times int argument
-* msum:: sum of int arguments
-
-* Menu:
-
-See also:
-* Guidelines for writing a library::
-* Typesetting of help strings::
-* standard_lib::
-
-*See also:* *note Guidelines for writing a library::; *note Typesetting
-of help strings::; *note standard_lib::.
-
-
-File: sing.info, Node: mdouble, Next: mtripple, Up: template_lib
-
-3.9.6.1 mdouble
-...............
-
-Procedure from library `template.lib' (*note template_lib::).
-
-*Usage:*
- mdouble(i); i int
-
-*Return:*
- int: i+i
-
-*Note:*
- Help string is in pure ASCII
- this line starts on a new line since previous line is short
- mdouble(i): no new line
-
-*Example:*
- LIB "template.lib";
- mdouble(0);
- ==> 0
- mdouble(-1);
- ==> -2
-
-* Menu:
-
-See also:
-* Typesetting of help strings::
-* msum::
-* mtripple::
-
-*See also:* *note Typesetting of help strings::; *note msum::; *note
-mtripple::.
-
-
-File: sing.info, Node: mtripple, Next: msum, Prev: mdouble, Up:
template_lib
-
-3.9.6.2 mtripple
-................
-
-Procedure from library `template.lib' (*note template_lib::).
-
-*Usage:*
- `mtripple(i)'; `i' int
-
-*Return:*
- int: i+i+i $i+i+i$
-
-*Note:*
- Help is in pure Texinfo
- This help string is written in texinfo, which enables you to use,
- among others, the @math command for mathematical typesetting (like
-
- \alpha, \beta $\alpha, \beta$
- ).
- It also gives more control over the layout, but is, admittingly,
- more cumbersome to write.
-
-* Menu:
-
-*See also:*
-* Typesetting of help strings::
-* mdouble::
-* msum::
-
-*See also:* *note Typesetting of help strings::; *note mdouble::; *note
-msum::.
-
-*Example:*
- LIB "template.lib";
- mtripple(0);
- ==> 0
- mtripple(-1);
- ==> -3
-
-
-File: sing.info, Node: msum, Prev: mtripple, Up: template_lib
-
-3.9.6.3 msum
-............
-
-Procedure from library `template.lib' (*note template_lib::).
-
-*Usage:*
- msum([i_1,..,i_n]); `i_1,..,i_n' def
-
-*Return:*
- Sum of int arguments
-
-*Note:*
- This help string is written in a mixture of ASCII and texinfo
- Use a @ref constructs for references (like *note mtripple::)
- Use @code for typewriter font (like `i_1')
- Use @math for simple math mode typesetting (like i_1 $i_1$
- ).
- Note: No parenthesis like } are allowed inside @math and @code
- Use @example for indented preformatted text typeset in typewriter
- font like
-
- this --> that
-
- Use @format for preformatted text typeset in normal font
-
- this -> that
-
- Use @texinfo for text in pure texinfo
-
- ==> $i_{1,1}$
-
- Notice that
- automatic linebreaking is still in affect (like on this line).
-
-*Example:*
- LIB "template.lib";
- msum();
- ==> 0
- msum(4);
- ==> 4
- msum(1,2,3,4);
- ==> 10
-
-* Menu:
-
-See also:
-* Typesetting of help strings::
-* mdouble::
-* mtripple::
-
-*See also:* *note Typesetting of help strings::; *note mdouble::; *note
-mtripple::.
-
-
-File: sing.info, Node: Debugging tools, Prev: Guidelines for writing a
library, Up: General concepts
-
-3.10 Debugging tools
-====================
-
-If SINGULAR does not come back to the prompt while calling a user
-defined procedure, probably a bracket or a `"' is missing. The easiest
-way to leave the procedure is to type some brackets or `"' and then
-<RETURN> .
-
-* Menu:
-
-* Tracing of procedures::
-* Source code debugger::
-* Break points::
-* Printing of data::
-* libparse::
-
-
-File: sing.info, Node: Tracing of procedures, Next: Source code debugger,
Prev: Debugging tools, Up: Debugging tools
-
-3.10.1 Tracing of procedures
-----------------------------
-
-Setting the `TRACE' variable to 1 (resp. 3) results in a listing of the
-called procedures (resp. together with line numbers). If `TRACE' is set
-to 4, `Singular' displays each line before its interpretation and waits
-for the <RETURN> key being pressed.
-
-* Menu:
-
-* TRACE var::
-
-See *note TRACE var::.
-
-*Example:*
- proc t1
- {
- int i=2;
- while (i>0)
- { i=i-1; }
- }
- TRACE=3;
- t1();
- ==>
- ==> entering t1 (level 0)
- ==> {1}{2}{3}{4}{5}{4}{5}{6}{7}{4}{5}{6}{7}{4}{6}{7}{8}
- ==> leaving t1 (level 0)
-
-
-File: sing.info, Node: Source code debugger, Next: Break points, Prev:
Tracing of procedures, Up: Debugging tools
-
-3.10.2 Source code debugger
----------------------------
-
-The source code debugger (sdb) is an experimental feature, it's
-interface may change in future versions of Singular.
-To enable the use of the source code debugger SINGULAR has to be started
-with the option `-d' or `--sdb' (see *note Command line options::).
-
-sdb commands
-............
-
-Each sdb command consist of one character which may be followed by a
-parameter.
-`b'
- print backtrace of calling stack
-
-`c'
- continue
-
-`e'
- edit the current procedure and reload it (current call will be
- aborted)
- only available on UNIX systems
-
-`h',`?'
- display help screen
-
-`n'
- execute current line, sdb break at next line
-
-`p' <identifier>
- display type and value of the variable given by <identifier>
-
-`Q'
- quit this Singular session
-
-`q' <flags>
- quit debugger, set debugger flags(0,1,2)
- 0: continue, disable the debugger
- 1: continue
- 2: throw an error, return to toplevel
-
-Syntactical errors in procedures
-................................
-
-If SINGULAR was started with the command line option `-d' or `--sdb' a
-syntactical error in a procedure will start the source code debugger
-instead of returning to the top level with an error message. The
-commands `q 1' and `q 2' are equivalent in this case.
-
-SDB breakpoints in procedures
-.............................
-
-Up to seven SDB breakpoints can be set. To set a breakpoint at a
-procedure use `breakpoint'. (See *note breakpoint::).
-These breakpoints can be cleared with the command `d breakpoint_no' from
-within the debugger or with `breakpoint(' proc_name `,-1);'.
-
-
-File: sing.info, Node: Break points, Next: Printing of data, Prev: Source
code debugger, Up: Debugging tools
-
-3.10.3 Break points
--------------------
-
-A break point can be put into a proc by inserting the command `~'. If
-`Singular' reaches a break point it asks for lines of commands
-(line-length must be less than 80 characters) from the user. It returns
-to normal execution if given an empty line. See *note ~::.
-
-*Example:*
- proc t
- {
- int i=2;
- ~;
- return(i+1);
- }
- t();
- ==> -- break point in t --
- ==> -- 0: called from STDIN --
- i; // here local variables of the procedure can be accessed
- ==> 2
- ==> -- break point in t --
-
- ==> 3
-
-
-
-File: sing.info, Node: Printing of data, Next: libparse, Prev: Break
points, Up: Debugging tools
-
-3.10.4 Printing of data
------------------------
-
-The procedure `dbprint' is useful for optional output of data: it takes
-2 arguments and prints the second argument, if the first argument is
-positive; it does nothing otherwise.
-
-* Menu:
-
-* dbprint::
-* voice::
-
-
-File: sing.info, Node: libparse, Prev: Printing of data, Up: Debugging tools
-
-3.10.5 libparse
----------------
-
-`libparse' is a stand-alone program contained in the SINGULAR
-distribution (at the place where the SINGULAR executable program
-resides), which cannot be called inside of SINGULAR. It is a debugging
-tool for libraries which performs exactly the same checks as the `LIB'
-command in SINGULAR, but generates more output during parsing.
-`libparse' is useful if an error occurs while loading the library, but
-the whole block around the line specified seems to be correct. In these
-situations the real error might be hundreds of lines earlier in the
-library.
-
-*Usage:*
-`libparse [options] singular-library'
-*Options:*
-`-d' Debuglevel
- increases the amount of output during parsing, where Debuglevel is
- an integer between 0 and 4. Default is 0.
-
-`-s'
- turns on reporting about violations of unenforced syntax rules
-
-The following syntax checks are performed in any case:
- * counting of pairs of brackets {,} , [,] and (,) (number of {
- has to match number of }, same for [,] and (,) ).
-
- * counting of " ( number of " must be even ).
-
- * general library syntax ( only LIB, static, proc (with
- parameters, help, body and example) and comments, i.e // and `/*
- ... */', are allowed).
-Its output lists all procedures that have been parsed successfully:
-
- $ libparse sample.lib
- Checking library 'sample.lib'
- Library function line,start-eod line,body-eob
line,example-eoe
- Version:0.0.0;
- g Sample tab line 9, 149-165 13, 271-298 14,
300-402
- l Sample internal_tab line 24, 450-475 25, 476-496 0,
0-496
-
-where the following abbreviations are used:
- * g: global procedure (default)
-
- * l: static procedure, i.e., local to the library.
-
-each of the following is the position of the byte in the library.
- * start: begin of 'proc'
-
- * eod: end of parameters
-
- * body: start of procedure body '{'
-
- * eob: end of procedure body '}'
-
- * example: position of 'example'
-
- * eoe: end of example '}'
-
-Hence in the above example, the first procedure of the library
-sample.lib is user-accessible and its name is tab. The procedure starts
-in line 9, at character 149. The head of the procedure ends at character
-165, the body starts in line 13 at character 271 and ends at character
-298. The example section extends from line 14 character 300 to character
-402.
-
-The following example shows the result of a missing close-bracket } in
-line 26 of the library `sample.lib'.
-
- LIB "sample.lib";
- ==> ? Library sample.lib: ERROR occurred: in line 26, 497.
- ==> ? missing close bracket '}' at end of library in line 26.
- ==> ? Cannot load library,... aborting.
- ==> ? error occurred in STDIN line 1: `LIB "sample.lib";`
-
-
-File: sing.info, Node: Data types, Next: Functions and system variables,
Prev: General concepts, Up: Top
-
-4 Data types
-************
-
-This chapter explains all data types of SINGULAR in alphabetical order.
-For every type, there is a description of the declaration syntax as well
-as information about how to build expressions of certain types.
-
-The term expression list in SINGULAR refers to any comma separated list
-of expressions.
-
-For the general syntax of a declaration see *note General command
-syntax::.
-
-* Menu:
-
-* def::
-* ideal::
-* int::
-* intmat::
-* intvec::
-* link::
-* list::
-* map::
-* matrix::
-* module::
-* number::
-* poly::
-* proc::
-* qring::
-* resolution::
-* ring::
-* string::
-* vector::
-
-
-File: sing.info, Node: def, Next: ideal, Prev: Data types, Up: Data types
-
-4.1 def
-=======
-
-Objects may be defined without a specific type: they get their type from
-the first assignment to them. E.g., `ideal i=x,y,z; def j=i^2;' defines
-the ideal `i^2' with the name `j'.
-
-*Note:* Unlike other assignments a ring as an untyped object is not a
-copy but another reference to the same (possibly unnamed) ring. This
-means that entries in one of these rings appear also in the other ones.
-The following defines a ring `s' which is just another reference (or
-name) for the basering `r'.
-
- ring r=32003,(x,y,z),dp;
- poly f = x;
- def s=basering;
- setring s;
- nameof(basering);
- ==> s
- listvar();
- ==> // s [0] *ring
- ==> // f [0] poly
- ==> // r [0] ring
- ==> // LIB [0] string standard.lib
- poly g = y;
- kill f;
- listvar(r);
- ==> // r [0] ring
- ==> // g [0] poly
- ring t=32003,(u,w),dp;
- def rt=r+t;
- rt;
- ==> // characteristic : 32003
- ==> // number of vars : 5
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering dp
- ==> // : names u w
- ==> // block 3 : ordering C
-
-This reference to a ring with def is useful if the basering is not local
-to the procedure (so it cannot be accessed by its name) but one needs a
-name for it (e.g., for a use with `setring' or `map'). `setring r;'
-does not work in this case, because `r' may not be local to the
-procedure.
-
-* Menu:
-
-* def declarations::
-
-
-File: sing.info, Node: def declarations, Prev: def, Up: def
-
-4.1.1 def declarations
-----------------------
-
-*Syntax:*
- `def' name `=' expression `;'
-
-*Purpose:*
- defines an object of the same type as the right-hand side.
-
-*Default:*
- none
-
-*Note:*
- This is useful if the right-hand side may be of variable type as a
- consequence of a computation (e.g., ideal or module or matrix). It
- may also be used in procedures to give the basering a name which is
- local to the procedure.
-
-*Example:*
-
- def i=2;
- typeof(i);
- ==> int
-
-* Menu:
-
-See
-* typeof::
-
-See *note typeof::.
-
-
-File: sing.info, Node: ideal, Next: int, Prev: def, Up: Data types
-
-4.2 ideal
-=========
-
-Ideals are represented as lists of polynomials which generate the ideal.
-Like polynomials they can only be defined or accessed with respect to a
-basering.
-
-*Note:* `size' counts only the non-zero generators of an ideal whereas
-`ncols' counts all generators.
-
-* Menu:
-
-* ideal declarations::
-* ideal expressions::
-* ideal operations::
-* ideal related functions::
-
-
-File: sing.info, Node: ideal declarations, Next: ideal expressions, Prev:
ideal, Up: ideal
-
-4.2.1 ideal declarations
-------------------------
-
-*Syntax:*
- `ideal' name `=' list_of_poly_and_ideal_expressions `;'
- `ideal' name `=' ideal_expression `;'
-
-*Purpose:*
- defines an ideal.
-
-*Default:*
- 0
-
-*Example:*
-
- ring r=0,(x,y,z),dp;
- poly s1 = x2;
- poly s2 = y3;
- poly s3 = z;
- ideal i = s1, s2-s1, 0,s2*s3, s3^4;
- i;
- ==> i[1]=x2
- ==> i[2]=y3-x2
- ==> i[3]=0
- ==> i[4]=y3z
- ==> i[5]=z4
- size(i);
- ==> 4
- ncols(i);
- ==> 5
-
-
-File: sing.info, Node: ideal expressions, Next: ideal operations, Prev:
ideal declarations, Up: ideal
-
-4.2.2 ideal expressions
------------------------
-
-An ideal expression is:
- 1. an identifier of type ideal
-
- 2. a function returning ideal
-
- 3. ideal expressions combined by the arithmetic operations `+' or `*'
-
- 4. a power of an ideal expression (operator `^' or `**')
- Note that the computation of the product `i*i' involves all
- products of generators of `i' while `i^2' involves only the
- different ones, and is therefore faster.
-
- 5. a type cast to ideal
-
-
-*Example:*
- ring r=0,(x,y,z),dp;
- ideal m = maxideal(1);
- m;
- ==> m[1]=x
- ==> m[2]=y
- ==> m[3]=z
- poly f = x2;
- poly g = y3;
- ideal i = x*y*z , f-g, g*(x-y) + f^4 ,0, 2x-z2y;
- ideal M = i + maxideal(10);
- timer =0;
- i = M*M;
- timer;
- ==> 0
- ncols(i);
- ==> 505
- timer =0;
- i = M^2;
- ncols(i);
- ==> 505
- timer;
- ==> 0
- i[ncols(i)];
- ==> x20
- vector v = [x,y-z,x2,y-x,x2yz2-y];
- ideal j = ideal(v);
-
-
-File: sing.info, Node: ideal operations, Next: ideal related functions,
Prev: ideal expressions, Up: ideal
-
-4.2.3 ideal operations
-----------------------
-
-`+'
- addition (concatenation of the generators and simplification)
-
-`*'
- multiplication (with ideal, poly, vector, module; simplification in
- case of multiplication with ideal)
-
-`^'
- exponentiation (by a non-negative integer)
-
-ideal_expression `[' intvec_expression `]'
- are polynomial generators of the ideal, index 1 gives the first
- generator.
-
-*Note:* For simplification of an ideal, see also *note simplify::.
-
-
-*Example:*
- ring r=0,(x,y,z),dp;
- ideal I = 0,x,0,1;
- I;
- ==> I[1]=0
- ==> I[2]=x
- ==> I[3]=0
- ==> I[4]=1
- I + 0; // simplification
- ==> _[1]=1
- ideal J = I,0,x,x-z;;
- J;
- ==> J[1]=0
- ==> J[2]=x
- ==> J[3]=0
- ==> J[4]=1
- ==> J[5]=0
- ==> J[6]=x
- ==> J[7]=x-z
- I * J; // multiplication with simplification
- ==> _[1]=1
- I*x;
- ==> _[1]=0
- ==> _[2]=x2
- ==> _[3]=0
- ==> _[4]=x
- vector V = [x,y,z];
- print(V*I);
- ==> 0,x2,0,x,
- ==> 0,xy,0,y,
- ==> 0,xz,0,z
- ideal m = maxideal(1);
- m^2;
- ==> _[1]=x2
- ==> _[2]=xy
- ==> _[3]=xz
- ==> _[4]=y2
- ==> _[5]=yz
- ==> _[6]=z2
- ideal II = I[2..4];
- II;
- ==> II[1]=x
- ==> II[2]=0
- ==> II[3]=1
-
-
-File: sing.info, Node: ideal related functions, Prev: ideal operations, Up:
ideal
-
-4.2.4 ideal related functions
------------------------------
-
-`char_series'
- irreducible characteristic series (see *note char_series::)
-
-`coeffs'
- matrix of coefficients (see *note coeffs::)
-
-`contract'
- contraction by an ideal (see *note contract::)
-
-`diff'
- partial derivative (see *note diff::)
-
-`degree'
- multiplicity, dimension and codimension of the ideal of leading
- terms (see *note degree::)
-
-`dim'
- Krull dimension of basering modulo the ideal of leading terms (see
- *note dim::)
-
-`eliminate'
- elimination of variables (see *note eliminate::)
-
-`facstd'
- factorizing Groebner basis algorithm (see *note facstd::)
-
-`factorize'
- ideal of factors of a polynomial (see *note factorize::)
-
-`fglm'
- Groebner basis computation from a Groebner basis w.r.t. a different
- ordering (see *note fglm::)
-
-`finduni'
- computation of univariate polynomials lying in a zero dimensional
- ideal (see *note finduni::)
-
-`groebner'
- Groebner basis computation (a wrapper around
- `std,stdhilb,stdfglm',...) (see *note groebner::)
-
-`highcorner'
- computes the smallest monomial not contained in the ideal. The
- ideal has to be zero-dimensional. (see *note highcorner::)
-
-`homog'
- homogenization with respect to a variable (see *note homog::)
-
-`hilb'
- Hilbert series of a standard basis (see *note hilb::)
-
-`indepSet'
- sets of independent variables of an ideal (see *note indepSet::)
-
-`interred'
- interreduction of an ideal (see *note interred::)
-
-`intersect'
- ideal intersection (see *note intersect::)
-
-`jacob'
- ideal of all partial derivatives resp. jacobian matrix (see *note
- jacob::)
-
-`jet'
- Taylor series up to a given order (see *note jet::)
-
-`kbase'
- vector space basis of basering modulo ideal of leading terms (see
- *note kbase::)
-
-`koszul'
- Koszul matrix (see *note koszul::)
-
-`lead'
- leading terms of a set of generators (see *note lead::)
-
-`lift'
- lift-matrix (see *note lift::)
-
-`liftstd'
- standard basis and transformation matrix computation (see *note
- liftstd::)
-
-`lres'
- free resolution for homogeneous ideals (see *note lres::)
-
-`maxideal'
- power of the maximal ideal at 0 (see *note maxideal::)
-
-`minbase'
- minimal generating set of a homogeneous ideal, resp. module, or an
- ideal, resp. module, in a local ring (see *note minbase::)
-
-`minor'
- set of minors of a matrix (see *note minor::)
-
-`modulo'
- represents $(h1+h2)/h1 \cong h2/(h1 \cap h2)$
- (h1+h2)/h1=h2/(h1 intersect h2) (see *note modulo::)
-
-`mres'
- minimal free resolution of an ideal resp. module w.r.t. a minimal
- set of generators of the given ideal resp. module (see *note
- mres::)
-
-`mstd'
- standard basis and minimal generating set of an ideal (see *note
- mstd::)
-
-`mult'
- multiplicity, resp. degree, of the ideal of leading terms (see
- *note mult::)
-
-`ncols'
- number of columns (see *note ncols::)
-
-`preimage'
- preimage under a ring map (see *note preimage::)
-
-`qhweight'
- quasihomogeneous weights of an ideal (see *note qhweight::)
-
-`quotient'
- ideal quotient (see *note quotient::)
-
-`reduce'
- normalform with respect to a standard basis (see *note reduce::)
-
-`res'
- free resolution of an ideal resp. module but not changing the given
- ideal resp. module (see *note res::)
-
-`simplify'
- simplify a set of polynomials (see *note simplify::)
-
-`size'
- number of non-zero generators (see *note size::)
-
-`sortvec'
- permutation for sorting ideals resp. modules (see *note sortvec::)
-
-`sres'
- free resolution of a standard basis (see *note sres::)
-
-`std'
- standard basis computation (see *note std::)
-
-`stdfglm'
- standard basis computation with fglm technique (see *note
- stdfglm::)
-
-`stdhilb'
- Hilbert driven standard basis computation (see *note stdhilb::
-
-`subst'
- substitute a ring variable (see *note subst::)
-
-`syz'
- computation of the first syzygy module (see *note syz::)
-
-`vdim'
- vector space dimension of basering modulo ideal of leading terms
- (see *note vdim::)
-
-`weight'
- optimal weights (see *note weight::)
-
-
-File: sing.info, Node: int, Next: intmat, Prev: ideal, Up: Data types
-
-4.3 int
-=======
-
-Variables of type int represent the machine integers and are, therefore,
-limited in their range (e.g., the range is between -2147483647 and
-2147483647 on 32-bit machines). They are mainly used to count things
-(dimension, rank, etc.), in loops (see *note for::), and to represent
-boolean values (FALSE is represented by 0, every other value means TRUE,
-see *note boolean expressions::).
-
-Integers consist of a sequence of digits, possibly preceded by a sign.
-A space is considered as a separator, so it is not allowed between
-digits. A sequence of digits outside the allowed range is converted to
-the type `number' if possible.
-
-* Menu:
-
-* int declarations::
-* int expressions::
-* int operations::
-* boolean expressions::
-* boolean operations::
-* int related functions::
-
-
-File: sing.info, Node: int declarations, Next: int expressions, Prev: int,
Up: int
-
-4.3.1 int declarations
-----------------------
-
-*Syntax:*
- `int' name `=' int_expression `;'
-
-*Purpose:*
- defines an integer variable.
-
-*Default:*
- 0
-
-*Example:*
-
- int i = 42;
- int j = i + 3; j;
- ==> 45
- i = i * 3 - j; i;
- ==> 81
- int k; // assigning the default value 0 to k
- k;
- ==> 0
-
-
-File: sing.info, Node: int expressions, Next: int operations, Prev: int
declarations, Up: int
-
-4.3.2 int expressions
----------------------
-
-An int expression is:
- 1. a sequence of digits (if the number represented by this sequence is
- too large to fit into the range of integers it is automatically
- converted to the type number, if a basering is defined)
-
- 2. an identifier of type int
-
- 3. a function returning int
-
- 4. int expressions combined by the arithmetic operations `+', `-',
- `*', `div', `/', `%' (`mod'), or `^'
-
- 5. a boolean expression
-
- 6. a type cast to int
-
-*Note:* Variables of type int represent the compiler integers and are,
-therefore, limited in their range (see *note Limitations::). If this
-range is too small the expression must be converted to the type number
-over a ring with characteristic 0.
-
-
-*Example:*
- 12345678901; // too large
- ==> ? `12345678901` greater than 2147483647(max. integer
representation)
- ==> ? error occurred in line 1: `12345678901; // too large`
- typeof(_);
- ==> none
- ring r=0,x,dp;
- 12345678901;
- ==> 12345678901
- typeof(_);
- ==> number
- // Note: 11*13*17*100*200*2000*503*1111*222222
- // returns a machine integer:
- 11*13*17*100*200*2000*503*1111*222222;
- ==> // ** int overflow(*), result may be wrong
- ==> // ** int overflow(*), result may be wrong
- ==> // ** int overflow(*), result may be wrong
- ==> // ** int overflow(*), result may be wrong
- ==> -1875651584
- // using the type cast number for a greater allowed range
- number(11)*13*17*100*200*2000*503*1111*222222;
- ==> 12075748128684240000000
- ring rp=32003,x,dp;
- 12345678901;
- ==> 9603
- typeof(_);
- ==> number
- intmat m[2][2] = 1,2,3,4;
- m;
- ==> 1,2,
- ==> 3,4
- m[2,2];
- ==> 4
- typeof(_);
- ==> int
- det(m);
- ==> -2
- m[1,1] + m[2,1] == trace(m);
- ==> 0
- ! 0;
- ==> 1
- 1 and 2;
- ==> 1
- intvec v = 1,2,3;
- def d =transpose(v)*v; // scalarproduct gives an 1x1 intvec
- typeof(d);
- ==> intvec
- int i = d[1]; // access the first (the only) entry in the
intvec
- ring rr=31,(x,y,z),dp;
- poly f = 1;
- i = int(f); // cast to int
- // Integers may be converted to constant polynomials by an assignment,
- poly g=37;
- // define the constant polynomial g equal to the image of
- // the integer 37 in the actual coefficient field, here it equals 6
- g;
- ==> 6
-
-* Menu:
-
-See
-* Type conversion and casting::
-* number::
-
-See *note Type conversion and casting::; *note number::.
-
-
-File: sing.info, Node: int operations, Next: int related functions, Prev:
int expressions, Up: int
-
-4.3.3 int operations
---------------------
-
-`++'
- changes its operand to its successor, is itself no int expression
-
-`--'
- changes its operand to its predecessor, is itself no int expression
-
-`+'
- addition
-
-`-'
- negation or subtraction
-
-`*'
- multiplication
-
-`/'
- integer division (omitting the remainder), rounding toward 0
-
-`div'
- integer division (omitting the remainder >= 0)
-
-`%'
- integer modulo (the remainder of the division `/')
-
-`mod'
- integer modulo (the remainder of the division `div'), always
- non-negative
-
-`^', `**'
- exponentiation (exponent must be non-negative)
-
-`<', `>', `<=', `>=', `==', `<>'
- comparison
-
-*Note:* An assignment `j=i++;' or `j=i--;' is not allowed, in particular
-it does not change the value of `j', see *note Limitations::.
-
-
-*Example:*
- int i=1;
- int j;
- i++; i; i--; i;
- ==> 2
- ==> 1
- // ++ and -- do not return a value as in C, can not assign
- j = i++;
- ==> // ** right side is not a datum, assignment ignored
- // the value of j is unchanged
- j; i;
- ==> 0
- ==> 2
- i+2, 2-i, 5^2;
- ==> 4 0 25
- 5 div 2, 8%3;
- ==> 2 2
- -5 div 2, -5 / 2, -5 mod 2, -5 % 2;
- ==> -3 -2 1 -1
- 1<2, 2<=2;
- ==> 1 1
-
-
-File: sing.info, Node: int related functions, Next: boolean expressions,
Prev: int operations, Up: int
-
-4.3.4 int related functions
----------------------------
-
-`char'
- characteristic of the coefficient field of a ring (see *note
- char::)
-
-`deg'
- degree of a poly resp. vector (see *note deg::)
-
-`det'
- determinant (see *note det::)
-
-`dim'
- Krull dimension of basering modulo ideal of leading terms, resp.
- dimension of module of leading terms (see *note dim::)
-
-`extgcd'
- Bezout representation of gcd (see *note extgcd::)
-
-`find'
- position of a substring in a string (see *note find::)
-
-`gcd'
- greatest common divisor (see *note gcd::)
-
-`koszul'
- Koszul matrix (see *note koszul::)
-
-`memory'
- memory usage (see *note memory::)
-
-`mult'
- multiplicity of an ideal, resp. module, of leading terms (see *note
- mult::)
-
-`ncols'
- number of columns (see *note ncols::)
-
-`npars'
- number of ring parameters (see *note npars::)
-
-`nrows'
- number of rows of a matrix, resp. the rank of the free module where
- the vector or module lives (see *note nrows::)
-
-`nvars'
- number of ring variables (see *note nvars::)
-
-`ord'
- degree of the leading term of a poly resp. vector (see *note ord::)
-
-`par'
- n-th parameter of the basering (see *note par::)
-
-`pardeg'
- degree of a number considered as a polynomial in the ring
- parameters (see *note pardeg::)
-
-`prime'
- the next lower prime (see *note prime::)
-
-`random'
- a pseudo random integer between the given limits (see *note
- random::)
-
-`regularity'
- regularity of a resolution (see *note regularity::)
-
-`rvar'
- test, if the given expression or string is a ring variable (see
- *note rvar::)
-
-`size'
- number of elements in an object (see *note size::)
-
-`trace'
- trace of an integer matrix (see *note trace::)
-
-`var'
- n-th ring variable of the basering (see *note var::)
-
-`vdim'
- vector space dimension of basering modulo ideal of leading terms,
- resp. of freemodule modulo module of leading terms (see *note
- vdim::)
-
-
-File: sing.info, Node: boolean expressions, Next: boolean operations, Prev:
int related functions, Up: int
-
-4.3.5 boolean expressions
--------------------------
-
-A boolean expression is really an int expression used in a logical
-context:
-
-
-An int expression (<> 0 evaluates to _TRUE_ (represented by 1), 0
-represents _FALSE_).
-
-The following is the list of available comparisons of objects of the
-same type.
-
-*Note:* There are no comparisons for ideals and modules, resolution and
-maps.
-
- 1. an integer comparison:
-
- i == j
- i != j // or i <> j
- i <= j
- i >= j
- i > j
- i < j
-
- 2. a number comparison:
-
- m == n
- m != n // or m <> n
- m < n
- m > n
- m <= n
- m >= n
-
- For numbers from Z/p or from field extensions not all operations
- are useful:
- - 0 is always the smallest element,
- - in Z/p the representatives in the range -(p-1)/2..(p-1)/2 when
- p>2 resp. 0 and 1 for p=2 are used for comparisons,
- - in field extensions the last two operations (`>=,<=') yield
- always TRUE (1) and the `<' and `>' are equivalent to `!='.
-
- 3. a polynomial or vector comparison:
-
- f == g
- f != g // or f <> g
- f <= g // comparing the leading term w.r.t. the monomial order
- f < g
- f >= g
- f > g
-
- 4. an intmat or matrix comparison:
-
- v == w
- v != w // or v <> w
-
- 5. an intvec or string comparison:
-
- f == g
- f != g // or f <> g
- f <= g // comparing lexicographically
- f >= g // w.r.t. the order specified by ASCII
- f > g
- f < g
-
- 6. boolean expressions combined by boolean operations (`and', `or',
- `not')
-
-*Note:* All arguments of a logical expression are first evaluated and
-then the value of the logical expression is determined. For example, the
-logical expression `(a || b)' is evaluated by first evaluating `a' _and_
-`b', even though the value of `b' has no influence on the value of `(a
-|| b)', if `a' evaluates to true.
-
-Note that this evaluation is different from the left-to-right,
-conditional evaluation of logical expressions (as found in most
-programming languages). For example, in these other languages, the value
-of `(1 || b)' is determined without ever evaluating `b'.
-
-See *note Major differences to the C programming language::.
-
-
-File: sing.info, Node: boolean operations, Prev: boolean expressions, Up:
int
-
-4.3.6 boolean operations
-------------------------
-
-`and'
- logical `and', may also be written as `&&'
-
-`or'
- logical `or', may also be written as `||'
-
-`not'
- logical `not', may also be written as `!'
-
-The precedence of the boolean operations is:
-
- 1. parentheses
-
- 2. comparisons
-
- 3. not
-
- 4. and
-
- 5. or
-
-
-*Example:*
- (1>2) and 3;
- ==> 0
- 1 > 2 and 3;
- ==> 0
- ! 0 or 1;
- ==> 1
- !(0 or 1);
- ==> 0
-
-
-File: sing.info, Node: intmat, Next: intvec, Prev: int, Up: Data types
-
-4.4 intmat
-==========
-
-Integer matrices are matrices with integer entries. For the range of
-integers see *note Limitations::. Integer matrices do not belong to a
-ring, they may be defined without a basering being defined. An intmat
-can be multiplied by and added to an int; in this case the int is
-converted into an intmat of the right size with the integer on the
-diagonal. The integer `1', for example, is converted into the unit
-matrix.
-
-* Menu:
-
-* intmat declarations::
-* intmat expressions::
-* intmat type cast::
-* intmat operations::
-* intmat related functions::
-
-
-File: sing.info, Node: intmat declarations, Next: intmat expressions, Prev:
intmat, Up: intmat
-
-4.4.1 intmat declarations
--------------------------
-
-*Syntax:*
- `intmat' name `=' intmat_expression `;'
- `intmat' name `[' rows `] [' cols `] =' intmat_expression `;'
- `intmat' name `[' rows `] [' cols `] ='
- list_of_int_and_intvec_and_intmat_expressions `;'
- rows and cols must be positive int expressions.
-
-*Purpose:*
- defines an intmat variable.
- Given a list of integers, the matrix is filled up with the first
- row from the left to the right, then the second row and so on. If
- the int_list contains less than rows*cols elements, the matrix is
- filled up with zeros; if it contains more elements, only the first
- rows*cols elements are used.
-
-*Default:*
- 0 (1 x 1 matrix)
-
-*Example:*
-
- intmat im[3][5]=1,3,5,7,8,9,10,11,12,13;
- im;
- ==> 1,3,5,7,8,
- ==> 9,10,11,12,13,
- ==> 0,0,0,0,0
- im[3,2];
- ==> 0
- intmat m[2][3] = im[1..2,3..5]; // defines a submatrix
- m;
- ==> 5,7,8,
- ==> 11,12,13
-
-
-File: sing.info, Node: intmat expressions, Next: intmat type cast, Prev:
intmat declarations, Up: intmat
-
-4.4.2 intmat expressions
-------------------------
-
-An intmat expression is:
- 1. an identifier of type intmat
-
- 2. a function returning intmat
-
- 3. intmat operations with int (`+', `-', `*', `div', `%')
-
- 4. intmat operations (`+', `-', `*')
-
- 5. a type cast to intmat (*note intmat type cast::)
-
-
-*Example:*
- intmat Idm[2][2];
- Idm +1; // add the unit intmat
- ==> 1,0,
- ==> 0,1
- intmat m1[3][2] = _,1,-2; // take entries from the last result
- m1;
- ==> 1,0,
- ==> 0,1,
- ==> 1,-2
- intmat m2[2][3]=1,0,2,4,5,1;
- transpose(m2);
- ==> 1,4,
- ==> 0,5,
- ==> 2,1
- intvec v1=1,2,4;
- intvec v2=5,7,8;
- m1=v1,v2; // fill m1 with v1 and v2
- m1;
- ==> 1,2,
- ==> 4,5,
- ==> 7,8
- trace(m1*m2);
- ==> 56
-
-* Menu:
-
-See
-* Type conversion and casting::
-* number::
-
-See *note Type conversion and casting::; *note number::.
-
-
-File: sing.info, Node: intmat type cast, Next: intmat operations, Prev:
intmat expressions, Up: intmat
-
-4.4.3 intmat type cast
-----------------------
-
-`*Syntax:*'
- `intmat (' expression `)'
- `intmat (' expression, int_n, int_m `)'
-
-`*Type:*'
- intmat
-
-`*Purpose:*'
- Converts expression to an intmat, where expression must be of type
- intvec, or intmat. If int_n and int_m are supplied, then they
- specify the dimension of the intmat. Otherwise, the size (resp.
- dimensions) of the intmat are determined by the size (resp.
- dimensions) of the expression.
-
-`*Example:*'
-
- intmat(intvec(1));
- ==> 1
- intmat(intvec(1), 1, 2);
- ==> 1,0
- intmat(intvec(1,2,3,4), 2, 2);
- ==> 1,2,
- ==> 3,4
- intmat(_, 2, 3);
- ==> 1,2,3,
- ==> 4,0,0
- intmat(_, 2, 1);
- ==> 1,
- ==> 2
-
-* Menu:
-
-See
-* Type conversion and casting::
-* intmat::
-* matrix type cast::
-
-See *note Type conversion and casting::; *note intmat::; *note matrix
-type cast::.
-
-
-File: sing.info, Node: intmat operations, Next: intmat related functions,
Prev: intmat type cast, Up: intmat
-
-4.4.4 intmat operations
------------------------
-
-`+'
- addition with intmat or int; the int is converted into a diagonal
- intmat
-
-`-'
- negation or subtraction with intmat or int; the int is converted
- into a diagonal intmat
-
-`*'
- multiplication with intmat, intvec, or int; the int is converted
- into a diagonal intmat
-
-`div,/'
- division of entries in the integers (omitting the remainder)
-
-`%, mod'
- entries modulo int (remainder of the division)
-
-`<>', `=='
- comparison
-
-intmat_expression `[' intvec_expression`,' intvec_expression `]'
- is an intmat entry, where the first index indicates the row and the
- second the column
-
-
-*Example:*
- intmat m[2][4] = 1,0,2,4,0,1,-1,0,3,2,1,-2;
- m;
- ==> 1,0,2,4,
- ==> 0,1,-1,0
- m[2,3]; // entry at row 2, col 3
- ==> -1
- size(m); // number of entries
- ==> 8
- intvec v = 1,0,-1,2;
- m * v;
- ==> 7,1
- typeof(_);
- ==> intvec
- intmat m1[4][3] = 0,1,2,3,v,1;
- intmat m2 = m * m1;
- m2; // 2 x 3 intmat
- ==> -2,5,4,
- ==> 4,-1,-1
- m2*10; // multiply each entry of m with 10;
- ==> -20,50,40,
- ==> 40,-10,-10
- -m2;
- ==> 2,-5,-4,
- ==> -4,1,1
- m2 % 2;
- ==> 0,1,0,
- ==> 0,1,1
- m2 div 2;
- ==> -1,2,2,
- ==> 2,-1,-1
- m2[2,1]; // entry at row 2, col 1
- ==> 4
- m1[2..3,2..3]; // submatrix
- ==> 1 0 2 1
- m2[nrows(m2),ncols(m2)]; // the last entry of intmat m2
- ==> -1
-
-
-File: sing.info, Node: intmat related functions, Prev: intmat operations,
Up: intmat
-
-4.4.5 intmat related functions
-------------------------------
-
-`betti'
- Betti numbers of a free resolution (see *note betti::)
-
-`det'
- determinant (see *note det::)
-
-`ncols'
- number of cols (see *note ncols::)
-
-`nrows'
- number of rows (see *note nrows::)
-
-`random'
- create a pseudo random intmat (see *note random::)
-
-`size'
- total number of entries (see *note size::)
-
-`transpose'
- transpose of an intmat (see *note transpose::)
-
-`trace'
- trace of an intmat (see *note trace::)
-
-
-File: sing.info, Node: intvec, Next: link, Prev: intmat, Up: Data types
-
-4.5 intvec
-==========
-
-Variables of type intvec are lists of integers. For the range of
-integers see *note Limitations::. They may be used for simulating sets
-of integers (and other sets if the intvec is used as an index set for
-other objects). Addition and subtraction of an intvec with an int or an
-intvec is done element-wise.
-
-* Menu:
-
-* intvec declarations::
-* intvec expressions::
-* intvec operations::
-* intvec related functions::
-
-
-File: sing.info, Node: intvec declarations, Next: intvec expressions, Prev:
intvec, Up: intvec
-
-4.5.1 intvec declarations
--------------------------
-
-*Syntax:*
- `intvec' name `=' intvec_expression `;'
- `intvec' name `=' list_of_int_and_intvec_expressions `;'
-
-*Purpose:*
- defines an intvec variable.
- An intvec consists of an ordered list of integers.
-
-*Default:*
- 0
-
-*Example:*
-
- intvec iv=1,3,5,7,8;
- iv;
- ==> 1,3,5,7,8
- iv[4];
- ==> 7
- iv[3..size (iv)];
- ==> 5 7 8
-
-
-File: sing.info, Node: intvec expressions, Next: intvec operations, Prev:
intvec declarations, Up: intvec
-
-4.5.2 intvec expressions
-------------------------
-
-An intvec expression is:
- 1. a range: int expression `..' int expression
-
- 2. a function returning intvec
-
- 3. intvec operations with int (`+', `-', `*', `/', `%')
-
- 4. intvec operations (`+', `-')
-
- 5. intvec operation with intmat (`*')
-
- 6. a type cast to intvec
-
-
-*Example:*
- intvec v=-1,2;
- intvec w=v,v; // concatenation
- w;
- ==> -1,2,-1,2
- w = -2..2,v,1;
- w;
- ==> -2,-1,0,1,2,-1,2,1
- intmat m[3][2] = 0,1,2,-2,3,1;
- m*v;
- ==> 2,-6,-1
- typeof(_);
- ==> intvec
- v = intvec(m);
- v;
- ==> 0,1,2,-2,3,1
- ring r;
- poly f = x2z + 2xy-z;
- f;
- ==> x2z+2xy-z
- v = leadexp(f);
- v;
- ==> 2,0,1
-
-
-File: sing.info, Node: intvec operations, Next: intvec related functions,
Prev: intvec expressions, Up: intvec
-
-4.5.3 intvec operations
------------------------
-
-`+'
- addition with intvec or int (component-wise)
-
-`-'
- negation or subtraction with intvec or int (component-wise)
-
-`*'
- multiplication with int (component-wise)
-
-`/', `div'
- division by int (component-wise)
-
-`%, mod'
- modulo (component-wise)
-
-`<>', `==', `<=', `>=', `>', `<'
- comparison (done lexicographically)
-
-intvec_expression `[' int_expression `]'
- is an element of the intvec; the first element has index one.
-
-
-*Example:*
- intvec iv = 1,3,5,7,8;
- iv+1; // add 1 to each entry
- ==> 2,4,6,8,9
- iv*2;
- ==> 2,6,10,14,16
- iv;
- ==> 1,3,5,7,8
- iv-10;
- ==> -9,-7,-5,-3,-2
- iv=iv,0;
- iv;
- ==> 1,3,5,7,8,0
- iv div 2;
- ==> 0,1,2,3,4,0
- iv+iv; // component-wise addition
- ==> 2,6,10,14,16,0
- iv[size(iv)-1]; // last-1 entry
- ==> 8
- intvec iw=2,3,4,0;
- iv==iw; // lexicographic comparison
- ==> 0
- iv < iw;
- ==> 1
- iv != iw;
- ==> 1
- iv[2];
- ==> 3
- iw = 4,1,2;
- iv[iw];
- ==> 7 1 3
-
-
-File: sing.info, Node: intvec related functions, Prev: intvec operations,
Up: intvec
-
-4.5.4 intvec related functions
-------------------------------
-
-`hilb'
- returns Hilbert series as intvec (see *note hilb::)
-
-`indepSet'
- sets of independent variables of an ideal (see *note indepSet::)
-
-`leadexp'
- the exponent vector of the leading monomial (see *note leadexp::)
-
-`nrows'
- number of rows (see *note nrows::)
-
-`qhweight'
- returns quasihomogeneous weights (see *note qhweight::)
-
-`size'
- length of the intvec (see *note size::)
-
-`sortvec'
- permutation for sorting ideals/modules (see *note sortvec::)
-
-`transpose'
- transpose of an intvec, returns an intmat (see *note transpose::)
-
-`weight'
- returns weights for the weighted ecart method (see *note weight::)
-
-
-File: sing.info, Node: link, Next: list, Prev: intvec, Up: Data types
-
-4.6 link
-========
-
-Links are the communication channels of SINGULAR, i.e., something
-SINGULAR can write to and/or read from. Currently, SINGULAR supports
-four different link types:
- * ASCII links (see *note ASCII links::)
-
- * MPfile links (see *note MPfile links::)
-
- * MPtcp links (see *note MPtcp links::)
-
- * DBM links (see *note DBM links::)
-
-* Menu:
-
-* link declarations::
-* link expressions::
-* link related functions::
-* ASCII links::
-* MP links::
-* DBM links::
-
-
-File: sing.info, Node: link declarations, Next: link expressions, Prev:
link, Up: link
-
-4.6.1 link declarations
------------------------
-
-*Syntax:*
- `link' name `=' string_expression `;'
-
-*Purpose:*
- defines a new communication link.
-
-*Default:*
- none
-
-*Example:*
-
- link l=":w example.txt";
- int i=22; // cf. ASCII links for explanation
- string s="An int follows:";
- write(l,s,i);
- l;
- ==> // type : ASCII
- ==> // mode : w
- ==> // name : example.txt
- ==> // open : yes
- ==> // read : not ready
- ==> // write: ready
- close(l); //
- read(l);
- ==> An int follows:
- ==> 22
- ==>
- close(l);
-
-
-File: sing.info, Node: link expressions, Next: link related functions,
Prev: link declarations, Up: link
-
-4.6.2 link expressions
-----------------------
-
-A link expression is:
- 1. an identifier of type link
-
- 2. a string describing the link
-
-A link is described by a string which consists of two parts: a property
-string followed by a name string. The property string describes the type
-of the link (`ASCII', `MPfile', `MPtcp' or `DBM') and the mode of the
-link (e.g., open for read, write or append). The name string describes
-the filename of the link, resp. a network connection for MPtcp links.
-
-For a detailed format description of the link describing string see:
- * for ASCII links: *note ASCII links::
-
- * for MPfile links: *note MPfile links::
-
- * for MPtcp links: *note MPtcp links::
-
- * for DBM links: *note DBM links::
-
-* Menu:
-
-* ASCII links::
-* MPfile links::
-* MPtcp links::
-* DBM links::
-
-
-File: sing.info, Node: link related functions, Next: ASCII links, Prev:
link expressions, Up: link
-
-4.6.3 link related functions
-----------------------------
-
-`close'
- closes a link (see *note close::)
-
-`dump'
- generates a dump of all variables and their values (see *note
- dump::)
-
-`getdump'
- reads a dump (see *note getdump::)
-
-`open'
- opens a link (see *note open::)
-
-`read'
- reads from a link (see *note read::)
-
-`status'
- gets the status of a link (see *note status::)
-
-`write'
- writes to a link (see *note write::)
-
-`kill'
- closes and kills a link (see *note kill::)
-
-
-File: sing.info, Node: ASCII links, Next: MP links, Prev: link related
functions, Up: link
-
-4.6.4 ASCII links
------------------
-
-Via ASCII links data that can be converted to a string can be written
-into files for storage or communication with other programs. The data is
-written in plain ASCII format. The output format of polynomials is done
-w.r.t. the value of the global variable `short' (see *note short::).
-Reading from an ASCII link returns a string -- conversion into other
-data is up to the user. This can be done, for example, using the command
-`execute' (see *note execute::).
-
-The ASCII link describing string has to be one of the following:
-
- 1. `"ASCII: "' + filename
- the mode (read or append) is set by the first `read' or `write'
- command.
-
- 2. `"ASCII:r "' + filename
- opens the file for reading.
-
- 3. `"ASCII:w "' + filename
- opens the file for overwriting.
-
- 4. `"ASCII:a "' + filename
- opens the file for appending.
-
-There are the following default values:
- * the type `ASCII' may be omitted since ASCII links are the default
- links.
-
- * if non of `r', `w', or `a' is specified, the mode of the link is
- set by the first `read' or `write' command on the link. If the
- first command is `write', the mode is set to `a' (append mode).
-
- * if the filename is omitted, `read' reads from stdin and `write'
- writes to stdout.
-
-Using these default rules, the string `":r temp"' describes a link which
-is equivalent to the link `"ASCII:r temp"': an ASCII link to the file
-`temp' which is opened for reading. The string `"temp"' describes an
-ASCII link to the file `temp', where the mode is set by the first `read'
-or `write' command. See also the example below.
-
-Note that the filename may contain a path. On Microsoft Windows (resp.
-MS-DOS) platforms, names of a drive can precede the filename, but must
-be started with a `//' (as in `//c/temp/ex'. An ASCII link can be used
-either for reading or for writing, but not for both at the same time. A
-`close' command must be used before a change of I/O direction. Types
-without a conversion to `string' cannot be written.
-
-
-*Example:*
- ring r=32003,(x,y,z),dp;
- link l=":w example.txt"; // type is ASCII, mode is overwrite
- l;
- ==> // type : ASCII
- ==> // mode : w
- ==> // name : example.txt
- ==> // open : no
- ==> // read : not ready
- ==> // write: not ready
- status(l, "open", "yes"); // link is not yet opened
- ==> 0
- ideal i=x2,y2,z2;
- write (l,1,";",2,";","ideal i=",i,";");
- status(l, "open", "yes"); // now link is open
- ==> 1
- status(l, "mode"); // for writing
- ==> w
- close(l); // link is closed
- write("example.txt","int j=5;");// data is appended to file
- read("example.txt"); // data is returned as string
- ==> 1
- ==> ;
- ==> 2
- ==> ;
- ==> ideal i=
- ==> x2,y2,z2
- ==> ;
- ==> int j=5;
- ==>
- execute(read(l)); // read string is executed
- ==> 1
- ==> 2
- ==> // ** redefining i **
- close(l); // link is closed
-
-
-File: sing.info, Node: MP links, Next: DBM links, Prev: ASCII links, Up:
link
-
-4.6.5 MP links
---------------
-
-MP (Multi Protocol) links give the possibility to store and communicate
-data in the binary MP format: Read and write access is very fast
-compared to ASCII links. MP links can be established using files (link
-type is `MPfile') or using TCP sockets (link type is `MPtcp'). All data
-(including such data that cannot be converted to a string) can be
-written to an MP link. For ring-dependent data, a ring description is
-written together with the data. Reading from an MP link returns an
-expression (not a string) which was evaluated after the read operation.
-If the expression read from an MP link is not from the same ring as the
-current ring, then a `read' changes the current ring.
-
-Currently, MP links are only available on Unix platforms and data is
-written without attributes (which is likely to change in future
-versions). For a general description of MP, see
-`http://symbolicnet.mcs.kent.edu/areas/mp.html'.
-
-* Menu:
-
-* MPfile links::
-* MPtcp links::
-
-
-File: sing.info, Node: MPfile links, Next: MPtcp links, Prev: MP links,
Up: MP links
-
-4.6.5.1 MPfile links
-....................
-
-MPfile links provide the possibility to store data in a file using the
-binary MP format. Read and write operations are very fast compared to
-ASCII links. Therefore, for storing large amounts of data, MPfile links
-should be used instead of ASCII links. Unlike ASCII links, data read
-from MPfile links is returned as expressions one at a time, and not as a
-string containing the entire content of the file. Furthermore,
-ring-dependent data is stored together with a ring description.
-Therefore, reading ring-dependent data might change the current ring.
-
-The MPfile link describing string has to be one of the following:
-
- 1. `"MPfile: "' + filename
- the mode (read or append) is set by the first `read' or `write'
- command.
-
- 2. `"MPfile:r "' + filename
- opens the file for reading.
-
- 3. `"MPfile:w "' + filename
- opens the file for overwriting.
-
- 4. `"MPfile:a "' + filename
- opens the file for appending.
-
-There are the following default values:
- * if none of `r', `w', or `a' is specified, the mode of the link is
- set by the first `read' or `write' command on the link. If the
- first command is `write', the mode is set to `a' (append mode).
-
-Note that the filename may contain a path. An MPfile link can be used
-either for reading or for writing, but not for both at the same time. A
-`close' command must be used before a change of I/O direction.
-
-
-*Example:*
- ring r;
- link l="MPfile:w example.mp"; // type=MPfile, mode=overwrite
- l;
- ==> // type : MPfile
- ==> // mode : w
- ==> // name : example.mp
- ==> // open : no
- ==> // read : not ready
- ==> // write: not ready
- ideal i=x2,y2,z2;
- write (l,1, i, "hello world");// write three expressions
- write(l,4); // append one more expression
- close(l); // link is closed
- // open the file for reading now
- read(l); // only first expression is read
- ==> 1
- kill r; // no basering active now
- def i = read(l); // second expression
- // notice that current ring was set, the name was assigned
- // automatically
- listvar(ring);
- ==> // mpsr_r0 [0] *ring
- def s = read(l); // third expression
- listvar();
- ==> // s [0] string hello world
- ==> // mpsr_r0 [0] *ring
- ==> // i [0] ideal, 3 generator(s)
- ==> // l [0] link
- ==> // LIB [0] string standard.lib
- close(l); // link is closed
- dump("MPfile:w example.mp"); // dump everything to example.mp
- kill i, s; // kill i and s
- getdump("MPfile: example.mp");// get previous dump
- listvar(); // got all variables and values back
- ==> // mpsr_r0 [0] *ring
- ==> // i [0] ideal, 3 generator(s)
- ==> // s [0] string hello world
- ==> // l [0] link
- ==> // LIB [0] string standard.lib
-
-
-File: sing.info, Node: MPtcp links, Prev: MPfile links, Up: MP links
-
-4.6.5.2 MPtcp links
-...................
-
-MPtcp links give the possibility to exchange data in the binary MP
-format between two processes which may run on the same or on different
-computers. MPtcp links can be opened in four different modes:
-
-`listen'
- SINGULAR acts as a server.
-
-`connect'
- SINGULAR acts as a client.
-
-`launch'
- SINGULAR acts as a client, launching an application as server.
-
-`fork'
- SINGULAR acts as a client, forking another SINGULAR as server.
-
-The MPtcp link describing string has to be
- * listen mode:
-
- 1. `"MPtcp:listen --MPport "' + portnumber
-
- SINGULAR becomes a server and waits at the port for a connect call.
-
- * connect mode:
-
- 2. `"MPtcp:connect --MPport "' + portnumber
-
- 3. `"MPtcp:connect --MPhost "' + hostname + `" --MPport "' +
- portnumber
-
- SINGULAR becomes a client and connects to a server waiting at the
- host and port.
-
- * launch mode:
-
- 4. `"MPtcp:launch"'
-
- 5. `"MPtcp:launch --MPrsh "' + rsh
-
- 6. `"MPtcp:launch --MPrsh "' + rsh + `" --MPhost "' + hostname
-
- 7. `"MPtcp:launch --MPrsh "' + rsh + `" --MPhost "' + hostname +
- `" --MPapplication "' + application
-
- SINGULAR becomes a client and starts (launches) the application
- using the specified remote shell command (default is `ssh') on a
- (possibly) different host (default is `localhost' which then acts
- as a server.
-
- * fork mode:
-
- 8. `"MPtcp:fork"'
-
- SINGULAR becomes a client and forks another SINGULAR on the same
- host which acts as a server.
-
-There are the following default values:
- * if none of `listen', `connect', `launch' or `fork' is specified,
- the default mode is set to `fork'.
-
- * if no remote shell (rsh) command is specified, then the command
- `ssh' is used.
-
- * if no application is specified (in mode `launch') the default
- application is the value of `system("Singular") + "-bq"'. (This
- evaluates to the absolute path of the SINGULAR currently running
- with the option `"-bq"' appended.)
-
- * if no hostname is specified the local host is used as default host.
-
-To open an MPtcp link in launch mode, the application to launch must
-either be given with an absolute pathname, or must be in a directory
-contained in the search path. The launched application acts as a server,
-whereas the SINGULAR that actually opened the link acts as a client.
-SINGULAR automatically appends the command line arguments "`--MPmode
-connect --MPhost' hostname `--MPport' portnumber" to the command line of
-the server application. Both hostname and portnumber are substituted by
-the values from the link specification. The client "listens" at the
-given port until the server application does a connect call. If SINGULAR
-is used as server application it has to be started with the command line
-option `-b'. Since launching is done using a remote shell command, the
-host on which the application should run must have an entry in the
-`.rhosts' file. Even the local machine must have an entry if
-applications are to be launched locally.
-
-If the MPtcp link is opened in fork mode a child of the current SINGULAR
-is forked. All variables and their values are inherited by the child.
-The child acts as a server whereas the SINGULAR that actually opened the
-link acts as a client.
-
-To arrange the evaluation of an expression by a server, the expression
-must be quoted using the command `quote' (see *note quote::), so that a
-local evaluation is prevented. Otherwise, the expression is evaluated
-first, and the result of the evaluation is written, instead of the
-expression which is to be evaluated.
-
-If SINGULAR is in server mode, the value of the variable `mp_ll' is the
-MPtcp link connecting to the client and SINGULAR is in an infinite
-read-eval-write loop until the connection is closed from the client side
-(by closing its connecting link). Reading and writing is done to the
-link `mp_ll': After an expression is read, it is evaluated and the
-result of the evaluation is written back. That is, for each expression
-which was written to the server, there is exactly one expression written
-back. This might be an "empty" expression, if the evaluation on the
-server side does not return a value.
-
-MPtcp links should explicitly be opened before being used. MPtcp links
-are bidirectional, i.e., can be be used for both, writing and reading.
-Reading from an MPtcp link blocks until data was written to that link.
-The `status' command can be used to check whether there is data to read.
-
-
-*Example:*
- LIB "general.lib"; // needed for "killall" command
- link l="MPtcp:launch";
- open(l); l; // l is ready for writing but not for reading
- ==> // type : MPtcp
- ==> // mode : launch
- ==> // name :
- ==> // open : yes
- ==> // read : not ready
- ==> // write: ready
-
- ring r; ideal i=x2+y,xyz+z,x2+y2;
-
- write (l,quote(std(eval(i)))); // std(i) is computed on server
- def j = read(l);j; // result of computation on server is read
- ==> j[1]=z
- ==> j[2]=y2-y
- ==> j[3]=x2+y2
-
- write(l, quote(getdump(mp_ll))); // server reads dump
- dump(l); // dump is written to server (includes proc's)
- read(l); // result of previous write-command is read
- killall("not", "link"); killall("proc"); // kills everything, but links
- ==> // ** killing the basering for level 0
-
- write(l, quote(dump(mp_ll))); // server writes dump
- getdump(l); // dump is read from server
- read(l); // result of previous write-command is read
-
- close(l); // server is shut down
- listvar(all); // same state as we had before "killall()"
- ==> // mpsr_r0 [0] ring
- ==> // r [0] *ring
- ==> // j [0] ideal, 3 generator(s)
- ==> // i [0] ideal, 3 generator(s)
- ==> // l [0] link
-
- l = "MPtcp:"; // fork link declaration
- open(l); l; // Notice that name is "parent"
- ==> // type : MPtcp
- ==> // mode : fork
- ==> // name : parent
- ==> // open : yes
- ==> // read : not ready
- ==> // write: ready
-
- write(l, quote(status(mp_ll, "name")));
- read(l); // and name of forked link is "child"
- ==> child
- write(l,quote(i)); // Child inherited vars and their values
- read(l);
- ==> _[1]=x2+y
- ==> _[2]=xyz+z
- ==> _[3]=x2+y2
- close(l); // shut down forked child
-
-
-File: sing.info, Node: DBM links, Prev: MP links, Up: link
-
-4.6.6 DBM links
----------------
-
-DBM links provide access to data stored in a data base. Each entry in
-the data base consists of a (key_string, value_string) pair. Such a pair
-can be inserted with the command `write('link`,' key_string`,'
-value_string`)'. By calling `write('link`,' key_string`)', the entry
-with key key_string is deleted from the data base. The value of an entry
-is returned by the command `read('link`,' key_string`)'. With only one
-argument, `read('link`)' returns the next key in the data base. Using
-this feature a data base can be scanned in order to access all entries
-of the data base.
-
-If a data base with name `name' is opened for writing for the first
-time, two files (`name.pag' and `name.dir'), which contain the data
-base, are automatically created.
-
-The DBM link describing string has to be one of the following:
-
- 1. `"DBM: "' + name
- opens the data base for reading (default mode).
-
- 2. `"DBM:r "' + name
- opens the data base for reading.
-
- 3. `"DBM:rw "' + name
- opens the data base for reading and writing.
-
-Note that `name' must be given without the suffix `.pag' or `.dir'. The
-name may contain an (absolute) path.
-
-
-*Example:*
- link l="DBM:rw example";
- write(l,"1","abc");
- write(l,"3","XYZ");
- write(l,"2","ABC");
- l;
- ==> // type : DBM
- ==> // mode : rw
- ==> // name : example
- ==> // open : yes
- ==> // read : ready
- ==> // write: ready
- close(l);
- // read all keys (till empty string):
- read(l);
- ==> 1
- read(l);
- ==> 3
- read(l);
- ==> 2
- read(l);
- ==>
- // read data corresponding to key "1"
- read(l,"1");
- ==> abc
- // read all data:
- read(l,read(l));
- ==> abc
- read(l,read(l));
- ==> XYZ
- read(l,read(l));
- ==> ABC
- // close
- close(l);
-
-
-File: sing.info, Node: list, Next: map, Prev: link, Up: Data types
-
-4.7 list
-========
-
-Lists are arrays whose elements can be of any type (including ring and
-qring). If one element belongs to a ring the whole list belongs to that
-ring. This applies also to the special list `#'. The expression `list()'
-is the empty list.
-
-Note that a list stores the objects itself and not the names. Hence, if
-`L' is a list, `L[1]' for example has no name. A name, say `R', can be
-created for `L[1]' by `def R=L[1];'. To store also the name of an
-object, say `r', it can be added to the list with `nameof(r);'. Rings
-and qrings may be objects of a list.
-
-*Note*: Unlike other assignments a ring as an element of a list is not a
-copy but another reference to the same ring.
-
-* Menu:
-
-* list declarations::
-* list expressions::
-* list operations::
-* list related functions::
-
-
-File: sing.info, Node: list declarations, Next: list expressions, Prev:
list, Up: list
-
-4.7.1 list declarations
------------------------
-
-*Syntax:*
- `list' name `=' expression_list`;'
- `list' name `=' list_expression`;'
-
-*Purpose:*
- defines a list (of objects of possibly different types).
-
-*Default:*
- empty list
-
-*Example:*
-
- list l=1,"str";
- l[1];
- ==> 1
- l[2];
- ==> str
- ring r;
- listvar(r);
- ==> // r [0] *ring
- ideal i = x^2, y^2 + z^3;
- l[3] = i;
- l;
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> str
- ==> [3]:
- ==> _[1]=x2
- ==> _[2]=z3+y2
- listvar(r); // the list l belongs now to the ring r
- ==> // r [0] *ring
- ==> // l [0] list, size: 3
- ==> // i [0] ideal, 2 generator(s)
-
-
-File: sing.info, Node: list expressions, Next: list operations, Prev: list
declarations, Up: list
-
-4.7.2 list expressions
-----------------------
-
-A list expression is:
- 1. the empty list `list()'
-
- 2. an identifier of type list
-
- 3. a function returning list
-
- 4. list expressions combined by the arithmetic operation `+'
-
- 5. a type cast to list
-
-* Menu:
-
-See
-* Type conversion and casting::
-
-See *note Type conversion and casting::.
-
-
-*Example:*
- list l = "hello",1;
- l;
- ==> [1]:
- ==> hello
- ==> [2]:
- ==> 1
- l = list();
- l;
- ==> empty list
- ring r =0,x,dp;
- factorize((x+1)^2);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x+1
- ==> [2]:
- ==> 1,2
- list(1,2,3);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 3
-
-
-File: sing.info, Node: list operations, Next: list related functions, Prev:
list expressions, Up: list
-
-4.7.3 list operations
----------------------
-
-`+'
- concatenation
-
-`delete'
- deletes one element from list, returns new list
-
-`insert'
- inserts or appends a new element to list, returns a new list
-
-list_expression `[' int_expression `]'
- is a list entry; the index 1 gives the first element.
-
-
-*Example:*
- list l1 = 1,"hello",list(-1,1);
- list l2 = list(1,2,3);
- l1 + l2; // one new list
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> hello
- ==> [3]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 1
- ==> [4]:
- ==> 1
- ==> [5]:
- ==> 2
- ==> [6]:
- ==> 3
- list l3 =_;
- l1,l2; // two lists
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> hello
- ==> [3]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 1
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 3
- l2[2];
- ==> 2
-
-
-File: sing.info, Node: list related functions, Prev: list operations, Up:
list
-
-4.7.4 list related functions
-----------------------------
-
-`bareiss'
- returns a list of a matrix (lower triangular) and of an intvec
- (permutations of columns, see *note bareiss::)
-
-`betti'
- Betti numbers of a resolution (see *note betti::)
-
-`delete'
- deletes an element from a list (see *note delete::)
-
-`facstd'
- factorizing Groebner basis algorithm (see *note facstd::)
-
-`factorize'
- list of factors of a polynomial (see *note factorize::)
-
-`insert'
- inserts or appends a new element to a list (see *note insert::)
-
-`lres'
- free resolution (see *note lres::)
-
-`minres'
- minimize a free resolution (see *note minres::)
-
-`mres'
- minimal free resolution of an ideal, resp. module w.r.t. a minimal
- set of generators of the first module (see *note mres::)
-
-`names'
- list of all user-defined variable names (see *note names::)
-
-`res'
- free resolution of an ideal, resp. module (see *note res::)
-
-`size'
- number of entries (see *note size::)
-
-`sres'
- free resolution of an ideal, resp. module, given by a standard base
- (see *note sres::)
-
-
-File: sing.info, Node: map, Next: matrix, Prev: list, Up: Data types
-
-4.8 map
-=======
-
-Maps are ring maps from a preimage ring into the basering.
-
-*Note:*
- * the target of a map is *ALWAYS* the actual basering
-
- * the preimage ring is stored "by name", that means, maps can only be
- used in such contexts, where the name of the preimage ring can be
- resolved (i.e., there might be problems for rings/maps defined in
- subprocedures). See also *note Identifier resolution::, *note Names
- in procedures::.
-
-Maps between rings with different coefficient fields are possible and
-listed below.
-
-Canonically realized are
- * $Q \rightarrow Q(a, \ldots)$
- Q -> Q(a,..)
-
- * $Q \rightarrow R$
- Q -> R
-
- * $Q \rightarrow C$
- Q -> C
-
- * $Z/p \rightarrow (Z/p)(a, \ldots)$
- Z/p ->(Z/p)(a,...)
-
- * $Z/p \rightarrow GF(p^n)$
- Z/p -> GF(p^n)
-
- * $Z/p \rightarrow R$
- Z/p -> R
-
- * $R \rightarrow C$
- R -> C
-
-Possible are furthermore
- * % This is quite a hack, but for now it works.
- $Z/p \rightarrow Q,
- \quad
- [i]_p \mapsto i \in [-p/2, \, p/2]
- \subseteq Z$
- Z/p -> Q : [i]_p -> i in [-p/2, p/2] in Z
-
- * $Z/p \rightarrow Z/p^\prime,
- \quad
- [i]_p \mapsto i \in [-p/2, \, p/2] \subseteq Z, \;
- i \mapsto [i]_{p^\prime} \in Z/p^\prime$
- Z/p -> Z/p' : [i]_p in Z/p -> i in [-p/2,p/2] in Z, i -> [i]_p' in
- Z/p'
-
- * $C \rightarrow R, \quad$ the real part
- C -> R : the real part
-
-Finally, in Singular we allow the mapping from rings with coefficient
-field Q to rings whose ground fields have finite characteristic:
-
- * $Q \rightarrow Z/p$
- Q -> Z/p
-
- * $Q \rightarrow (Z/p)(a, \ldots)$
- Q -> (Z/p)(a,..)
-In these cases the denominator and the numerator of a number are mapped
-separately by the usual map from Z to Z/p, and the image of the number
-is built again afterwards by division. It is thus not allowed to map
-numbers whose denominator is divisible by the characteristic of the
-target ground field, or objects containing such numbers. We, therefore,
-strongly recommend using such maps only to map objects with integer
-coefficients.
-
-* Menu:
-
-* map declarations::
-* map expressions::
-* map operations::
-* fetch::
-* imap::
-* subst::
-
-See *note imap::; *note fetch::; *note subst::.
-
-
-File: sing.info, Node: map declarations, Next: map expressions, Prev: map,
Up: map
-
-4.8.1 map declarations
-----------------------
-
-*Syntax:*
- `map' name `=' preimage_ring_name `,' ideal_expression `;'
- `map' name `=' preimage_ring_name `,'
- list_of_poly_and_ideal_expressions `;'
- `map' name `=' map_expression `;'
-
-*Purpose:*
- defines a ring map from preimage_ring to basering.
- Maps the variables of the preimage ring to the generators of the
- ideal. If the ideal contains less elements than variables in the
- preimage_ring the remaining variables are mapped to 0, if the ideal
- contains more elements these are ignored. The image ring is always
- the actual basering. For the mapping of coefficients from
- different fields see *note map::.
-
-*Default:*
- none
-
-*Note:*
- There are standard mappings for maps which are close to the
- identity map: `fetch' and `imap'.
-
- The name of a map serves as the function which maps objects from
- the preimage_ring into the basering. These objects must be defined
- by names (no evaluation in the preimage ring is possible).
-
-*Example:*
-
- ring r1=32003,(x,y,z),dp;
- ideal i=x,y,z;
- ring r2=32003,(a,b),dp;
- map f=r1,a,b,a+b;
- // maps from r1 to r2,
- // x -> a
- // y -> b
- // z -> a+b
- f(i);
- ==> _[1]=a
- ==> _[2]=b
- ==> _[3]=a+b
- // operations like f(i[1]) or f(i*i) are not allowed
- ideal i=f(i);
- // objects in different rings may have the same name
- map g = r2,a2,b2;
- map phi = g(f);
- // composition of map f and g
- // maps from r1 to r2,
- // x -> a2
- // y -> b2
- // z -> a2+b2
- phi(i);
- ==> _[1]=a2
- ==> _[2]=b2
- ==> _[3]=a2+b2
-
-* Menu:
-
-See
-* fetch::
-* ideal expressions::
-* imap::
-* map::
-* ring::
-
-See *note fetch::; *note ideal expressions::; *note imap::; *note map::;
-*note ring::.
-
-
-File: sing.info, Node: map expressions, Next: map operations, Prev: map
declarations, Up: map
-
-4.8.2 map expressions
----------------------
-
-A map expression is:
- 1. an identifier of type map
-
- 2. a function returning map
-
- 3. map expressions combined by composition using parentheses (`(',
- `)')
-
-
-File: sing.info, Node: map operations, Prev: map expressions, Up: map
-
-4.8.3 map operations
---------------------
-
-`( )'
- composition of maps. If, for example, `f' and `g' are maps, then
- `f(g)' is a map expression giving the composition of `f' and `g'.
-
-map_expression `[' int_expressions `]'
- is a map entry (the image of the corresponding variable)
-
-
-*Example:*
- ring r=0,(x,y),dp;
- map f=r,y,x; // the map f permutes the variables
- f;
- ==> f[1]=y
- ==> f[2]=x
- poly p=x+2y3;
- f(p);
- ==> 2x3+y
- map g=f(f); // the map g defined as f^2 is the identity
- g;
- ==> g[1]=x
- ==> g[2]=y
- g(p) == p;
- ==> 1
-
-
-File: sing.info, Node: matrix, Next: module, Prev: map, Up: Data types
-
-4.9 matrix
-==========
-
-Objects of type matrix are matrices with polynomial entries. Like
-polynomials they can only be defined or accessed with respect to a
-basering. In order to compute with matrices having integer or rational
-entries define a ring with characteristic 0 and at least one variable.
-
-A matrix can be multiplied by and added to a poly; in this case the poly
-is converted into a matrix of the right size with the poly on the
-diagonal.
-
-If A is a matrix then the assignment `module M=A;' or `module
-M=module(A);' creates a module generated by the columns of A. Note that
-the trailing zero columns of A may be deleted by module operations with
-M.
-
-* Menu:
-
-* matrix declarations::
-* matrix expressions::
-* matrix type cast::
-* matrix operations::
-* matrix related functions::
-
-
-File: sing.info, Node: matrix declarations, Next: matrix expressions, Prev:
matrix, Up: matrix
-
-4.9.1 matrix declarations
--------------------------
-
-*Syntax:*
- `matrix' name`['rows`]['cols`] =' list_of_poly_expressions `;'
- `matrix' name = matrix_expression `;'
-
-*Purpose:*
- defines a matrix (of polynomials).
-
- The given poly_list fills up the matrix beginning with the first
- row from the left to the right, then the second row and so on. If
- the poly_list contains less than rows*cols elements, the matrix is
- filled up with zeros; if it contains more elements, then only the
- first rows*cols elements are used. If the right-hand side is a
- matrix expression the matrix on the left-hand side gets the same
- size as the right-hand side, otherwise the size is determined by
- the left-hand side. If the size is omitted a 1x1 matrix is
- created.
-
-*Default:*
- 0 (1 x 1 matrix)
-
-*Example:*
-
- int ro = 3;
- ring r = 32003,(x,y,z),dp;
- poly f=xyz;
- poly g=z*f;
- ideal i=f,g,g^2;
- matrix m[ro][3] = x3y4, 0, i, f ; // a 3 x 3 matrix
- m;
- ==> m[1,1]=x3y4
- ==> m[1,2]=0
- ==> m[1,3]=xyz
- ==> m[2,1]=xyz2
- ==> m[2,2]=x2y2z4
- ==> m[2,3]=xyz
- ==> m[3,1]=0
- ==> m[3,2]=0
- ==> m[3,3]=0
- print(m);
- ==> x3y4,0, xyz,
- ==> xyz2,x2y2z4,xyz,
- ==> 0, 0, 0
- matrix A; // the 1 x 1 zero matrix
- matrix B[2][2] = m[1..2, 2..3]; //defines a submatrix
- print(B);
- ==> 0, xyz,
- ==> x2y2z4,xyz
- matrix C=m; // defines C as a 3 x 3 matrix equal to m
- print(C);
- ==> x3y4,0, xyz,
- ==> xyz2,x2y2z4,xyz,
- ==> 0, 0, 0
-
-
-File: sing.info, Node: matrix expressions, Next: matrix type cast, Prev:
matrix declarations, Up: matrix
-
-4.9.2 matrix expressions
-------------------------
-
-A matrix expression is:
- 1. an identifier of type matrix
-
- 2. a function returning matrix
-
- 3. matrix expressions combined by the arithmetic operations `+', `-'
- or `*'
-
- 4. a type cast to matrix (*note matrix type cast::)
-
-
-*Example:*
- ring r=0,(x,y),dp;
- poly f= x3y2 + 2x2y2 +2;
- matrix H = jacob(jacob(f)); // the Hessian of f
- matrix mc = coef(f,y);
- print(mc);
- ==> y2, 1,
- ==> x3+2x2,2
- module MD = [x+y,1,x],[x+y,0,y];
- matrix M = MD;
- print(M);
- ==> x+y,x+y,
- ==> 1, 0,
- ==> x, y
-
-
-File: sing.info, Node: matrix type cast, Next: matrix operations, Prev:
matrix expressions, Up: matrix
-
-4.9.3 matrix type cast
-----------------------
-
-`*Syntax:*'
- `matrix (' expression `)'
- `matrix (' expression, int_n, int_m `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- Converts expression to a matrix, where expression must be of type
- int, intmat, intvec, number, poly, ideal, vector, module, or
- matrix. If int_n and int_m are supplied, then they specify the
- dimension of the matrix. Otherwise, the size (resp. dimensions) of
- the matrix are determined by the size (resp. dimensions) of the
- expression.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- matrix(x);
- ==> _[1,1]=x
- matrix(x, 1, 2);
- ==> _[1,1]=x
- ==> _[1,2]=0
- matrix(intmat(intvec(1,2,3,4), 2, 2));
- ==> _[1,1]=1
- ==> _[1,2]=2
- ==> _[2,1]=3
- ==> _[2,2]=4
- matrix(_, 2, 3);
- ==> _[1,1]=1
- ==> _[1,2]=2
- ==> _[1,3]=0
- ==> _[2,1]=3
- ==> _[2,2]=4
- ==> _[2,3]=0
- matrix(_, 2, 1);
- ==> _[1,1]=1
- ==> _[2,1]=3
-
-* Menu:
-
-See
-* Type conversion and casting::
-* intmat type cast::
-* matrix::
-
-See *note Type conversion and casting::; *note intmat type cast::; *note
-matrix::.
-
-
-File: sing.info, Node: matrix operations, Next: matrix related functions,
Prev: matrix type cast, Up: matrix
-
-4.9.4 matrix operations
------------------------
-
-`+'
- addition with matrix or poly; the poly is converted into a diagonal
- matrix
-
-`-'
- negation or subtraction with matrix or poly; the poly is converted
- into a diagonal matrix
-
-`*'
- multiplication with matrix or poly; the poly is converted into a
- diagonal matrix
-
-`/'
- division by poly
-
-`==', `<>', `!='
- comparison
-
-matrix_expression `[' int_expression`,' int_expression `]'
- is a matrix entry, where the first index indicates the row and the
- second the column
-
-
-*Example:*
- ring r=32003,x,dp;
- matrix A[3][3] = 1,3,2,5,0,3,2,4,5; // define a matrix
- print(A); // nice printing of small matrices
- ==> 1,3,2,
- ==> 5,0,3,
- ==> 2,4,5
- A[2,3]; // matrix entry
- ==> 3
- A[2,3] = A[2,3] + 1; // change entry
- A[2,1..3] = 1,2,3; // change 2nd row
- print(A);
- ==> 1,3,2,
- ==> 1,2,3,
- ==> 2,4,5
- matrix E[3][3]; E = E + 1; // the unit matrix
- matrix B =x*E - A;
- print(B);
- ==> x-1,-3, -2,
- ==> -1, x-2,-3,
- ==> -2, -4, x-5
- det(B); // the characteristic polynomial of A
- ==> x3-8x2-2x-1
- A*A*A - 8 * A*A - 2*A == E; // Cayley-Hamilton
- ==> 1
- vector v =[x,-1,x2];
- A*v; // multiplication of matrix and vector
- ==> _[1,1]=2x2+x-3
- ==> _[2,1]=3x2+x-2
- ==> _[3,1]=5x2+2x-4
- matrix m[2][2]=1,2,3;
- print(m-transpose(m));
- ==> 0,-1,
- ==> 1,0
-
-
-File: sing.info, Node: matrix related functions, Prev: matrix operations,
Up: matrix
-
-4.9.5 matrix related functions
-------------------------------
-
-`bareiss'
- Gauss-Bareiss algorithm (see *note bareiss::)
-
-`coef'
- matrix of coefficients and monomials (see *note coef::)
-
-`coeffs'
- matrix of coefficients (see *note coeffs::)
-
-`det'
- determinant (see *note det::)
-
-`diff'
- partial derivative (see *note diff::)
-
-`jacob'
- Jacobi matrix (see *note jacob::)
-
-`koszul'
- Koszul matrix (see *note koszul::)
-
-`lift'
- lift-matrix (see *note lift::)
-
-`liftstd'
- standard basis and transformation matrix computation (see *note
- liftstd::)
-
-`minor'
- set of minors of a matrix (see *note minor::)
-
-`ncols'
- number of columns (see *note ncols::)
-
-`nrows'
- number of rows (see *note nrows::)
-
-`print'
- nice print format (see *note print::)
-
-`size'
- number of matrix entries (see *note size::)
-
-`subst'
- substitute a ring variable (see *note subst::)
-
-`trace'
- trace of a matrix (see *note trace::)
-
-`transpose'
- transpose a matrix (see *note transpose::)
-
-`wedge'
- wedge product (see *note wedge::)
-
-See also the library *note matrix_lib::, which contains more
-matrix-related functions.
-
-
-File: sing.info, Node: module, Next: number, Prev: matrix, Up: Data types
-
-4.10 module
-===========
-
-Modules are submodules of a free module over the basering with basis
-`gen(1)', `gen(2)', ... . They are represented by lists of vectors
-which generate the submodule. Like vectors they can only be defined or
-accessed with respect to a basering. If M $M$
- is a submodule of R^n, $R^n$,
-
-R $R$
- the basering, generated by vectors v_1, ..., v_k, then v_1, ..., v_k $v_1,
\ldots, v_k$, then $v_1, \ldots, v_k$
-may be considered as the generators of relations of R^n/M $R^n/M$
-between the canonical generators `gen(1)',...,`gen(n)'. Hence any
-finitely generated R $R$
--module can be represented in SINGULAR by its module of relations. The
-assignments `module M=v1,...,vk; matrix A=M;' create the presentation
-matrix of size n x k n$\times$k
- for R^n/M, R$^n$/M,
-i.e., the columns of A are the vectors v_1, ..., v_k $v_1, \ldots, v_k$
-which generate M (cf. *note Representation of mathematical objects::).
-
-* Menu:
-
-* module declarations::
-* module expressions::
-* module operations::
-* module related functions::
-
-
-File: sing.info, Node: module declarations, Next: module expressions, Prev:
module, Up: module
-
-4.10.1 module declarations
---------------------------
-
-*Syntax:*
- `module' name `=' list_of_vector_expressions `;'
- `module' name `=' module_expression `;'
-
-*Purpose:*
- defines a module.
-
-*Default:*
- [0]
-
-*Example:*
-
- ring r=0,(x,y,z),(c,dp);
- vector s1 = [x2,y3,z];
- vector s2 = [xy,1,0];
- vector s3 = [0,x2-y2,z];
- poly f = xyz;
- module m = s1, s2-s1,f*(s3-s1);
- m;
- ==> m[1]=[x2,y3,z]
- ==> m[2]=[-x2+xy,-y3+1,-z]
- ==> m[3]=[-x3yz,-xy4z+x3yz-xy3z]
- // show m in matrix format (columns generate m)
- print(m);
- ==> x2,-x2+xy,-x3yz,
- ==> y3,-y3+1, -xy4z+x3yz-xy3z,
- ==> z, -z, 0
-
-
-File: sing.info, Node: module expressions, Next: module operations, Prev:
module declarations, Up: module
-
-4.10.2 module expressions
--------------------------
-
-A module expression is:
- 1. an identifier of type module
-
- 2. a function returning module
-
- 3. module expressions combined by the arithmetic operation `+'
-
- 4. multiplication of a module expression with an ideal or a poly
- expression: `*'
-
- 5. a type cast to module
-
-* Menu:
-
-See
-* Type conversion and casting::
-* ideal::
-* poly::
-* vector::
-
-See *note Type conversion and casting::; *note ideal::; *note poly::;
-*note vector::.
-
-
-File: sing.info, Node: module operations, Next: module related functions,
Prev: module expressions, Up: module
-
-4.10.3 module operations
-------------------------
-
-`+'
- addition (concatenation of the generators and simplification)
-
-`*'
- multiplication with ideal or poly, but not `module` * `module`
-
-module_expression `[' int_expression `,' int_expression `]'
- is a module entry, where the first index indicates the row and the
- second the column
-
-module_expressions `[' int_expression `]'
- is a vector, where the index indicates the column
-
-
-*Example:*
- ring r=0,(x,y,z),dp;
- module m=[x,y],[0,0,z];
- print(m*(x+y));
- ==> x2+xy,0,
- ==> xy+y2,0,
- ==> 0, xz+yz
-
-
-File: sing.info, Node: module related functions, Prev: module operations,
Up: module
-
-4.10.4 module related functions
--------------------------------
-
-`coeffs'
- matrix of coefficients (see *note coeffs::)
-
-`degree'
- multiplicity, dimension and codimension of the module of leading
- terms (see *note degree::)
-
-`diff'
- partial derivative (see *note diff::)
-
-`dim'
- Krull dimension of free module over the basering modulo the module
- of leading terms (see *note dim::)
-
-`eliminate'
- elimination of variables (see *note eliminate::)
-
-`freemodule'
- the free module of given rank (see *note freemodule::)
-
-`groebner'
- Groebner basis computation (a wrapper around
- `std,stdhilb,stdfglm',...) (see *note groebner::)
-
-`hilb'
- Hilbert function of a standard basis (see *note hilb::)
-
-`homog'
- homogenization with respect to a variable (see *note homog::)
-
-`interred'
- interreduction of a module (see *note interred::)
-
-`intersect'
- module intersection (see *note intersect::)
-
-`jet'
- Taylor series up to a given order (see *note jet::)
-
-`kbase'
- vector space basis of free module over the basering modulo the
- module of leading terms (see *note kbase::)
-
-`lead'
- initial module (see *note lead::)
-
-`lift'
- lift-matrix (see *note lift::)
-
-`liftstd'
- standard basis and transformation matrix computation (see *note
- liftstd::)
-
-`lres'
- free resolution (see *note lres::)
-
-`minbase'
- minimal generating set of a homogeneous ideal, resp. module, or an
- ideal, resp. module, over a local ring
-
-`modulo'
- represents $(h1+h2)/h1=h2/(h1 \cap h2)$
- (h1+h2)/h1=h2/(h1 intersect h2) (see *note modulo::)
-
-`mres'
- minimal free resolution of an ideal resp. module w.r.t. a minimal
- set of generators of the given module (see *note mres::)
-
-`mult'
- multiplicity, resp. degree, of the module of leading terms (see
- *note mult::)
-
-`ncols'
- number of columns (see *note ncols::)
-
-`nrows'
- number of rows (see *note nrows::)
-
-`print'
- nice print format (see *note print::)
-
-`prune'
- minimize the embedding into a free module (see *note prune::)
-
-`qhweight'
- quasihomogeneous weights of an ideal, resp. module (see *note
- qhweight::)
-
-`quotient'
- module quotient (see *note quotient::)
-
-`reduce'
- normalform with respect to a standard basis (see *note reduce::)
-
-`res'
- free resolution of an ideal, resp. module, but not changing the
- given ideal, resp. module (see *note res::)
-
-`simplify'
- simplify a set of vectors (see *note simplify::)
-
-`size'
- number of non-zero generators (see *note size::)
-
-`sortvec'
- permutation for sorting ideals/modules (see *note sortvec::)
-
-`sres'
- free resolution of a standard basis (see *note sres::)
-
-`std'
- standard basis computation (see *note std::, *note liftstd::)
-
-`subst'
- substitute a ring variable (see *note subst::)
-
-`syz'
- computation of the first syzygy module (see *note syz::)
-
-`vdim'
- vector space dimension of free module over the basering modulo
- module of leading terms (see *note vdim::)
-
-`weight'
- "optimal" weights (see *note weight::)
-
-
-File: sing.info, Node: number, Next: poly, Prev: module, Up: Data types
-
-4.11 number
-===========
-
-Numbers are elements from the coefficient field (or ground field). They
-can only be defined or accessed with respect to a basering which
-determines the coefficient field. See *note ring declarations:: for
-declarations of coefficient fields.
-
-*Warning:* Beware of the special meaning of the letter `e' (immediately
-following a sequence of digits) if the field is real (or complex). See
-*note number operations::, *note Miscellaneous oddities::.
-
-* Menu:
-
-* number declarations::
-* number expressions::
-* number operations::
-* number related functions::
-
-
-File: sing.info, Node: number declarations, Next: number expressions, Prev:
number, Up: number
-
-4.11.1 number declarations
---------------------------
-
-*Syntax:*
- `number' name `=' number_expression `;'
-
-*Purpose:*
- defines a number.
-
-*Default:*
- 0
-
-*Note:*
- Numbers may only be declared w.r.t. the coefficient field of the
- current basering, i.e., a ring has to be defined prior to any
- number declaration. See *note Rings and orderings:: for a list of
- the available coefficient fields.
-
-*Example:*
-
- // finite field Z/p, p<= 32003
- ring r = 32003,(x,y,z),dp;
- number n = 4/6;
- n;
- ==> -10667
- // finite field GF(p^n), p^n <= 32767
- // z is a primitive root of the minimal polynomial
- ring rg= (7^2,z),x,dp;
- number n = 4/9+z;
- n;
- ==> z11
- // the rational numbers
- ring r0 = 0,x,dp;
- number n = 4/6;
- n;
- ==> 2/3
- // algebraic extensions of Z/p or Q
- ring ra=(0,a),x,dp;
- minpoly=a^2+1;
- number n=a3+a2+2a-1;
- n;
- ==> (a-2)
- a^2;
- ==> -1
- // transcedental extensions of Z/p or Q
- ring rt=(0,a),x,dp;
- number n=a3+a2+2a-1;
- n;
- ==> (a3+a2+2a-1)
- a^2;
- ==> (a2)
- // machine floating point numbers, single precision
- ring R_0=real,x,dp;
- number n=4/6;
- n;
- ==> 6.667e-01
- n=0.25e+2;
- n;
- ==> 2.500e+01
- // floating point numbers, arbitrary prescribed precision
- ring R_1=(real,50),x,dp;
- number n=4.0/6;
- n;
- ==> 0.66666666666666666666666666666666666666666666666667
- n=0.25e+2;
- n;
- ==> 25
- // floating point complex numbers, arbitrary prescribed precision
- // the third parameter gives the name of the imaginary unit
- ring R_2=(complex,50,i),x,dp;
- number n=4.0/6;
- n;
- ==> 0.66666666666666666666666666666666666666666666666667
- n=0.25e+2*i+n;
- n;
- ==> (0.66666666666666666666666666666666666666666666666667+i*25)
-
-
-File: sing.info, Node: number expressions, Next: number operations, Prev:
number declarations, Up: number
-
-4.11.2 number expressions
--------------------------
-
-A number expression is:
- 1. a rational number (there are NO spaces allowed inside a rational
- number, see *note int expressions::)
-
- 2. a floating point number (if the coefficient field is `real'):
- <digits>`.'<digits>`e'<sign><digits>
-
- 3. an identifier of type number
-
- 4. a function returning number
-
- 5. an int expression (see *note Type conversion and casting::)
-
- 6. number expressions combined by the arithmetic operations `+', `-',
- `*', `/', `^', or `**'.
-
- 7. a type cast to number
-
-
-*Example:*
- // the following expressions are in any ring int expressions
- 2 / 3;
- ==> 0
- 4/ 8;
- ==> 0
- 2 /2; // the notation of / for div might change in the future
- ==> 1
- ring r0=0,x,dp;
- 2/3, 4/8, 2/2 ; // are numbers
- ==> 2/3 1/2 1
-
- poly f = 2x2 +1;
- leadcoef(f);
- ==> 2
- typeof(_);
- ==> number
- ring rr =real,x,dp;
- 1.7e-2; 1.7e+2; // are valid (but 1.7e2 not), if the field is `real`
- ==> 1.700e-02
- ==> 1.700e+02
- ring rp = (31,t),x,dp;
- 2/3, 4/8, 2/2 ; // are numbers
- ==> 11 -15 1
- poly g = (3t2 +1)*x2 +1;
- leadcoef(g);
- ==> (3t2+1)
- typeof(_);
- ==> number
- par(1);
- ==> (t)
- typeof(_);
- ==> number
-
-* Menu:
-
-See
-* Type conversion and casting::
-* ring::
-
-See *note Type conversion and casting::; *note ring::.
-
-
-File: sing.info, Node: number operations, Next: number related functions,
Prev: number expressions, Up: number
-
-4.11.3 number operations
-------------------------
-
-`+'
- addition
-
-`-'
- negation or subtraction
-
-`*'
- multiplication
-
-`/'
- division
-
-`^', `**'
- power, exponentiation (by an integer)
-
-`<=, >=, ==, <>'
- comparison
-
-`mod'
- integer modulo (the remainder of the division `div'), always
- non-negative
-
-*Note:* quotient and exponentiation is only recognized as a number
-expression if it is already a number, see *note Miscellaneous
-oddities::.
-For the behavior of comparison operators in rings with ground field
-different from real or the rational numbers, see *note boolean
-expressions::.
-
-
-*Example:*
- ring r=0,x,dp;
- number n = 1/2 +1/3;
- n;
- ==> 5/6
- n/2;
- ==> 5/12
- 1/2/3;
- ==> 1/6
- 1/2 * 1/3;
- ==> 1/6
- n = 2;
- n^-2;
- ==> 1/4
- // the following oddities appear here
- 2/(2+3);
- ==> 0
- number(2)/(2+3);
- ==> 2/5
- 2^-2; // for int's exponent must be non-negative
- ==> ? exponent must be non-negative
- ==> ? error occurred in line 12: ` 2^-2; // for int's exponent must
be no\
- n-negative`
- number(2)^-2;
- ==> 1/4
- 3/4>=2/5;
- ==> 1
- 2/6==1/3;
- ==> 1
-
-
-File: sing.info, Node: number related functions, Prev: number operations,
Up: number
-
-4.11.4 number related functions
--------------------------------
-
-`cleardenom'
- cancel denominators of numbers in poly and divide it by its content
- (see *note cleardenom::)
-
-`impart'
- imaginary part of a complex number, 0 otherwise (see *note
- impart::, *note repart::)
-
-`numerator, denominator'
- return the numerator/denominator of a rational number (see *note
- numerator::, *note denominator::)
-
-`leadcoef'
- coefficient of the leading term (see *note leadcoef::)
-
-`par'
- n-th parameter of the basering (see *note par::)
-
-`pardeg'
- degree of a number in ring parameters (see *note pardeg::)
-
-`parstr'
- string form of ring parameters (see *note parstr::)
-
-`repart'
- real part of a complex number (see *note impart::, *note repart::)
-
-
-File: sing.info, Node: poly, Next: proc, Prev: number, Up: Data types
-
-4.12 poly
-=========
-
-Polynomials are the basic data for all main algorithms in `SINGULAR'.
-They consist of finitely many terms (coefficient*power product) which
-are combined by the usual polynomial operations (see *note poly
-expressions::). Polynomials can only be defined or accessed with respect
-to a basering which determines the coefficient type, the names of the
-indeterminates and the monomial ordering.
-
- ring r=32003,(x,y,z),dp;
- poly f=x3+y5+z2;
-
-* Menu:
-
-* poly declarations::
-* poly expressions::
-* poly operations::
-* poly related functions::
-
-
-File: sing.info, Node: poly declarations, Next: poly expressions, Prev:
poly, Up: poly
-
-4.12.1 poly declarations
-------------------------
-
-*Syntax:*
- `poly' name `=' poly_expression `;'
-
-*Purpose:*
- defines a polynomial.
-
-*Default:*
- 0
-
-*Example:*
-
- ring r = 32003,(x,y,z),dp;
- poly s1 = x3y2+151x5y+186xy6+169y9;
- poly s2 = 1*x^2*y^2*z^2+3z8;
- poly s3 = 5/4x4y2+4/5*x*y^5+2x2y2z3+y7+11x10;
- int a,b,c,t=37,5,4,1;
- poly f=3*x^a+x*y^(b+c)+t*x^a*y^b*z^c;
- f;
- ==> x37y5z4+3x37+xy9
- short = 0;
- f;
- ==> x^37*y^5*z^4+3*x^37+x*y^9
-
-* Menu:
-
-See also:
-* short::
-
-*See also:* *note short::.
-
-
-File: sing.info, Node: poly expressions, Next: poly operations, Prev: poly
declarations, Up: poly
-
-4.12.2 poly expressions
------------------------
-
-A poly expression is (optional parts in square brackets):
- 1. a monomial (there are NO spaces allowed inside a monomial)
-
- [coefficient] ring_variable [ exponent] [ring_variable [exponent]
...]
-
- monomials which contain an indexed ring variable must be built from
- `ring_variable' and `coefficient' with the operations `*' and `^'
-
- 2. an identifier of type poly
-
- 3. a function returning poly
-
- 4. poly expressions combined by the arithmetic operations `+', `-',
- `*', `/', or `^'
-
- 5. an int expression (see *note Type conversion and casting::)
-
- 6. a type cast to poly
-
-
-*Example:*
- 2x, x3, 2x2y3, xyz, 2xy2; // are monomials
- 2*x, x^3, 2*x^2*y^3, x*y*z, 2*x*y^2; // are poly expressions
- 2*x(1); // is a valid poly expression, but not 2x(1) (a syntax error)
- 2*x^3; // is a valid poly expression equal to 2x3 (a valid monomial)
- // but not equal to 2x^3 which will be interpreted as (2x)^3
- // since 2x is a monomial
- ring r=0,(x,y),dp;
- poly f = 10x2y3 +2x2y2-2xy+y -x+2;
- lead(f);
- ==> 10x2y3
- leadmonom(f);
- ==> x2y3
- simplify(f,1); // normalize leading coefficient
- ==> x2y3+1/5x2y2-1/5xy-1/10x+1/10y+1/5
- poly g = 1/2x2 + 1/3y;
- cleardenom(g);
- ==> 3x2+2y
- int i = 102;
- poly(i);
- ==> 102
- typeof(_);
- ==> poly
-
-* Menu:
-
-See
-* Type conversion and casting::
-* ring::
-
-See *note Type conversion and casting::; *note ring::.
-
-
-File: sing.info, Node: poly operations, Next: poly related functions, Prev:
poly expressions, Up: poly
-
-4.12.3 poly operations
-----------------------
-
-`+'
- addition
-
-`-'
- negation or subtraction
-
-`*'
- multiplication
-
-`/'
- division by a polynomial, ignoring the rest
-
-`^', `**'
- power by an integer
-
-`<', `<=', `>', `>=', `==', `<>'
- comparison (w.r.t. monomial ordering)
-
-poly_expression `[' intvec_expression `]'
- the monomial at the indicated place w.r.t. the monomial ordering
-
-
-*Example:*
- ring R=0,(x,y),dp;
- poly f = x3y2 + 2x2y2 + xy - x + y + 1;
- f;
- ==> x3y2+2x2y2+xy-x+y+1
- f + x5 + 2;
- ==> x5+x3y2+2x2y2+xy-x+y+3
- f * x2;
- ==> x5y2+2x4y2+x3y-x3+x2y+x2
- (x+y)/x;
- ==> 1
- f/3x2;
- ==> 1/3xy2+2/3y2
- x5 > f;
- ==> 1
- x<=y;
- ==> 0
- x>y;
- ==> 1
- ring r=0,(x,y),ds;
- poly f = fetch(R,f);
- f;
- ==> 1-x+y+xy+2x2y2+x3y2
- x5 > f;
- ==> 0
- f[2..4];
- ==> -x+y+xy
- size(f);
- ==> 6
- f[size(f)+1]; f[-1]; // monomials out of range are 0
- ==> 0
- ==> 0
- intvec v = 6,1,3;
- f[v]; // the polynom built from the 1st, 3rd and 6th monomial
of f
- ==> 1+y+x3y2
-
-
-File: sing.info, Node: poly related functions, Prev: poly operations, Up:
poly
-
-4.12.4 poly related functions
------------------------------
-
-`cleardenom'
- cancel denominators of numbers in poly and divide it by its content
- (see *note cleardenom::)
-
-`coef'
- matrix of coefficients and monomials (see *note coef::)
-
-`coeffs'
- matrix of coefficients (see *note coeffs::)
-
-`deg'
- degree (see *note deg::)
-
-`det'
- determinant (see *note det::)
-
-`diff'
- partial derivative (see *note diff::)
-
-`extgcd'
- Bezout representation of gcd (see *note extgcd::)
-
-`factorize'
- factorize polynomial (see *note factorize::)
-
-`finduni'
- find univariate polynomials in a zero-dimensional ideal (see *note
- finduni::)
-
-`gcd'
- greatest common divisor (see *note gcd::)
-
-`homog'
- homogenization (see *note homog::)
-
-`jacob'
- ideal, resp. matrix, of all partial derivatives (see *note jacob::)
-
-`lead'
- leading term (see *note lead::)
-
-`leadcoef'
- coefficient of the leading term (see *note leadcoef::)
-
-`leadexp'
- the exponent vector of the leading monomial (see *note leadexp::)
-
-`leadmonom'
- leading monomial (see *note leadmonom::)
-
-`jet'
- monomials with degree smaller k+1 (see *note jet::)
-
-`ord'
- degree of the leading monomial (see *note ord::)
-
-`qhweight'
- quasihomogeneous weights (see *note qhweight::)
-
-`reduce'
- normal form with respect to a standard base (see *note reduce::)
-
-`rvar'
- test for ring variable (see *note rvar::)
-
-`simplify'
- normalize a polynomial (see *note simplify::)
-
-`size'
- number of monomials (see *note size::)
-
-`subst'
- substitute a ring variable (see *note subst::)
-
-`trace'
- trace of a matrix (see *note trace::)
-
-`var'
- the indicated variable of the ring (see *note var::)
-
-`varstr'
- variable in string form (see *note varstr::)
-
-
-File: sing.info, Node: proc, Next: qring, Prev: poly, Up: Data types
-
-4.13 proc
-=========
-
-Procedures are sequences of SINGULAR commands in a special format. They
-are used to extend the set of SINGULAR commands with user defined
-commands. Once a procedure is defined it can be used as any other
-SINGULAR command. Procedures may be defined by either typing them on the
-command line or by loading them from a file. For a detailed description
-on the concept of procedures in SINGULAR see *note Procedures::. A file
-containing procedure definitions which comply with certain syntax rules
-is called a library. Such a file is loaded using the command `LIB'. For
-more information on libraries see *note Libraries::.
-
-* Menu:
-
-* proc declaration::
-
-
-File: sing.info, Node: proc declaration, Prev: proc, Up: proc
-
-4.13.1 proc declaration
------------------------
-
-*Syntax:*
- [`static'] `proc' proc_name [parameter_list]
- ["help_text"]
- `{'
-\quad
- procedure_body
- `}'
- [`example'
- `{'
-\quad
- sequence_of_commands;
- `}']
- `proc' proc_name `=' proc_name `;'
- `proc' proc_name `=' string_expression `;'
-
-*Purpose:*
- defines a new function, the `proc' proc_name, with the additional
- information help_text, which is copied to the screen by `help
- proc_name;' and the `example' section which is executed by `example
- proc_name;'.
- The help_text, the parameter_list, and the example section are
- optional. The default for a parameter_list is `(list #)', see
- *note Parameter list::. The help and example sections are ignored
- if the procedure is defined interactively, i.e., if it was not
- loaded from a file by a *note LIB:: command.
- Specifying `static' in front of the proc-definition is only
- possible in a library file and makes this procedure local to the
- library, i.e., accessible only for the other procedures in the same
- library, but not for the users.
-
-*Example:*
-
- proc milnor_number (poly p)
- {
- ideal i= std(jacob(p));
- int m_nr=vdim(i);
- if (m_nr<0)
- {
- "// not an isolated singularity";
- }
- return(m_nr); // the value of m_nr is returned
- }
- ring r1=0,(x,y,z),ds;
- poly p=x^2+y^2+z^5;
- milnor_number(p);
- ==> 4
-
-* Menu:
-
-See
-* LIB::
-* Libraries::
-* Procedures::
-
-See *note LIB::; *note Libraries::; *note Procedures::.
-
-
-File: sing.info, Node: qring, Next: resolution, Prev: proc, Up: Data types
-
-4.14 qring
-==========
-
-SINGULAR offers the opportunity to calculate in quotient rings (factor
-rings), i.e., rings modulo an ideal. The ideal has to be given as a
-standard basis. For a detailed description of the concept of rings and
-quotient rings see *note Rings and orderings::.
-
-* Menu:
-
-* qring declaration::
-
-
-File: sing.info, Node: qring declaration, Prev: qring, Up: qring
-
-4.14.1 qring declaration
-------------------------
-
-*Syntax:*
- `qring' name `=' ideal_expression `;'
-
-*Default:*
- none
-
-*Purpose:*
- declares a quotient ring as the basering modulo ideal_expression.
- Sets it as current basering.
-
-*Example:*
-
- ring r=0,(x,y,z),dp;
- ideal i=xy;
- qring q=std(i);
- basering;
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> // quotient ring from ideal
- ==> _[1]=xy
-
-
-File: sing.info, Node: resolution, Next: ring, Prev: qring, Up: Data types
-
-4.15 resolution
-===============
-
-The resolution type is intended as an intermediate representation which
-internally retains additional information obtained during computation of
-resolutions. It furthermore enables the use of partial results to
-compute, for example, Betti numbers or minimal resolutions. Like ideals
-and modules, a resolution can only be defined w.r.t. a basering.
-
-*Note:* to access the elements of a resolution, it has to be assigned to
-a list, which also completes computations and may therefore take time,
-(resp. an access directly with the brackets `[ , ]' causes implicitly a
-cast to a list).
-
-* Menu:
-
-* resolution declarations::
-* resolution expressions::
-* resolution related functions::
-
-
-File: sing.info, Node: resolution declarations, Next: resolution
expressions, Prev: resolution, Up: resolution
-
-4.15.1 resolution declarations
-------------------------------
-
-*Syntax:*
- `resolution' name `=' resolution_expression `;'
-
-*Purpose:*
- defines a resolution.
-
-*Default:*
- none
-
-*Example:*
-
- ring R;
- ideal i=z2,x;
- resolution re=res(i,0);
- re;
- ==> 1 2 1
- ==> R <-- R <-- R
- ==>
- ==> 0 1 2
- ==> resolution not minimized yet
- ==>
- betti(re);
- ==> 1,1,0,
- ==> 0,1,1
- list l = re;
- l;
- ==> [1]:
- ==> _[1]=x
- ==> _[2]=z2
- ==> [2]:
- ==> _[1]=-z2*gen(1)+x*gen(2)
- ==> [3]:
- ==> _[1]=0
-
-
-File: sing.info, Node: resolution expressions, Next: resolution related
functions, Prev: resolution declarations, Up: resolution
-
-4.15.2 resolution expressions
------------------------------
-
-A resolution expression is:
- 1. an identifier of type resolution
-
- 2. a function returning a resolution
-
- 3. a type cast to resolution from a list of ideals, resp. modules..
-
-* Menu:
-
-See
-* Type conversion and casting::
-
-See *note Type conversion and casting::.
-
-
-File: sing.info, Node: resolution related functions, Prev: resolution
expressions, Up: resolution
-
-4.15.3 resolution related functions
------------------------------------
-
-`betti'
- Betti numbers of a resolution (see *note betti::)
-
-`lres'
- free resolution (see *note lres::)
-
-`minres'
- minimize a free resolution (see *note minres::)
-
-`mres'
- minimal free resolution of an ideal, resp. module w.r.t. a minimal
- set of generators of the given ideal, resp. module (see *note
- mres::)
-
-`res'
- free resolution of an ideal, resp. module, but not changing the
- given ideal, resp. module (see *note res::)
-
-`sres'
- free resolution of a standard basis (see *note sres::)
-
-
-File: sing.info, Node: ring, Next: string, Prev: resolution, Up: Data types
-
-4.16 ring
-=========
-
-Rings are used to describe properties of polynomials, ideals etc.
-Almost all computations in SINGULAR require a basering. For a detailed
-description of the concept of rings see *note Rings and orderings::.
-
-* Menu:
-
-* ring declarations::
-* ring related functions::
-* ring operations::
-
-
-File: sing.info, Node: ring declarations, Next: ring related functions,
Prev: ring, Up: ring
-
-4.16.1 ring declarations
-------------------------
-
-*Syntax:*
- `ring' name `= (' coefficient_field `),' `('
- names_of_ring_variables `),' `(' ordering `);'
-
-*Default:*
- `32003,(x,y,z),(dp,C);'
-
-*Purpose:*
- declares a ring and sets it as the actual basering.
-
-The coefficient_field is given by one of the following:
- 1. a non-negative int_expression less or equal 2147483629.
-
- 2. an expression_list of an int_expression and one or more names.
-
- 3. the name `real'
-
- 4. an expression_list of the name `real' and an int_expression.
-
- 5. an expression_list of the name `complex', an optional
- int_expression and a name.
-
-For the definition of the 'coefficient_field', see *note Rings and
-orderings::.
-
-'names_of_ring_variables' must be a list of names or indexed names.
-
-'ordering' is a list of block orderings where each block ordering is
-either
- 1. `lp', `dp', `Dp', `ls', `ds', or `Ds' optionally followed by a size
- parameter in parentheses.
-
- 2. `wp', `Wp', `ws', `Ws', or `a' followed by a weight vector given as
- an intvec_expression in parentheses.
-
- 3. `M' followed by an intmat_expression in parentheses.
-
- 4. `c' or `C'.
-
-For the definition of the orderings, see *note Term orderings::, *note
-Monomial orderings::.
-
-If one of coefficient_field, names_of_ring_variables, and ordering
-consists of only one entry, the parentheses around this entry may be
-omitted.
-
-
-File: sing.info, Node: ring related functions, Next: ring operations, Prev:
ring declarations, Up: ring
-
-4.16.2 ring related functions
------------------------------
-
-`charstr'
- description of the coefficient field of a ring (see *note
- charstr::)
-
-`keepring'
- move ring to next upper level (see *note keepring::)
-
-`npars'
- number of ring parameters (see *note npars::)
-
-`nvars'
- number of ring variables (see *note nvars::)
-
-`ordstr'
- monomial ordering of a ring (see *note ordstr::)
-
-`parstr'
- names of all ring parameters or the name of the n-th ring parameter
- (see *note parstr::)
-
-`qring'
- quotient ring (see *note qring::)
-
-`setring'
- set a new basering (see *note setring::)
-
-`varstr'
- names of all ring variables or the name of the n-th ring variable
- (see *note varstr::)
-
-
-File: sing.info, Node: ring operations, Prev: ring related functions, Up:
ring
-
-4.16.3 ring operations
-----------------------
-
-`+'
- construct a new ring k[X,Y] $k[X,Y]$
- from k_1[X] $k_1[X]$
- and k_2[Y] $k_2[Y]$
- .
-
-Concerning the ground fields k_1 $k_1$
- and k_2 $k_2$
- take the following guide lines into consideration:
- * Neither k_1 $k_1$
- nor k_2 $k_2$
- may be R $R$
- or C $C$
- .
-
- * If the characteristic of k_1 $k_1$
- and k_2 $k_2$
- differs, then one of them must be Q $Q$
- .
-
- * At most one of k_1 $k_1$
- and k_2 $k_2$
- may be have parameters.
-
- * If one of k_1 $k_1$
- and k_2 $k_2$
- is an algebraic extension of Z/p $Z/p$
- it may not be defined by a `charstr' of type `(p^n,a)'.
-
-*Example:*
- ring R1=0,(x,y),dp;
- ring R2=32003,(a,b),dp;
- def R=R1+R2;
- R;
- ==> // characteristic : 32003
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names x y
- ==> // block 2 : ordering dp
- ==> // : names a b
- ==> // block 3 : ordering C
-
-* Menu:
-
-See also:
-* ring_lib::
-
-*See also:* *note ring_lib::.
-
-
-File: sing.info, Node: string, Next: vector, Prev: ring, Up: Data types
-
-4.17 string
-===========
-
-Variables of type `string' are used for output (almost every type can be
-"converted" to `string') and for creating new commands at runtime see
-*note execute::. They are also return values of certain interpreter
-related functions (see *note Functions::). String constants consist of
-a sequence of ANY characters (including newline!) between a starting
-`"' and a closing `"'. There is also a string constant `newline', which
-is the newline character. The `+' sign "adds" strings, `""' is the
-empty string (hence strings form a semigroup). Strings may be used to
-comment the output of a computation or to give it a nice format. Strings
-may also be used for intermediate conversion of one type into another.
-
- string s="Hi";
- string s1="a string with new line at the end"+newline;
- string s2="another string with new line at the end
- ";
- s;s1;s2;
- ==> Hi
- ==> a string with new line at the end
- ==>
- ==> another string with new line at the end
- ==>
- ring r; ideal i=std(ideal(x,y^3));
- "dimension of i =",dim(i),", multiplicity of i =",mult(i);
- ==> dimension of i = 1 , multiplicity of i = 3
- "dimension of i = "+string(dim(i))+", multiplicity of i =
"+string(mult(i));
- ==> dimension of i = 1, multiplicity of i = 3
- "a"+"b","c";
- ==> ab c
-A comma between two strings makes an expression list out of them (such a
-list is printed with a separating blank in between), while a `+'
-concatenates strings.
-
-* Menu:
-
-* string declarations::
-* string expressions::
-* string type cast::
-* string operations::
-* string related functions::
-
-
-File: sing.info, Node: string declarations, Next: string expressions, Prev:
string, Up: string
-
-4.17.1 string declarations
---------------------------
-
-*Syntax:*
- `string' name `=' string_expression `;'
- `string' name `=' list_of_string_expressions `;'
-
-*Purpose:*
- defines a string variable.
-
-*Default:*
- "" (the empty string)
-
-*Example:*
-
- string s1="Now I know";
- string s2="how to encode a \" in a string...";
- string s=s1+" "+s2; // concatenation of 3 strings
- s;
- ==> Now I know how to encode a " in a string...
- s1,s2; // 2 strings, separated by a blank in the output:
- ==> Now I know how to encode a " in a string...
-
-
-File: sing.info, Node: string expressions, Next: string type cast, Prev:
string declarations, Up: string
-
-4.17.2 string expressions
--------------------------
-
-A string expression is:
- 1. a sequence of characters between two unescaped quotes (`"')
-
- 2. an identifier of type string
-
- 3. a function returning string
-
- 4. a substring (using the bracket operator)
-
- 5. a type cast to string (*note string type cast::)
-
- 6. string expressions combined by the operation `+'.
-
-
-*Example:*
- // string_expression[start, length] : a substring
- // (possibly filled up with blanks)
- // the substring of s starting at position 2
- // with a length of 4
- string s="123456";
- s[2,4];
- ==> 2345
- "abcd"[2,2];
- ==> bc
- // string_expression[position] : a character from a string
- s[3];
- ==> 3
- // string_expression[position..position] :
- // a substring starting at the first position up to the second
- // given position
- s[2..4];
- ==> 2 3 4
- // a function returning a string
- typeof(s);
- ==> string
-
-* Menu:
-
-See
-* Type conversion and casting::
-* string type cast::
-
-See *note Type conversion and casting::; *note string type cast::.
-
-
-File: sing.info, Node: string type cast, Next: string operations, Prev:
string expressions, Up: string
-
-4.17.3 string type cast
------------------------
-
-`*Syntax:*'
- `string (' expression [, expression_2, ... expression_n]`)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- Converts each expression to a string, where expression can be of
- any type. The concatenated string of all concersions is returned.
-
-
- The elements of intvec, intmat, ideal, module, matrix, and list,
- are separated by a comma. No newlines are inserted.
- Not defined elements of a list are omitted.
- For link, the name of the link is used.
- For map, the ideal defining the mapping is converted.
-
-`*Note:*'
- When applied to a list, elements of type intvec, intmat, ideal,
- module, matrix, and list become indistinguishable.
-
-`*Example:*'
-
- string("1+1=", 2);
- ==> 1+1=2
- string(intvec(1,2,3,4));
- ==> 1,2,3,4
- string(intmat(intvec(1,2,3,4), 2, 2));
- ==> 1,2,3,4
- ring r;
- string(r);
- ==> (32003),(x,y,z),(dp(3),C)
- string(ideal(x,y));
- ==> x,y
- qring R = std(ideal(x,y));
- string(R);
- ==> (32003),(x,y,z),(dp(3),C)
- map phi = r, ideal(x,z);
- string(phi);
- ==> x,z
- list l;
- string(l);
- ==>
- l[3] = 1;
- string(l); // notice that l[1],l[2] are omitted
- ==> 1
- l[2] = l;
- l;
- ==> [2]:
- ==> [3]:
- ==> 1
- ==> [3]:
- ==> 1
- string(l); // notice that lists of list is flattened
- ==> 1,1
- l[1] = intvec(1,2,3);
- l;
- ==> [1]:
- ==> 1,2,3
- ==> [2]:
- ==> [3]:
- ==> 1
- ==> [3]:
- ==> 1
- string(l); // notice that intvec elements are not distinguishable
- ==> 1,2,3,1,1
-
-* Menu:
-
-See
-* Type conversion and casting::
-* print::
-* string::
-
-See *note Type conversion and casting::; *note print::; *note string::.
-
-
-File: sing.info, Node: string operations, Next: string related functions,
Prev: string type cast, Up: string
-
-4.17.4 string operations
-------------------------
-
-`+'
- concatenation
-
-`<=', `>=', `==', `<>'
- comparison (lexicographical with respect to the ASCII encoding)
-
-string_expression `[' int_expression `]'
- is a character of the string; the index 1 gives the first
- character.
-
-string_expression `[' int_expression`,' int_expression `]'
- is a substring, where the first argument is the start index and the
- second is the length of the substring, filled up with blanks if the
- length exceeds the total size of the string
-
-string_expression `[' intvec_expression `]'
- is a expression list of characters from the string
-
-
-*Example:*
- string s="abcde";
- s[2];
- ==> b
- s[3,2];
- ==> cd
- ">>"+s[1,10]+"<<";
- ==> >>abcde <<
- s[2]="BC"; s;
- ==> aBcde
- intvec v=1,3,5;
- s=s[v]; s;
- ==> ace
- s="123456"; s=s[3..5]; s;
- ==> 345
-
-
-File: sing.info, Node: string related functions, Prev: string operations,
Up: string
-
-4.17.5 string related functions
--------------------------------
-
-`charstr'
- description of the coefficient field of a ring (see *note
- charstr::)
-
-`execute'
- executing string as command (see *note execute::)
-
-`find'
- position of a substring in a string (see *note find::)
-
-`names'
- list of strings of all user-defined variable names (see *note
- names::)
-
-`nameof'
- name of an object (see *note nameof::)
-
-`option'
- lists all defined options (see *note option::)
-
-`ordstr'
- monomial ordering of a ring (see *note ordstr::)
-
-`parstr'
- names of all ring parameters or the name of the n-th ring parameter
- (see *note parstr::)
-
-`read'
- read a file (see *note read::)
-
-`size'
- length of a string (see *note size::)
-
-`sprintf'
- string formatting (see *note sprintf::)
-
-`typeof'
- type of an object (see *note typeof::)
-
-`varstr'
- names of all ring variables or the name of the n-th ring variable
- (see *note varstr::)
-
-
-File: sing.info, Node: vector, Prev: string, Up: Data types
-
-4.18 vector
-===========
-
-Vectors are elements of a free module over the basering with basis
-`gen(1)', `gen(2)', ... . Each vector belongs to a free module of rank
-equal to the biggest index of a generator with non-zero coefficient.
-Since generators with zero coefficients need not be written any vector
-may be considered also as an element of a free module of higher rank.
-Like polynomials they can only be defined or accessed with respect to
-the basering. (E.g., if `f' and `g' are polynomials then
-`f*gen(1)+g*gen(3)+gen(4)' may also be written as `[f,0,g,1]' or as
-`[f,0,g,1,0]'.) Note that the elements of a vector have to be surrounded
-by square brackets (`[' , `]') (cf. *note Representation of
-mathematical objects::).
-
-* Menu:
-
-* vector declarations::
-* vector expressions::
-* vector operations::
-* vector related functions::
-
-
-File: sing.info, Node: vector declarations, Next: vector expressions, Prev:
vector, Up: vector
-
-4.18.1 vector declarations
---------------------------
-
-*Syntax:*
- `vector' name `=' vector_expression `;'
-
-*Purpose:*
- defines a vector of polynomials (an element of a free module).
-
-*Default:*
- [0]
-
-*Example:*
-
- ring r=0,(x,y,z),(c,dp);
- poly s1 = x2;
- poly s2 = y3;
- poly s3 = z;
- vector v = [s1, s2-s1, s3-s1]+ s1*gen(5);
- // v is a vector in the free module of rank 5
- v;
- ==> [x2,y3-x2,-x2+z,0,x2]
-
-
-File: sing.info, Node: vector expressions, Next: vector operations, Prev:
vector declarations, Up: vector
-
-4.18.2 vector expressions
--------------------------
-
-A vector expression is:
- 1. an identifier of type vector
-
- 2. a function returning vector
-
- 3. a poly expression (via the canonical embedding `p' ==> `p*gen(1)')
-
- 4. vector expressions combined by the arithmetic operations `+' or `-'
-
- 5. a poly expression and a vector expression combined by the
- arithmetic operation `*'
-
- 6. a type cast to vector using the brackets `[' , `]'
-
-
-*Example:*
- // ordering gives priority to components:
- ring rr=0,(x,y,z),(c,dp);
- vector v=[x2+y3,2,0,x*y]+gen(6)*x6;
- v;
- ==> [y3+x2,2,0,xy,0,x6]
- vector w=[z3-x,3y];
- v-w;
- ==> [y3-z3+x2+x,-3y+2,0,xy,0,x6]
- v*(z+x);
- ==> [xy3+y3z+x3+x2z,2x+2z,0,x2y+xyz,0,x7+x6z]
-
-* Menu:
-
-See
-* Type conversion and casting::
-* ring::
-
-See *note Type conversion and casting::; *note ring::.
-
-
-File: sing.info, Node: vector operations, Next: vector related functions,
Prev: vector expressions, Up: vector
-
-4.18.3 vector operations
-------------------------
-
-`+'
- addition
-
-`-'
- negation or subtraction
-
-`/'
- division by a monomial, not divisible terms yield 0
-
-`<', `<=', `>', `>=', `==', `<>'
- comparison of leading terms w.r.t. monomial ordering
-
-vector_expression `[' int_expressions `]'
- is a vector entry; the index 1 gives the first entry.
-
-
-*Example:*
- ring R=0,(x,y),(c,dp);
- [x,y]-[1,x];
- ==> [x-1,-x+y]
- [1,2,x,4][3];
- ==> x
-
-
-File: sing.info, Node: vector related functions, Prev: vector operations,
Up: vector
-
-4.18.4 vector related functions
--------------------------------
-
-`cleardenom'
- quotient of a vector by its content (see *note cleardenom::)
-
-`coeffs'
- matrix of coefficients (see *note coeffs::)
-
-`deg'
- degree (see *note deg::)
-
-`diff'
- partial derivative (see *note diff::)
-
-`gen'
- i-th generator (see *note gen::)
-
-`homog'
- homogenization (see *note homog::)
-
-`jet'
- k-jet: monomials with degree smaller k+1 (see *note jet::)
-
-`lead'
- leading term (see *note lead::)
-
-`leadcoef'
- leading coefficient (see *note leadcoef::)
-
-`leadexp'
- the exponent vector of the leading monomial (see *note leadexp::)
-
-`leadmonom'
- leading monomial (see *note leadmonom::)
-
-`nrows'
- number of rows (see *note nrows::)
-
-`ord'
- degree of the leading monomial (see *note ord::)
-
-`reduce'
- normal form with respect to a standard base (see *note reduce::)
-
-`simplify'
- normalize a vector (see *note simplify::)
-
-`size'
- number of monomials (see *note size::)
-
-`subst'
- substitute a ring variable (see *note subst::)
-
-
-File: sing.info, Node: Functions and system variables, Next: Tricks and
pitfalls, Prev: Data types, Up: Top
-
-5 Functions and system variables
-********************************
-
-* Menu:
-
-* Functions::
-* Control structures::
-* System variables::
-
-
-File: sing.info, Node: Functions, Next: Control structures, Prev: Functions
and system variables, Up: Functions and system variables
-
-5.1 Functions
-=============
-
-This section gives a complete reference of all functions, commands and
-special variables of the SINGULAR kernel (i.e., all built-in commands).
-*Note standard_lib::, for those functions from the `standard.lib' (this
-library is automatically loaded at start-up time) which extend the
-functionality of the kernel and are written in the SINGULAR programming
-language.
-
-The general syntax of a function is
- [target =] function_name (<arguments>);
-If no target is specified, the result is printed. In some cases (e.g.,
-`export', `keepring', `kill', `setring', `type') the brackets are
-optional. For the commands `help', `break', `quit', `exit' and `LIB' no
-brackets are allowed.
-
-
-List of all supported kernel functions.
-
-* Menu:
-
-* attrib::
-* bareiss::
-* betti::
-* char::
-* char_series::
-* charstr::
-* cleardenom::
-* close::
-* coef::
-* coeffs::
-* contract::
-* dbprint::
-* defined::
-* deg::
-* degree::
-* delete::
-* det::
-* diff::
-* dim::
-* division::
-* dump::
-* eliminate::
-* eval::
-* ERROR::
-* example::
-* execute::
-* exit::
-* extgcd::
-* facstd::
-* factorize::
-* fetch::
-* fglm::
-* fglmquot::
-* filecmd::
-* find::
-* finduni::
-* fprintf::
-* freemodule::
-* gcd::
-* gen::
-* getdump::
-* groebner::
-* help::
-* highcorner::
-* hilb::
-* homog::
-* hres::
-* imap::
-* impart::
-* indepSet::
-* insert::
-* interred::
-* intersect::
-* jacob::
-* jet::
-* kbase::
-* kill::
-* killattrib::
-* koszul::
-* laguerre::
-* lead::
-* leadcoef::
-* leadexp::
-* leadmonom::
-* LIB::
-* lift::
-* liftstd::
-* listvar::
-* lres::
-* maxideal::
-* memory::
-* minbase::
-* minor::
-* minres::
-* modulo::
-* monitor::
-* mpresmat::
-* mres::
-* mstd::
-* mult::
-* nameof::
-* names::
-* ncols::
-* npars::
-* nres::
-* nrows::
-* nvars::
-* open::
-* option::
-* ord::
-* ordstr::
-* par::
-* pardeg::
-* parstr::
-* preimage::
-* prime::
-* print::
-* printf::
-* prune::
-* qhweight::
-* quot::
-* quote::
-* quotient::
-* random::
-* read::
-* reduce::
-* regularity::
-* repart::
-* res::
-* reservedName::
-* resultant::
-* rvar::
-* setring::
-* simplex::
-* simplify::
-* size::
-* sortvec::
-* sprintf::
-* sres::
-* status::
-* std::
-* stdfglm::
-* stdhilb::
-* subst::
-* system::
-* syz::
-* trace::
-* transpose::
-* type::
-* typeof::
-* uressolve::
-* vandermonde::
-* var::
-* varstr::
-* vdim::
-* wedge::
-* weight::
-* write::
-
-
-File: sing.info, Node: attrib, Next: bareiss, Prev: Functions, Up:
Functions
-
-5.1.1 attrib
-------------
-
-`*Syntax:*'
- `attrib (' name `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- displays the attribute list of the object called name.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=std(maxideal(2));
- attrib(I);
- ==> attr:isSB, type int
-
-`*Syntax:*'
- `attrib (' name `,' string_expression `)'
-
-`*Type:*'
- any
-
-`*Purpose:*'
- returns the value of the attribute string_expression of the
- variable name. If the attribute is not defined for this variable,
- `attrib' returns the empty string.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=std(maxideal(2));
- attrib(I,"isSB");
- ==> 1
- // although maxideal(2) is a standard basis,
- // SINGULAR does not know it:
- attrib(maxideal(2), "isSB");
- ==> 0
-
-`*Syntax:*'
- `attrib (' name`,' string_expression`,' expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- sets the attribute string_expression of the variable name to the
- value expression.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=maxideal(2); // the attribute "isSB" is not set
- vdim(I);
- ==> // ** I is no standardbasis
- ==> 4
- attrib(I,"isSB",1); // the standard basis attribute is set here
- vdim(I);
- ==> 4
-
-`*Remark:*'
- An attribute may be described by any string_expression. Some of
- these are used by the kernel of SINGULAR and referred to as
- reserved attributes. Non-reserved attributes may be used, however,
- in procedures and can considerably speed up computations.
-
-`*Reserved attributes:*'
- (not all are in use at the moment)
-
- `isSB'
- the standard basis property is set by all commands computing a
- standard basis like `groebner', `std', `stdhilb' etc.; used by
- `lift', `dim', `degree', `mult', `hilb', `vdim', `kbase'
-
- `isHomog'
- the weight vector for homogeneous or quasihomogeneous
- ideals/modules
-
- `isCI'
- complete intersection property
-
- `isCM'
- Cohen-Macaulay property
-
- `rank'
- set the rank of a module (see *note nrows::)
-
- `withSB'
- value of type ideal, resp. module, is std
-
- `withHilb'
- value of type intvec is hilb(_,1) (see *note hilb::)
-
- `withRes'
- value of type list is a free resolution
-
- `withDim'
- value of type int is the dimension (see *note dim::)
-
- `withMult'
- value of type int is the multiplicity (see *note mult::)
-
-
-File: sing.info, Node: bareiss, Next: betti, Prev: attrib, Up: Functions
-
-5.1.2 bareiss
--------------
-
-`*Syntax:*'
- `bareiss (' module_expression `)'
- `bareiss (' matrix_expression `)'
- `bareiss (' module_expression`,' int_expression`,' int_expression
- `)'
- `bareiss (' matrix_expression`,' int_expression`,' int_expression
- `)'
-
-`*Type:*'
- list of module and intvec
-
-`*Purpose:*'
- applies the sparse Gauss-Bareiss algorithm (see *note References::,
- Lee and Saunders) to a module (or with type conversion to a matrix)
- with an 'optimal' pivot strategy. The vectors of the module are the
- columns of the matrix, hence elimination takes place w.r.t. rows.
- With only one parameter a complete elimination is done. Result is
- a list: the first entry is a module with a minimal independent set
- of vectors (as a matrix lower triangular), the second entry an
- intvec with the permutation of the rows w.r.t. the original matrix,
- that is, a k at position l indicates that row l became row k.
- The further parameters control the algorithm. `bareiss(M,i,j)' does
- not consider the last i rows in the elimination procedure and stops
- computing when the remaining number of vectors (columns) to reduce
- is at most j.
-
-`*Example:*'
-
- ring r=0,(x,y,z),(c,dp);
- module mm;
- // ** generation of the module mm **
- int d=7;
- int b=2;
- int db=d-b;
- int i;
- for(i=d;i>0;i--){ mm[i]=3*x*gen(i); }
- for(i=db;i;i--){ mm[i]=mm[i]+7*y*gen(i+b); }
- for(i=d;i>db;i--){ mm[i]=mm[i]+7*y*gen(i-db); }
- for(i=d;i>b;i--){ mm[i]=mm[i]+11*z*gen(i-b); }
- for(i=b;i;i--){ mm[i]=mm[i]+11*z*gen(i+db); }
- // ** the generating matrix of mm **
- print(mm);
- ==> 3x, 0, 11z,0, 0, 7y, 0,
- ==> 0, 3x, 0, 11z,0, 0, 7y,
- ==> 7y, 0, 3x, 0, 11z,0, 0,
- ==> 0, 7y, 0, 3x, 0, 11z,0,
- ==> 0, 0, 7y, 0, 3x, 0, 11z,
- ==> 11z,0, 0, 7y, 0, 3x, 0,
- ==> 0, 11z,0, 0, 7y, 0, 3x
- // complete elimination
- list ss=bareiss(mm);
- print(ss[1]);
- ==> 7y, 0, 0, 0, 0, 0, 0,
- ==> 3x, -33xz, 0, 0, 0, 0, 0,
- ==> 11z,-121z2,1331z3,0, 0, 0, 0,
- ==> 0, 0, 0, 9317yz3,0, 0, 0,
- ==> 0, 21xy, _[5,3],14641z4,-43923xz4,0, 0,
- ==> 0, 0, 0, 0, 65219y2z3,_[6,6],0,
- ==> 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6],_[7,7]
- ss[2];
- ==> 2,7,5,1,4,3,6
- // elimination up to 3 vectors
- ss=bareiss(mm,0,3);
- print(ss[1]);
- ==> 7y, 0, 0, 0, 0, 0, 0,
- ==> 3x, -33xz, 0, 0, 0, 0, 0,
- ==> 11z,-121z2,1331z3,0, 0, 0, 0,
- ==> 0, 0, 0, 9317yz3,0, 0, 0,
- ==> 0, 0, 0, 0, 27951xyz3,102487yz4,65219y2z3,
- ==> 0, 21xy, _[6,3],14641z4,_[6,5], _[6,6], -43923xz4,
- ==> 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6], _[7,7]
- ss[2];
- ==> 2,7,5,1,3,4,6
- // elimination without the last 3 rows
- ss=bareiss(mm,3,0);
- print(ss[1]);
- ==> 7y, 0, 0, 0, 0, 0, 0,
- ==> 0, 77yz,0, 0, 0, 0, 0,
- ==> 0, 0, 231xyz, 0, 0, 0, 0,
- ==> 0, 0, 0, 1617xy2z,0, 0, 0,
- ==> 11z,21xy,-1331z3,14641z4, _[5,5],_[5,6],_[5,7],
- ==> 0, 0, 539y2z, _[6,4], _[6,5],_[6,6],-3773y3z,
- ==> 3x, 49y2,-363xz2,3993xz3, _[7,5],_[7,6],_[7,7]
- ss[2];
- ==> 2,3,4,1
-
-* Menu:
-
-See
-* det::
-* matrix::
-
-See *note det::; *note matrix::.
-
-
-File: sing.info, Node: betti, Next: char, Prev: bareiss, Up: Functions
-
-5.1.3 betti
------------
-
-`*Syntax:*'
- `betti (' list_expression `)'
- `betti (' resolution_expression `)'
- `betti (' list_expression `,' int_expression `)'
- `betti (' resolution_expression `,' int_expression `)'
-
-`*Type:*'
- intmat
-
-`*Purpose:*'
- with 1 argument: computes the graded Betti numbers of a minimal
- resolution of $R^n/M$, if $R$ denotes the basering and
- $M$ a homogeneous submodule of $R^n$ and the argument represents a
- resolution of
- $R^n/M$.
-
-The entry d of the intmat at place (i,j) is the minimal number of
- generators in degree i+j of the j-th syzygy module (= module of
- relations) of $R^n/M$ (the 0th (resp.\ 1st) syzygy module of $R^n/M$ is
- $R^n$ (resp.\ $M$)).
- R^n/M, if R denotes the basering and M a homogeneous submodule of
- R^n and the argument represents a resolution of R^n/M:
- The entry d of the intmat at place (i,j) is the minimal number of
- generators in degree i+j of the j-th syzygy module (= module of
- relations) of R^n/M (the 0th (resp. 1st) syzygy module of R^n/M is
- R^n (resp. M)). The argument is considered to be the result of a
- res/sres/mres/nres/lres command. This implies that a zero is only
- allowed (and counted) as a generator in the first module.
- For the computation betti uses only the initial monomials. This
- could lead to confusing results for a non-homogeneous input.
-
- The optional second argument is a switch for the minimization of
- the Betti numbers. If it is 0 then the Betti numbers correspond
- exactly to the input - otherwise the command is identical to the
- one-argument form.
-
-`*Example:*'
-
- ring r=32003,(a,b,c,d),dp;
- ideal j=bc-ad,b3-a2c,c3-bd2,ac2-b2d;
- list T=mres(j,0); // 0 forces a full resolution
- // a minimal set of generators for j:
- print(T[1]);
- ==> bc-ad,
- ==> c3-bd2,
- ==> ac2-b2d,
- ==> b3-a2c
- // second syzygy module of r/j which is the first
- // syzygy module of j (minimal generating set):
- print(T[2]);
- ==> bd,c2,ac,b2,
- ==> -a,-b,0, 0,
- ==> c, d, -b,-a,
- ==> 0, 0, -d,-c
- // the second syzygy module (minimal generating set):
- print(T[3]);
- ==> -b,
- ==> a,
- ==> -c,
- ==> d
- print(T[4]);
- ==> 0
- betti(T);
- ==> 1,0,0,0,
- ==> 0,1,0,0,
- ==> 0,3,4,1
- // most useful for reading off the graded Betti numbers:
- print(betti(T),"betti");
- ==> 0 1 2 3
- ==> ------------------------------
- ==> 0: 1 - - -
- ==> 1: - 1 - -
- ==> 2: - 3 4 1
- ==> ------------------------------
- ==> total: 1 4 4 1
-
-Hence
- * the 0th syzygy module of r/j (which is r) has 1 generator in degree
- 0 (which is 1),
-
- * the 1st syzygy module `T[1]' (which is j) has 4 generators (one in
- degree 2 and three in degree 3),
-
- * the 2nd syzygy module `T[2]' has 4 generators (all in degree 4),
-
- * the 3rd syzygy module `T[3]' has 1 generator in degree 5,
-where the generators are the columns of the displayed matrix and degrees
-are assigned such that the corresponding maps have degree 0: $$
-0 \longleftarrow r/j \longleftarrow r(1)
-\buildrel{T[1]}\over{\longleftarrow} r(2) \oplus r^3(3)
-\buildrel{T[2]}\over{\longleftarrow} r^4(4)
-\buildrel{T[3]}\over{\longleftarrow} r(5)
-\longleftarrow 0 \quad .
-$$
-
-T[1] T[2] T[3]
-0 <- r/j <- r(1) <---- r(2)+r^3(3) <---- r^4(4) <---- r(5) <- 0 .
-
-* Menu:
-
-See
-* Syzygies and resolutions::
-* hres::
-* lres::
-* mres::
-* print::
-* res::
-* resolution::
-* sres::
-
-See *note Syzygies and resolutions::; *note hres::; *note lres::; *note
-mres::; *note print::; *note res::; *note resolution::; *note sres::.
-
-
-File: sing.info, Node: char, Next: char_series, Prev: betti, Up: Functions
-
-5.1.4 char
-----------
-
-`*Syntax:*'
- `char (' ring_name `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the characteristic of the coefficient field of a ring.
-
-`*Example:*'
-
- ring r=32003,(x,y),dp;
- char(r);
- ==> 32003
- ring s=0,(x,y),dp;
- char(s);
- ==> 0
- ring ra=(7,a),(x,y),dp;
- minpoly=a^3+a+1;
- char(ra);
- ==> 7
- ring rp=(49,a),(x,y),dp;
- char(rp);
- ==> 7
- ring rr=real,x,dp;
- char(rr);
- ==> 0
-
-* Menu:
-
-See
-* charstr::
-* ring::
-
-See *note charstr::; *note ring::.
-
Index: test/singular_manual/res_info/singular_httex/sing.info-2
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.info-2
diff -N test/singular_manual/res_info/singular_httex/sing.info-2
--- test/singular_manual/res_info/singular_httex/sing.info-2 1 Nov 2009
19:00:55 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,10807 +0,0 @@
-This is sing.info, produced by makeinfo version 4.13 from singular.texi.
-
-
-
-File: sing.info, Node: char_series, Next: charstr, Prev: char, Up:
Functions
-
-5.1.5 char_series
------------------
-
-`*Syntax:*'
- `char_series (' ideal_expression `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- the rows of the matrix represent the irreducible characteristic
- series of the ideal with respect to the current ordering of
- variables.
- One application is the decomposition of the zero-set.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- print(char_series(ideal(xyz,xz,y)));
- ==> y,z,
- ==> x,y
-
-* Menu:
-
-See
-* Characteristic sets::
-
-See *note Characteristic sets::.
-
-
-File: sing.info, Node: charstr, Next: cleardenom, Prev: char_series, Up:
Functions
-
-5.1.6 charstr
--------------
-
-`*Syntax:*'
- `charstr (' ring_name `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the description of the coefficient field of a ring.
-
-`*Example:*'
-
- ring r=32003,(x,y),dp;
- charstr(r);
- ==> 32003
- ring s=0,(x,y),dp;
- charstr(s);
- ==> 0
- ring ra=(7,a),(x,y),dp;
- minpoly=a^3+a+1;
- charstr(ra);
- ==> 7,a
- ring rp=(49,a),(x,y),dp;
- charstr(rp);
- ==> 49,a
- ring rr=real,x,dp;
- charstr(rr);
- ==> real
-
-* Menu:
-
-See
-* char::
-* ordstr::
-* ring::
-* varstr::
-
-See *note char::; *note ordstr::; *note ring::; *note varstr::.
-
-
-File: sing.info, Node: cleardenom, Next: close, Prev: charstr, Up:
Functions
-
-5.1.7 cleardenom
-----------------
-
-`*Syntax:*'
- `cleardenom (' poly_expression `)'
- `cleardenom (' vector_expression `)'
-
-`*Type:*'
- same as the input type
-
-`*Purpose:*'
- multiplies a polynomial, resp. vector, by a suitable constant to
- cancel all denominators from its coefficients and then divide it by
- its content.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- poly f=(3x+6y)^5;
- f/5;
- ==> 243/5x5+486x4y+1944x3y2+3888x2y3+3888xy4+7776/5y5
- cleardenom(f/5);
- ==> x5+10x4y+40x3y2+80x2y3+80xy4+32y5
-
-
-File: sing.info, Node: close, Next: coef, Prev: cleardenom, Up: Functions
-
-5.1.8 close
------------
-
-`*Syntax:*'
- `close (' link_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- closes a link.
-
-`*Example:*'
-
- link l="MPtcp:launch";
- open(l); // start SINGULAR "server" on localhost in batchmode
- close(l); // shut down SINGULAR server
-
-* Menu:
-
-See
-* link::
-* open::
-
-See *note link::; *note open::.
-
-
-File: sing.info, Node: coef, Next: coeffs, Prev: close, Up: Functions
-
-5.1.9 coef
-----------
-
-`*Syntax:*'
- `coef (' poly_expression`,' product_of_ringvars `)'
-
-`*Type:*'
- matrix
-
-`*Syntax:*'
- `coef (' vector_expression`,' product_of_ringvars`,' matrix_name`,'
- matrix_name `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- determines the monomials in f divisible by one of the ring
- variables of m (where f is the first argument and m the second
- argument) and the coefficients of these monomials as polynomials in
- the remaining variables.
-
- First case: returns a 2 x n matrix M, n being the number of the
- determined monomials. The first row consists of these monomials,
- the second row of the corresponding coefficients of the monomials
- in f. Thus, f = M[1,1]*M[2,1]+...+M[1,n]*M[2,n].
-
- Second case: the second matrix (i.e., the 4th argument) contains
- the monomials, the first matrix (i.e., the 3rd argument) the
- corresponding coefficients of the monomials in the vector.
-
-`*Note:*'
- coef considers only monomials which really occur in f (i.e., which
- are not 0), while coeffs (see *note coeffs::) returns the
- coefficient 0 at the appropriate place if a monomial is not
- present.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- poly f=x5+5x4y+10x2y3+y5;
- matrix m=coef(f,y);
- print(m);
- ==> y5,y3, y, 1,
- ==> 1, 10x2,5x4,x5
- f=x20+xyz+xy+x2y+z3;
- print(coef(f,xy));
- ==> x20,x2y,xy, 1,
- ==> 1, 1, z+1,z3
- vector v=[f,zy+77+xy];
- print(v);
- ==> [x20+x2y+xyz+z3+xy,xy+yz+77]
- matrix mc; matrix mm;
- coef(v,y,mc,mm);
- print(mc);
- ==> x2+xz+x,x20+z3,
- ==> x+z, 77
- print(mm);
- ==> y,1,
- ==> y,1
-
-* Menu:
-
-See
-* coeffs::
-
-See *note coeffs::.
-
-
-File: sing.info, Node: coeffs, Next: contract, Prev: coef, Up: Functions
-
-5.1.10 coeffs
--------------
-
-`*Syntax:*'
- `coeffs (' poly_expression `,' ring_variable `)'
- `coeffs (' ideal_expression`,' ring_variable `)'
- `coeffs (' vector_expression`,' ring_variable `)'
- `coeffs (' module_expression`,' ring_variable `)'
- `coeffs (' poly_expression`,' ring_variable`,' matrix_name `)'
- `coeffs (' ideal_expression`,' ring_variable`,' matrix_name `)'
- `coeffs (' vector_expression`,' ring_variable`,' matrix_name `)'
- `coeffs (' module_expression`,' ring_variable`,' matrix_name `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- develops each polynomial of the first argument, say J, as a
- univariate polynomial in the given ring_variable, say z, and
- returns the coefficients as a k x d matrix M, where:
-
- d-1 = maximum z-degree of all occurring polynomials
- k = 1 if J is a polynomial,
- k = number of generators if J is an ideal.
-
- If J is a vector or a module this procedure is repeated for each
- component and the resulting matrices are appended.
- The third argument is used to return the matrix T of coefficients
- such that matrix(J) = T*M. The third argument is used to return the
matrix T of coefficients
- such that {\tt matrix}(J) = T*M.
-
-`*Note:*'
- `coeffs' returns the coefficient 0 at the appropriate place if a
- monomial is not present, while `coef' considers only monomials
- which really occur in the given expression.
- If $M=(m_{ij})$
- M=(M[i,j]) then the j-th generator of an ideal J is equal to $$J_j = z^0
\cdot m_{1j} + z^1 \cdot m_{2j} + ... + z^{d-1} \cdot m_{dj},$$
- while for a module J the i-th component of the j-th generator is
- equal to the entry [i,j] of {\tt matrix}(J), and we get
-
-
- J[j] = z^0*M[1,j] + z^1*M[2,j] + ... + z^(d-1)*M[d,j],
-
-
- while for a module J the i-th component of the j-th generator is
- equal to the entry [i,j] of matrix(J), and we get $$ J_{i,j} = z^0 \cdot
m_{(i-1)d+1,j} + z^1 \cdot m_{(i-1)d+2,j} + ... +
- z^{d-1} \cdot m_{id,j}.$$
-
-
- J[i,j] = z^0*M[(i-1)*d+1,j] + z^1*M[(i-1)*d+2,j] + ...
- + z^(d-1)*M[i*d,j].
-
-`*Example:*'
-
- ring r;
- poly f=(x+y)^3;
- matrix M=coeffs(f,y);
- print(M);
- ==> x3,
- ==> 3x2,
- ==> 3x,
- ==> 1
- ideal i=f,xyz+z10y4;
- print(coeffs(i,y));
- ==> x3, 0,
- ==> 3x2,xz,
- ==> 3x, 0,
- ==> 1, 0,
- ==> 0, z10
-
-`*Syntax:*'
- `coeffs (' ideal_expression`,' ideal_expression `)'
- `coeffs (' module_expression`,' module_expression `)'
- `coeffs (' ideal_expression`,' ideal_expression`,'
- product_of_ringvars `)'
- `coeffs (' module_expression`,' module_expression`,'
- product_of_ringvars `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- let the first argument be M, the second argument be K (a set of
- monomials, resp. vectors with monomial entries, in the variables
- appearing in P), the third argument be the product P of variables
- to consider (if this argument is not given, then the product of all
- ring variables is taken as default argument).
- M is supposed to consist of elements of (resp. have entries in) a
- finitely generated module over a ring in the variables not
- appearing in P. K should contain the generators of M over this
- smaller ring. Then `coeffs(M,K,P)' returns a matrix A of
- coefficients with K*A=M such that the entries of A do not contain
- any variable from P.
- If K does not contain all generators that are necessary to express
- M, then K*A=M' where M' is the part of M that can be expressed.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- ideal M=x2z+y3,xy;
- print(coeffs(M,ideal(x2,xy,y2),xy));
- ==> z,0,
- ==> 0,1,
- ==> 0,0
- print(coeffs(M,ideal(x2,xy,y2)));
- ==> 0,0,
- ==> 0,1,
- ==> 0,0
-
-* Menu:
-
-See
-* coef::
-* kbase::
-
-See *note coef::; *note kbase::.
-
-
-File: sing.info, Node: contract, Next: dbprint, Prev: coeffs, Up: Functions
-
-5.1.11 contract
----------------
-
-`*Syntax:*'
- `contract (' ideal_expression`,' ideal_expression `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- contracts each of the n elements of the second ideal J by each of
- the m elements of the first ideal I, producing a m x n matrix.
- Contraction is defined on monomials by:
-
- contract(x^A,x^B) := x^(B-A) (if B>=A componentwise),
- := 0 (otherwise),
-
-$${\rm contract}(x^A , x^B) := \cases{ x^{(B-A)}, &if $B\ge A$
- componentwise\cr 0,&otherwise.\cr}$$
- where A and B are the multiexponents of the ring variables
- represented by $x$.
- x. `contract' is extended bilinearly to all polynomials.
-
-`*Example:*'
-
- ring r=0,(a,b,c,d),dp;
- ideal I=a2,a2+bc,abc;
- ideal J=a2-bc,abcd;
- print(contract(I,J));
- ==> 1,0,
- ==> 0,ad,
- ==> 0,d
-
-* Menu:
-
-See
-* diff::
-
-See *note diff::.
-
-
-File: sing.info, Node: dbprint, Next: defined, Prev: contract, Up:
Functions
-
-5.1.12 dbprint
---------------
-
-`*Syntax:*'
- `dbprint (' int_expression`,' expression_list `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- applies the print command to each expression in the expression_list
- if int_expression is positive. `dbprint' may also be used in
- procedures in order to print results subject to certain conditions.
-
-`*Syntax:*'
- `dbprint (' expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- The print command is applied to the expression if
- `printlevel>=voice'.
-
-`*Note:*'
- *Note Guidelines for writing a library::, for an example how this
- is used for displaying comments while procedures are executed.
-
-`*Example:*'
-
- int debug=0;
- intvec i=1,2,3;
- dbprint(debug,i);
- debug=1;
- dbprint(debug,i);
- ==> 1,2,3
- voice;
- ==> 1
- printlevel;
- ==> 0
- dbprint(i);
-
-* Menu:
-
-See
-* Debugging tools::
-* print::
-* printlevel::
-* voice::
-
-See *note Debugging tools::; *note print::; *note printlevel::; *note
-voice::.
-
-
-File: sing.info, Node: defined, Next: deg, Prev: dbprint, Up: Functions
-
-5.1.13 defined
---------------
-
-`*Syntax:*'
- `defined (' name `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns a value <>0 (TRUE) if there is a user-defined object with
- this name, and 0 (FALSE) otherwise.
- A non-zero return value is the level where the object is defined
- (level 1 denotes the top level, level 2 the level of a first
- procedure, level 3 the level of a procedure called by a first
- procedure, etc.). For ring variables, -1 is returned.
-
-`*Note:*'
- A local object `m' may be identified by `if (defined(m)==voice)'.
-
-`*Example:*'
-
- ring r=(0,t),(x,y),dp;
- matrix m[5][6]=x,y,1,2,0,x+y;
- defined(mm);
- ==> 0
- defined(r) and defined(m);
- ==> 1
- defined(m)==voice; // m is defined in the current level
- ==> 1
- defined(x);
- ==> -1
- defined(z);
- ==> 0
- defined(t);
- ==> -1
- defined(42);
- ==> -1
-
-* Menu:
-
-See
-* rvar::
-* voice::
-
-See *note rvar::; *note voice::.
-
-
-File: sing.info, Node: deg, Next: degree, Prev: defined, Up: Functions
-
-5.1.14 deg
-----------
-
-`*Syntax:*'
- `deg (' poly_expression `)'
- `deg (' vector_expression `)'
- `deg (' poly_expression `,' intvec_expression `)'
- `deg (' vector_expression `,' intvec_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the maximal (weighted) degree of the terms of a polynomial
- or a vector;
- deg(0) is -1.
- The optional second argument gives the weight vector, the default
- weights of the base ring will be used otherwise.
-
-`*Example:*'
-
- ring r=0,(x,y,z),lp;
- deg(0);
- ==> -1
- deg(x3+y4+xyz3);
- ==> 5
- ring rr=7,(x,y),wp(2,3);
- poly f=x2+y3;
- deg(f);
- ==> 9
- ring R=7,(x,y),ws(2,3);
- poly f=x2+y3;
- deg(f);
- ==> 9
- vector v=[x2,y];
- deg(v);
- ==> 4
-
-* Menu:
-
-See
-* jet::
-* ord::
-* poly::
-* vector::
-
-See *note jet::; *note ord::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: degree, Next: delete, Prev: deg, Up: Functions
-
-5.1.15 degree
--------------
-
-`*Syntax:*'
- `degree (' ideal_expression `)'
- `degree (' module_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- computes the (weighted) degree of the projective variety,
- respectively sheaf over the projective variety, defined by the
- ideal, respectively module, generated by the leading monomials of
- the input. This is equal to the (weighted) degree of the
- projective variety, respectively sheaf over the projective variety,
- defined by the ideal, respectively module, if the input is a
- standard basis with respect to a (weighted) degree ordering.
-
-`*Example:*'
-
- ring r3=32003,(x,y,z,h),dp;
- int a,b,c,t=11,10,3,1;
- poly f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
- +x^(c-2)*y^c*(y2+t*x)^2;
- ideal i=jacob(f);
- i=homog(i,h);
- ideal i0=std(i);
- degree(i0);
- ==> 720
-
-* Menu:
-
-See
-* dim::
-* ideal::
-* mult::
-* std::
-* vdim::
-
-See *note dim::; *note ideal::; *note mult::; *note std::; *note vdim::.
-
-
-File: sing.info, Node: delete, Next: det, Prev: degree, Up: Functions
-
-5.1.16 delete
--------------
-
-`*Syntax:*'
- `delete (' list_expression`,' int_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- deletes the element with the given index from a list (the input is
- not changed).
-
-`*Example:*'
-
- list l="a","b","c";
- list l1=delete(l,2);l1;
- ==> [1]:
- ==> a
- ==> [2]:
- ==> c
- l;
- ==> [1]:
- ==> a
- ==> [2]:
- ==> b
- ==> [3]:
- ==> c
-
-* Menu:
-
-See
-* insert::
-* list::
-
-See *note insert::; *note list::.
-
-
-File: sing.info, Node: det, Next: diff, Prev: delete, Up: Functions
-
-5.1.17 det
-----------
-
-`*Syntax:*'
- `det (' intmat_expression `)'
- `det (' matrix_expression `)'
- `det (' module_expression `)'
-
-`*Type:*'
- int, resp. poly
-
-`*Purpose:*'
- returns the determinant of a square matrix. A module is considered
- as a matrix. The applied algorithms depend on type of input. If
- the input is a module or matrix with symbolic entries the Bareiss
- algorithm is used. In the other cases the chinese remainder
- algorithm is used. For large sparse problems the input as a module
- has advantages.
-
-`*Example:*'
-
- ring r=7,(x,y),wp(2,3);
- matrix m[3][3]=1,2,3,4,5,6,7,8,x;
- det(m);
- ==> -3x-1
-
-* Menu:
-
-See
-* intmat::
-* matrix::
-* minor::
-
-See *note intmat::; *note matrix::; *note minor::.
-
-
-File: sing.info, Node: diff, Next: dim, Prev: det, Up: Functions
-
-5.1.18 diff
------------
-
-`*Syntax:*'
- `diff (' poly_expression`,' ring_variable `)'
- `diff (' vector_expression`,' ring_variable `)'
- `diff (' ideal_expression`,' ring_variable `)'
- `diff (' module_expression`,' ring_variable `)'
- `diff (' matrix_expression`,' ring_variable `)'
-
-`*Type:*'
- the same as the type of the first argument
-
-`*Syntax:*'
- `diff (' ideal_expression`,' ideal_expression `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- computes the partial derivative of a polynomial object by a ring
- variable (first forms)
- respectively differentiates each polynomial (1..n) of the second
- ideal by the differential operator corresponding to each polynomial
- (1..m) in the first ideal, producing an m x n matrix.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- poly f=2x3y+3z5;
- diff(f,x);
- ==> 6x2y
- vector v=[f,y2+z];
- diff(v,z);
- ==> 15z4*gen(1)+gen(2)
- ideal j=x2-yz,xyz;
- ideal i=x2,x2+yz,xyz;
- // corresponds to differential operators
- // d2/dx2, d2/dx2+d2/dydz, d3/dxdydz:
- print(diff(i,j));
- ==> 2,0,
- ==> 1,x,
- ==> 0,1
-
-* Menu:
-
-See
-* contract::
-* ideal::
-* jacob::
-* matrix::
-* module::
-* poly::
-* var::
-* vector::
-
-See *note contract::; *note ideal::; *note jacob::; *note matrix::;
-*note module::; *note poly::; *note var::; *note vector::.
-
-
-File: sing.info, Node: dim, Next: division, Prev: diff, Up: Functions
-
-5.1.19 dim
-----------
-
-`*Syntax:*'
- `dim (' ideal_expression `)'
- `dim (' module_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- computes the dimension of the ideal, resp. module, generated by the
- leading monomials of the given generators of the ideal, resp.
- module. This is also the dimension of the ideal if it is
- represented by a standard basis.
-
-`*Note:*'
- The dimension of an ideal I means the Krull dimension of the
- basering modulo I.
- The dimension of a module is the dimension of its annihilator
- ideal.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- ideal I=x2-y,x3;
- dim(std(I));
- ==> 1
-
-* Menu:
-
-See
-* degree::
-* ideal::
-* mult::
-* std::
-* vdim::
-
-See *note degree::; *note ideal::; *note mult::; *note std::; *note
-vdim::.
-
-
-File: sing.info, Node: division, Next: dump, Prev: dim, Up: Functions
-
-5.1.20 division
----------------
-
-`*Syntax:*'
- `division (' ideal_expression`,' ideal_expression `)'
- `division (' module_expression`,' module_expression `)'
- `division (' ideal_expression`,' ideal_expression`,' int_expression
- `)'
- `division (' module_expression`,' module_expression`,'
- int_expression `)'
- `division (' ideal_expression`,' ideal_expression`,'
- int_expression`,' intvec_expression `)'
- `division (' module_expression`,' module_expression`,'
- int_expression`,' intvec_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- `division' computes a division with remainder. For two ideals
- resp. modules `M' (first argument) and `N' (second argument), it
- returns a list `T,R,U' where `T' is a matrix, `R' is an ideal resp.
- a module, and `U' is a diagonal matrix of units such that
- `matrix(M)*U=matrix(N)*T+matrix(R)' is a standard representation
- for the normal form `R' of `M' with respect to a standard basis of
- `N'. `division' uses different algorithms depending on whether `N'
- is represented by a standard basis. For a polynomial basering, the
- matrix `U' is the identity matrix. A matrix `T' as above is also
- computed by `lift'.
- For additional arguments `n' (third argument) and `w' (fourth
- argument), `division' returns a list `T,R' as above such that
- `matrix(M)=matrix(N)*T+matrix(R)' is a standard representation for
- the normal form `R' of `M' with respect to `N' up to weighted
- degree `n' with respect to the weight vector `w'. The weighted
- degree of `T' and `R' respect to `w' is at most `n'. If the weight
- vector `w' is not given, `division' uses the standard weight vector
- `w=1,...,1'.
-
-`*Example:*'
-
- ring R=0,(x,y),ds;
- poly f=x5+x2y2+y5;
- division(f,jacob(f));
- ==> [1]:
- ==> _[1,1]=1/5x
- ==> _[2,1]=3/10y
- ==> [2]:
- ==> _[1]=-1/2y5
- ==> [3]:
- ==> _[1,1]=1
- division(f^2,jacob(f));
- ==> [1]:
- ==> _[1,1]=1/20x6-9/80xy5-5/16x7y+5/8x2y6
- ==> _[2,1]=1/8x2y3+1/5x5y+1/20y6-3/4x3y4-5/4x6y2-5/16xy7
- ==> [2]:
- ==> _[1]=0
- ==> [3]:
- ==> _[1,1]=1/4-25/16xy
- division(ideal(f^2),jacob(f),10);
- ==> // ** _ is no standardbasis
- ==> [1]:
- ==> _[1,1]=-75/8y9
- ==> _[2,1]=1/2x2y3+x5y-1/4y6-3/2x3y4+15/4xy7+375/16x2y8
- ==> [2]:
- ==> _[1]=x10+9/4y10
-
-* Menu:
-
-See
-* ideal::
-* lift::
-* module::
-
-See *note ideal::; *note lift::; *note module::.
-
-
-File: sing.info, Node: dump, Next: eliminate, Prev: division, Up: Functions
-
-5.1.21 dump
------------
-
-`*Syntax:*'
- `dump (' link_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- dumps (i.e., writes in one "message" or "block") the state of the
- SINGULAR session (i.e., all defined variables and their values) to
- the specified link (which must be either an ASCII or MP link) such
- that a `getdump' can retrieve it later on.
-
-`*Example:*'
-
- ring r;
- // write the whole session to the file dump.ascii
- // in ASCII format
- dump(":w dump.ascii");
- kill r; // kill the basering
- // reread the session from the file
- // redefining everything which was not explicitly killed before
- getdump("dump.ascii");
- ==> // ** redefining stdfglm **
- ==> // ** redefining stdhilb **
- ==> // ** redefining groebner **
- ==> // ** redefining res **
- ==> // ** redefining quot **
- ==> // ** redefining quot1 **
- ==> // ** redefining quotient0 **
- ==> // ** redefining quotient1 **
- ==> // ** redefining quotient2 **
- ==> // ** redefining quotient3 **
- ==> // ** redefining quotient5 **
- ==> // ** redefining quotient4 **
- ==> // ** redefining intersect1 **
- ==> // ** redefining sprintf **
- ==> // ** redefining printf **
- ==> // ** redefining fprintf **
- r;
- ==> // characteristic : 32003
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
-
-`*Restrictions:*'
- For ASCII links, integer matrices contained in lists are dumped as
- integer list elements (and not as integer matrices), and lists of
- lists are dumped as one flatted list. Furthermore, links themselves
- are not dumped.
-
-* Menu:
-
-See
-* getdump::
-* link::
-* write::
-
-See *note getdump::; *note link::; *note write::.
-
-
-File: sing.info, Node: eliminate, Next: eval, Prev: dump, Up: Functions
-
-5.1.22 eliminate
-----------------
-
-`*Syntax:*'
- `eliminate (' ideal_expression`,' product_of_ring_variables`)'
- `eliminate (' module_expression`,' product_of_ring_variables`)'
- `eliminate (' ideal_expression`,' product_of_ring_variables`,'
- intvec_hilb `)'
- `eliminate (' module_expression`,' product_of_ring_variables`,'
- intvec_hilb `)'
-
-`*Type:*'
- the same as the type of the first argument
-
-`*Purpose:*'
- eliminates variables occurring as factors of the second argument
- from an ideal, resp. module, by intersecting it with the subring
- not containing these variables.
- `eliminate' does not need a special ordering nor a standard basis
- as input.
-
-`*Note:*'
- Since elimination is expensive, for homogeneous input it might be
- useful first to compute the Hilbert function of the ideal (first
- argument) with a fast ordering (e.g., `dp'). Then make use of it to
- speed up the computation: a Hilbert-driven elimination uses the
- intvec provided as the third argument.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- ideal i=x2,xy,y5;
- eliminate(i,x);
- ==> _[1]=y5
- ring R=0,(x,y,t,s,z),dp;
- ideal i=x-t,y-t2,z-t3,s-x+y3;
- eliminate(i,ts);
- ==> _[1]=y2-xz
- ==> _[2]=xy-z
- ==> _[3]=x2-y
- intvec v=hilb(std(i),1);
- eliminate(i,ts,v);
- ==> _[1]=y2-xz
- ==> _[2]=xy-z
- ==> _[3]=x2-y
-
-* Menu:
-
-See
-* hilb::
-* ideal::
-* module::
-* std::
-
-See *note hilb::; *note ideal::; *note module::; *note std::.
-
-
-File: sing.info, Node: eval, Next: ERROR, Prev: eliminate, Up: Functions
-
-5.1.23 eval
------------
-
-`*Syntax:*'
- `eval (' expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- evaluates (quoted) expressions. Within a quoted expression, the
- quote can be "undone" by an `eval' (i.e., each eval "undoes" the
- effect of exactly one quote). Used only when receiving a quoted
- expression from an MPfile link, with `quote' and `write' to prevent
- local evaluations when writing to an MPtcp link.
-
-`*Example:*'
-
- link l="MPfile:w example.mp";
- ring r=0,(x,y,z),ds;
- ideal i=maxideal(3);
- ideal j=x7,x2,z;
- // compute i+j before writing, but not std
- // this writes 'std(ideal(x3,...,z))'
- write (l, quote(std(eval(i+j))));
- option(prot);
- close(l);
- // now read it in again and evaluate
- // read(l) forces to compute 'std(ideal(x3,...,z))'
- read(l);
- close(l);
-
-* Menu:
-
-See
-* MPfile links::
-* quote::
-* write::
-
-See *note MPfile links::; *note quote::; *note write::.
-
-
-File: sing.info, Node: ERROR, Next: example, Prev: eval, Up: Functions
-
-5.1.24 ERROR
-------------
-
-`*Syntax:*'
- `ERROR (' string_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- Immediately interrupts the current computation, returns to the
- top-level, and displays the argument `string_expression' as error
- message.
-
-`*Note:*'
- This should be used as an emergency, resp. failure, exit within
- procedures.
-
-`*Example:*'
-
- int i=1;
- proc myError() {ERROR("Need to leave now");i=2;}
- myError();
- ==> ? Need to leave now
- ==> ? error occurred in line 2: `ERROR("Need to leave now");i=2;`
- ==> ? leaving ::myError
- ==> skipping text from `;` error at token `)`
- i;
- ==> 1
-
-
-File: sing.info, Node: example, Next: execute, Prev: ERROR, Up: Functions
-
-5.1.25 example
---------------
-
-`*Syntax:*'
- `example' topic `;'
-
-`*Purpose:*'
- computes an example for `topic'. Examples are available for all
- SINGULAR kernel and library functions. Where available (e.g.,
- within Emacs), use `<TAB>' completion for a list of all available
- example `topic's.
-
-`*Example:*'
-
- example prime;
- example intvec_declarations;
-
-* Menu:
-
-See also:
-* help::
-
-*See also:* *note help::.
-
-
-File: sing.info, Node: execute, Next: exit, Prev: example, Up: Functions
-
-5.1.26 execute
---------------
-
-`*Syntax:*'
- `execute (' string_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- executes a string containing a sequence of SINGULAR commands.
-
-`*Note:*'
- The command `return' cannot appear in the string.
- `execute' should be avoided in procedures whenever possible, since
- it may give rise to name conflicts. Moreover, such procedures
- cannot be precompiled (a feature which SINGULAR will provide in the
- future).
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- ideal i=x+y,z3+22y;
- write(":w save_i",i);
- ring r0=0,(x,y,z),Dp;
- string s="ideal k="+read("save_i")+";";
- s;
- ==> ideal k=x+y,z3+22y
- ==> ;
- execute(s); // define the ideal k
- k;
- ==> k[1]=x+y
- ==> k[2]=z3+22y
-
-
-File: sing.info, Node: exit, Next: extgcd, Prev: execute, Up: Functions
-
-5.1.27 exit
------------
-
-`*Syntax:*'
- `exit;'
-
-`*Purpose:*'
- exits (quits) SINGULAR, works also from inside a procedure or from
- an interrupt.
-
-
-File: sing.info, Node: extgcd, Next: facstd, Prev: exit, Up: Functions
-
-5.1.28 extgcd
--------------
-
-`*Syntax:*'
- `extgcd (' int_expression`,' int_expression `)'
- `extgcd (' poly_expression`,' poly_expression `)'
-
-`*Type:*'
- list of 3 objects of the same type as the type of the arguments
-
-`*Purpose:*'
- computes extended gcd: the first element is the greatest common
- divisor of the two arguments, the second and third are factors such
- that if `list L=extgcd(a,b);' then L[1]=a*L[2]+b*L[3].
-
-`*Note:*'
- Polynomials must be univariate to apply `extgcd'.
-
-`*Example:*'
-
- extgcd(24,10);
- ==> [1]:
- ==> 2
- ==> [2]:
- ==> -2
- ==> [3]:
- ==> 5
- ring r=0,(x,y),lp;
- extgcd(x4-x6,(x2+x5)*(x2+x3));
- ==> [1]:
- ==> 2x5+2x4
- ==> [2]:
- ==> x2+x+1
- ==> [3]:
- ==> 1
-
-* Menu:
-
-See
-* gcd::
-* int::
-* poly::
-
-See *note gcd::; *note int::; *note poly::.
-
-
-File: sing.info, Node: facstd, Next: factorize, Prev: extgcd, Up: Functions
-
-5.1.29 facstd
--------------
-
-`*Syntax:*'
- `facstd (' ideal_expression `)'
- `facstd (' ideal_expression`,' ideal_expression `)'
-
-`*Type:*'
- list of ideals
-
-`*Purpose:*'
- returns a list of ideals computed by the factorizing Groebner basis
- algorithm.
- The intersection of these ideals has the same zero-set as the
- input, i.e., the radical of the intersection coincides with the
- radical of the input ideal. In many (but not all!) cases this is
- already a decomposition of the radical of the ideal. (Note however,
- that, in general, no inclusion between the input and output ideals
- holds.)
- The second, optional argument gives a list of polynomials which
- define non-zero constraints. Hence, the intersection of the output
- ideals has a zero-set which is the (closure of the) complement of
- the zero-set of the second argument in the zero-set of the first
- argument.
-
-`*Note:*'
- Not implemented for baserings over real ground fields, galois
- fields and over algebraic extensions over the rational numbers
- (that is, only implemented for ground fields for which *note
- factorize:: is implemented).
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,dp);
- ideal I=xyz,x2z;
- facstd(I);
- ==> [1]:
- ==> _[1]=z
- ==> [2]:
- ==> _[1]=x
- facstd(I,x);
- ==> [1]:
- ==> _[1]=z
-
-* Menu:
-
-See
-* ideal::
-* ring::
-* std::
-
-See *note ideal::; *note ring::; *note std::.
-
-
-File: sing.info, Node: factorize, Next: fetch, Prev: facstd, Up: Functions
-
-5.1.30 factorize
-----------------
-
-`*Syntax:*'
- `factorize (' poly_expression `)'
- `factorize (' poly_expression`, 0 )'
- `factorize (' poly_expression`, 2 )'
-
-`*Type:*'
- list of ideal and intvec
-
-`*Syntax:*'
- `factorize (' poly_expression`, 1 )'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- computes the irreducible factors (as an ideal) of the polynomial
- together with or without the multiplicities (as an intvec)
- depending on the second argument:
-
- 0: returns factors and multiplicities, first factor is a constant.
- May also be written with only one argument.
- 1: returns non-constant factors (no multiplicities).
- 2: returns non-constant factors and multiplicities.
-
-`*Note:*'
- Not implemented for the coefficient fields real and finite fields
- of type `(p^n,a)'.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- factorize(9*(x-1)^2*(y+z));
- ==> [1]:
- ==> _[1]=9
- ==> _[2]=y+z
- ==> _[3]=x-1
- ==> [2]:
- ==> 1,1,2
- factorize(9*(x-1)^2*(y+z),1);
- ==> _[1]=y+z
- ==> _[2]=x-1
- factorize(9*(x-1)^2*(y+z),2);
- ==> [1]:
- ==> _[1]=y+z
- ==> _[2]=x-1
- ==> [2]:
- ==> 1,2
-
-* Menu:
-
-See
-* poly::
-
-See *note poly::.
-
-
-File: sing.info, Node: fetch, Next: fglm, Prev: factorize, Up: Functions
-
-5.1.31 fetch
-------------
-
-`*Syntax:*'
- `fetch (' ring_name`,' name `)'
-
-`*Type:*'
- number, poly, vector, ideal, module, matrix or list (the same type
- as the second argument)
-
-`*Purpose:*'
- maps objects between rings. `fetch' is the identity map between
- rings and qrings, the i-th variable of the source ring is mapped to
- the i-th variable of the basering. The coefficient fields must be
- compatible. (See *note map:: for a description of possible mapping
- between different ground fields).
- `fetch' offers a convenient way to change variable names or
- orderings, or to map objects from a ring to a quotient ring of that
- ring or vice versa.
-
-`*Note:*'
- Compared with `imap', `fetch' uses the position of the ring
- variables, not their names.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal i=maxideal(2);
- ideal j=std(i);
- poly f=x+y2+z3;
- vector v=[f,1];
- qring q=j;
- poly f=fetch(r,f);
- f;
- ==> z3+y2+x
- vector v=fetch(r,v);
- v;
- ==> z3*gen(1)+y2*gen(1)+x*gen(1)+gen(2)
- ideal i=fetch(r,i);
- i;
- ==> i[1]=z2
- ==> i[2]=yz
- ==> i[3]=y2
- ==> i[4]=xz
- ==> i[5]=xy
- ==> i[6]=x2
- ring rr=0,(a,b,c),lp;
- poly f=fetch(q,f);
- f;
- ==> a+b2+c3
- vector v=fetch(r,v);
- v;
- ==> a*gen(1)+b2*gen(1)+c3*gen(1)+gen(2)
- ideal k=fetch(q,i);
- k;
- ==> k[1]=c2
- ==> k[2]=bc
- ==> k[3]=b2
- ==> k[4]=ac
- ==> k[5]=ab
- ==> k[6]=a2
-
-* Menu:
-
-See
-* imap::
-* map::
-* qring::
-* ring::
-
-See *note imap::; *note map::; *note qring::; *note ring::.
-
-
-File: sing.info, Node: fglm, Next: fglmquot, Prev: fetch, Up: Functions
-
-5.1.32 fglm
------------
-
-`*Syntax:*'
- `fglm (' ring_name`,' ideal_name `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- computes for the given ideal in the given ring a reduced Groebner
- basis in the current ring, by applying the so-called FGLM (Faugere,
- Gianni, Lazard, Mora) algorithm.
- The main application is to compute a lexicographical Groebner basis
- from a reduced Groebner basis with respect to a degree ordering.
- This can be much faster than computing a lexicographical Groebner
- basis directly.
-
-`*Note:*'
- The ideal must be zero-dimensional and given as a reduced Groebner
- basis in the given ring.
- The only permissible differences between the given ring and the
- current ring are the monomial ordering and a permutation of the
- variables, resp. parameters.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal i=y3+x2, x2y+x2, x3-x2, z4-x2-y;
- option(redSB); // force the computation of a reduced SB
- i=std(i);
- vdim(i);
- ==> 28
- ring s=0,(z,x,y),lp;
- ideal j=fglm(r,i);
- j;
- ==> j[1]=y4+y3
- ==> j[2]=xy3-y3
- ==> j[3]=x2+y3
- ==> j[4]=z4+y3-y
-
-* Menu:
-
-See
-* fglmquot::
-* option::
-* qring::
-* ring::
-* std::
-* stdfglm::
-* vdim::
-
-See *note fglmquot::; *note option::; *note qring::; *note ring::; *note
-std::; *note stdfglm::; *note vdim::.
-
-
-File: sing.info, Node: fglmquot, Next: filecmd, Prev: fglm, Up: Functions
-
-5.1.33 fglmquot
----------------
-
-`*Syntax:*'
- `fglmquot (' ideal_expression`,' poly_expression `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- computes a reduced Groebner basis of the ideal quotient `I:p' of a
- zero-dimensional ideal `I' and a polynomial `p' using
- FGLM-techniques.
-
-`*Note:*'
- The ideal must be zero-dimensional and given as a reduced Groebner
- basis in the given ring. The poly must be reduced with respect to
- the ideal.
-
-`*Example:*'
-
- ring r=0,(x,y,z),lp;
- ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
- option(redSB); // force the computation of a reduced SB
- i=std(i);
- poly p=reduce(x+yz2+z10,i);
- ideal j=fglmquot(i,p);
- j;
- ==> j[1]=z12
- ==> j[2]=yz4-z8
- ==> j[3]=y2+y-z8-z4
- ==> j[4]=x+y-z10-z6-z4
-
-* Menu:
-
-See
-* fglm::
-* option::
-* quotient::
-* ring::
-* std::
-* vdim::
-
-See *note fglm::; *note option::; *note quotient::; *note ring::; *note
-std::; *note vdim::.
-
-
-File: sing.info, Node: filecmd, Next: find, Prev: fglmquot, Up: Functions
-
-5.1.34 files, input from
-------------------------
-
-`*Syntax:*'
- `< "'filename`"'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- input comes from the file filename. Shorthand for
- `execute(read(filename))'.
-
-`*Example:*'
-
- < "example"; //read in the file example and execute it
-
-* Menu:
-
-See
-* execute::
-* read::
-
-See *note execute::; *note read::.
-
-
-File: sing.info, Node: find, Next: finduni, Prev: filecmd, Up: Functions
-
-5.1.35 find
------------
-
-`*Syntax:*'
- `find (' string_expression`,' substring_expression `)'
- `find (' string_expression`,' substring_expression`,'
- int_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the first position of the substring in the string or 0 (if
- not found),
- starts the search at the position given in the 3rd argument.
-
-`*Example:*'
-
- find("Aac","a");
- ==> 2
- find("abab","a"+"b");
- ==> 1
- find("abab","a"+"b",2);
- ==> 3
- find("abab","ab",3);
- ==> 3
- find("0123","abcd");
- ==> 0
-
-* Menu:
-
-See
-* string::
-
-See *note string::.
-
-
-File: sing.info, Node: finduni, Next: fprintf, Prev: find, Up: Functions
-
-5.1.36 finduni
---------------
-
-`*Syntax:*'
- `finduni (' ideal_expression `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- returns an ideal which is contained in the ideal_expression such
- that the i-th generator is a univariate polynomial in the i-th ring
- variable.
- The polynomials have minimal degree w.r.t. this property.
-
-`*Note:*'
- The ideal must be zero-dimensional and given as a reduced Groebner
- basis in the current ring.
-
-`*Example:*'
-
- ring r=0,(x,y,z), dp;
- ideal i=y3+x2,x2y+x2,z4-x2-y;
- option(redSB); // force computation of reduced basis
- i=std(i);
- ideal k=finduni(i);
- print(k);
- ==> x4-x2,
- ==> y4+y3,
- ==> z12
-
-* Menu:
-
-See
-* option::
-* ring::
-* std::
-* vdim::
-
-See *note option::; *note ring::; *note std::; *note vdim::.
-
-
-File: sing.info, Node: fprintf, Next: freemodule, Prev: finduni, Up:
Functions
-
-5.1.37 fprintf
---------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `fprintf (' link_expression`,' string_expression `[,'
- any_expressions`] )'
-
-*Return:*
- none
-
-*Purpose:*
- `fprintf(l,fmt,...);' performs output formatting. The second
- argument is a format control string. Additional arguments may be
- required, depending on the content of the control string. A series
- of output characters is generated as directed by the control
- string; these characters are written to the link l. The control
- string `fmt' is simply text to be copied, except that the string
- may contain conversion specifications.
- Do `help print;' for a listing of valid conversion specifications.
- As an addition to the conversions of `print', the `%n' and `%2'
- conversion specification does not consume an additional argument,
- but simply generates a newline character.
-
-*Note:*
- If one of the additional arguments is a list, then it should be
- enclosed once more into a `list()' command, since passing a list as
- an argument flattens the list by one level.
-
-*Example:*
- ring r=0,(x,y,z),dp;
- module m=[1,y],[0,x+z];
- intmat M=betti(mres(m,0));
- list l=r,m,M;
- link li=""; // link to stdout
- fprintf(li,"s:%s,l:%l",1,2);
- ==> s:1,l:int(2)
- fprintf(li,"s:%s",l);
- ==> s:(0),(x,y,z),(dp(3),C)
- fprintf(li,"s:%s",list(l));
- ==> s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
- fprintf(li,"2l:%2l",list(l));
- ==> 2l:list("(0),(x,y,z),(dp(3),C)",
- ==> module(y*gen(2)+gen(1),
- ==> x*gen(2)+z*gen(2)),
- ==> intmat(intvec(1,1 ),1,2))
- ==>
- fprintf(li,"%p",list(l));
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- fprintf(li,"%;",list(l));
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- fprintf(li,"%b",M);
- ==> 0 1
- ==> ------------------
- ==> 0: 1 1
- ==> ------------------
- ==> total: 1 1
- ==>
-
-* Menu:
-
-See also:
-* print::
-* printf::
-* sprintf::
-* string::
-
-*See also:* *note print::; *note printf::; *note sprintf::; *note
-string::.
-
-
-File: sing.info, Node: freemodule, Next: gcd, Prev: fprintf, Up: Functions
-
-5.1.38 freemodule
------------------
-
-`*Syntax:*'
- `freemodule (' int_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- creates the free module of rank n generated by `gen(1)', ...,
- `gen(n)'.
-
-`*Example:*'
-
- ring r=32003,(x,y),(c,dp);
- freemodule(3);
- ==> _[1]=[1]
- ==> _[2]=[0,1]
- ==> _[3]=[0,0,1]
- matrix m=freemodule(3); // generates the 3x3 unit matrix
- print(m);
- ==> 1,0,0,
- ==> 0,1,0,
- ==> 0,0,1
-
-* Menu:
-
-See
-* gen::
-* module::
-
-See *note gen::; *note module::.
-
-
-File: sing.info, Node: gcd, Next: gen, Prev: freemodule, Up: Functions
-
-5.1.39 gcd
-----------
-
-`*Syntax:*'
- `gcd (' int_expression`,' int_expression `)'
- `gcd (' number_expression`,' number_expression `)'
- `gcd (' poly_expression`,' poly_expression `)'
-
-`*Type:*'
- the same as the type of the arguments
-
-`*Purpose:*'
- computes the greatest common divisor.
-
-`*Note:*'
- Not implemented for the coefficient fields real and finite fields
- of type `(p^n,a)'.
- The gcd of two numbers is their gcd as integer numbers or
- polynomials, otherwise it is not defined.
-
-`*Example:*'
-
- gcd(2,3);
- ==> 1
- ring r=0,(x,y,z),lp;
- gcd(3x2*(x+y),9x*(y2-x2));
- ==> x2+xy
- gcd(number(6472674604870),number(878646537247372));
- ==> 2
-
-* Menu:
-
-See
-* extgcd::
-* int::
-* number::
-* poly::
-
-See *note extgcd::; *note int::; *note number::; *note poly::.
-
-
-File: sing.info, Node: gen, Next: getdump, Prev: gcd, Up: Functions
-
-5.1.40 gen
-----------
-
-`*Syntax:*'
- `gen (' int_expression `)'
-
-`*Type:*'
- vector
-
-`*Purpose:*'
- returns the i-th free generator of a free module.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,dp);
- gen(3);
- ==> [0,0,1]
- vector v=gen(5);
- poly f=xyz;
- v=v+f*gen(4); v;
- ==> [0,0,0,xyz,1]
- ring rr=32003,(x,y,z),dp;
- fetch(r,v);
- ==> xyz*gen(4)+gen(5)
-
-* Menu:
-
-See
-* freemodule::
-* int::
-* vector::
-
-See *note freemodule::; *note int::; *note vector::.
-
-
-File: sing.info, Node: getdump, Next: groebner, Prev: gen, Up: Functions
-
-5.1.41 getdump
---------------
-
-`*Syntax:*'
- `getdump (' link_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- reads the content of the entire file, resp. link, and restores all
- variables from it. For ASCII links, `getdump' is equivalent to an
- `execute(read(' link `))' command. For MP links, `getdump' should
- only be used on data which were previously `dump''ed.
-
-`*Example:*'
-
- int i=3;
- dump(":w example.txt");
- kill i;
- option(noredefine);
- getdump("example.txt");
- i;
- ==> 3
-
-`*Restrictions:*'
- `getdump' is not supported for DBM links, or for a link connecting
- to `stdin' (standard input).
-
-* Menu:
-
-See
-* dump::
-* link::
-* read::
-
-See *note dump::; *note link::; *note read::.
-
-
-File: sing.info, Node: groebner, Next: help, Prev: getdump, Up: Functions
-
-5.1.42 groebner
----------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `groebner (' ideal_expression `)'
- `groebner (' module_expression `)'
- `groebner (' ideal_expression`,' int_expression `)'
- `groebner (' module_expression`,' int_expression `)'
-
-*Type:*
- type of the first argument
-
-*Purpose:*
- computes the standard basis of the first argument `I' (ideal or
- module), by a heuristically chosen method: if the ordering of the
- current ring is a local ordering, or if it is a non-block ordering
- and the current ring has no parameters, then `std(I)' is returned.
- Otherwise, `I' is mapped into a ring with no parameters and
- ordering dp, where its Hilbert series is computed. This is followed
- by a Hilbert-series based std computation in the original ring.
-
-*Note:*
- If a 2nd argument `wait' is given, then the computation proceeds at
- most `wait' seconds. That is, if no result could be computed in
- `wait' seconds, then the computation is interrupted, 0 is returned,
- a warning message is displayed, and the global variable
- `groebner_error' is defined.
-
-*Example:*
- ring r=0,(a,b,c,d),lp;
- option(prot);
- ideal i=a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; // cyclic 4
- groebner(i);
- ==> std in (0),(a,b,c,d,@t),(dp,C)
- ==> [63:1]1(3)s2(2)s3s4-s5ss6-s7--
- ==> product criterion:8 chain criterion:5
- ==> std with hilb in (0),(a,b,c,d,@t),(lp(4),C)
- ==> [63:1]1(3)s2(2)s3s4-s5ss6shhhh8shh
- ==> product criterion:9 chain criterion:8
- ==> hilbert series criterion:6
- ==> dehomogenization
- ==> imap to original ring
- ==> simplification
- ==> _[1]=c2d6-c2d2-d4+1
- ==> _[2]=c3d2+c2d3-c-d
- ==> _[3]=bd4-b+d5-d
- ==> _[4]=bc-bd5+c2d4+cd-d6-d2
- ==> _[5]=b2+2bd+d2
- ==> _[6]=a+b+c+d
- ring rp=(0,a,b),(c,d), lp;
- ideal i=imap(r,i);
- ideal j=groebner(i);
- ==> std in 0,(c,d,a,b,@t),(dp,C)
- ==> [63:1]1(3)s2(2)s3s4-s5ss6-s7--
- ==> product criterion:8 chain criterion:5
- ==> std with hilb in (0),(c,d,a,b,@t),(lp(2),C, dp(3))
- ==> [63:3]1(3)s2(2)s3s4-s5ss6shhhh8shh
- ==> product criterion:9 chain criterion:8
- ==> hilbert series criterion:6
- ==> dehomogenization
- ==> imap to original ring
- ==> simplification
- option(noprot);
- j; simplify(j,1); std(i);
- ==> j[1]=(a3b2+a2b3-a-b)
- ==> _[1]=1
- ==> _[1]=1
- if (system("with","MP")) {groebner(i,0);}
- ==> // ** groebner did not finish
- ==> _[1]=0
- defined(groebner_error);
- ==> 1
-
-* Menu:
-
-See also:
-* std::
-* stdfglm::
-* stdhilb::
-
-*See also:* *note std::; *note stdfglm::; *note stdhilb::.
-
-
-File: sing.info, Node: help, Next: highcorner, Prev: groebner, Up:
Functions
-
-5.1.43 help
------------
-
-`*Syntax:*'
- `help;'
- `help' topic `;'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- displays online help information for `topic' using the currently
- set help browser. If no `topic' is given, the title page of the
- manual is displayed.
-
-`*Note:*'
-
- * `?' may be used instead of `help'.
-
- * `topic' can be an index entry of the SINGULAR manual or the
- name of a (loaded) procedure which has a help section.
-
- * `topic' may contain wildcard characters (i.e., `*'
- characters).
-
- * If a (possibly "wildcarded") `topic' cannot be found (or
- uniquely matched) a warning is displayed and no help
- information is provided.
-
- * If `topic' is the name of a (loaded) procedure whose help
- section has changed w.r.t. the help available in the manual
- then, instead of displaying the respective help section of the
- manual in the help browser, the "newer" help section of the
- procedure is simply printed to the terminal.
-
- * The browser in which the help information is displayed can be
- either set with the command-line option `--browser=<browser>'
- (*note Command line options::), or with the command
- `system("--browser", "<browser>")'. Use the command
- `system("browsers");' for a list of all available browsers.
- *Note The online help system::, for more details about help
- browsers.
-
-`*Example:*'
-
- help; // display title page of manual
- help ring; // display help for 'ring'
- ?ringe; // equivalent to 'help ringe;'
- ==> // ** No help for topic 'ringe' (not even for '*ringe*')
- ==> // ** Try '?;' for general help
- ==> // ** or '?Index;' for all available help topics
- ?ring*;
- ==> // ** No unique help for 'ring*'
- ==> // ** Try one of
- ==> ?Rings and orderings; ?Rings and standard bases; ?ring;
- ==> ?ring declarations; ?ring operations; ?ring related functions;
- ==> ?ring.lib; ?ring_lib; ?ringtensor; ?ringweights;
- help Rings and orderings;
- help standard.lib; // displays help for library 'standard.lib'
-
-* Menu:
-
-See
-* Command line options::
-* Format of a library::
-* Procedure definition::
-* The online help system::
-* system::
-
-See *note Command line options::; *note Format of a library::; *note
-Procedure definition::; *note The online help system::; *note system::.
-
-
-File: sing.info, Node: highcorner, Next: hilb, Prev: help, Up: Functions
-
-5.1.44 highcorner
------------------
-
-`*Syntax:*'
- `highcorner (' ideal_expression `)'
- `highcorner (' module_expression `)'
-
-`*Type:*'
- poly, resp. vector
-
-`*Purpose:*'
- returns the smallest monomial not contained in the ideal, resp.
- module, generated by the initial terms of the given generators. If
- the generators are a standard basis, this is also the smallest
- monomial not contained in the ideal, resp. module.
- If the ideal, resp. module, is not zero-dimensional, 0 is returned.
-
-`*Note:*'
- Let the ideal I be given by a standard basis. Then `highcorner(I)'
- returns 0 iff `dim(I)>0' or `dim(I)=-1'. Otherwise it returns the
- smallest monomial m not in I which has the following properties
- (with x(i) $x_i$
- the variables of the basering):
-
- * if x(i)>1 then x(i) $x_i>1$ then $x_i$
- does not divide m (e.g., m=1 if the ordering is global)
-
- * given any set of generators f_1,...f_k of I, let f_i' be
- obtained from f_i by deleting the terms divisible by x(i)*m
- for all i with x(i)<1. Then f_1',...,f_k' generate I.
$f_1,\dots,f_k$ of I, let $f'_i$ be obtained from
- $f_i$ by deleting the terms divisible by $x_i\cdot m$ for all i with
$x_i<1$.
- Then $f'_1,\dots,f'_k$ generate I.
-
-`*Example:*'
-
- ring r=0,(x,y),ds;
- ideal i=x3,x2y,y3;
- highcorner(std(i));
- ==> xy2
- highcorner(std(ideal(1)));
- ==> 0
-
-* Menu:
-
-See
-* dim::
-* std::
-* vdim::
-
-See *note dim::; *note std::; *note vdim::.
-
-
-File: sing.info, Node: hilb, Next: homog, Prev: highcorner, Up: Functions
-
-5.1.45 hilb
------------
-
-`*Syntax:*'
- `hilb (' ideal_expression `)'
- `hilb (' module_expression `)'
- `hilb (' ideal_expression`,' int_expression `)'
- `hilb (' module_expression`,' int_expression `)'
- `hilb (' ideal_expression`,' int_expression `,' intvec_expression
- `)'
- `hilb (' module_expression`,' int_expression `,' intvec_expression
- `)'
-
-`*Type:*'
- none (if called with one argument)
- intvec (if called with two or three arguments)
-
-`*Purpose:*'
- computes the (weighted) Hilbert series of the ideal, resp. module,
- defined by the leading terms of the generators of the given ideal,
- resp. module.
- If `hilb' is called with one argument, then the 1st and 2nd Hilbert
- series together with some additional information are displayed.
- If `hilb' is called with two arguments, then the n-th Hilbert
- series is returned as an intvec, where n=1,2 is the second
-argument.
- If a weight vector w is a given as 3rd argument, then the Hilbert
- series is computed w.r.t. these weights w (by default all weights
- are set to 1).
-
-`*Caution:*'
- The last entry of the returned intvec is not part of the actual
- Hilbert series, but is used in the Hilbert driven standard basis
- computation (see *note stdhilb::).
-
-`*Note:*'
- If the input is homogeneous w.r.t. the weights and a standard
- basis, the result is the (weighted) Hilbert series of the original
- ideal, resp. module.
-
-`*Example:*'
-
- ring R=32003,(x,y,z),dp;
- ideal i=x2,y2,z2;
- ideal s=std(i);
- hilb(s);
- ==> // 1 t^0
- ==> // -3 t^2
- ==> // 3 t^4
- ==> // -1 t^6
- ==>
- ==> // 1 t^0
- ==> // 3 t^1
- ==> // 3 t^2
- ==> // 1 t^3
- ==> // dimension (affine) = 0
- ==> // degree = 8
- hilb(s,1);
- ==> 1,0,-3,0,3,0,-1,0
- hilb(s,2);
- ==> 1,3,3,1,0
- intvec w=2,2,2;
- hilb(s,1,w);
- ==> 1,0,0,0,-3,0,0,0,3,0,0,0,-1,0
-
-* Menu:
-
-See
-* Hilbert function::
-* ideal::
-* intvec::
-* module::
-* std::
-* stdhilb::
-
-See *note Hilbert function::; *note ideal::; *note intvec::; *note
-module::; *note std::; *note stdhilb::.
-
-
-File: sing.info, Node: homog, Next: hres, Prev: hilb, Up: Functions
-
-5.1.46 homog
-------------
-
-`*Syntax:*'
- `homog (' ideal_expression `)'
- `homog (' module_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- tests for homogeneity: returns 1 for homogeneous input, 0
- otherwise.
-
-`*Syntax:*'
-
- `homog (' polynomial_expression`,' ring_variable `)'
- `homog (' vector_expression`,' ring_variable `)'
- `homog (' ideal_expression`,' ring_variable `)'
- `homog (' module_expression`,' ring_variable `)'
-
-`*Type:*'
- same as first argument
-
-`*Purpose:*'
- homogenizes polynomials, vectors, ideals, or modules by multiplying
- each monomial with a suitable power of the given ring variable
- (which must have weight 1).
-
-`*Example:*'
-
- ring r=32003,(x,y,z),ds;
- poly s1=x3y2+x5y+3y9;
- poly s2=x2y2z2+3z8;
- poly s3=5x4y2+4xy5+2x2y2z3+y7+11x10;
- ideal i=s1,s2,s3;
- homog(s2,z);
- ==> x2y2z4+3z8
- homog(i,z);
- ==> _[1]=3y9+x5yz3+x3y2z4
- ==> _[2]=x2y2z4+3z8
- ==> _[3]=11x10+y7z3+5x4y2z4+4xy5z4+2x2y2z6
- homog(i);
- ==> 0
- homog(homog(i,z));
- ==> 1
-
-* Menu:
-
-See
-* ideal::
-* module::
-* poly::
-* vector::
-
-See *note ideal::; *note module::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: hres, Next: imap, Prev: homog, Up: Functions
-
-5.1.47 hres
------------
-
-`*Syntax:*'
- `hres (' ideal_expression`,' int_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a free resolution of an ideal using the Hilbert-driven
- algorithm.
-
- More precisely, let R be the basering and I be the given ideal.
- Then `hres' computes a minimal free resolution of R/I
-
- A2 A1
- ... ---> F2 ---> F1 ---> R -> R/I -> 0.
-
-$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
- \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I
- \longrightarrow 0.$$
- If the int_expression k is not zero then the computation stops
- after k steps and returns a list of modules $M_i={\tt module} (A_i)$,
i=1..k.
- Mi=module(Ai), i=1...k.
-
- `list L=hres(I,0);' returns a list L of n modules (where n is the
- number of variables of the basering) such that ${\tt L[i]}=M_i$
- L[i]=M_i in the above notation.
-
-`*Note:*'
- The ideal_expression has to be homogeneous.
- Accessing single elements of a resolution may require that some
- partial computations have to be finished and may therefore take
- some time.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=xz,yz,x3-y3;
- def L=hres(I,0);
- print(betti(L),"betti");
- ==> 0 1 2
- ==> ------------------------
- ==> 0: 1 - -
- ==> 1: - 2 1
- ==> 2: - 1 1
- ==> ------------------------
- ==> total: 1 3 2
- L[2]; // the first syzygy module of r/I
- ==> _[1]=-x*gen(1)+y*gen(2)
- ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
-
-* Menu:
-
-See
-* betti::
-* ideal::
-* int::
-* lres::
-* minres::
-* module::
-* mres::
-* res::
-* sres::
-
-See *note betti::; *note ideal::; *note int::; *note lres::; *note
-minres::; *note module::; *note mres::; *note res::; *note sres::.
-
-
-File: sing.info, Node: imap, Next: impart, Prev: hres, Up: Functions
-
-5.1.48 imap
------------
-
-`*Syntax:*'
- `imap (' ring_name`,' name `)'
-
-`*Type:*'
- number, poly, vector, ideal, module, matrix or list (the same type
- as the second argument)
-
-`*Purpose:*'
- identity map on common subrings. `imap' is the map between rings
- and qrings with compatible ground fields which is the identity on
- variables and parameters of the same name and 0 otherwise. (See
- *note map:: for a description of possible mapping between different
- ground fields). Useful for mapping from a homogenized ring to the
- original ring or for mappings from/to rings with/without
- parameters. Compared with `fetch', `imap' uses the names of
- variables and parameters. Unlike `map' and `fetch' `imap' can map
- parameters to variables.
-
-`*Example:*'
-
- ring r=0,(x,y,z,a,b,c),dp;
- ideal i=xy2z3a4b5+1,homog(xy2z3a4b5+1,c); i;
- ==> i[1]=xy2z3a4b5+1
- ==> i[2]=xy2z3a4b5+c15
- ring r1=0,(a,b,x,y,z),lp;
- ideal j=imap(r,i); j;
- ==> j[1]=a4b5xy2z3+1
- ==> j[2]=a4b5xy2z3
- ring r2=(0,a,b),(x,y,z),ls;
- ideal j=imap(r,i); j;
- ==> j[1]=1+(a4b5)*xy2z3
- ==> j[2]=(a4b5)*xy2z3
-
-* Menu:
-
-See
-* fetch::
-* homog::
-* map::
-* qring::
-* ring::
-
-See *note fetch::; *note homog::; *note map::; *note qring::; *note
-ring::.
-
-
-File: sing.info, Node: impart, Next: indepSet, Prev: imap, Up: Functions
-
-5.1.49 impart
--------------
-
-`*Syntax:*'
- `impart (' number_expression `)'
-
-`*Type:*'
- number
-
-`*Purpose:*'
- returns the imaginary part of a number in a complex ground field,
- returns 0 otherwise.
-
-`*Example:*'
-
- ring r=(complex,i),x,dp;
- impart(1+2*i);
- ==> 2
-
-* Menu:
-
-See
-* repart::
-
-See *note repart::.
-
-
-File: sing.info, Node: indepSet, Next: insert, Prev: impart, Up: Functions
-
-5.1.50 indepSet
----------------
-
-`*Syntax:*'
- `indepSet (' ideal_expression `)'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
- computes a maximal set U of independent variables of the ideal
- given by a standard basis. If `v' is the result then `v[i]' is 1
- if and only if the i-th variable of the ring, `x(i)', is an
- independent variable. Hence, the set U consisting of all variables
- `x(i)' with `v[i]=1' is a maximal independent set.
-
-`*Note:*'
- U is a set of independent variables for I if and only if $I \cap
K[U]=(0)$,
- I intersect K[U]=(0), i.e., eliminating the remaining variables
- gives (0). U is maximal if dim(I)=#U.
-
-`*Syntax:*'
- `indepSet (' ideal_expression, int_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- computes a list of all maximal independent sets of the leading
- ideal (if the flag is 0), resp. of all those sets of independent
- variables of the leading ideal which cannot be enlarged.
-
-`*Example:*'
-
- ring r=32003,(x,y,u,v,w),dp;
- ideal I=xyw,yvw,uyw,xv;
- attrib(I,"isSB",1);
- indepSet(I);
- ==> 1,1,1,0,0
- eliminate(I,vw);
- ==> _[1]=0
- indepSet(I,0);
- ==> [1]:
- ==> 1,1,1,0,0
- ==> [2]:
- ==> 0,1,1,1,0
- ==> [3]:
- ==> 1,0,1,0,1
- ==> [4]:
- ==> 0,0,1,1,1
- indepSet(I,1);
- ==> [1]:
- ==> 1,1,1,0,0
- ==> [2]:
- ==> 0,1,1,1,0
- ==> [3]:
- ==> 1,0,1,0,1
- ==> [4]:
- ==> 0,0,1,1,1
- ==> [5]:
- ==> 0,1,0,0,1
- eliminate(I,xuv);
- ==> _[1]=0
-
-* Menu:
-
-See
-* ideal::
-* std::
-
-See *note ideal::; *note std::.
-
-
-File: sing.info, Node: insert, Next: interred, Prev: indepSet, Up:
Functions
-
-5.1.51 insert
--------------
-
-`*Syntax:*'
- `insert (' list_expression`,' expression `)'
- `insert (' list_expression`,' expression`,' int_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- inserts a new element (expression) into a list at the beginning, or
- (if called with 3 arguments) after the given position (the input is
- not changed).
-
-`*Example:*'
-
- list L=1,2;
- insert(L,4,2);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 4
- insert(L,4);
- ==> [1]:
- ==> 4
- ==> [2]:
- ==> 1
- ==> [3]:
- ==> 2
-
-* Menu:
-
-See
-* delete::
-* list::
-
-See *note delete::; *note list::.
-
-
-File: sing.info, Node: interred, Next: intersect, Prev: insert, Up:
Functions
-
-5.1.52 interred
----------------
-
-`*Syntax:*'
- `interred (' ideal_expression `)'
- `interred (' module_expression `)'
-
-`*Type:*'
- the same as the input type
-
-`*Purpose:*'
- interreduces a set of polynomials/vectors.
- input: f_1,...,f_n input: $f_1,\dots,f_n$
-
- output: g_1,...,g_s with s<=n and the properties
-
-
-output: $g_1,\dots,g_s$ with $s \leq n$ and the properties
-
- * (f_1,...,f_n) = (g_1,...,g_s) $(f_1,\dots,f_n) = (g_1,\dots,g_s)$
-
- * L(g_i)<>L(g_j) for all i<>j $L(g_i)\neq L(g_j)$ for all $i\neq j$
-
- * in the case of a global ordering (polynomial ring):
- L(g_i) $L(g_i)$
- does not divide m for all monomials m of
- {g_1,...,g_(i-1),g_(i+1),...,g_s}
$\{g_1,\dots,g_{i-1},g_{i+1},\dots,g_s\}$
-
- * in the case of a local or mixed ordering (localization of
- polynomial ring):
- if L(g_i) | L(g_j) for any i<>j, $L(g_i) | L(g_j)$ for any $i \neq
j$,
- then ecart(g_i) > ecart(g_j) $ecart(g_i) > ecart(g_j)$
-
-Here, $L(g)$ denotes the leading term of $g$ and
- $ecart(g):=deg(g)-deg(L(g))$.
-
-
- Here, L(g) denotes the leading term of g and ecart(g) :=
- deg(g)-deg(L(g)).
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal i=x2+z,z,2z;
- interred(i);
- ==> _[1]=z
- ==> _[2]=x2
- ring R=0,(x,y,z),ds;
- ideal i=zx+y3,z+y3,z+xy;
- interred(i);
- ==> _[1]=z+xy
- ==> _[2]=xy-y3
- ==> _[3]=x2y-y3
-
-* Menu:
-
-See
-* ideal::
-* module::
-* std::
-
-See *note ideal::; *note module::; *note std::.
-
-
-File: sing.info, Node: intersect, Next: jacob, Prev: interred, Up:
Functions
-
-5.1.53 intersect
-----------------
-
-`*Syntax:*'
- `intersect (' expression_list of ideal_expression `)'
- `intersect (' expression_list of module_expression `)'
-
-`*Type:*'
- ideal, resp. module
-
-`*Purpose:*'
- computes the intersection of ideals, resp. modules.
-
-`*Note:*'
- If the option `returnSB' is enabled then the result is a standard
- basis.
-
-`*Example:*'
-
- ring R=0,(x,y),dp;
- ideal i=x;
- ideal j=y;
- intersect(i,j);
- ==> _[1]=xy
- ring r=181,(x,y,z),(c,ls);
- ideal id1=maxideal(3);
- ideal id2=x2+xyz,y2-z3y,z3+y5xz;
- ideal id3=intersect(id1,id2,ideal(x,y));
- id3;
- ==> id3[1]=yz3+xy6z
- ==> id3[2]=yz4-y2z
- ==> id3[3]=y2z3-y3
- ==> id3[4]=xz3+x2y5z
- ==> id3[5]=xyz2+x2z
- ==> id3[6]=xyz3-xy2
- ==> id3[7]=xy2z+x2y
- ==> id3[8]=x2yz+x3
-
-* Menu:
-
-See
-* ideal::
-* module::
-* option::
-
-See *note ideal::; *note module::; *note option::.
-
-
-File: sing.info, Node: jacob, Next: jet, Prev: intersect, Up: Functions
-
-5.1.54 jacob
-------------
-
-`*Syntax:*'
- `jacob (' poly_expression `)'
- `jacob (' ideal_expression `)'
-
-`*Type:*'
- ideal, if the input is a polynomial
- matrix, if the input is an ideal
-
-`*Purpose:*'
- computes the Jacobi ideal, resp. Jacobi matrix, generated by all
- partial derivatives of the input.
-
-`*Example:*'
-
- ring R;
- poly f=x2+y3+z5;
- jacob(f);
- ==> _[1]=2x
- ==> _[2]=3y2
- ==> _[3]=5z4
- ideal i=jacob(f);
- print(jacob(i));
- ==> 2,0, 0,
- ==> 0,6y,0,
- ==> 0,0, 20z3
-
-* Menu:
-
-See
-* diff::
-* ideal::
-* module::
-* nvars::
-
-See *note diff::; *note ideal::; *note module::; *note nvars::.
-
-
-File: sing.info, Node: jet, Next: kbase, Prev: jacob, Up: Functions
-
-5.1.55 jet
-----------
-
-`*Syntax:*'
- `jet (' poly_expression`,' int_expression `)'
- `jet (' vector_expression`,' int_expression `)'
- `jet (' ideal_expression`,' int_expression `)'
- `jet (' module_expression`,' int_expression `)'
- `jet (' poly_expression`,' int_expression`,' intvec_expression `)'
- `jet (' vector_expression`,' int_expression`,' intvec_expression
- `)'
- `jet (' ideal_expression`,' int_expression`,' intvec_expression `)'
-
- `jet (' module_expression`,' int_expression`,' intvec_expression
- `)'
- `jet (' poly_expression`,' int_expression`,' poly_expression `)'
- `jet (' vector_expression`,' int_expression`,' poly_expression `)'
- `jet (' ideal_expression`,' int_expression`,' matrix_expression `)'
-
- `jet (' module_expression`,' int_expression`,' matrix_expression
- `)'
-
-`*Type:*'
- the same as the type of the first argument
-
-`*Purpose:*'
- deletes from the first argument all terms of degree bigger than the
- second argument.
- If a third argument `w' of type intvec is given, the degree is
- replaced by the weighted degree defined by `w'.
- If a third argument `u' of type poly or matrix is given, the first
- argument `p' is replaced by `p/u'.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,dp);
- jet(1+x+x2+x3+x4,3);
- ==> x3+x2+x+1
- poly f=1+x+x2+xz+y2+x3+y3+x2y2+z4;
- jet(f,3);
- ==> x3+y3+x2+y2+xz+x+1
- intvec iv=2,1,1;
- jet(f,3,iv);
- ==> y3+y2+xz+x+1
- // the part of f with (total) degree >3:
- f-jet(f,3);
- ==> x2y2+z4
- // the homogeneous part of f of degree 2:
- jet(f,2)-jet(f,1);
- ==> x2+y2+xz
- // the part of maximal degree:
- jet(f,deg(f))-jet(f,deg(f)-1);
- ==> x2y2+z4
- // the absolute term of f:
- jet(f,0);
- ==> 1
- // now for other types:
- ideal i=f,x,f*f;
- jet(i,2);
- ==> _[1]=x2+y2+xz+x+1
- ==> _[2]=x
- ==> _[3]=3x2+2y2+2xz+2x+1
- vector v=[f,1,x];
- jet(v,1);
- ==> [x+1,1,x]
- jet(v,0);
- ==> [1,1]
- v=[f,1,0];
- module m=v,v,[1,x2,z3,0,1];
- jet(m,2);
- ==> _[1]=[x2+y2+xz+x+1,1]
- ==> _[2]=[x2+y2+xz+x+1,1]
- ==> _[3]=[1,x2,0,0,1]
-
-* Menu:
-
-See
-* deg::
-* ideal::
-* int::
-* intvec::
-* module::
-* poly::
-* vector::
-
-See *note deg::; *note ideal::; *note int::; *note intvec::; *note
-module::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: kbase, Next: kill, Prev: jet, Up: Functions
-
-5.1.56 kbase
-------------
-
-`*Syntax:*'
- `kbase (' ideal_expression `)'
- `kbase (' module_expression `)'
- `kbase (' ideal_expression`,' int_expression`)'
- `kbase (' module_expression`,' int_expression`)'
-
-`*Type:*'
- the same as the input type of the first argument
-
-`*Purpose:*'
- with one argument: computes a vector space basis (consisting of
- monomials) of the quotient ring by the ideal, resp. of a free
- module by the module, in case it is finite dimensional and if the
- input is a standard basis with respect to the ring ordering. If
- the input is not a standard basis, the leading terms of the input
- are used and the result may have no meaning.
- With two arguments: computes the part of a vector space basis of
- the respective quotient with degree of the monomials equal to the
- second argument. Here, the quotient does not need to be finite
- dimensional.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),ds;
- ideal i=x2,y2,z;
- kbase(std(i));
- ==> _[1]=xy
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=1
- i=x2,y3,xyz; // quotient not finite dimensional
- kbase(std(i),2);
- ==> _[1]=z2
- ==> _[2]=yz
- ==> _[3]=xz
- ==> _[4]=y2
- ==> _[5]=xy
-
-* Menu:
-
-See
-* ideal::
-* module::
-* vdim::
-
-See *note ideal::; *note module::; *note vdim::.
-
-
-File: sing.info, Node: kill, Next: killattrib, Prev: kbase, Up: Functions
-
-5.1.57 kill
------------
-
-`*Syntax:*'
- `kill (' name `)'
- `kill (' list_of_names `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- deletes objects.
-
-`*Example:*'
-
- int i=3;
- ring r=0,x,dp;
- poly p;
- listvar();
- ==> // r [0] *ring
- ==> // p [0] poly
- ==> // i [0] int 3
- ==> // LIB [0] string standard.lib
- kill(i,r);
- // the variable `i` does not exist any more
- i;
- ==> ? `i` is undefined
- ==> ? error occurred in line 7: ` i;`
- listvar();
- ==> // LIB [0] string standard.lib
-
-* Menu:
-
-See
-* defined::
-* general_lib::
-* names::
-
-See *note defined::; *note general_lib::; *note names::.
-
-
-File: sing.info, Node: killattrib, Next: koszul, Prev: kill, Up: Functions
-
-5.1.58 killattrib
------------------
-
-`*Syntax:*'
- `killattrib (' name`,' string_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- deletes the attribute given as the second argument.
-
-`*Example:*'
-
- ring r=32003,(x,y),lp;
- ideal i=maxideal(1);
- attrib(i,"isSB",1);
- attrib(i);
- ==> attr:isSB, type int
- killattrib(i,"isSB");
- attrib(i);
- ==> no attributes
-
-* Menu:
-
-See
-* attrib::
-* option::
-
-See *note attrib::; *note option::.
-
-
-File: sing.info, Node: koszul, Next: laguerre, Prev: killattrib, Up:
Functions
-
-5.1.59 koszul
--------------
-
-`*Syntax:*'
- `koszul (' int_expression`,' int_expression `)'
- `koszul (' int_expression`,' ideal_expression `)'
- `koszul (' int_expression`,' int_expression`,' ideal_expression `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- `koszul(d,n)' computes a matrix of the Koszul relations of degree d
- of the first n ring variables.
-
- `koszul(d,id)' computes a matrix of the Koszul relations of degree
- d of the generators of the ideal `id'.
-
- `koszul(d,n,id)' computes a matrix of the Koszul relations of
- degree d of the first n generators of the ideal `id'.
-
-`*Note:*'
- `koszul(1,id),koszul(2,id),...' form a complex, that is, the
- product of the matrices `koszul(i,id)' and `koszul(i+1,id)' equals
- zero.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- print(koszul(2,3));
- ==> -y,-z,0,
- ==> x, 0, -z,
- ==> 0, x, y
- ideal I=xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z;
- print(koszul(1,I));
- ==> xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z
- print(koszul(2,I));
- ==> -xyz-y2z-yz2,-xy2-y3-y2z,0,
- ==> xz2+yz2+z3, 0, -xy2-y3-y2z,
- ==> 0, xz2+yz2+z3, xyz+y2z+yz2
- print(koszul(2,I)*koszul(3,I));
- ==> 0,
- ==> 0,
- ==> 0
-
-* Menu:
-
-See
-* int::
-* matrix::
-
-See *note int::; *note matrix::.
-
-
-File: sing.info, Node: laguerre, Next: lead, Prev: koszul, Up: Functions
-
-5.1.60 laguerre
----------------
-
-`*Syntax:*'
- `laguerre (' poly_expression`,' int_expression`,' int_expression
- `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- computes all complex roots of a univariate polynomial using
- Laguerre's algorithm. The second argument defines the precision of
- the fractional part if the ground field is the field of rational
- numbers, otherwise it will be ignored. The third argument (can be
- 0, 1 or 2) gives the number of extra runs for Laguerre's algorithm
- (with corrupted roots), leading to better results.
-
-`*Note:*'
- If the ground field is the field of complex numbers, the elements
- of the list are of type number, otherwise of type string.
-
-`*Example:*'
-
- ring rs1=0,(x,y),lp;
- poly f=15x5+x3+x2-10;
- laguerre(f,10,2);
- ==> [1]:
- ==> (0.2930464644-I*0.9003002396)
- ==> [2]:
- ==> (0.2930464644+I*0.9003002396)
- ==> [3]:
- ==> (-0.7392783383-I*0.5355190078)
- ==> [4]:
- ==> (-0.7392783383+I*0.5355190078)
- ==> [5]:
- ==> 0.8924637479
-
-
-File: sing.info, Node: lead, Next: leadcoef, Prev: laguerre, Up: Functions
-
-5.1.61 lead
------------
-
-`*Syntax:*'
- `lead (' poly_expression `)'
- `lead (' vector_expression `)'
- `lead (' ideal_expression `)'
- `lead (' module_expression `)'
-
-`*Type:*'
- the same as the input type
-
-`*Purpose:*'
- returns the leading (or initial) term(s) of a polynomial, a vector,
- resp. of the generators of an ideal or module with respect to the
- monomial ordering.
-
-`*Note:*'
- `IN' may be used instead of `lead'.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,ds);
- poly f=2x2+3y+4z3;
- vector v=[2x10,f];
- ideal i=f,z;
- module m=v,[0,0,2+x];
- lead(f);
- ==> 3y
- lead(v);
- ==> [2x10]
- lead(i);
- ==> _[1]=3y
- ==> _[2]=z
- lead(m);
- ==> _[1]=[2x10]
- ==> _[2]=[0,0,2]
- lead(0);
- ==> 0
-
-* Menu:
-
-See
-* ideal::
-* leadcoef::
-* leadexp::
-* leadmonom::
-* module::
-* poly::
-* vector::
-
-See *note ideal::; *note leadcoef::; *note leadexp::; *note leadmonom::;
-*note module::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: leadcoef, Next: leadexp, Prev: lead, Up: Functions
-
-5.1.62 leadcoef
----------------
-
-`*Syntax:*'
- `leadcoef (' poly_expression `)'
- `leadcoef (' vector_expression `)'
-
-`*Type:*'
- number
-
-`*Purpose:*'
- returns the leading (or initial) coefficient of a polynomial or a
- vector with respect to the monomial ordering.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,ds);
- poly f=x2+y+z3;
- vector v=[2*x^10,f];
- leadcoef(f);
- ==> 1
- leadcoef(v);
- ==> 2
- leadcoef(0);
- ==> 0
-
-* Menu:
-
-See
-* lead::
-* leadexp::
-* leadmonom::
-* number::
-* poly::
-* vector::
-
-See *note lead::; *note leadexp::; *note leadmonom::; *note number::;
-*note poly::; *note vector::.
-
-
-File: sing.info, Node: leadexp, Next: leadmonom, Prev: leadcoef, Up:
Functions
-
-5.1.63 leadexp
---------------
-
-`*Syntax:*'
- `leadexp (' poly_expression `)'
- `leadexp (' vector_expression `)'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
- returns the exponent vector of the leading monomial of a polynomial
- or a vector. In the case of a vector the last component is the
- index in the vector.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,ds);
- poly f=x2+y+z3;
- vector v=[2*x^10,f];
- leadexp(f);
- ==> 0,1,0
- leadexp(v);
- ==> 10,0,0,1
- leadexp(0);
- ==> 0,0,0
-
-* Menu:
-
-See
-* intvec::
-* lead::
-* leadcoef::
-* leadmonom::
-* poly::
-* vector::
-
-See *note intvec::; *note lead::; *note leadcoef::; *note leadmonom::;
-*note poly::; *note vector::.
-
-
-File: sing.info, Node: leadmonom, Next: LIB, Prev: leadexp, Up: Functions
-
-5.1.64 leadmonom
-----------------
-
-`*Syntax:*'
- `leadmonom (' poly_expression `)'
- `leadmonom (' vector_expression `)'
-
-`*Type:*'
- the same as the input type
-
-`*Purpose:*'
- returns the leading monomial of a polynomial or a vector as a
- polynomial or vector whose coefficient is one.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(c,ds);
- poly f=2x2+3y+4z3;
- vector v=[2x10,f];
- leadmonom(f);
- ==> y
- leadmonom(v);
- ==> [x10]
- leadmonom(0);
- ==> 0
-
-* Menu:
-
-See
-* intvec::
-* lead::
-* leadcoef::
-* leadexp::
-* poly::
-* vector::
-
-See *note intvec::; *note lead::; *note leadcoef::; *note leadexp::;
-*note poly::; *note vector::.
-
-
-File: sing.info, Node: LIB, Next: lift, Prev: leadmonom, Up: Functions
-
-5.1.65 LIB
-----------
-
-`*Syntax:*'
- `LIB' string_expression`;'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- reads a library of procedures from a file. If the given filename
- does not start with `.' or `/' and cannot be located in the current
- directory, each directory contained in the library `SearchPath' is
- searched for file of this name. *Note Loading of a library::, for
- more info on `SearchPath'.
-
-`*Note on standard.lib:*'
- Unless SINGULAR is started with the `--no-stdlib' option, the
- library `standard.lib' is automatically loaded at start-up time.
-
-`*Syntax:*'
- `LIB;'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- shows all loaded libraries written in Singular.
-
-`*Example:*'
-
- option(loadLib); // show loading of libraries
- LIB; // standard.lib is loaded
- ==> standard.lib
-
- // the names of the procedures of inout.lib
- LIB "inout.lib"; // are now known to Singular
- ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
- LIB;
- ==> standard.lib,inout.lib
-
-* Menu:
-
-See
-* Command line options::
-* Loading of a library::
-* Procedures and libraries::
-* SINGULAR libraries::
-* proc::
-* standard_lib::
-* string::
-* system::
-
-See *note Command line options::; *note Loading of a library::; *note
-Procedures and libraries::; *note SINGULAR libraries::; *note proc::;
-*note standard_lib::; *note string::; *note system::.
-
-
-File: sing.info, Node: lift, Next: liftstd, Prev: LIB, Up: Functions
-
-5.1.66 lift
------------
-
-`*Syntax:*'
- `lift (' ideal_expression`,' subideal_expression `)'
- `lift (' module_expression`,' submodule_expression `)'
- `lift (' ideal_expression`,' subideal_expression`,' matrix_name `)'
-
- `lift (' module_expression`,' submodule_expression`,' matrix_name
- `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- computes the transformation matrix which expresses the generators
- of a submodule in terms of the generators of a module. Uses
- different algorithms for modules which are, resp. are not,
- represented by a standard basis.
- More precisely, if `m' is the module (or ideal), `sm' the
- submodule (or ideal), and `T' the transformation matrix returned by
- lift, then `matrix(sm)*U = matrix(m)*T' and `module(sm*U) =
- module(matrix(m)*T)' (resp. `ideal(sm*U) = ideal(matrix(m)*T)'),
- where `U' is a diagonal matrix of units.
- `U' is always the unity matrix if the basering is a polynomial ring
- (not power series ring). `U' is stored in the optional third
- argument.
-
-`*Note:*'
- Gives a warning if `sm' is not a submodule.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),(dp,C);
- ideal m=3x2+yz,7y6+2x2y+5xz;
- poly f=y7+x3+xyz+z2;
- ideal i=jacob(f);
- matrix T=lift(i,m);
- matrix(m)-matrix(i)*T;
- ==> _[1,1]=0
- ==> _[1,2]=0
-
-* Menu:
-
-See
-* division::
-* ideal::
-* module::
-
-See *note division::; *note ideal::; *note module::.
-
-
-File: sing.info, Node: liftstd, Next: listvar, Prev: lift, Up: Functions
-
-5.1.67 liftstd
---------------
-
-`*Syntax:*'
- `liftstd (' ideal_expression`,' matrix_name `)'
- `liftstd (' module_expression`,' matrix_name `)'
-
-`*Type:*'
- ideal or module
-
-`*Purpose:*'
- returns a standard basis of an ideal or module and the
- transformation matrix from the given ideal, resp. module, to the
- standard basis.
- That is, if `m' is the ideal or module, `sm' the standard basis
- returned by `liftstd', and `T' the transformation matrix then
- `matrix(sm)=matrix(m)*T' and `sm=ideal(matrix(m)*T)', resp.
- `sm=module(matrix(m)*T)'.
-
-`*Example:*'
-
- ring R=0,(x,y,z),dp;
- poly f=x3+y7+z2+xyz;
- ideal i=jacob(f);
- matrix T;
- ideal sm=liftstd(i,T);
- sm;
- ==> sm[1]=xy+2z
- ==> sm[2]=3x2+yz
- ==> sm[3]=yz2+3048192z3
- ==> sm[4]=3024xz2-yz2
- ==> sm[5]=y2z-6xz
- ==> sm[6]=3097158156288z4+2016z3
- ==> sm[7]=7y6+xz
- print(T);
- ==> 0,1,T[1,3], T[1,4],y, T[1,6],0,
- ==> 0,0,-3x+3024z,3x, 0, T[2,6],1,
- ==> 1,0,T[3,3], T[3,4],-3x,T[3,6],0
- matrix(sm)-matrix(i)*T;
- ==> _[1,1]=0
- ==> _[1,2]=0
- ==> _[1,3]=0
- ==> _[1,4]=0
- ==> _[1,5]=0
- ==> _[1,6]=0
- ==> _[1,7]=0
-
-* Menu:
-
-See
-* ideal::
-* matrix::
-* option::
-* ring::
-* std::
-
-See *note ideal::; *note matrix::; *note option::; *note ring::; *note
-std::.
-
-
-File: sing.info, Node: listvar, Next: lres, Prev: liftstd, Up: Functions
-
-5.1.68 listvar
---------------
-
-`*Syntax:*'
- `listvar (' [package] `)'
- `listvar (' [package`,'] type `)'
- `listvar (' [package`,'] ring_name `)'
- `listvar (' [package`,'] name `)'
- `listvar (' [package`,'] `all )'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- lists all (user-)defined names in the current namespace:
-
- * `listvar()': all currently visible names except procedures,
-
- * `listvar('type`)': all currently visible names of the given
- type,
-
- * `listvar('ring_name`)': all names which belong to the given
- ring,
-
- * `listvar('name`)': the object with the given name,
-
- * `listvar(all)': all names except procedures.
-
- The current basering is marked with a `*'. The nesting level of
- variables in procedures is shown in square brackets.
-
-`*Example:*'
-
- proc t1 { }
- proc t2 { }
- ring s;
- poly ss;
- ring r;
- poly f=x+y+z;
- int i=7;
- ideal I=f,x,y;
- listvar(all);
- ==> // i [0] int 7
- ==> // r [0] *ring
- ==> // I [0] ideal, 3 generator(s)
- ==> // f [0] poly
- ==> // s [0] ring
- ==> // ss [0] poly
- ==> // LIB [0] string standard.lib
- listvar();
- ==> // i [0] int 7
- ==> // r [0] *ring
- ==> // I [0] ideal, 3 generator(s)
- ==> // f [0] poly
- ==> // s [0] ring
- ==> // LIB [0] string standard.lib
- listvar(r);
- ==> // r [0] *ring
- ==> // I [0] ideal, 3 generator(s)
- ==> // f [0] poly
- listvar(t1);
- ==> // t1 [0] proc
- listvar(proc);
- ==> // t2 [0] proc
- ==> // t1 [0] proc
- ==> // fprintf [0] proc from standard.lib
- ==> // printf [0] proc from standard.lib
- ==> // sprintf [0] proc from standard.lib
- ==> // intersect1 [0] proc from standard.lib (static)
- ==> // quotient4 [0] proc from standard.lib
- ==> // quotient5 [0] proc from standard.lib
- ==> // quotient3 [0] proc from standard.lib
- ==> // quotient2 [0] proc from standard.lib
- ==> // quotient1 [0] proc from standard.lib
- ==> // quotient0 [0] proc from standard.lib (static)
- ==> // quot1 [0] proc from standard.lib (static)
- ==> // quot [0] proc from standard.lib
- ==> // res [0] proc from standard.lib
- ==> // groebner [0] proc from standard.lib
- ==> // stdhilb [0] proc from standard.lib
- ==> // stdfglm [0] proc from standard.lib
-
-* Menu:
-
-See
-* Names::
-* Names in procedures::
-* defined::
-* names::
-* type::
-
-See *note Names::; *note Names in procedures::; *note defined::; *note
-names::; *note type::.
-
-
-File: sing.info, Node: lres, Next: maxideal, Prev: listvar, Up: Functions
-
-5.1.69 lres
------------
-
-`*Syntax:*'
- `lres (' ideal_expression`,' int_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a free resolution of an ideal using La Scala's algorithm.
-
- More precisely, let R be the basering and I be the given ideal.
- Then `lres' computes a minimal free resolution of R/I
-
- A2 A1
- ... ---> F2 ---> F1 ---> R -> R/I -> 0.
-
-$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
- \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I
- \longrightarrow 0.$$
- If the int_expression k is not zero then the computation stops
- after k steps and returns a list of modules $M_i={\tt module}(A_i)$,
i=1..k.
- Mi=module(Ai), i=1..k.
-
- `list L=lres(I,0);' returns a list L of n modules (where n is the
- number of variables of the basering) such that ${\tt L[i]}=M_i$
- L[i]=M_i in the above notation.
-
-`*Note:*'
- The ideal_expression has to be homogeneous.
- Accessing single elements of a resolution may require that some
- partial computations have to be finished and may therefore take
- some time.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=xz,yz,x3-y3;
- def L=lres(I,0);
- print(betti(L),"betti");
- ==> 0 1 2
- ==> ------------------------
- ==> 0: 1 - -
- ==> 1: - 2 1
- ==> 2: - 1 1
- ==> ------------------------
- ==> total: 1 3 2
- L[2]; // the first syzygy module of r/I
- ==> _[1]=-x*gen(1)+y*gen(2)
- ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
-
-* Menu:
-
-See
-* betti::
-* hres::
-* ideal::
-* int::
-* minres::
-* module::
-* mres::
-* res::
-* sres::
-
-See *note betti::; *note hres::; *note ideal::; *note int::; *note
-minres::; *note module::; *note mres::; *note res::; *note sres::.
-
-
-File: sing.info, Node: maxideal, Next: memory, Prev: lres, Up: Functions
-
-5.1.70 maxideal
----------------
-
-`*Syntax:*'
- `maxideal (' int_expression `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- returns the power given by int_expression of the maximal ideal
- generated by all ring variables (`maxideal(i)=1' for `i<=0').
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- maxideal(2);
- ==> _[1]=z2
- ==> _[2]=yz
- ==> _[3]=y2
- ==> _[4]=xz
- ==> _[5]=xy
- ==> _[6]=x2
-
-* Menu:
-
-See
-* ideal::
-* ring::
-
-See *note ideal::; *note ring::.
-
-
-File: sing.info, Node: memory, Next: minbase, Prev: maxideal, Up: Functions
-
-5.1.71 memory
--------------
-
-`*Syntax:*'
- `memory (' int_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns statistics concerning the memory management:
-
- * `memory(0)' is the number of active (used) bytes,
-
- * `memory(1)' is the number of bytes allocated from the
- operating system,
-
- * `memory(2)' is the maximal number of bytes ever allocated from
- the operating system during the current SINGULAR session.
-
-`*Note:*'
- To monitor the memory usage during ongoing computations the option
- `mem' should be set (using the command `option(mem);', see also
- *note option::).
-
-`*Example:*'
-
- ring r=0,(x(1..500)),dp;
- poly p=(x(1)+x(500))^50;
- proc ReportMemoryUsage()
- { "Memory currently used by SINGULAR :",memory(0),"Byte (",
- memory(0)/1023, "KByte)" +newline+
- "Memory currently allocated from system:",memory(1), "Byte (",
- memory(1)/1023, "KByte)";
- "Maximal memory allocated from system :",memory(2), "Byte (",
- memory(2)/1023, "KByte)";
- }
- ReportMemoryUsage();
- ==> Memory currently used by SINGULAR : 206940 Byte ( 202 KByte)
- ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
- ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
- kill p;
- ReportMemoryUsage(); // less memory used: p killed
- ==> Memory currently used by SINGULAR : 153704 Byte ( 150 KByte)
- ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
- ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
- kill r;
- ReportMemoryUsage(); // even less memory: r killed
- ==> Memory currently used by SINGULAR : 143124 Byte ( 139 KByte)
- ==> Memory currently allocated from system: 669128 Byte ( 654 KByte)
- ==> Maximal memory allocated from system : 669128 Byte ( 654 KByte)
-
-* Menu:
-
-See
-* option::
-* system::
-
-See *note option::; *note system::.
-
-
-File: sing.info, Node: minbase, Next: minor, Prev: memory, Up: Functions
-
-5.1.72 minbase
---------------
-
-`*Syntax:*'
- `minbase (' ideal_expression `)'
- `minbase (' module_expression `)'
-
-`*Type:*'
- the same as the type of the argument
-
-`*Purpose:*'
- returns a minimal set of generators of an ideal, resp. module, if
- the input is either homogeneous or if the ordering is local.
-
-`*Example:*'
-
- ring r=181,(x,y,z),(c,ls);
- ideal id2=x2+xyz,y2-z3y,z3+y5xz;
- ideal id4=maxideal(3)+id2;
- size(id4);
- ==> 13
- minbase(id4);
- ==> _[1]=x2
- ==> _[2]=xyz+x2
- ==> _[3]=xz2
- ==> _[4]=y2
- ==> _[5]=yz2
- ==> _[6]=z3
-
-* Menu:
-
-See
-* mstd::
-
-See *note mstd::.
-
-
-File: sing.info, Node: minor, Next: minres, Prev: minbase, Up: Functions
-
-5.1.73 minor
-------------
-
-`*Syntax:*'
- `minor (' matrix_expression`,' int_expression `)'
- `minor (' matrix_expression`,' int_expression`,' ideal_expression
- `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- returns the set of all minors (=subdeterminants) of the given size
- of a matrix. The optional third argument must be a standard basis.
- If a third argument is given, the computations will be performed
- modulo that ideal.
-
-`*Example:*'
-
- ring r=0,(x(1..5)),ds;
- matrix m[2][4]=x(1..4),x(2..5);
- print(m);
- ==> x(1),x(2),x(3),x(4),
- ==> x(2),x(3),x(4),x(5)
- ideal j=minor(m,2);
- j;
- ==> j[1]=-x(4)^2+x(3)*x(5)
- ==> j[2]=-x(3)*x(4)+x(2)*x(5)
- ==> j[3]=-x(2)*x(4)+x(1)*x(5)
- ==> j[4]=x(3)^2-x(2)*x(4)
- ==> j[5]=x(2)*x(3)-x(1)*x(4)
- ==> j[6]=-x(2)^2+x(1)*x(3)
- minor(m,2,std(ideal(x(1))));
- ==> _[1]=-x(4)^2+x(3)*x(5)
- ==> _[2]=-x(3)*x(4)+x(2)*x(5)
- ==> _[3]=-x(2)*x(4)
- ==> _[4]=x(3)^2-x(2)*x(4)
- ==> _[5]=x(2)*x(3)
- ==> _[6]=-x(2)^2
-
-* Menu:
-
-See
-* det::
-
-See *note det::.
-
-
-File: sing.info, Node: minres, Next: modulo, Prev: minor, Up: Functions
-
-5.1.74 minres
--------------
-
-`*Syntax:*'
- `minres (' list_expression `)'
-
-`*Type:*'
- list
-
-`*Syntax:*'
- `minres (' resolution_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- minimizes a free resolution of an ideal or module given by the
- list_expression, resp. resolution_expression.
-
-`*Example:*'
-
- ring r1=32003,(x,y),dp;
- ideal i=x5+xy4,x3+x2y+xy2+y3;
- resolution rs=lres(i,0);
- rs;
- ==> 1 2 1
- ==> r1 <-- r1 <-- r1
- ==>
- ==> 0 1 2
- ==> resolution not minimized yet
- ==>
- list(rs);
- ==> [1]:
- ==> _[1]=x3+x2y+xy2+y3
- ==> _[2]=xy4
- ==> _[3]=y7
- ==> [2]:
- ==> _[1]=-y4*gen(1)+x2*gen(2)+xy*gen(2)+y2*gen(2)+gen(3)
- ==> _[2]=-y3*gen(2)+x*gen(3)
- minres(rs);
- ==> 1 2 1
- ==> r1 <-- r1 <-- r1
- ==>
- ==> 0 1 2
- ==>
- list(rs);
- ==> [1]:
- ==> _[1]=x3+x2y+xy2+y3
- ==> _[2]=xy4
- ==> [2]:
- ==> _[1]=xy4*gen(1)-x3*gen(2)-x2y*gen(2)-xy2*gen(2)-y3*gen(2)
-
-* Menu:
-
-See
-* mres::
-* res::
-* sres::
-
-See *note mres::; *note res::; *note sres::.
-
-
-File: sing.info, Node: modulo, Next: monitor, Prev: minres, Up: Functions
-
-5.1.75 modulo
--------------
-
-`*Syntax:*'
- `modulo (' ideal_expression`,' ideal_expression `)'
- `modulo (' module_expression`,' module_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- `modulo(h1,h2)' represents h1/(h1 intersect h2) (isomorphic to
- (h1+h2)/h2) represents $h_1/(h_1 \cap h_2) \cong (h_1+h_2)/h_2$
- where $h_1$ and $h_2$
- h1 and h2 are considered as submodules of the same free module $R^l$
- R^l (l=1 for ideals). Let $H_1$, resp.\ $H_2$,
- H1 and H2 be the matrices of size l x k, resp. l x m, having the
- columns of be the matrices of size $l \times k$, resp.\ $l \times m$,
having the
- generators of $h_1$, resp.\ $h_2$,
- h1, resp. h2, as columns. Then $h_1/(h_1 \cap h_2) \cong R^k /
ker(\overline{H_1})$
-
- __
- h1/(h1 intersect h2) is isomorphic to R^k/ker(H1)
-
-
-
- where $\overline{H_1}: R^k \rightarrow R^l/Im(H_2)=R^l/h_2$
- is the induced map.
-
- __
- H1: R^k ---> R^l/Im(H2)=R^l/h2 is the induced map.
-
-
-
-
- `modulo(h1,h2)' returns generators of the kernel of this induced
- map.
-
-`*Example:*'
-
- ring r;
- ideal h1=x,y,z;
- ideal h2=x;
- module m=modulo(h1,h2);
- print(m);
- ==> 1,0, 0,0,
- ==> 0,-z,x,0,
- ==> 0,y, 0,x
-
-* Menu:
-
-See
-* syz::
-
-See *note syz::.
-
-
-File: sing.info, Node: monitor, Next: mpresmat, Prev: modulo, Up: Functions
-
-5.1.76 monitor
---------------
-
-`*Syntax:*'
- `monitor (' string_expression `)'
- `monitor (' string_expression`,' string_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- controls the recording of all user input and/or program output into
- a file. The second argument describes what to log: `"i"' means
- input, `"o"' means output, `"io"' for both.
- The default for the second argument is `"i"'.
- Each `monitor' command closes a previous monitor file and opens the
- file given by the first string expression.
- `monitor ("")' turns off recording.
-
-`*Example:*'
-
- monitor("doe.tmp","io"); // log input and output to doe.tmp
- ring r;
- poly f=x+y+z;
- int i=7;
- ideal I=f,x,y;
- monitor(""); // stop logging
-
-
-File: sing.info, Node: mpresmat, Next: mres, Prev: monitor, Up: Functions
-
-5.1.77 mpresmat
----------------
-
-`*Syntax:*'
- `mpresmat (' ideal_expression`,' int_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- computes the multipolynomial resultant matrix of the input system.
- Uses the sparse resultant matrix method of Gelfand, Kapranov and
- Zelevinsky (second parameter = 0) or the resultant matrix method of
- Macaulay (second parameter = 1).
-
-`*Note:*'
- When using the resultant matrix method of Macaulay the input system
- must be homogeneous. The number of elements in the input system
- must be the number of variables in the basering plus one.
-
-`*Example:*'
-
- ring rsq=(0,s,t,u),(x,y),lp;
- ideal i=s+tx+uy,x2+y2-10,x2+xy+2y2-16;
- module m=mpresmat(i,0);
- print(m);
- ==> -16,0, -10,0, (s),0, 0, 0, 0, 0,
- ==> 0, -16,0, -10,(u),(s),0, 0, 0, 0,
- ==> 2, 0, 1, 0, 0, (u),0, 0, 0, 0,
- ==> 0, 2, 0, 1, 0, 0, 0, 0, 0, 0,
- ==> 0, 0, 0, 0, (t),0, -10,(s),0, -16,
- ==> 1, 0, 0, 0, 0, (t),0, (u),(s),0,
- ==> 0, 1, 0, 0, 0, 0, 1, 0, (u),2,
- ==> 1, 0, 1, 0, 0, 0, 0, (t),0, 0,
- ==> 0, 1, 0, 1, 0, 0, 0, 0, (t),1,
- ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
-
-* Menu:
-
-See
-* uressolve::
-
-See *note uressolve::.
-
-
-File: sing.info, Node: mres, Next: mstd, Prev: mpresmat, Up: Functions
-
-5.1.78 mres
------------
-
-`*Syntax:*'
- `mres (' ideal_expression`,' int_expression `)'
- `mres (' module_expression`,' int_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a minimal free resolution of an ideal or module M with the
- standard basis method. More precisely, let A=`matrix'(M), then
- `mres' computes a free resolution of coker(A)=F0/M
-
- A2 A1
- ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
-
-$coker(A)=F_0/M$
- $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
- \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M
- \longrightarrow 0,$$
- where the columns of the matrix $A_1$
- A1 are a minimal set of generators of M if the basering is local or
- if M is homogeneous. If the int expression k is not zero then the
- computation stops after k steps and returns a list of modules $M_i={\tt
module}(A_i)$, i=1...k.
- Mi=module(Ai), i=1...k.
- `mres(M,0)' returns a resolution consisting of at most n+2 modules,
- where n is the number of variables of the basering. Let `list
- L=mres(M,0);' then `L[1]' consists of a minimal set of generators
- of the input, `L[2]' consists of a minimal set of generators for
- the first syzygy module of `L[1]', etc., until `L[p+1]', such that
- L[i]<>0 for i<=p, ${\tt L[i]}\neq 0$ for $i \le p$,
- but `L[p+1]', the first syzygy module of `L[p]', is 0 (if the
- basering is not a qring).
-
-`*Note:*'
- Accessing single elements of a resolution may require that some
- partial computations have to be finished and may therefore take
- some time.
-
-`*Example:*'
-
- ring r=31991,(t,x,y,z,w),ls;
- ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
- t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
- resolution L=mres(M,0);
- L;
- ==> 1 4 15 18 7 1
- ==> r <-- r <-- r <-- r <-- r <-- r
- ==>
- ==> 0 1 2 3 4 5
- ==>
- // projective dimension of M is 5
-
-* Menu:
-
-See
-* hres::
-* ideal::
-* lres::
-* module::
-* res::
-* sres::
-
-See *note hres::; *note ideal::; *note lres::; *note module::; *note
-res::; *note sres::.
-
-
-File: sing.info, Node: mstd, Next: mult, Prev: mres, Up: Functions
-
-5.1.79 mstd
------------
-
-`*Syntax:*'
- `mstd (' ideal_expression `)'
- `mstd (' module_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- returns a list whose first entry is a standard basis for the ideal,
- resp. module. If the monomial ordering is global, then the second
- entry is both a generating set for the ideal, resp. module, and a
- subset of the standard basis. If, additionally, the input is
- homogeneous then the second entry is a minimal generating set for
- the ideal, resp. module.
-
-`*Example:*'
-
- ring r=0,(x,y,z,t),dp;
- poly f=x3+y4+z6+xyz;
- ideal j=jacob(f),f;
- j=homog(j,t);j;
- ==> j[1]=3x2+yz
- ==> j[2]=4y3+xzt
- ==> j[3]=6z5+xyt3
- ==> j[4]=0
- ==> j[5]=z6+y4t2+x3t3+xyzt3
- mstd(j);
- ==> [1]:
- ==> _[1]=3x2+yz
- ==> _[2]=4y3+xzt
- ==> _[3]=6z5+xyt3
- ==> _[4]=xyzt3
- ==> _[5]=y2z2t3
- ==> _[6]=yz3t4
- ==> _[7]=xz3t4
- ==> _[8]=yz2t7
- ==> _[9]=xz2t7
- ==> _[10]=y2zt7
- ==> _[11]=xy2t7
- ==> [2]:
- ==> _[1]=3x2+yz
- ==> _[2]=4y3+xzt
- ==> _[3]=6z5+xyt3
- ==> _[4]=xyzt3
-
-* Menu:
-
-See
-* ideal::
-* minbase::
-* module::
-* std::
-
-See *note ideal::; *note minbase::; *note module::; *note std::.
-
-
-File: sing.info, Node: mult, Next: nameof, Prev: mstd, Up: Functions
-
-5.1.80 mult
------------
-
-`*Syntax:*'
- `mult (' ideal_expression `)'
- `mult (' module_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- computes the degree of the monomial ideal, resp. module, generated
- by the leading monomials of the input.
- If the input is a standard basis of a homogeneous ideal then it
- returns the degree of this ideal.
- If the input is a standard basis of an ideal in a (local) ring with
- respect to a local degree ordering then it returns the multiplicity
- of the ideal (in the sense of Samuel, with respect to the maximal
- ideal).
-
-`*Example:*'
-
- ring r=32003,(x,y),ds;
- poly f=(x3+y5)^2+x2y7;
- ideal i=std(jacob(f));
- mult(i);
- ==> 46
- mult(std(f));
- ==> 6
-
-* Menu:
-
-See
-* degree::
-* dim::
-* ideal::
-* std::
-* vdim::
-
-See *note degree::; *note dim::; *note ideal::; *note std::; *note
-vdim::.
-
-
-File: sing.info, Node: nameof, Next: names, Prev: mult, Up: Functions
-
-5.1.81 nameof
--------------
-
-`*Syntax:*'
- `nameof (' expression `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the name of an expression as string.
-
-`*Example:*'
-
- int i=9;
- string s=nameof(i);
- s;
- ==> i
- nameof(s);
- ==> s
- nameof(i+1); //returns the empty string:
- ==>
- nameof(basering);
- ==> basering
- basering;
- ==> ? `basering` is undefined
- ==> ? error occurred in line 7: ` basering;`
- ring r;
- nameof(basering);
- ==> r
-
-* Menu:
-
-See
-* names::
-* reservedName::
-* typeof::
-
-See *note names::; *note reservedName::; *note typeof::.
-
-
-File: sing.info, Node: names, Next: ncols, Prev: nameof, Up: Functions
-
-5.1.82 names
-------------
-
-`*Syntax:*'
- `names ( )'
- `names (' ring_name `)'
-
-`*Type:*'
- list of strings
-
-`*Purpose:*'
- returns the names of all user-defined variables which are ring
- independent (this includes the names of procedures) or, in the
- second case, which belong to the given ring.
-
-`*Example:*'
-
- int i=9;
- ring r;
- poly f;
- poly g;
- setring r;
- names();
- ==> [1]:
- ==> r
- ==> [2]:
- ==> i
- ==> [3]:
- ==> fprintf
- ==> [4]:
- ==> printf
- ==> [5]:
- ==> sprintf
- ==> [6]:
- ==> intersect1
- ==> [7]:
- ==> quotient4
- ==> [8]:
- ==> quotient5
- ==> [9]:
- ==> quotient3
- ==> [10]:
- ==> quotient2
- ==> [11]:
- ==> quotient1
- ==> [12]:
- ==> quotient0
- ==> [13]:
- ==> quot1
- ==> [14]:
- ==> quot
- ==> [15]:
- ==> res
- ==> [16]:
- ==> groebner
- ==> [17]:
- ==> stdhilb
- ==> [18]:
- ==> stdfglm
- ==> [19]:
- ==> LIB
- names(r);
- ==> [1]:
- ==> g
- ==> [2]:
- ==> f
-
-* Menu:
-
-See
-* nameof::
-* reservedName::
-
-See *note nameof::; *note reservedName::.
-
-
-File: sing.info, Node: ncols, Next: npars, Prev: names, Up: Functions
-
-5.1.83 ncols
-------------
-
-`*Syntax:*'
- `ncols (' matrix_expression `)'
- `ncols (' intmat_expression `)'
- `ncols (' ideal_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the number of columns of a matrix or an intmat or the
- number of given generators of the ideal, including zeros.
-
-`*Note:*'
- `size('ideal`)' counts the number of generators which are different
- from zero. (Use `nrows' to get the number of rows of a given matrix
- or intmat.)
-
-`*Example:*'
-
- ring r;
- matrix m[5][6];
- ncols(m);
- ==> 6
- ideal i=x,0,y;
- ncols(i);
- ==> 3
- size(i);
- ==> 2
-
-* Menu:
-
-See
-* matrix::
-* nrows::
-* size::
-
-See *note matrix::; *note nrows::; *note size::.
-
-
-File: sing.info, Node: npars, Next: nres, Prev: ncols, Up: Functions
-
-5.1.84 npars
-------------
-
-`*Syntax:*'
- `npars (' ring_name `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the number of parameters of a ring.
-
-`*Example:*'
-
- ring r=(23,t,v),(x,a(1..7)),lp;
- // the parameters are t,v
- npars(r);
- ==> 2
-
-* Menu:
-
-See
-* par::
-* parstr::
-* ring::
-
-See *note par::; *note parstr::; *note ring::.
-
-
-File: sing.info, Node: nres, Next: nrows, Prev: npars, Up: Functions
-
-5.1.85 nres
------------
-
-`*Syntax:*'
- `nres (' ideal_expression`,' int_expression `)'
- `nres (' module_expression`,' int_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a free resolution of an ideal or module M which is
- minimized from the second module on (by the standard basis method).
-
- More precisely, let $A_1$=matrix(M),
- A1=matrix(M), then `nres' computes a free resolution of
- coker(A1)=F0/M
-
- A2 A1
- ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
-
-$coker(A_1)=F_0/M$
- $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow
0,$$
-
- where the columns of the matrix $A_1$
- A1 are the given set of generators of M. If the int expression k
- is not zero then the computation stops after k steps and returns a
- list of modules $M_i={\tt module}(A_i)$, i=1..k.
- Mi=module(Ai), i=1..k.
- `nres(M,0)' returns a list of n modules where n is the number of
- variables of the basering. Let `list L=nres(M,0);' then `L[1]=M'
- is identical to the input, `L[2]' is a minimal set of generators
- for the first syzygy module of `L[1]', etc. (L[i]=M_i (${\tt L[i]}=M_i$
- in the notations from above).
-
-`*Example:*'
-
- ring r=31991,(t,x,y,z,w),ls;
- ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
- t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
- resolution L=nres(M,0);
- L;
- ==> 1 4 15 18 7 1
- ==> r <-- r <-- r <-- r <-- r <-- r
- ==>
- ==> 0 1 2 3 4 5
- ==> resolution not minimized yet
- ==>
-
-* Menu:
-
-See
-* hres::
-* ideal::
-* lres::
-* module::
-* mres::
-* res::
-* resolution::
-* sres::
-
-See *note hres::; *note ideal::; *note lres::; *note module::; *note
-mres::; *note res::; *note resolution::; *note sres::.
-
-
-File: sing.info, Node: nrows, Next: nvars, Prev: nres, Up: Functions
-
-5.1.86 nrows
-------------
-
-`*Syntax:*'
- `nrows (' matrix_expression `)'
- `nrows (' intmat_expression `)'
- `nrows (' intvec_expression `)'
- `nrows (' module_expression `)'
- `nrows (' vector_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the number of rows of a matrix, an intmat or an intvec,
- resp. the minimal rank of a free module in which the given module
- or vector lives (the index of the last non-zero component).
-
-`*Note:*'
- Use `ncols' to get the number of columns of a given matrix or
- intmat.
-
-`*Example:*'
-
- ring R;
- matrix M[2][3];
- nrows(M);
- ==> 2
- nrows(freemodule(4));
- ==> 4
- module m=[0,0,1];
- nrows(m);
- ==> 3
- nrows([0,x,0]);
- ==> 2
-
-* Menu:
-
-See
-* gen::
-* matrix::
-* module::
-* ncols::
-* vector::
-
-See *note gen::; *note matrix::; *note module::; *note ncols::; *note
-vector::.
-
-
-File: sing.info, Node: nvars, Next: open, Prev: nrows, Up: Functions
-
-5.1.87 nvars
-------------
-
-`*Syntax:*'
- `nvars (' ring_name `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the number of variables of a ring.
-
-`*Example:*'
-
- ring r=(23,t,v),(x,a(1..7)),ls;
- // the variables are x,a(1),...,a(7)
- nvars(r);
- ==> 8
-
-* Menu:
-
-See
-* npars::
-* ring::
-* var::
-* varstr::
-
-See *note npars::; *note ring::; *note var::; *note varstr::.
-
-
-File: sing.info, Node: open, Next: option, Prev: nvars, Up: Functions
-
-5.1.88 open
------------
-
-`*Syntax:*'
- `open (' link_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- opens a link.
-
-`*Example:*'
-
- link l="MPtcp:launch";
- open(l); // start SINGULAR "server" on localhost in batchmode
- close(l); // shut down SINGULAR server
-
-* Menu:
-
-See
-* close::
-* link::
-
-See *note close::; *note link::.
-
-
-File: sing.info, Node: option, Next: ord, Prev: open, Up: Functions
-
-5.1.89 option
--------------
-
-`*Syntax:*'
- `option ()'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- lists all defined options.
-
-`*Syntax:*'
- `option (' option_name `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- sets an option.
-
-`*Note:*'
- To disable an option, use the prefix `no'.
-
-`*Syntax:*'
- `option ( get )'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
- dumps the state of all options to an intvec.
-
-`*Syntax:*'
- `option ( set,' intvec_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- restores the state of all options from an intvec (produced by
- `option(get)').
-
-`*Values:*'
- The following options are used to manipulate the behavior of
- computations and act like boolean switches. Use the prefix `no' to
- disable an option. Notice that some options are ring dependent and
- reset to their default values on a change of the current basering.
-
- `none'
- turns off all options (including the `prompt' option).
-
- `returnSB'
- the functions `syz', `intersect', `quotient', `modulo' return
- a standard base instead of a generating set if `returnSB' is
- set. This option should not be used for `lift'.
-
- `fastHC'
- tries to the find the highest corner of the staircase (HC) as
- fast as possible during a standard basis computation (only
- used for local orderings).
-
- `intStrategy'
- avoids division of coefficients during standard basis
- computations. This option is ring dependent. By default, it is
- set for rings with characteristic 0 and not set for all other
- rings.
-
- `oldStd'
- uses a more lazy approach in std computations, which was used
- in Singular version before 2-0 (and which may lead to faster
- or slower computations, depending on the example)
-
- `minRes'
- special (additional) minimizing during computations (`res',
- `mres'),
- assumes homogeneous case and degree-compatible ordering.
-
- `notRegularity'
- disables the regularity bound for `res' and `mres' (see *note
- regularity::).
-
- `notSugar'
- disables the sugar strategy during standard basis computation.
-
- `notBuckets'
- disables the bucket representation of polynomials during
- standard basis computations. This option usually decreases the
- memory usage but increases the computation time. It should
- only be set for memory-critical standard basis computations.
-
- `prot'
- shows protocol information indicating the progress during the
- following computations: `facstd', `fglm', `groebner', `lres',
- `mres', `minres', `mstd', `res', `sres', `std', `stdfglm',
- `stdhilb', `syz'. See below for more details.
-
- `redSB'
- computes a reduced standard basis in any standard basis
- computation.
-
- `redTail'
- reduction of the tails of polynomials during standard basis
- computations. This option is ring dependent. By default, it is
- set for rings with global degree orderings and not set for all
- other rings.
-
- `redThrough'
- for inhomogeneous input, polynomial reductions during standard
- basis computations are never postponed, but always finished
- through. This option is ring dependent. By default, it is
- set for rings with global degree orderings and not set for all
- other rings.
-
- `sugarCrit'
- uses criteria similar to the homogeneous case to keep more
- useless pairs.
-
- `weightM'
- automatically computes suitable weights for the weighted ecart
- and the weighted sugar method.
-
-
- The following options, which also control computations, are
- special, since they are not manipulated by the `option' command but
- by a direct assignment of a value. Reset the option by assigning
- the value 0; the command `option(none)' will not reset them! If
- there is a non-zero value assigned, the command `option()' prints
- the option.
-
- `multBound'
- a multiplicity bound is set (see *note multBound::).
-
- `degBound'
- a degree bound is set (see *note degBound::).
-
-
- The last set of options controls the output of SINGULAR:
-
- `Imap'
- shows the mapping of variables with the fetch and imap
- commands.
-
- `loadLib'
- shows loading of libraries (set by default).
-
- `debugLib'
- warns about syntax errors during loading of libraries.
-
- `loadProc'
- shows loading of procedures from libraries.
-
- `mem'
- shows memory usage in square brackets (see *note memory::).
-
- `prompt'
- shows prompt (`>', resp. `.') if ready for input (default).
-
- `reading'
- shows the number of characters read from a file.
-
- `redefine'
- warns about variable redefinitions (set by default).
-
- `usage'
- shows correct usage in error messages (set by default).
-
-`*Example:*'
-
- option(prot);
- option();
- ==> //options: prot redefine usage prompt
- option(notSugar);
- option();
- ==> //options: prot notSugar redefine usage prompt
- option(noprot);
- option();
- ==> //options: notSugar redefine usage prompt
- option(none);
- option();
- ==> //options: none
- ring r=0,x,dp;
- degBound=22;
- option();
- ==> //options: degBound redTail redThrough intStrategy
- intvec i=option(get);
- option(none);
- option(set,i);
- option();
- ==> //options: degBound redTail redThrough intStrategy
-
-
-The output reported on `option(prot)' has the following meaning:
-
- `facstd' `F' found a new factor
- all other characters: like the output of
- `std' and `reduce'
- `fglm' `.' basis monomial found
- `+' edge monomial found
- `-' border monomial found
- `groebner' all characters: like the output of `std'
- `lres' `.' minimal syzygy found
- `n' slanted degree, i.e., row of Betti matrix
- `(mn)' calculate in module n
- `g' pair found giving reductum and syzygy
- `mres' `[d]' computations of the d-th syzygy module
- all other characters: like the output of
- `std'
- `minres' `[d]' minimizing of the d-th syzygy module
- `mstd' all characters: like the output of `std'
- `reduce' `r' reduced a leading term
- `t' reduced a non-leading term
- `res' `[d]' computations of the d-th syzygy module
- all other characters: like the output of
- `std'
- `sres' `.' syzygy found
- `(n)' n elements remaining
- `[n]' finished module n
- `std' `[m:n]' internal ring change to poly representation
- with exponent bound m and n words in exponent
- vector
- `s' found a new element of the standard basis
- `-' reduced a pair/S-polynomial to 0
- `.' postponed a reduction of a pair/S-polynomial
- `h' used Hilbert series criterion
- `H(d)' found a 'highest corner' of degree d, no need
- to consider higher degrees
- `(n)' n critical pairs are still to be reduced
- `(S:n)' doing complete reduction of n elements
- `d' the degree of the leading terms is currently
- d
- `stdfglm' all characters in first part: like the output
- of `std'
- all characters in second part: like the
- output of `fglm'
- `stdhilb' all characters: like the output of `std'
- `syz' all characters: like the output of `std'
-
-* Menu:
-
-See
-* degBound::
-* multBound::
-* std::
-
-See *note degBound::; *note multBound::; *note std::.
-
-
-File: sing.info, Node: ord, Next: ordstr, Prev: option, Up: Functions
-
-5.1.90 ord
-----------
-
-`*Syntax:*'
- `ord (' poly_expression `)'
- `ord (' vector_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the (weighted) degree of the initial term of a polynomial
- or a vector; the weights are the weights used for the first block
- of the ring ordering.
-
-`*Note:*'
- `ord(0)' is `-1'.
-
-`*Example:*'
-
- ring r=7,(x,y),wp(2,3);
- ord(0);
- ==> -1
- poly f=x2+y3; // weight on y is 3
- ord(f);
- ==> 9
- ring R=7,(x,y),ws(2,3);
- poly f=x2+y3;
- ord(f);
- ==> 4
- vector v=[x2,y];
- ord(v);
- ==> 3
-
-* Menu:
-
-See
-* deg::
-* poly::
-* vector::
-
-See *note deg::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: ordstr, Next: par, Prev: ord, Up: Functions
-
-5.1.91 ordstr
--------------
-
-`*Syntax:*'
- `ordstr (' ring_name `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the description of the monomial ordering of the ring.
-
-`*Example:*'
-
- ring r=7,(x,y),wp(2,3);
- ordstr(r);
- ==> wp(2,3),C
-
-* Menu:
-
-See
-* charstr::
-* parstr::
-* ring::
-* varstr::
-
-See *note charstr::; *note parstr::; *note ring::; *note varstr::.
-
-
-File: sing.info, Node: par, Next: pardeg, Prev: ordstr, Up: Functions
-
-5.1.92 par
-----------
-
-`*Syntax:*'
- `par (' int_expression `)'
-
-`*Type:*'
- number
-
-`*Purpose:*'
- `par(n);' returns the n-th parameter of the basering.
-
-`*Note:*'
- This command should only be used if the basering has at least one
- parameter.
-
-`*Example:*'
-
- ring r=(0,a,b,c),(x,y,z),dp;
- char(r); // char to get the characteristic
- ==> 0
- par(2); // par to get the n-th parameter
- ==> (b)
-
-* Menu:
-
-See
-* char::
-* npars::
-* parstr::
-* ring::
-* var::
-
-See *note char::; *note npars::; *note parstr::; *note ring::; *note
-var::.
-
-
-File: sing.info, Node: pardeg, Next: parstr, Prev: par, Up: Functions
-
-5.1.93 pardeg
--------------
-
-`*Syntax:*'
- `pardeg (' number_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the degree of a number considered as a polynomial in the
- ring parameters.
-
-`*Example:*'
-
- ring r=(0,a,b,c),(x,y,z),dp;
- pardeg(a^2*b);
- ==> 3
-
-* Menu:
-
-See
-* deg::
-* number::
-* ring::
-* var::
-
-See *note deg::; *note number::; *note ring::; *note var::.
-
-
-File: sing.info, Node: parstr, Next: preimage, Prev: pardeg, Up: Functions
-
-5.1.94 parstr
--------------
-
-`*Syntax:*'
- `parstr (' ring_name `)'
- `parstr (' int_expression `)'
- `parstr (' ring_name`,' int_expression `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the list of parameters of the ring as a string or the name
- of the n-th parameter where n is given by the int_expression.
- If the ring_name is omitted, the basering is used, thus `parstr(n)'
- is equivalent to `parstr(basering,n)'.
-
-`*Example:*'
-
- ring r=(7,a,b,c),(x,y),wp(2,3);
- parstr(r);
- ==> a,b,c
- parstr(2);
- ==> b
- parstr(r,3);
- ==> c
-
-* Menu:
-
-See
-* charstr::
-* npars::
-* ordstr::
-* par::
-* ring::
-* varstr::
-
-See *note charstr::; *note npars::; *note ordstr::; *note par::; *note
-ring::; *note varstr::.
-
-
-File: sing.info, Node: preimage, Next: prime, Prev: parstr, Up: Functions
-
-5.1.95 preimage
----------------
-
-`*Syntax:*'
- `preimage (' ring_name`,' map_name`,' ideal_name `)'
- `preimage (' ring_name`,' ideal_expression`,' ideal_name `)'
-
-`*Type:*'
- ideal
-
-`*Purpose:*'
- returns the preimage of an ideal under a given map.
- The second argument has to be a map from the basering to the given
- ring (or an ideal defining such a map), and the ideal has to be an
- ideal in the given ring.
-
-`*Note:*'
- To compute the kernel of a map, the preimage of zero has to be
- determined. Hence there is no special command for computing the
- kernel of a map in SINGULAR.
-
-`*Example:*'
-
- ring r1=32003,(x,y,z,w),lp;
- ring r=32003,(x,y,z),dp;
- ideal i=x,y,z;
- ideal i1=x,y;
- ideal i0=0;
- map f=r1,i;
- setring r1;
- ideal i1=preimage(r,f,i1);
- i1;
- ==> i1[1]=w
- ==> i1[2]=y
- ==> i1[3]=x
- // the kernel of f
- preimage(r,f,i0);
- ==> _[1]=w
-
-* Menu:
-
-See
-* ideal::
-* map::
-* ring::
-
-See *note ideal::; *note map::; *note ring::.
-
-
-File: sing.info, Node: prime, Next: print, Prev: preimage, Up: Functions
-
-5.1.96 prime
-------------
-
-`*Syntax:*'
- `prime (' int_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the largest prime less then 32004 smaller or equal to the
- argument;
- returns 2 for all arguments smaller than 3.
-
-`*Example:*'
-
- prime(32004);
- ==> 32003
- prime(0);
- ==> 2
- prime(-1);
- ==> 2
-
-* Menu:
-
-See
-* general_lib::
-* int::
-
-See *note general_lib::; *note int::.
-
-
-File: sing.info, Node: print, Next: printf, Prev: prime, Up: Functions
-
-5.1.97 print
-------------
-
-`*Syntax:*'
- `print (' expression `)'
- `print (' expression`, "betti" )'
- `print (' expression`,' format_string `)'
-
-`*Type:*'
- none (for the first two calling sequences), resp.
- string (for the last calling sequence)
-
-`*Purpose:*'
- The first form prints the expression to the terminal and has no
- return value. Use the format string `%p' to print into a string
- (see below).
- The second form prints the graded Betti numbers from a matrix. See
- the description of the format string `"betti"' below for more
- details.
- The last form returns the printed output as a string. The format
- string determines which format to use to generate the string.
-
- The following format strings are supported:
-
- `"betti"'
- The Betti numbers are printed in a matrix-like format where
- the entry $d$ in row $i$ and column $j$
- d in row i and column j is the minimal number of generators in
- degree $i+j$ of the $j$-th
- i+j of the j-th syzygy module of $R^n/M$ (the 0th and 1st syzygy
module of $R^n/M$ is $R^n$ and $M$, resp.).
- R^n/M (the 0th and 1st syzygy module of R^n/M are R^n and M,
- resp.).
-
- `"%s"'
- returns `string(' expression `)'
-
- `"%2s"'
- similar to `"%s"', except that newlines are inserted after
- every comma and at the end
-
- `"%l"'
- similar to `"%s"', except that each object is embraced by its
- type such that it can be directly used for "cutting and
- pasting"
-
- `"%2l"'
- similar to `"%l"', except that newlines are inserted after
- every comma and at the end
-
- `"%;"'
- returns the string equivalent to typing `expression;'
-
- `"%t"'
- returns the string equivalent to typing `type expression;'
-
- `"%p"'
- returns the string equivalent to typing `print(expression);'
-
- `"%b"'
- returns the string equivalent to typing `print(expression,
- "betti");'
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- module m=[1,y],[0,x+z];
- m;
- ==> m[1]=y*gen(2)+gen(1)
- ==> m[2]=x*gen(2)+z*gen(2)
- print(m); // the columns generate m
- ==> 1,0,
- ==> y,x+z
- string s=print(m,"%s"); s;
- ==> y*gen(2)+gen(1),x*gen(2)+z*gen(2)
- s=print(m,"%2s"); s;
- ==> y*gen(2)+gen(1),
- ==> x*gen(2)+z*gen(2)
- ==>
- s=print(m,"%l"); s;
- ==> module(y*gen(2)+gen(1),x*gen(2)+z*gen(2))
- s=print(m,"%;"); s;
- ==> m[1]=y*gen(2)+gen(1)
- ==> m[2]=x*gen(2)+z*gen(2)
- ==>
- s=print(m,"%t"); s;
- ==> // m [0] module, rk 2, 2 generator(s)
- ==> m[1]=y*gen(2)+gen(1)
- ==> m[2]=x*gen(2)+z*gen(2)
- s=print(m,"%p"); s;
- ==> 1,0,
- ==> y,x+z
- ==>
- intmat M=betti(mres(m,0));
- print(M,"betti");
- ==> 0 1
- ==> ------------------
- ==> 0: 1 1
- ==> ------------------
- ==> total: 1 1
- list l=r,M;
- s=print(l,"%s"); s;
- ==> (0),(x,y,z),(dp(3),C),1,1
- s=print(l,"%2s"); s;
- ==> (0),(x,y,z),(dp(3),C),
- ==> 1,1
- ==>
- s=print(l,"%l"); s;
- ==> list("(0),(x,y,z),(dp(3),C)",intmat(intvec(1,1 ),1,2))
-
-* Menu:
-
-See
-* Type conversion and casting::
-* betti::
-* dbprint::
-* fprintf::
-* printf::
-* short::
-* sprintf::
-* string type cast::
-* type::
-
-See *note Type conversion and casting::; *note betti::; *note dbprint::;
-*note fprintf::; *note printf::; *note short::; *note sprintf::; *note
-string type cast::; *note type::.
-
-
-File: sing.info, Node: printf, Next: prune, Prev: print, Up: Functions
-
-5.1.98 printf
--------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `printf (' string_expression `[,' any_expressions`] )'
-
-*Return:*
- none
-
-*Purpose:*
- `printf(fmt,...);' performs output formatting. The first argument
- is a format control string. Additional arguments may be required,
- depending on the content of the control string. A series of output
- characters is generated as directed by the control string; these
- characters are displayed (i.e., printed to standard out).
- The control string `fmt' is simply text to be copied, except that
- the string may contain conversion specifications.
- Do `help print;' for a listing of valid conversion specifications.
- As an addition to the conversions of `print', the `%n' and `%2'
- conversion specification does not consume an additional argument,
- but simply generates a newline character.
-
-*Note:*
- If one of the additional arguments is a list, then it should be
- enclosed once more into a `list()' command, since passing a list as
- an argument flattens the list by one level.
-
-*Example:*
- ring r=0,(x,y,z),dp;
- module m=[1,y],[0,x+z];
- intmat M=betti(mres(m,0));
- list l=r,m,M;
- printf("s:%s,l:%l",1,2);
- ==> s:1,l:int(2)
- printf("s:%s",l);
- ==> s:(0),(x,y,z),(dp(3),C)
- printf("s:%s",list(l));
- ==> s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
- printf("2l:%2l",list(l));
- ==> 2l:list("(0),(x,y,z),(dp(3),C)",
- ==> module(y*gen(2)+gen(1),
- ==> x*gen(2)+z*gen(2)),
- ==> intmat(intvec(1,1 ),1,2))
- ==>
- printf("%p",list(l));
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- printf("%;",list(l));
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- printf("%b",M);
- ==> 0 1
- ==> ------------------
- ==> 0: 1 1
- ==> ------------------
- ==> total: 1 1
- ==>
-
-* Menu:
-
-See also:
-* fprintf::
-* print::
-* sprintf::
-* string::
-
-*See also:* *note fprintf::; *note print::; *note sprintf::; *note
-string::.
-
-
-File: sing.info, Node: prune, Next: qhweight, Prev: printf, Up: Functions
-
-5.1.99 prune
-------------
-
-`*Syntax:*'
- `prune (' module_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- returns the module minimally embedded in a free module such that
- the corresponding factor modules are isomorphic.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- module m=gen(1),gen(3),[x,y,0,z],[x+y,0,0,0,1];
- print(m);
- ==> 1,0,x,x+y,
- ==> 0,0,y,0,
- ==> 0,1,0,0,
- ==> 0,0,z,0,
- ==> 0,0,0,1
- print(prune(m));
- ==> y,
- ==> z
-
-* Menu:
-
-See
-* module::
-
-See *note module::.
-
-
-File: sing.info, Node: qhweight, Next: quot, Prev: prune, Up: Functions
-
-5.1.100 qhweight
-----------------
-
-`*Syntax:*'
- `qhweight (' ideal_expression `)'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
- computes the weight vector of the variables for a quasihomogeneous
- ideal. If the input is not weighted homogeneous, an intvec of
- zeros is returned.
-
-`*Example:*'
-
- ring h1=32003,(t,x,y,z),dp;
- ideal i=x4+y3+z2;
- qhweight(i);
- ==> 0,3,4,6
-
-* Menu:
-
-See
-* ideal::
-* intvec::
-* weight::
-
-See *note ideal::; *note intvec::; *note weight::.
-
-
-File: sing.info, Node: quot, Next: quote, Prev: qhweight, Up: Functions
-
-5.1.101 quot
-------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `quot (' module_expression`,' module_expression `)'
- `quot (' module_expression`,' module_expression`,' int_expression
- `)'
- `quot (' ideal_expression`,' ideal_expression `)'
- `quot (' ideal_expression`,' ideal_expression`,' int_expression `)'
-
-*Type:*
- ideal
-
-*Syntax:*
- `quot (' module_expression`,' ideal_expression `)'
-
-*Type:*
- module
-
-*Purpose:*
- computes the quotient of the 1st and the 2nd argument. If a 3rd
- argument 'n' is given the n-th method is used (n=1...5).
-
-*Example:*
- ring r=181,(x,y,z),(c,ls);
- ideal id1=maxideal(4);
- ideal id2=x2+xyz,y2-z3y,z3+y5xz;
- option(prot);
- ideal id3=quotient(id1,id2);
- ==> [1023:1]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
- ==> product criterion:12 chain criterion:0
- ==> {3}[1023:3]8(2)s(4)s(5)s9s.s.s.s.s.s
- ==> product criterion:0 chain criterion:39
- id3;
- ==> id3[1]=z2
- ==> id3[2]=yz
- ==> id3[3]=y2
- ==> id3[4]=xz
- ==> id3[5]=xy
- ==> id3[6]=x2
- ideal id4=quot(id1,id2,1);
- ==> [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
- ==> product criterion:0 chain criterion:0
- ==> (S:3)rtrtrt
- ==> {1}[1023:3]4(2)s(4)s(5)s5s.s(3)s(2)sss
- ==> product criterion:0 chain criterion:39
- ==> {1}[1023:3]4(5)s(4)s(3)s(2)sss
- ==> product criterion:0 chain criterion:9
- ==> [255:3]3(11)s(10)sss(9)s(10)s(8)ss(7)s(8)s(6)s(7)s4(5)-----
- ==> product criterion:12 chain criterion:9
- ==> {1}[1023:3]4(2)sss
- ==> product criterion:0 chain criterion:12
- ==> [255:3]2(8)s(7)s(6)s3(5)ssssss4-----
- ==> product criterion:15 chain criterion:3
- id4;
- ==> id4[1]=z2
- ==> id4[2]=yz
- ==> id4[3]=xz
- ==> id4[4]=y2
- ==> id4[5]=xy
- ==> id4[6]=x2
- ideal id5=quot(id1,id2,2);
- ==> [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss
- ==> product criterion:0 chain criterion:0
- ==> (S:3)rtrtrt
- ==> {1}[1023:3]4(2)sss
- ==> product criterion:0 chain criterion:12
- ==> {1}[1023:3]4(5)s(4)s(3)s(2)sss
- ==> product criterion:0 chain criterion:9
- ==> [255:3]2(8)s(7)s(6)s3(5)s(4)s(3)s(2)sss
- ==> product criterion:15 chain criterion:0
- id5;
- ==> id5[1]=z2
- ==> id5[2]=yz
- ==> id5[3]=xz
- ==> id5[4]=y2
- ==> id5[5]=xy
- ==> id5[6]=x2
-
-* Menu:
-
-See also:
-* quotient::
-
-*See also:* *note quotient::.
-
-
-File: sing.info, Node: quote, Next: quotient, Prev: quot, Up: Functions
-
-5.1.102 quote
--------------
-
-`*Syntax:*'
- `quote (' expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- prevents expressions from evaluation. Used only in connections with
- write to MPfile links, prevents evaluation of an expression before
- sending it to an other SINGULAR process. Within a quoted
- expression, the quote can be "undone" by an `eval' (i.e., each eval
- "undoes" the effect of exactly one quote).
-
-`*Example:*'
-
- link l="MPfile:w example.mp";
- ring r=0,(x,y,z),ds;
- ideal i=maxideal(3);
- ideal j=x7,x2,z;
- option(prot);
- // compute i+j before writing, but not std
- write (l, quote(std(eval(i+j))));
- close(l);
- // now read it in again and evaluate:
- read(l);
- ==> [1023:1]1(12)s2(11)s3(10)--s(7)s(6)-----7-
- ==> product criterion:4 chain criterion:0
- ==> _[1]=z
- ==> _[2]=x2
- ==> _[3]=xy2
- ==> _[4]=y3
- close(l);
-
-* Menu:
-
-See
-* MPfile links::
-* eval::
-* write::
-
-See *note MPfile links::; *note eval::; *note write::.
-
-
-File: sing.info, Node: quotient, Next: random, Prev: quote, Up: Functions
-
-5.1.103 quotient
-----------------
-
-`*Syntax:*'
- `quotient (' ideal_expression`,' ideal_expression `)'
- `quotient (' module_expression`,' module_expression `)'
-
-`*Type:*'
- ideal
-
-`*Syntax:*'
- `quotient (' module_expression`,' ideal_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- computes the ideal quotient, resp. module quotient. Let `R' be the
- basering, `I,J' ideals and `M' a module in R^n. ${\tt R}^n$.
- Then
-
- * `quotient(I,J)'= {a in R | aJ in I } $\{a \in R \mid aJ \subset I\}$,
-
- * `quotient(M,J)'= {b in R | bJ in M }. $\{b \in R^n \mid bJ \subset
M\}$.
-
-`*Example:*'
-
- ring r=181,(x,y,z),(c,ls);
- ideal id1=maxideal(3);
- ideal id2=x2+xyz,y2-z3y,z3+y5xz;
- ideal id6=quotient(id1,id2);
- id6;
- ==> id6[1]=z
- ==> id6[2]=y
- ==> id6[3]=x
- quotient(id2,id1);
- ==> _[1]=z2
- ==> _[2]=yz
- ==> _[3]=y2
- ==> _[4]=xz
- ==> _[5]=xy
- ==> _[6]=x2
- module m=x*freemodule(3),y*freemodule(2);
- ideal id3=x,y;
- quotient(m,id3);
- ==> _[1]=[1]
- ==> _[2]=[0,1]
- ==> _[3]=[0,0,x]
-
-* Menu:
-
-See
-* fglmquot::
-* ideal::
-* module::
-
-See *note fglmquot::; *note ideal::; *note module::.
-
-
-File: sing.info, Node: random, Next: read, Prev: quotient, Up: Functions
-
-5.1.104 random
---------------
-
-`*Syntax:*'
- `random (' int_expression`,' int_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns a random integer between the integer given by the first
- int_expression and the one given by the second int_expression.
-
-`*Syntax:*'
- `random (' int_expression`,' int_expression`,' int_expression `)'
-
-`*Type:*'
- intmat
-
-`*Purpose:*'
- returns a random intmat where the size is given by the second
- (number of rows) and third argument (number of columns). The
- absolute value of the entries of the matrix is smaller than or
- equal to the integer given as the first argument.
-
-`*Note:*'
- The random generator can be set to a start value with the function
- `system', resp. by a command line option.
-
-`*Example:*'
-
- random(1,1000);
- ==> 35
- random(1,2,3);
- ==> 0,0,0,
- ==> 1,1,-1
- system("random",210); // start random generator with 210
- random(-1000,1000);
- ==> 707
- random(-1000,1000);
- ==> 284
- system("random",210);
- random(-1000,1000); // the same random values again
- ==> 707
-
-* Menu:
-
-See
-* Command line options::
-* int::
-* intmat::
-* system::
-
-See *note Command line options::; *note int::; *note intmat::; *note
-system::.
-
-
-File: sing.info, Node: read, Next: reduce, Prev: random, Up: Functions
-
-5.1.105 read
-------------
-
-`*Syntax:*'
- `read (' link_expression `)'
- for DBM links:
- `read (' link_expression `)'
- `read (' link_expression`,' string_expression `)'
-
-`*Type:*'
- any
-
-`*Purpose:*'
- reads data from a link.
- For ASCII links, the content of the entire file is returned as one
- string. If the ASCII link is the empty string, `read' reads from
- standard input.
- For MP links, one expression is read from the link and returned
- after evaluation.
- For MPtcp links the `read' command blocks as long as there is no
- data to be read from the link. The `status' command can be used to
- check whether or not there is data to be read.
- For DBM links, a `read' with one argument returns the value of the
- next entry in the data base, and a `read' with two arguments
- returns the value to the key given as the second argument from the
- data base.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- ideal i=x+y,z3+22y;
- // write the ideal i to the file save_i
- write(":w save_i",i);
- ring r0=0,(x,y,z),Dp;
- // create an ideal k equal to the content
- // of the file save_i
- string s="ideal k="+read("save_i")+";";
- execute(s);
- k;
- ==> k[1]=x+y
- ==> k[2]=z3+22y
-
-* Menu:
-
-See
-* execute::
-* getdump::
-* link::
-* status::
-* write::
-
-See *note execute::; *note getdump::; *note link::; *note status::;
-*note write::.
-
-
-File: sing.info, Node: reduce, Next: regularity, Prev: read, Up: Functions
-
-5.1.106 reduce
---------------
-
-`*Syntax:*'
- `reduce (' poly_expression`,' ideal_expression `)'
- `reduce (' poly_expression`,' ideal_expression`,' int_expression
- `)'
- `reduce (' poly_expression`,' ideal_expression`,' poly_expression
- `)'
- `reduce (' vector_expression`,' ideal_expression `)'
- `reduce (' vector_expression`,' ideal_expression`,' int_expression
- `)'
- `reduce (' vector_expression`,' module_expression `)'
- `reduce (' vector_expression`,' module_expression`,' int_expression
- `)'
- `reduce (' vector_expression`,' module_expression`,'
- poly_expression `)'
- `reduce (' ideal_expression`,' ideal_expression `)'
- `reduce (' ideal_expression`,' ideal_expression`,' int_expression
- `)'
- `reduce (' ideal_expression`,' ideal_expression`,'
- matrix_expression `)'
- `reduce (' module_expression`,' ideal_expression `)'
- `reduce (' module_expression`,' ideal_expression`,' int_expression
- `)'
- `reduce (' module_expression`,' module_expression `)'
- `reduce (' module_expression`,' module_expression`,' int_expression
- `)'
- `reduce (' module_expression`,' module_expression`,'
- matrix_expression `)'
-
-`*Type:*'
- the type of the first argument
-
-`*Purpose:*'
- reduces a polynomial, vector, ideal or module to its normal form
- with respect to an ideal or module represented by a standard basis.
- Returns 0 if and only if the polynomial (resp. vector, ideal,
- module) is an element (resp. subideal, submodule) of the ideal
- (resp. module). The result may have no meaning if the second
- argument is not a standard basis.
- The third (optional) argument 1 of type int forces a reduction
- which considers only the leading term and does no tail reduction.
- If a third argument `u' of type poly or matrix is given, the first
- argument `p' is replaced by `p/u'. This works only for zero
- dimensional ideals (resp. modules) in the second argument and
- gives, even in a local ring, a reduced normal form which is the
- projection to the quotient by the ideal (resp. module).
-
-`*Note:*'
- The commands `reduce' and `NF' are synonymous.
-
-`*Example:*'
-
- ring r1 = 0,(z,y,x),ds;
- poly s1=2x5y+7x2y4+3x2yz3;
- poly s2=1x2y2z2+3z8;
- poly s3=4xy5+2x2y2z3+11x10;
- ideal i=s1,s2,s3;
- ideal j=std(i);
- reduce(3z3yx2+7y4x2+yx5+z12y2x2,j);
- ==> -yx5+2401/81y14x2+2744/81y11x5+392/27y8x8+224/81y5x11+16/81y2x14
- reduce(3z3yx2+7y4x2+yx5+z12y2x2,j,1);
- ==> -yx5+z12y2x2
-
-* Menu:
-
-See
-* ideal::
-* module::
-* std::
-* vector::
-
-See *note ideal::; *note module::; *note std::; *note vector::.
-
-
-File: sing.info, Node: regularity, Next: repart, Prev: reduce, Up:
Functions
-
-5.1.107 regularity
-------------------
-
-`*Syntax:*'
- `regularity (' list_expression `)'
- `regularity (' resolution_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- computes the regularity of a homogeneous ideal, resp. module, from
- a minimal resolution given by the list expression.
- Let
-
- K[X]e(a,n) --> ... --> (+) K[X]e(a,0) --> I --> 0
-
- be a minimal resolution with homogeneous maps of degree 0. The
- regularity is the smallest number s with the property
- deg(e(a,i)) <= s+i for all i. \noindent
- Let $0 \rightarrow\ \bigoplus_a K[x]e_{a,n}\ \rightarrow\ \dots
- \rightarrow\ \bigoplus_a K[x]e_{a,0}\ \rightarrow\
- I\ \rightarrow\ 0$
- be a minimal resolution of I considered with homogeneous maps of degree 0.
- The regularity is the smallest number $s$ with the property deg($e_{a,i})
- \leq s+i$ for all $i$.
-
-`*Note:*'
- If applied to a non minimal resolution only an upper bound is
- returned.
- If the input to the commands `res' and `mres' is homogeneous the
- regularity is computed and used as a degree bound during the
- computation unless `option(notRegularity);' is given.
-
-`*Example:*'
-
- ring rh3=32003,(w,x,y,z),(dp,C);
- poly f=x11+y10+z9+x5y2+x2y2z3+xy3*(y2+x)^2;
- ideal j=homog(jacob(f),w);
- def jr=res(j,0);
- regularity(jr);
- ==> 25
- // example for upper bound behavior:
- list jj=jr;
- regularity(jj);
- ==> 25
- jj=nres(j,0);
- regularity(jj);
- ==> 27
- jj=minres(jj);
- regularity(jj);
- ==> 25
-
-* Menu:
-
-See
-* list::
-* minres::
-* mres::
-* option::
-* res::
-* resolution::
-* sres::
-
-See *note list::; *note minres::; *note mres::; *note option::; *note
-res::; *note resolution::; *note sres::.
-
-
-File: sing.info, Node: repart, Next: res, Prev: regularity, Up: Functions
-
-5.1.108 repart
---------------
-
-`*Syntax:*'
- `repart (' number_expression `)'
-
-`*Type:*'
- number
-
-`*Purpose:*'
- returns the real part of a number from a complex ground field,
- returns its argument otherwise.
-
-`*Example:*'
-
- ring r=(complex,i),x,dp;
- repart(1+2*i);
- ==> 1
-
-* Menu:
-
-See
-* impart::
-
-See *note impart::.
-
-
-File: sing.info, Node: res, Next: reservedName, Prev: repart, Up: Functions
-
-5.1.109 res
------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-`*Syntax:*'
- `res (' ideal_expression`,' int_expression `[,' any_expression `])'
-
- `res (' module_expression`,' int_expression `[,' any_expression
- `])'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a (possibly minimal) free resolution of an ideal or module
- using a heuristically chosen method.
- The second (int) argument (say, `k') specifies the length of the
- resolution. If it is not positive then `k' is assumed to be the
- number of variables of the basering.
- If a third argument is given, the returned resolution is minimized.
-
- Depending on the input, the returned resolution is computed using
- the following methods:
-
- *quotient rings:*
- `nres' (classical method using syzygies) , see *note nres::.
-
- *homogeneous ideals and k=0:*
- `lres' (La'Scala's method), see *note lres::.
-
- *not minimized resolution and (homogeneous input with k not 0, or local
rings):*
- `sres' (Schreyer's method), see *note sres::.
-
- *all other inputs:*
- `mres' (classical method), see *note mres::.
-
-`*Note:*'
- Accessing single elements of a resolution may require that some
- partial computations have to be finished and may therefore take
- some time.
-
-* Menu:
-
-See also
-* betti::
-* hres::
-* ideal::
-* lres::
-* minres::
-* module::
-* mres::
-* nres::
-* resolution::
-* sres::
-
-See also *note betti::; *note hres::; *note ideal::; *note lres::; *note
-minres::; *note module::; *note mres::; *note nres::; *note
-resolution::; *note sres::.
-
-*Example:*
- ring r=0,(x,y,z),dp;
- ideal i=xz,yz,x3-y3;
- def l=res(i,0); // homogeneous ideal: uses lres
- l;
- ==> 1 3 2
- ==> r <-- r <-- r
- ==>
- ==> 0 1 2
- ==> resolution not minimized yet
- ==>
- print(betti(l), "betti"); // input to betti may be of type resolution
- ==> 0 1 2
- ==> ------------------------
- ==> 0: 1 - -
- ==> 1: - 2 1
- ==> 2: - 1 1
- ==> ------------------------
- ==> total: 1 3 2
- l[2]; // element access may take some time
- ==> _[1]=-x*gen(1)+y*gen(2)
- ==> _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3)
- i=i,x+1;
- l=res(i,0); // inhomogeneous ideal: uses mres
- l;
- ==> 1 3 3 1
- ==> r <-- r <-- r <-- r
- ==>
- ==> 0 1 2 3
- ==> resolution not minimized yet
- ==>
- ring rs=0,(x,y,z),ds;
- ideal i=imap(r,i);
- def l=res(i,0); // local ring not minimized: uses sres
- l;
- ==> 1 1
- ==> rs <-- rs
- ==>
- ==> 0 1
- ==> resolution not minimized yet
- ==>
- res(i,0,0); // local ring and minimized: uses mres
- ==> 1 1
- ==> rs <-- rs
- ==>
- ==> 0 1
- ==>
-
-
-File: sing.info, Node: reservedName, Next: resultant, Prev: res, Up:
Functions
-
-5.1.110 reservedName
---------------------
-
-`*Syntax:*'
- `reservedName ()'
-
-`*Type:*'
- none
-
-`*Syntax:*'
- `reservedName (' string_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- prints a list of all reserved identifiers (first form) or tests
- whether the string is a reserved identifier (second form).
-
-`*Example:*'
-
- reservedName();
- ==> ... // output skipped
- reservedName("ring");
- ==> 1
- reservedName("xyz");
- ==> 0
-
-* Menu:
-
-See
-* names::
-* string::
-
-See *note names::; *note string::.
-
-
-File: sing.info, Node: resultant, Next: rvar, Prev: reservedName, Up:
Functions
-
-5.1.111 resultant
------------------
-
-`*Syntax:*'
- `resultant (' poly_expression`,' poly_expression`,' ring_variable
- `)'
-
-`*Type:*'
- poly
-
-`*Purpose:*'
- computes the resultant of the first and second argument with
- respect to the variable given as the third argument.
-
-`*Example:*'
-
- ring r=32003,(x,y,z),dp;
- poly f=3*(x+2)^3+y;
- poly g=x+y+z;
- resultant(f,g,x);
- ==> 3y3+9y2z+9yz2+3z3-18y2-36yz-18z2+35y+36z-24
-
-* Menu:
-
-See
-* poly::
-* ring::
-
-See *note poly::; *note ring::.
-
-
-File: sing.info, Node: rvar, Next: setring, Prev: resultant, Up: Functions
-
-5.1.112 rvar
-------------
-
-`*Syntax:*'
- `rvar (' name `)'
- `rvar (' poly_expression `)'
- `rvar (' string_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the number of the variable if the name is a ring variable
- of the basering or if the string is the name of a ring variable of
- the basering; returns 0 if not. Hence the return value of `rvar'
- can also be used in a boolean context to check whether the variable
- exists.
-
-`*Example:*'
-
- ring r=29,(x,y,z),lp;
- rvar(x);
- ==> 1
- rvar(r);
- ==> 0
- rvar(y);
- ==> 2
- rvar(var(3));
- ==> 3
- rvar("x");
- ==> 1
-
-* Menu:
-
-See
-* defined::
-* ring::
-* var::
-* varstr::
-
-See *note defined::; *note ring::; *note var::; *note varstr::.
-
-
-File: sing.info, Node: setring, Next: simplex, Prev: rvar, Up: Functions
-
-5.1.113 setring
----------------
-
-`*Syntax:*'
- `setring' ring_name
-
-`*Type:*'
- none
-
-`*Purpose:*'
- changes the basering to another (already defined) ring.
-
-`*Example:*'
-
- ring r1=0,(x,y),lp;
- // the basering is r1
- ring r2=32003,(a(1..8)),ds;
- // the basering is r2
- setring r1;
- // the basering is again r1
- nameof(basering);
- ==> r1
- listvar();
- ==> // r2 [0] ring
- ==> // r1 [0] *ring
- ==> // LIB [0] string standard.lib
-
-`*Use in procedures:*'
- All changes of the basering by a definition of a new ring or a
- `setring' command in a procedure are local to this procedure. Use
- `keepring' to move a ring, which is local to a procedure, up by one
- nesting level.
-
-* Menu:
-
-See
-* keepring::
-* qring::
-* ring::
-
-See *note keepring::; *note qring::; *note ring::.
-
-
-File: sing.info, Node: simplex, Next: simplify, Prev: setring, Up:
Functions
-
-5.1.114 simplex
----------------
-
-`*Syntax:*'
- `simplex (' matrix_expression`,' int_expression`,'
- int_expression`,' int_expression`,' int_expression`,'
- int_expression`)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- perform the simplex algorithm for the tableau given by the input,
- e.g. M,m,n,m1,m2,m3:
-
- M matrix of numbers :
- first row describing the objective function (maximize
- problem), the remaining rows describing constraints;
-
- m,n,m1,m2,m3 int :
- n = number of variables; m = total number of constraints;
- m1 = number of <=constraints (rows 2 ... m1+1 of M);
- m2 = number of >=constraints (rows m1+2 ... m1+m2+1 of M);
- m3 = number of == constraints.
-
- The following assumptions are made:
-
- * ground field is of type `(real,N)', N>=4;
-
- * the matrix M is of size m x n;
-
- * m=m1+m2+m3;
-
- * the entries M[2,1] ,..., M[m+1,1] are non-negative;
-
- * the variables x(i) are non-negative;
-
- * a row b, a(1) ,..., a(n) corresponds to b+a(1)x(1)+...+a(n)x(n);
-
- * for a <=, >=, or == constraint: add "in mind" >=0, <=0, or ==0.
-
- The output is a list L with
-
- * L[1] = matrix
-
- * L[2] = int:
- 0 = finite solution found; 1 = unbounded; -1 = no solution;
- -2 = error occured;
-
- * L[3] = intvec :
- L[3][k] = number of variable which corresponds to row k+1 of
- L[1];
-
- * L[4] = intvec :
- L[4][j] = number of variable which is represented by column
- j+1 of L[1] ("non-basis variable");
-
- * L[5] = int :
- number of constraints (= m);
-
- * L[6] = int :
- number of variables (= n).
-
- The solution can be read from the first column of L[1] as is done
- by the procedure *note simplexOut:: in `solve.lib'.
-
-`*Example:*'
-
- ring r = (real,10),(x),lp;
-
- // consider the max. problem:
- //
- // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4)
- //
- // with constraints: x(1) + 2*x(3) <= 740
- // 2*x(2) - 7*x(4) <= 0
- // x(2) - x(3) + 2*x(4) >= 0.5
- // x(1) + x(2) + x(3) + x(4) = 9
- //
- matrix sm[5][5]=( 0, 1, 1, 3,-0.5,
- 740,-1, 0,-2, 0,
- 0, 0,-2, 0, 7,
- 0.5, 0,-1, 1,-2,
- 9,-1,-1,-1,-1);
-
- int n = 4; // number of constraints
- int m = 4; // number of variables
- int m1= 2; // number of <= constraints
- int m2= 1; // number of >= constraints
- int m3= 1; // number of == constraints
- simplex(sm, n, m, m1, m2, m3);
- ==> [1]:
- ==> _[1,1]=17.025
- ==> _[1,2]=-0.95
- ==> _[1,3]=-0.05
- ==> _[1,4]=1.95
- ==> _[1,5]=-1.05
- ==> _[2,1]=730.55
- ==> _[2,2]=0.1
- ==> _[2,3]=-0.1
- ==> _[2,4]=-1.1
- ==> _[2,5]=0.9
- ==> _[3,1]=3.325
- ==> _[3,2]=-0.35
- ==> _[3,3]=-0.15
- ==> _[3,4]=0.35
- ==> _[3,5]=0.35
- ==> _[4,1]=0.95
- ==> _[4,2]=-0.1
- ==> _[4,3]=0.1
- ==> _[4,4]=0.1
- ==> _[4,5]=0.1
- ==> _[5,1]=4.725
- ==> _[5,2]=-0.55
- ==> _[5,3]=0.05
- ==> _[5,4]=0.55
- ==> _[5,5]=-0.45
- ==> [2]:
- ==> 0
- ==> [3]:
- ==> 5,2,4,3
- ==> [4]:
- ==> 1,6,8,7
- ==> [5]:
- ==> 4
- ==> [6]:
- ==> 4
-
-* Menu:
-
-See
-* simplexOut::
-
-See *note simplexOut::.
-
-
-File: sing.info, Node: simplify, Next: size, Prev: simplex, Up: Functions
-
-5.1.115 simplify
-----------------
-
-`*Syntax:*'
- `simplify (' poly_expression`,' int_expression `)'
- `simplify (' vector_expression`,' int_expression `)'
- `simplify (' ideal_expression`,' int_expression `)'
- `simplify (' module_expression`,' int_expression `)'
-
-`*Type:*'
- the type of the first argument
-
-`*Purpose:*'
- returns the "simplified" first argument depending on the
- simplification rule given as the second argument. The
- simplification rules are the sum of the following functions:
-
- `1'
- normalize (make leading coefficients 1).
-
- `2'
- erase zero generators/columns.
-
- `4'
- keep only the first one of identical generators/columns.
-
- `8'
- keep only the first one of generators/columns which differ
- only by a factor in the ground field.
-
- `16'
- keep only those generators/columns whose leading monomials
- differ.
-
- `32'
- keep only those generators/columns whose leading monomials are
- not divisible by other ones.
-
-`*Example:*'
-
- ring r=0,(x,y,z),(c,dp);
- ideal i=0,2x,2x,4x,3x+y,5x2;
- simplify(i,1);
- ==> _[1]=0
- ==> _[2]=x
- ==> _[3]=x
- ==> _[4]=x
- ==> _[5]=x+1/3y
- ==> _[6]=x2
- simplify(i,2);
- ==> _[1]=2x
- ==> _[2]=2x
- ==> _[3]=4x
- ==> _[4]=3x+y
- ==> _[5]=5x2
- simplify(i,4);
- ==> _[1]=0
- ==> _[2]=2x
- ==> _[3]=4x
- ==> _[4]=3x+y
- ==> _[5]=5x2
- simplify(i,8);
- ==> _[1]=0
- ==> _[2]=2x
- ==> _[3]=3x+y
- ==> _[4]=5x2
- simplify(i,16);
- ==> _[1]=0
- ==> _[2]=2x
- ==> _[3]=5x2
- simplify(i,32);
- ==> _[1]=0
- ==> _[2]=2x
- simplify(i,32+2+1);
- ==> _[1]=x
- matrix A[2][3]=x,0,2x,y,0,2y;
- simplify(A,2+8); // by automatic conversion to module
- ==> _[1]=[x,y]
-
-* Menu:
-
-See
-* ideal::
-* module::
-* poly::
-* vector::
-
-See *note ideal::; *note module::; *note poly::; *note vector::.
-
-
-File: sing.info, Node: size, Next: sortvec, Prev: simplify, Up: Functions
-
-5.1.116 size
-------------
-
-`*Syntax:*'
- `size (' string_expression `)'
- `size (' intvec_expression `)'
- `size (' intmat_expression `)'
- `size (' poly_expression `)'
- `size (' vector_expression `)'
- `size (' ideal_expression `)'
- `size (' module_expression `)'
- `size (' matrix_expression `)'
- `size (' list_expression `)'
- `size (' resolution_expression `)'
- `size (' ring_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- depends on the type of argument:
-
- ideal or module
- returns the number of (non-zero) generators.
-
- string, intvec, list or resolution
- returns the length, i.e., the number of characters, entries or
- elements.
-
- poly or vector
- returns the number of monomials.
-
- matrix or intmat
- returns the number of entries (rows*columns).
-
- ring
- returns the number of elements in the ground field (for Z/p
- and algebraic extensions) or -1
-
-`*Example:*'
-
- string s="hello";
- size(s);
- ==> 5
- intvec iv=1,2;
- size(iv);
- ==> 2
- ring r=0,(x,y,z),lp;
- poly f=x+y+z;
- size(f);
- ==> 3
- vector v=[x+y,0,0,1];
- size(v);
- ==> 3
- ideal i=f,y;
- size(i);
- ==> 2
- module m=v,[0,1],[0,0,1],2*v;
- size(m);
- ==> 4
- matrix mm[2][2];
- size(mm);
- ==> 4
- ring r1=(2,a),x,dp;
- minpoly=a4+a+1;
- size(r1);
- ==> 8
-
-* Menu:
-
-See
-* ideal::
-* intmat::
-* intvec::
-* module::
-* ncols::
-* nrows::
-* poly::
-* string::
-* vector::
-
-See *note ideal::; *note intmat::; *note intvec::; *note module::; *note
-ncols::; *note nrows::; *note poly::; *note string::; *note vector::.
-
-
-File: sing.info, Node: sortvec, Next: sprintf, Prev: size, Up: Functions
-
-5.1.117 sortvec
----------------
-
-`*Syntax:*'
- `sortvec (' ideal_expression `)'
- `sortvec (' module_expression `)'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
-computes the permutation {\tt v}
- which orders the ideal, resp.\ module, {\tt I} by its initial terms,
- starting with the smallest, that is, {\tt I(v[i]) < I(v[i+1])} for all
- {\tt i}.
- computes the permutation v which orders the ideal, resp. module, I
- by its initial terms, starting with the smallest, that is,
- I(v[i]) < I(v[i+1]) for all i.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- ideal I=y,z,x,x3,xz;
- sortvec(I);
- ==> 2,1,3,5,4
-
-* Menu:
-
-See
-* general_lib::
-
-See *note general_lib::.
-
-
-File: sing.info, Node: sprintf, Next: sres, Prev: sortvec, Up: Functions
-
-5.1.118 sprintf
----------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `sprintf (' string_expression `[,' any_expressions `] )'
-
-*Return:*
- string
-
-*Purpose:*
- `sprintf(fmt,...);' performs output formatting. The first argument
- is a format control string. Additional arguments may be required,
- depending on the content of the control string. A series of output
- characters is generated as directed by the control string; these
- characters are returned as a string.
- The control string `fmt' is simply text to be copied, except that
- the string may contain conversion specifications.
- Do `help print;' for a listing of valid conversion specifications.
- As an addition to the conversions of `print', the `%n' and `%2'
- conversion specification does not consume an additional argument,
- but simply generates a newline character.
-
-*Note:*
- If one of the additional arguments is a list, then it should be
- enclosed once more into a `list()' command, since passing a list as
- an argument flattens the list by one level.
-
-*Example:*
- ring r=0,(x,y,z),dp;
- module m=[1,y],[0,x+z];
- intmat M=betti(mres(m,0));
- list l = r, m, M;
- string s = sprintf("s:%s,%n l:%l", 1, 2); s;
- ==> s:1,
- ==> l:int(2)
- s = sprintf("s:%n%s", l); s;
- ==> s:
- ==> (0),(x,y,z),(dp(3),C)
- s = sprintf("s:%2%s", list(l)); s;
- ==> s:
- ==> (0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1
- s = sprintf("2l:%n%2l", list(l)); s;
- ==> 2l:
- ==> list("(0),(x,y,z),(dp(3),C)",
- ==> module(y*gen(2)+gen(1),
- ==> x*gen(2)+z*gen(2)),
- ==> intmat(intvec(1,1 ),1,2))
- ==>
- s = sprintf("%p", list(l)); s;
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- s = sprintf("%;", list(l)); s;
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- ==> [2]:
- ==> _[1]=y*gen(2)+gen(1)
- ==> _[2]=x*gen(2)+z*gen(2)
- ==> [3]:
- ==> 1,1
- ==>
- s = sprintf("%b", M); s;
- ==> 0 1
- ==> ------------------
- ==> 0: 1 1
- ==> ------------------
- ==> total: 1 1
- ==>
-
-* Menu:
-
-See also:
-* fprintf::
-* print::
-* printf::
-* string::
-
-*See also:* *note fprintf::; *note print::; *note printf::; *note
-string::.
-
-
-File: sing.info, Node: sres, Next: status, Prev: sprintf, Up: Functions
-
-5.1.119 sres
-------------
-
-`*Syntax:*'
- `sres (' ideal_expression`,' int_expression `)'
- `sres (' module_expression`,' int_expression `)'
-
-`*Type:*'
- resolution
-
-`*Purpose:*'
- computes a free resolution of an ideal or module with Schreyer's
- method. The ideal, resp. module, has to be a standard basis. More
- precisely, let M be given by a standard basis and $A_1={\tt matrix}(M)$.
- A1=matrix(M). Then `sres' computes a free resolution of
- coker(A1)=F0/M
-
- A2 A1
- ... ---> F2 ---> F1 ---> F0 -> F0/M -> 0.
-
-$coker(A_1)=F_0/M$
- $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow
0.$$
- If the int expression k is not zero then the computation stops
- after k steps and returns a list of modules (given by standard
- bases) $M_i={\tt module}(A_i)$, i=1..k.
- Mi=module(Ai), i=1..k.
- `sres(M,0)' returns a list of n modules where n is the number of
- variables of the basering.
-
- Even if `sres' does not compute a minimal resolution, the `betti'
- command gives the true betti numbers! In many cases of interest
- `sres' is much faster than any other known method. Let `list
- L=sres(M,0);' then `L[1]=M' is identical to the input, `L[2]' is a
- standard basis with respect to the Schreyer ordering of the first
- syzygy module of `L[1]', etc. (L[i]=M_i (${\tt L[i]}=M_i$
- in the notations from above.)
-
-`*Note:*'
- Accessing single elements of a resolution may require that some
- partial computations have to be finished and may therefore take
- some time.
-
-`*Example:*'
-
- ring r=31991,(t,x,y,z,w),ls;
- ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw,
- t2z2+tz2w+xz2w,t2w2+txw2+xyw2;
- M=std(M);
- resolution L=sres(M,0);
- L;
- ==> 1 35 141 209 141 43 4
- ==> r <-- r <-- r <-- r <-- r <-- r <-- r
- ==>
- ==> 0 1 2 3 4 5 6
- ==> resolution not minimized yet
- ==>
- print(betti(L),"betti");
- ==> 0 1 2 3 4 5
- ==> ------------------------------------------
- ==> 0: 1 - - - - -
- ==> 1: - - - - - -
- ==> 2: - - - - - -
- ==> 3: - 4 - - - -
- ==> 4: - - - - - -
- ==> 5: - - - - - -
- ==> 6: - - 6 - - -
- ==> 7: - - 9 16 2 -
- ==> 8: - - - 2 5 1
- ==> ------------------------------------------
- ==> total: 1 4 15 18 7 1
-
-* Menu:
-
-See
-* betti::
-* hres::
-* ideal::
-* int::
-* lres::
-* minres::
-* module::
-* mres::
-* res::
-* syz::
-
-See *note betti::; *note hres::; *note ideal::; *note int::; *note
-lres::; *note minres::; *note module::; *note mres::; *note res::; *note
-syz::.
-
-
-File: sing.info, Node: status, Next: std, Prev: sres, Up: Functions
-
-5.1.120 status
---------------
-
-`*Syntax:*'
- `status (' link_expression`,' string_expression `)'
-
-`*Type:*'
- string
-
-`*Syntax:*'
- `status (' link_expression`,' string_expression`,'
- string_expression `)'
- `status (' link_expression`,' string_expression`,'
- string_expression`,' int_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- returns the status of the link as asked for by the second argument.
- If a third argument is given, the result of the comparison to the
- status string is returned: `(status(l,s1)==s2)' is equivalent to
- `status(l,s1,s2)'. If a fourth integer argument (say, `i') is
- given and if `status(l,s1,s2)' yields `0', then the execution of
- the current process is suspended (the process is put to "sleep")
- for approximately `i' microseconds, and afterwards the result of
- another call to `status(l,s1,s2)' is returned. The latter is useful
- for "polling" the `read' status of MPtcp links such that busy loops
- are avoided (see *note Parallelization with MPtcp links:: for an
- example). Note that on some systems, the minimum time for a
- process to be put to sleep is one second.
- The following string expressions are allowed:
-
- ``"name"''
- the name string given by the definition of the link (usually
- the filename)
-
- ``"type"''
- returns `"ASCII"', `"MPfile"', `"MPtcp"' or `"DBM"'
-
- ``"open"''
- returns `"yes"' or `"no"'
-
- ``"openread"''
- returns `"yes"' or `"no"'
-
- ``"openwrite"''
- returns `"yes"' or `"no"'
-
- ``"read"''
- returns `"ready"' or `"not ready"'
-
- ``"write"''
- returns `"ready"' or `"not ready"'
-
- ``"mode"''
- returns (depending on the type of the link and its status)
- `"","w","a","r"' or `"rw"'
-
-`*Example:*'
-
- link l=":w example.txt";
- status(l,"write");
- ==> not ready
- open(l);
- status(l,"write","ready");
- ==> 1
- close(l);
-
-* Menu:
-
-See
-* link::
-* open::
-* read::
-* write::
-
-See *note link::; *note open::; *note read::; *note write::.
-
-
-File: sing.info, Node: std, Next: stdfglm, Prev: status, Up: Functions
-
-5.1.121 std
------------
-
-`*Syntax:*'
- `std (' ideal_expression`)'
- `std (' module_expression`)'
- `std (' ideal_expression`,' intvec_expression `)'
- `std (' module_expression`,' intvec_expression `)'
- `std (' ideal_expression`,' intvec_expression`,' intvec_expression
- `)'
- `std (' module_expression`,' intvec_expression`,' intvec_expression
- `)'
- `std (' ideal_expression`,' poly_expression `)'
- `std (' module_expression`,' vector_expression `)'
-
-`*Type:*'
- ideal or module
-
-`*Purpose:*'
- returns a standard basis of an ideal or module with respect to the
- monomial ordering of the basering. A standard basis is a set of
- generators such that the leading terms generate the leading ideal,
- resp. module.
- Use an optional second argument of type intvec as Hilbert series
- (result of `hilb(i,1)', see *note hilb::), if the ideal, resp.
- module, is homogeneous (Hilbert driven standard basis computation,
- *note stdhilb::). If the ideal is quasihomogeneous with some
- weights w and if the Hilbert series is computed w.r.t. to these
- weights, then use w as third argument.
- Use an optional second argument of type poly, resp. vector, to
- construct the standard basis from an already computed one (given as
- the first argument) and one additional generator (the second
- argument).
-
-`*Note:*'
- The standard basis is computed with a (more or less)
- straight-forward implementation of the classical Buchberger (resp.
- Mora) algorithm. For global orderings, use the `groebner' command
- instead (*note groebner::), which heuristically chooses the "best"
- algorithm to compute a Groebner basis.
- To view the progress of long running computations, use
- `option(prot)' (see *note option(prot)::).
-
-`*Example:*'
-
- // local computation
- ring r=32003,(x,y,z),ds;
- poly s1=1x2y+151xyz10+169y21;
- poly s2=1xz14+6x2y4+3z24;
- poly s3=5y10z10x+2y20z10+y10z20+11x3;
- ideal i=s1,s2,s3;
- ideal j=std(i);
- degree(j);
- ==> 0
- // Hilbert driven elimination (standard)
- ring rhom=32003,(x,y,z,h),dp;
- ideal i=homog(imap(r,i),h);
- ideal j=std(i);
- intvec iv=hilb(j,1);
- ring rlex=32003,(x,y,z,h),lp;
- ideal i=fetch(rhom,i);
- ideal j=std(i,iv);
- j=subst(j,h,1);
- j[1];
- ==> z64
- // Hilbert driven elimination (ideal is quasihomogeneous)
- intvec w=10,1,1;
- ring whom=32003,(x,y,z),wp(w);
- ideal i=fetch(r,i);
- ideal j=std(i);
- intvec iw=hilb(j,1,w);
- ring wlex=32003,(x,y,z),lp;
- ideal i=fetch(whom,i);
- ideal j=std(i,iw,w);
- j[1];
- ==> z64
-
-* Menu:
-
-See
-* facstd::
-* fglm::
-* groebner::
-* ideal::
-* mstd::
-* option::
-* ring::
-* stdfglm::
-* stdhilb::
-
-See *note facstd::; *note fglm::; *note groebner::; *note ideal::; *note
-mstd::; *note option::; *note ring::; *note stdfglm::; *note stdhilb::.
-
-
-File: sing.info, Node: stdfglm, Next: stdhilb, Prev: std, Up: Functions
-
-5.1.122 stdfglm
----------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `stdfglm (' ideal_expression `)'
- `stdfglm (' ideal_expression`,' string_expression `)'
-
-*Type:*
- ideal
-
-*Purpose:*
- computes the standard basis of the ideal in the basering via `fglm'
- (from the ordering given as the second argument to the ordering of
- the basering).
- If no second argument is given, "dp" is used.
-
-*Example:*
- ring r=0,(x,y,z),lp;
- ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
- ideal i1=stdfglm(i); //uses fglm from "dp" to "lp"
- i1;
- ==> i1[1]=z12
- ==> i1[2]=yz4-z8
- ==> i1[3]=y2+y-z8-z4
- ==> i1[4]=xy-xz4-y+z4
- ==> i1[5]=x2+y-z4
- ideal i2=stdfglm(i,"Dp"); //uses fglm from "Dp" to "lp"
- i2;
- ==> i2[1]=z12
- ==> i2[2]=yz4-z8
- ==> i2[3]=y2+y-z8-z4
- ==> i2[4]=xy-xz4-y+z4
- ==> i2[5]=x2+y-z4
-
-* Menu:
-
-See also:
-* fglm::
-* groebner::
-* std::
-* stdhilb::
-
-*See also:* *note fglm::; *note groebner::; *note std::; *note
-stdhilb::.
-
-
-File: sing.info, Node: stdhilb, Next: subst, Prev: stdfglm, Up: Functions
-
-5.1.123 stdhilb
----------------
-
-Procedure from library `standard.lib' (*note standard_lib::).
-
-*Syntax:*
- `stdhilb (' ideal_expression `)'
- `stdhilb (' ideal_expression`,' intvec_expression `)'
-
-*Type:*
- ideal
-
-*Purpose:*
- computes the standard basis of the homogeneous ideal in the
- basering, via a Hilbert driven standard basis computation.
- An optional second argument will be used as 1st Hilbert function.
-
-*Assume:*
- The optional second argument is the first Hilbert series as
- computed by `hilb'.
-
-*Example:*
- ring r=0,(x,y,z),dp;
- ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y;
- ideal i1=stdhilb(i); i1;
- ==> i1[1]=y3+x2
- ==> i1[2]=x2y+x2
- ==> i1[3]=x3-x2
- ==> i1[4]=z4-x2-y
- // the latter computation is equivalent to:
- intvec v=hilb(i,1);
- ==> // ** i is no standardbasis
- ideal i2=stdhilb(i,v); i2;
- ==> i2[1]=y3+x2
- ==> i2[2]=x2y+x2
- ==> i2[3]=x3-x2
- ==> i2[4]=z4-x2-y
-
-* Menu:
-
-See also:
-* groebner::
-* std::
-* stdfglm::
-
-*See also:* *note groebner::; *note std::; *note stdfglm::.
-
-
-File: sing.info, Node: subst, Next: system, Prev: stdhilb, Up: Functions
-
-5.1.124 subst
--------------
-
-`*Syntax:*'
- `subst (' poly_expression`,' ring_variable`,' poly_expression `)'
- `subst (' vector_expression`,' ring_variable`,' poly_expression `)'
-
- `subst (' ideal_expression`,' ring_variable`,' poly_expression `)'
- `subst (' module_expression`,' ring_variable`,' poly_expression `)'
-
-`*Type:*'
- poly, vector, ideal or module (corresponding to the first argument)
-
-`*Purpose:*'
- substitutes a ring variable by a polynomial.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- poly f=x2+y2+z2+x+y+z;
- subst(f,x,3/2);
- ==> y2+z2+y+z+15/4
- int a=1;
- subst(f,y,a);
- ==> x2+z2+x+z+2
- subst(f,y,z);
- ==> x2+2z2+x+2z
- subst(f,y,z+1);
- ==> x2+2z2+x+4z+2
-
-* Menu:
-
-See
-* ideal::
-* map::
-* module::
-* poly::
-* vector::
-
-See *note ideal::; *note map::; *note module::; *note poly::; *note
-vector::.
-
-
-File: sing.info, Node: system, Next: syz, Prev: subst, Up: Functions
-
-5.1.125 system
---------------
-
-`*Syntax:*'
- `system (' string_expression `)'
- `system (' string_expression`,' expression `)'
-
-`*Type:*'
- depends on the desired function, may be none
-
-`*Purpose:*'
- interface to internal data and the operating system. The
- string_expression determines the command to execute. Some commands
- require an additional argument (second form) where the type of the
- argument depends on the command. See below for a list of all
- possible commands.
-
-`*Note:*'
- Not all functions work on every platform.
-
-`*Functions:*'
-
- `system("sh"', string_expression `)'
- shell escape, returns the return code of the shell as int. The
- string is sent literally to the shell.
-
- `system("pid")'
- returns the process number as int (for creating unique names).
-
- `system("uname")'
- returns a string identifying the architecture for which
- SINGULAR was compiled.
-
- `system("getenv",' string_expression`)'
- returns the value of the shell environment variable given as
- the second argument. The return type is string.
-
- `system("setenv",'string_expression, string_expression`)'
- sets the shell environment variable given as the second
- argument to the value given as the third argument. Returns the
- third argument. Might not be available on all platforms.
-
- `system("tty")'
- resets the terminal.
-
- `system("version")'
- returns the version number of SINGULAR as int.
-
- `system("contributors")'
- returns names of people who contributed to the SINGULAR kernel
- as string.
-
- `system("gen")'
- returns the generating element of the multiplicative group of
- (Z/p)\{0} (as int) where p is the characteristic of the
- basering.
-
- `system("nblocks")'
-
- `system("nblocks",' ring_name `)'
- returns the number of blocks of the given ring, or the number
- of parameters of the current basering, if no second argument
- is given. The return type is int.
-
- `system("Singular")'
- returns the absolute (path) name of the running SINGULAR as
- string.
-
- `system("'-`")'
- prints the values of all options.
-
- `system("'-long_option_name`")'
- returns the value of the (command-line) option
- long_option_name. The type of the returned value is either
- string or int. *Note Command line options::, for more info.
-
- `system("'-long_option_name`",' expression`)'
- sets the value of the (command-line) option long_option_name
- to the value given by the expression. Type of the expression
- must be string, or int. *Note Command line options::, for
- more info. Among others, this can be used for setting the seed
- of the random number generator, the used help browser, the
- minimal display time, or the timer resolution.
-
- `system("browsers");'
- returns a string about available help browsers. *Note The
- online help system::.
-
-`*Example:*'
-
- // a listing of the current directory:
- system("sh","ls");
- // execute a shell, return to SINGULAR with exit:
- system("sh","sh");
- string unique_name="/tmp/xx"+string(system("pid"));
- unique_name;
- ==> /tmp/xx4711
- system("uname")
- ==> ix86-Linux
- system("getenv","PATH");
- ==> /bin:/usr/bin:/usr/local/bin
- system("Singular");
- ==> /usr/local/bin/Singular
- // report value of all options
- system("--");
- ==> // --batch 0
- ==> // --execute
- ==> // --sdb 0
- ==> // --echo 0
- ==> // --help 0
- ==> // --quiet 0
- ==> // --random 937848971
- ==> // --no-tty 0
- ==> // --user-option
- ==> // --version 0
- ==> // --allow-net 0
- ==> // --browser
- ==> // --emacs 0
- ==> // --no-stdlib 0
- ==> // --no-rc 0
- ==> // --no-warn 0
- ==> // --no-out 0
- ==> // --min-time "0.5"
- ==> // --mp-port
- ==> // --mp-host
- ==> // --ticks-per-sec 1
- ==> // --mp-transp
- ==> // --mp-mode
- // set minimal display time to 0.02 seconds
- system("--min-time", "0.02");
- // set timer resolution to 0.01 seconds
- system("--ticks-per-sec", 100);
- // re-seed random number generator
- system("--random", 12345678);
- // allow netscape to access HTML pages from the net
- system("--allow-net", 1);
- // and set help browser to netscape
- system("--browser", "netscape");
-
-
-File: sing.info, Node: syz, Next: trace, Prev: system, Up: Functions
-
-5.1.126 syz
------------
-
-`*Syntax:*'
- `syz (' ideal_expression `)'
- `syz (' module_expression `)'
-
-`*Type:*'
- module
-
-`*Purpose:*'
- computes the first syzygy (i.e., the module of relations of the
- given generators) of the ideal, resp. module.
-
-`*Example:*'
-
- ring R=0,(x,y),(c,dp);
- ideal i=x,y;
- syz(i);
- ==> _[1]=[y,-x]
-
-* Menu:
-
-See
-* hres::
-* ideal::
-* lres::
-* module::
-* mres::
-* nres::
-* res::
-* sres::
-
-See *note hres::; *note ideal::; *note lres::; *note module::; *note
-mres::; *note nres::; *note res::; *note sres::.
-
-
-File: sing.info, Node: trace, Next: transpose, Prev: syz, Up: Functions
-
-5.1.127 trace
--------------
-
-`*Syntax:*'
- `trace (' intmat_expression `)'
- `trace (' matrix_expression `)'
-
-`*Type:*'
- int, if the argument is an intmat, resp.
- poly, if the argument is a matrix
-
-`*Purpose:*'
- returns the trace of an intmat, resp. matrix.
-
-`*Example:*'
-
- intmat m[2][2]=1,2,3,4;
- print(m);
- ==> 1 2
- ==> 3 4
- trace(m);
- ==> 5
-
-* Menu:
-
-See
-* intmat::
-* matrix::
-
-See *note intmat::; *note matrix::.
-
-
-File: sing.info, Node: transpose, Next: type, Prev: trace, Up: Functions
-
-5.1.128 transpose
------------------
-
-`*Syntax:*'
- `transpose (' intmat_expression `)'
- `transpose (' matrix_expression `)'
- `transpose (' module_expression `)'
-
-`*Type:*'
- intmat, matrix, or module, corresponding to the argument
-
-`*Purpose:*'
- transposes a matrix.
-
-`*Example:*'
-
- ring R=0,x,dp;
- matrix m[2][3]=1,2,3,4,5,6;
- print(m);
- ==> 1,2,3,
- ==> 4,5,6
- print(transpose(m));
- ==> 1,4,
- ==> 2,5,
- ==> 3,6
-
-* Menu:
-
-See
-* intmat::
-* matrix::
-* module::
-
-See *note intmat::; *note matrix::; *note module::.
-
-
-File: sing.info, Node: type, Next: typeof, Prev: transpose, Up: Functions
-
-5.1.129 type
-------------
-
-`*Syntax:*'
- `type ' name `;'
- `type (' name `);'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- prints the name, level, type and value of a variable. To display
- the value of an expression, it is sufficient to type the expression
- followed by `;'.
-
-`*Example:*'
-
- int i=3;
- i;
- ==> 3
- type(i);
- ==> // i [0] int 3
-
-* Menu:
-
-See
-* Data types::
-* listvar::
-* print::
-
-See *note Data types::; *note listvar::; *note print::.
-
-
-File: sing.info, Node: typeof, Next: uressolve, Prev: type, Up: Functions
-
-5.1.130 typeof
---------------
-
-`*Syntax:*'
- `typeof (' expression `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the type of an expression as string.
-
- Returns the type of the first list element if the expression is an
- expression list.
-
- Possible types are: `"ideal"', `"int"', `"intmat"', `"intvec"',
- `"list"', `"map"', `"matrix"', `"module"', `"number"', `"none"',
- `"poly"', `"proc"', `"qring"', `"resolution"', `"ring"',
- `"string"', `"vector"'.
-
- For internal use only is the type `"?unknown type?"'.
-
-`*Example:*'
-
- int i=9; i;
- ==> 9
- typeof(_);
- ==> int
- print(i);
- ==> 9
- typeof(_);
- ==> none
- type i;
- ==> // i [0] int 9
- typeof(_);
- ==> string
- string s=typeof(i);
- s;
- ==> int
- typeof(s);
- ==> string
- proc p() { "hello"; return();}
- p();
- ==> hello
- typeof(_);
- ==> none
-
-* Menu:
-
-See
-* Data types::
-* type::
-
-See *note Data types::; *note type::.
-
-
-File: sing.info, Node: uressolve, Next: vandermonde, Prev: typeof, Up:
Functions
-
-5.1.131 uressolve
------------------
-
-`*Syntax:*'
- `uressolve (' ideal_expression`,' int_expression`,'
- int_expression`,' int_expression `)'
-
-`*Type:*'
- list
-
-`*Purpose:*'
- computes all complex roots of a zerodimensional ideal.
- Makes either use of the multipolynomial resultant of Macaulay
- (second argument = 1), which works only for homogeneous ideals, or
- uses the sparse resultant of Gelfand, Kapranov and Zelevinsky
- (second argument = 0).
- The sparse resultant algorithm uses a mixed polyhedral subdivision
- of the Minkowsky sum of the Newton polytopes in order to construct
- the sparse resultant matrix. Its determinant is a nonzero multiple
- of the sparse resultant. The u-resultant of B.L. van der Waerden
- and Laguerre's algorithm are used to determine the complex roots.
- The third argument defines the precision of the fractional part if
- the ground field is the field of rational numbers, otherwise it
- will be ignored.
- The fourth argument (can be 0, 1 or 2) gives the number of extra
- runs of Laguerre's algorithm (with corrupted roots), leading to
- better results.
-
-`*Note:*'
- If the ground field is the field of complex numbers, the elements
- of the list are of type number, otherwise of type string.
-
-`*Example:*'
-
- ring rsc=(real,20,I),(x,y),lp;
- ideal i=(2+3*I)*x2+(0.35+I*45.0e-2)*y2-8,x2+xy+(42.7)*y2;
- list l=uressolve(i,0,0,2);
- l[1];
- ==> [1]:
- ==> (-1.315392899374542198+I*0.70468233142752928117)
- ==> [2]:
- ==> (0.12292646536251281054+I*0.19245727404407015049)
- subst(subst(i[1],x,l[1][1]),y,l[1][2]);
- ==> 0
-
-* Menu:
-
-See
-* laguerre::
-* mpresmat::
-
-See *note laguerre::; *note mpresmat::.
-
-
-File: sing.info, Node: vandermonde, Next: var, Prev: uressolve, Up:
Functions
-
-5.1.132 vandermonde
--------------------
-
-`*Syntax:*'
- `vandermonde (' ideal_expression`,' ideal_expression`,'
- int_expression `)'
-
-`*Type:*'
- poly
-
-`*Purpose:*'
- `vandermonde(p,v,d)' computes the (unique) polynomial of degree d
- with prescribed values v[1],...,v[N] at the points p^0,...,p^(N-1),
- N=(d+1)^n, n the number of ring variables.
- The returned polynomial is sum_a c[a]*x1^a1*...*xn^an, where the
- coefficients c[a] are the solution of the (transposed) Vandermonde
- system of linear equations
-
- sum_(|a|<=d) c_[a] * p[1]^(k*a1) *..* p[n]^(k*an) = v[k+1],
- k=1,...,N.
-
-{\tt vandermonde(p,v,d)} computes the (unique) polynomial of degree
- @code{d} with prescribed values {\tt v[1],...,v[N]} at the points
- {\tt p}$^0,\dots,$ {\tt p}$^{N-1}$, {\tt N=(d+1)}$^n$, $n$ the
- number of ring variables.
-
- The returned polynomial is $\sum
- c_{\alpha_1\ldots\alpha_n}\cdot x_1^{\alpha_1} \cdot \dots \cdot
- x_n^{\alpha_n}$, where the coefficients
- $c_{\alpha_1\ldots\alpha_n}$ are the solution of the (transposed)
- Vandermonde system of linear equations
- $$ \sum_{\alpha_1+\ldots+\alpha_n\leq d} c_{\alpha_1\ldots\alpha_n} \cdot
- {\tt p}_1^{(k-1)\alpha_1}\cdot\dots\cdot {\tt p}_n^{(k-1)\alpha_n} =
- {\tt v}[k], \quad k=1,\dots,{\tt N}.$$
-
-`*Note:*'
- the ground field has to be the field of rational numbers. Moreover,
- ncols(p)==n, the number of variables in the basering, and all the
- given generators have to be numbers different from 0,1 or -1.
- Finally, ncols(v)==(d+1)^n, and all given generators have to be
- numbers. the ground field has to be the field of rational
- numbers. Moreover, {\tt ncols(p)==}$n$, the number of variables in the
- basering, and all the given generators have to be numbers different from
- 0,1 or -1. Finally, {\tt ncols(v)==(d+1)$^n$}, and all given generators
have
- to be numbers.
-
-`*Example:*'
-
- ring r=0,(x,y),dp;
- // determine f with deg(f)=2 and with given values v of f
- // at 9 points: (2,3)^0=(1,1),...,(2,3)^8=(2^8,3^8)
- // valuation point: (2,3)
- ideal p=2,3;
- ideal v=1,2,3,4,5,6,7,8,9;
- poly ip=vandermonde(p,v,2);
- ip[1..5]; // the 5 first terms of ip:
- ==> -1/9797760x2y2-595/85536x2y+55/396576xy2+935/384x2-1309/3240xy
- // compute value of ip at the point 2^8,3^8, result must be 9
- subst(subst(ip,x,2^8),y,3^8);
- ==> 9
-
-* Menu:
-
-See also:
-
-
-File: sing.info, Node: var, Next: varstr, Prev: vandermonde, Up: Functions
-
-5.1.133 var
------------
-
-`*Syntax:*'
- `var (' int_expression `)'
-
-`*Type:*'
- poly
-
-`*Purpose:*'
- `var(n)' returns the n-th ring variable.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- var(2);
- ==> y
-
-* Menu:
-
-See
-* int::
-* nvars::
-* ring::
-* varstr::
-
-See *note int::; *note nvars::; *note ring::; *note varstr::.
-
-
-File: sing.info, Node: varstr, Next: vdim, Prev: var, Up: Functions
-
-5.1.134 varstr
---------------
-
-`*Syntax:*'
- `varstr (' ring_name `)'
- `varstr (' int_expression `)'
- `varstr (' ring_name`,' int_expression `)'
-
-`*Type:*'
- string
-
-`*Purpose:*'
- returns the list of the names of the ring variables as a string or
- the name of the n-th ring variable, where n is given by the
- int_expression.
- If the ring name is omitted, the basering is used, thus `varstr(n)'
- is equivalent to `varstr(basering,n)'.
-
-`*Example:*'
-
- ring r=0,(x,y,z),dp;
- varstr(r);
- ==> x,y,z
- varstr(r,1);
- ==> x
- varstr(2);
- ==> y
-
-* Menu:
-
-See
-* charstr::
-* int::
-* nvars::
-* ordstr::
-* parstr::
-* ring::
-* var::
-
-See *note charstr::; *note int::; *note nvars::; *note ordstr::; *note
-parstr::; *note ring::; *note var::.
-
-
-File: sing.info, Node: vdim, Next: wedge, Prev: varstr, Up: Functions
-
-5.1.135 vdim
-------------
-
-`*Syntax:*'
- `vdim (' ideal_expression `)'
- `vdim (' module_expression `)'
-
-`*Type:*'
- int
-
-`*Purpose:*'
- computes the vector space dimension of the ring, resp. free module,
- modulo the ideal, resp. module, generated by the initial terms of
- the given generators. If the generators form a standard basis,
- this is the same as the vector space dimension of the ring, resp.
- free module, modulo the ideal, resp. module.
- If the ideal, resp. module, is not zero-dimensional, -1 is
- returned.
-
-`*Example:*'
-
- ring r=0,(x,y),ds;
- ideal i=x2+y2,x2-y2;
- ideal j=std(i);
- vdim(j);
- ==> 4
-
-* Menu:
-
-See
-* degree::
-* dim::
-* ideal::
-* kbase::
-* mult::
-* std::
-
-See *note degree::; *note dim::; *note ideal::; *note kbase::; *note
-mult::; *note std::.
-
-
-File: sing.info, Node: wedge, Next: weight, Prev: vdim, Up: Functions
-
-5.1.136 wedge
--------------
-
-`*Syntax:*'
- `wedge (' matrix_expression`,' int_expression `)'
-
-`*Type:*'
- matrix
-
-`*Purpose:*'
- `wedge(M,n)' computes the `n'-th exterior power of the matrix `M'.
-
-`*Example:*'
-
- ring r;
- matrix m[2][3]=x,y,y,z,z,x;
- print(m);
- ==> x,y,y,
- ==> z,z,x
- print(wedge(m,2));
- ==> xz-yz,-x2+yz,xy-yz
-
-* Menu:
-
-See
-* int::
-* matrix::
-* minor::
-
-See *note int::; *note matrix::; *note minor::.
-
-
-File: sing.info, Node: weight, Next: write, Prev: wedge, Up: Functions
-
-5.1.137 weight
---------------
-
-`*Syntax:*'
- `weight (' ideal_expression `)'
- `weight (' module_expression `)'
-
-`*Type:*'
- intvec
-
-`*Purpose:*'
- computes an "optimal" weight vector for an ideal, resp. module,
- which may be used as weight vector for the variables in order to
- speed up the standard basis algorithm. If the input is weighted
- homogeneous, a weight vector for which the input is weighted
- homogeneous is found.
-
-`*Example:*'
-
- ring h1=32003,(t,x,y,z),dp;
- ideal i=
- 9x8+y7t3z4+5x4y2t2+2xy2z3t2,
- 9y8+7xy6t+2x5y4t2+2x2yz3t2,
- 9z8+3x2y3z2t4;
- intvec e=weight(i);
- e;
- ==> 5,7,5,7
- ring r=32003,(a,b,c,d),wp(e);
- map f=h1,a,b,c,d;
- ideal i0=std(f(i));
-
-* Menu:
-
-See
-* ideal::
-* intvec::
-* qhweight::
-
-See *note ideal::; *note intvec::; *note qhweight::.
-
-
-File: sing.info, Node: write, Prev: weight, Up: Functions
-
-5.1.138 write
--------------
-
-`*Syntax:*'
- `write (' link_expression`,' expression_list `)'
- for DBM links:
- `write (' link`,' string_expression`,' string_expression `)'
- `write (' link`,' string_expression `)'
-
-`*Type:*'
- none
-
-`*Purpose:*'
- writes data to a link.
- If the link is of type `ASCII', all expressions are converted to
- strings (and separated by a newline character) before they are
- written. As a consequence, only such values which can be converted
- to a string can be written to an `ASCII' link.
- For MP links, ring-dependent expressions are written together with
- a ring description. To prevent an evaluation of the expression
- before it is written, the `quote' command (possibly together with
- `eval') can be used. A `write' blocks (i.e., does not return to the
- prompt), as long as a MPtcp link is not ready for writing.
- For DBM links, `write' with three arguments inserts the first
- string as key and the second string as value into the dbm data
- base.
- Called with two arguments, it deletes the entry with the key
- specified by the string from the data base.
-
-`*Example:*'
-
- // write the values of the variables f and i as strings into
- // the file "outfile" (overwrite it, if it exists)
- write(":w outfile",f,i);
-
- // now append the string "that was f,i" (without the quotes)
- // at the end of the file "outfile"
- write(":a outfile","that was f,i");
- // alternatively, links could be used:
- link l=":a outfile"; l;
- // type : ASCII
- // mode : a
- // name : outfile
- // open : no
- // read : not ready
- // write: not ready
- write(l," that was f,i");
- // saving and retrieving data (ASCII format):
- ring r=32003,(x,y,z),dp;
- ideal i=x+y,z3+22y;
- write(":w save_i",i);// this writes x+y,z3+22y to the file save_i
- ring r=32003,(x,y,z),dp;
- string s=read("save_i"); //creates the string x+y,z3+22y
- execute("ideal k="+s+";"); // this defines an ideal k which
- // is equal to i.
- // for large objects, the MP format and MPfile links are better:
- write("MPfile:w save_i.mp",i);
- def j=read("MPfile:r save_i.mp");
-
-* Menu:
-
-See
-* Data types::
-* dump::
-* eval::
-* link::
-* print::
-* printf::
-* quote::
-* read::
-* short::
-
-See *note Data types::; *note dump::; *note eval::; *note link::; *note
-print::; *note printf::; *note quote::; *note read::; *note short::.
-
-
-File: sing.info, Node: Control structures, Next: System variables, Prev:
Functions, Up: Functions and system variables
-
-5.2 Control structures
-======================
-
-
-List of all supported control structures.
-
-* Menu:
-
-* break::
-* breakpoint::
-* continue::
-* else::
-* export::
-* for::
-* if::
-* keepring::
-* quit::
-* return::
-* while::
-* ~::
-
-A sequence of commands surrounded by curly brackets (`{' and `}') is a
-so called block. Blocks are used in SINGULAR in order to define
-procedures and to collect commands belonging to `if', `else', `for' and
-`while' statements and to the `example' part in libraries. Even if the
-sequence of statements consists of only a single command it has to be
-surrounded by curly brackets! Variables which are defined inside a
-block are not local to that block. Note that there is no ending
-semicolon at the end of the block.
-`*Example:*'
-
- if ( i>j )
- {
- // This is the block
- int temp;
- temp=i;
- i=j;
- j=temp;
- kill temp;
- }
-
-
-File: sing.info, Node: break, Next: breakpoint, Prev: Control structures,
Up: Control structures
-
-5.2.1 break
------------
-
-`*Syntax:*'
- `break;'
-
-`*Purpose:*'
- leaves the innermost `for' or `while' block.
-
-`*Example:*'
-
- while (1)
- {
- ...
- if ( ... )
- {
- break; // leave the while block
- }
- }
-
-* Menu:
-
-See
-* Control structures::
-* for::
-* while::
-
-See *note Control structures::; *note for::; *note while::.
-
-
-File: sing.info, Node: breakpoint, Next: continue, Prev: break, Up:
Control structures
-
-5.2.2 breakpoint
-----------------
-
-`*Syntax:*'
- `breakpoint(' proc_name `);'
- `breakpoint(' proc_name`,' line_no `);'
-
-`*Purpose:*'
- sets a breakpoint at the beginning of the specified procedure or at
- the given line. *Note:* Line number 1 is the first line of a
- library (for procedures from libraries), resp. the line with the
- `{'.
- A line number of -1 removes all breakpoint from that procedure.
-
-`*Example:*'
-
- breakpoint(groebner);
- ==> breakpoint 1, at line 163 in groebner
- breakpoint(groebner, 176);
- ==> breakpoint 2, at line 176 in groebner
- breakpoint(groebner, -1);
- ==> breakpoints in groebner deleted(0x6)
-
-* Menu:
-
-See
-* Source code debugger::
-* ~::
-
-See *note Source code debugger::; *note ~::.
-
-
-File: sing.info, Node: continue, Next: else, Prev: breakpoint, Up: Control
structures
-
-5.2.3 continue
---------------
-
-`*Syntax:*'
- `continue;'
-
-`*Purpose:*'
- skips the rest of the innermost `for' or `while' loop und jumps to
- the beginning of the block. This command is only valid inside a
- `for' or a `while' construction.
-
-`*Note:*'
- Unlike the C-construct it *does not execute the increment
- statement*. The command `continue' is mainly for internal use.
-
-`*Example:*'
-
- for (int i = 1 ; i<=10; i=i+1)
- {
- ...
- if (i==3) { i=8;continue; }
- // skip the rest if i is 3 and
- // continue with the next i: 8
- i;
- }
- ==> 1
- ==> 2
- ==> 8
- ==> 9
- ==> 10
-
-* Menu:
-
-See
-* Control structures::
-* for::
-* while::
-
-See *note Control structures::; *note for::; *note while::.
-
-
-File: sing.info, Node: else, Next: export, Prev: continue, Up: Control
structures
-
-5.2.4 else
-----------
-
-`*Syntax:*'
- `if (' boolean_expression `)' true_block `else' false_block
-
-`*Purpose:*'
- executes false_block if the boolean_expression of the `if'
- statement is false. This command is only valid in combination with
- an `if' command.
-
-`*Example:*'
-
- int i=3;
- if (i > 5)
- {
- "i is bigger than 5";
- }
- else
- {
- "i is smaller than 6";
- }
- ==> i is smaller than 6
-
-* Menu:
-
-See
-* Control structures::
-* boolean expressions::
-* if::
-
-See *note Control structures::; *note boolean expressions::; *note if::.
-
-
-File: sing.info, Node: export, Next: for, Prev: else, Up: Control
structures
-
-5.2.5 export
-------------
-
-`*Syntax:*'
- `export' name `;'
- `export' list_of_names `;'
-
-`*Purpose:*'
- converts a local variable of a procedure to a global one.
-
-`*Note:*'
- Objects defined in a ring are not automatically exported when
- exporting the ring (use `keepring' instead).
-
-`*Example:*'
-
- proc p1
- {
- int i,j;
- export(i);
- intmat m;
- listvar();
- export(m);
- }
- p1();
- ==> // m [1] intmat 1 x 1
- ==> // j [1] int 0
- ==> // i [0] int 0
- listvar();
- ==> // m [0] intmat 1 x 1
- ==> // i [0] int 0
-
-* Menu:
-
-See
-* keepring::
-
-See *note keepring::.
-
-
-File: sing.info, Node: for, Next: if, Prev: export, Up: Control structures
-
-5.2.6 for
----------
-
-`*Syntax:*'
- `for (' init_command`;' boolean_expression`;' iterate_commands`)'
- block
-
-`*Purpose:*'
- repetitive, conditional execution of a command block.
- The command init_command is executed first. Then boolean_expression
- is evaluated. If its value is TRUE the block is executed, otherwise
- the `for' statement is complete. After each execution of the block,
- the command iterate_command is executed and boolean_expression is
- evaluated. This is repeated until boolean_expression evaluates to
- FALSE.
- The command `break;' leaves the innermost `for' construct.
-
-`*Example:*'
-
- // sum of 1 to 10:
- int s=0;
- for (int i=1; i<=10; i=i+1)
- {
- s=s+i;
- }
- s;
- ==> 55
-
-* Menu:
-
-See
-* Control structures::
-* boolean expressions::
-* break::
-* continue::
-* if::
-* while::
-
-See *note Control structures::; *note boolean expressions::; *note
-break::; *note continue::; *note if::; *note while::.
-
-
-File: sing.info, Node: if, Next: keepring, Prev: for, Up: Control
structures
-
-5.2.7 if
---------
-
-`*Syntax:*'
- `if (' boolean_expression `)' true_block
- `if (' boolean_expression `)' true_block `else' false_block
-
-`*Purpose:*'
- executes true_block if the boolean condition is true. If the `if'
- statement is followed by an `else' statement and the boolean
- condition is false, then false_block is executed.
-
-`*Example:*'
-
- int i = 9;
- matrix m[i][i];
- if (i > 5 and typeof(m) == "matrix")
- {
- m[i][i] = i;
- }
-
-* Menu:
-
-See
-* Control structures::
-* boolean expressions::
-* break::
-* else::
-
-See *note Control structures::; *note boolean expressions::; *note
-break::; *note else::.
-
-
-File: sing.info, Node: keepring, Next: quit, Prev: if, Up: Control
structures
-
-5.2.8 keepring
---------------
-
-`*Syntax:*'
- `keepring' name `;'
-
-`*Purpose:*'
- moves the specified ring to the next (upper) level. This command
- can only be used inside of procedures and it should be the last
- command before the `return' statement. There it provides the
- possibility to keep a ring which is local to the procedure (and its
- objects) accessible after the procedure ended without making the
- ring global.
-
-`*Example:*'
-
- proc P1
- {
- ring r=0,x,dp;
- keepring r;
- }
- proc P2
- {
- "inside P2: " + nameof(basering);
- P1();
- "inside P2, after call of P1: " + nameof(basering);
- }
- ring r1= 0,y,dp;
- P2();
- ==> inside P2: r1
- ==> inside P2, after call of P1: r
- "at top level: " + nameof(basering);
- ==> at top level: r1
-
-* Menu:
-
-See
-* ring::
-
-See *note ring::.
-
-
-File: sing.info, Node: quit, Next: return, Prev: keepring, Up: Control
structures
-
-5.2.9 quit
-----------
-
-`*Syntax:*'
- `quit;'
-
-`*Purpose:*'
- quits SINGULAR; works also from inside a procedure. The commands
- `quit' and `exit' are synonymous.
-
-`*Example:*'
-
- quit;
-
-
-File: sing.info, Node: return, Next: while, Prev: quit, Up: Control
structures
-
-5.2.10 return
--------------
-
-`*Syntax:*'
- `return (' expression_list `);'
- `return ();'
-
-`*Type:*'
- any
-
-`*Purpose:*'
- returns the result(s) of a procedure and can only be used inside a
- procedure. Note that the brackets are required even if no return
- value is given.
-
-`*Example:*'
-
- proc p2
- {
- int i,j;
- for(i=1;i<=10;i++)
- {
- j=j+i;
- }
- return(j);
- }
- // can also return an expression list, i.e., more than one value
- proc tworeturn ()
- { return (1,2); }
- int i,j = tworeturn();
- // return type may even depend on the input
- proc type_return (int i)
- {
- if (i > 0) {return (i);}
- else {return (list(i));}
- }
- // then we need def type (or list) to collect value
- def t1 = type_return(1);
- def t2 = type_return(-1);
-
-* Menu:
-
-See
-* Data types::
-* proc::
-
-See *note Data types::; *note proc::.
-
-
-File: sing.info, Node: while, Next: ~, Prev: return, Up: Control structures
-
-5.2.11 while
-------------
-
-`*Syntax:*'
- `while ('boolean_expression`)' block
-
-`*Purpose:*'
- repetitive, conditional execution of block.
- The boolean_expression is evaluated and if its value is TRUE, the
- block gets executed. This is repeated until boolean_expression
- evaluates to FALSE. The command `break' leaves the innermost
- `while' construction.
-
-`*Example:*'
-
- int i = 9;
- while (i>0)
- {
- // ... // do something for i=9, 8, ..., 1
- i = i - 1;
- }
- while (1)
- {
- // ... // do something forever
- if (i == -5) // but leave the loop if i is -5
- {
- break;
- }
- }
-
-* Menu:
-
-See
-* Control structures::
-* boolean expressions::
-* break::
-
-See *note Control structures::; *note boolean expressions::; *note
-break::.
-
-
-File: sing.info, Node: ~, Prev: while, Up: Control structures
-
-5.2.12 ~ (break point)
-----------------------
-
-`*Syntax:*'
- `~;'
-
-`*Purpose:*'
- sets a break point. Whenever SINGULAR reaches the command `~;' in a
- sequence of commands it prompts for input. The user may now input
- lines of SINGULAR commands. The line length cannot exceed 80
- characters. SINGULAR proceeds with the execution of the command
- following `~;' as soon as it receives an empty line.
-
-`*Example:*'
-
- proc t
- {
- int i=2;
- ~;
- return(i+1);
- }
- t();
- ==> -- break point in t --
- ==> -- 0: called from STDIN --
- // here local variables of the procedure can be accessed
- i;
- ==> 2
- ==> -- break point in t --
-
- ==> 3
-
-* Menu:
-
-See
-* Break points::
-
-See *note Break points::.
-
-
-File: sing.info, Node: System variables, Prev: Control structures, Up:
Functions and system variables
-
-5.3 System variables
-====================
-
-
-List of all system variables.
-
-* Menu:
-
-* degBound::
-* echo::
-* minpoly::
-* multBound::
-* noether::
-* printlevel::
-* short::
-* timer::
-* TRACE var::
-* rtimer::
-* voice::
-
-
-File: sing.info, Node: degBound, Next: echo, Prev: System variables, Up:
System variables
-
-5.3.1 degBound
---------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- The standard basis computation is stopped if the total (weighted)
- degree exceeds `degBound'.
- `degBound' should not be used for a global ordering with
- inhomogeneous input.
- Reset this bound by setting `degBound' to 0.
-
-`*Example:*'
-
- degBound = 7;
- option();
- ==> //options for 'std'-command: degBound
- ideal j=std(i);
- degBound;
- ==> 7
- degBound = 0; //resets degree bound to infinity
-
-* Menu:
-
-See
-* deg::
-* int::
-* option::
-* std::
-
-See *note deg::; *note int::; *note option::; *note std::.
-
-
-File: sing.info, Node: echo, Next: minpoly, Prev: degBound, Up: System
variables
-
-5.3.2 echo
-----------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- input is echoed if `echo' >= `voice'.
- `echo' is a local setting for a procedure and defaulted to 0.
- `echo' does not affect the output of commands.
-
-`*Example:*'
-
- echo = 1;
- int i = echo;
- ==> int i = echo;
-
-* Menu:
-
-See
-* int::
-* voice::
-
-See *note int::; *note voice::.
-
-
-File: sing.info, Node: minpoly, Next: multBound, Prev: echo, Up: System
variables
-
-5.3.3 minpoly
--------------
-
-`*Type:*'
- number
-
-`*Purpose:*'
- describes the coefficient field of the current basering as an
- algebraic extension with the minimal polynomial equal to `minpoly'.
- Setting the `minpoly' should be the first command after defining
- the ring.
-
-`*Note:*'
- The minimal polynomial has to be specified in the syntax of a
- polynomial. Its variable is not one of the ring variables, but the
- algebraic element which is being adjoined to the field. Algebraic
- extensions in SINGULAR are only possible over the rational numbers
- or over Z/p, p a prime number.
- SINGULAR does not check whether the given polynomial is
- irreducible! It can be checked in advance with the function
- `factorize' (*note factorize::).
-
-`*Example:*'
-
- //(Q[i]/(i^2+1))[x,y,z]:
- ring Cxyz=(0,i),(x,y,z),dp;
- minpoly=i^2+1;
- i2; //this is a number, not a poly
- ==> -1
-
-* Menu:
-
-See
-* factorize::
-* ring::
-
-See *note factorize::; *note ring::.
-
-
-File: sing.info, Node: multBound, Next: noether, Prev: minpoly, Up: System
variables
-
-5.3.4 multBound
----------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- The standard basis computation is stopped if the ideal is
- zero-dimensional in a ring with local ordering and its multiplicity
- (`mult') is lower than `multBound'.
- Reset this bound by setting `multBound' to 0.
-
-`*Example:*'
-
- multBound = 20;
- option();
- ==> //options for 'std'-command: multBound
- ideal j=std(i);
- multBound;
- ==> 20
- multBound = 0; //disables multBound
-
-* Menu:
-
-See
-* int::
-* mult::
-* option::
-* std::
-
-See *note int::; *note mult::; *note option::; *note std::.
-
-
-File: sing.info, Node: noether, Next: printlevel, Prev: multBound, Up:
System variables
-
-5.3.5 noether
--------------
-
-`*Type:*'
- poly
-
-`*Purpose:*'
- The standard basis computation in local rings cuts off all
- monomials above (in the sense of the monomial ordering) the
- monomial `noether' during the computation.
- Reset `noether' by setting `noether' to 0.
-
-`*Example:*'
-
- ring R=32003,(x,y,z),ds;
- ideal i=x2+y12,y13;
- std(i);
- ==> _[1]=x2+y12
- ==> _[2]=y13
- noether=x11;
- std(i);
- ==> _[1]=x2
- noether=0; //disables noether
-
-* Menu:
-
-See
-* poly::
-* std::
-
-See *note poly::; *note std::.
-
-
-File: sing.info, Node: printlevel, Next: short, Prev: noether, Up: System
variables
-
-5.3.6 printlevel
-----------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- sets the debug level for `dbprint'. If `printlevel' >= `voice'
- then `dbprint' is equivalent to `print', otherwise nothing is
- printed.
-
-`*Note:*'
- *Note Procedures in a library::, for a small example about how this
- is used for the display of comments while procedures are executed.
-
-`*Example:*'
-
- voice;
- ==> 1
- printlevel=0;
- dbprint(1);
- printlevel=voice;
- dbprint(1);
- ==> 1
-
-* Menu:
-
-See
-* dbprint::
-* int::
-* voice::
-
-See *note dbprint::; *note int::; *note voice::.
-
-
-File: sing.info, Node: short, Next: timer, Prev: printlevel, Up: System
variables
-
-5.3.7 short
------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- the output of monomials is done in the short manner, if `short' is
- non-zero. A C-like notion is used, if short is zero. Both
- notations may be used as input.
- The default depends on the names of the ring variables (0 if there
- are names of variables longer than 1 character, 1 otherwise). Every
- change of the basering sets `short' to the previous value for that
- ring. In other words, the value of the variable `short' is
- "ring-local".
-
-`*Example:*'
-
- ring r=23,x,dp;
- int save=short;
- short=1;
- 2x2,x2;
- ==> 2x2 x2
- short=0;
- 2x2,x2;
- ==> 2*x^2 x^2
- short=save; //resets short to the previous value
-
-* Menu:
-
-See
-* int::
-
-See *note int::.
-
-
-File: sing.info, Node: timer, Next: TRACE var, Prev: short, Up: System
variables
-
-5.3.8 timer
------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
-
- 1. the CPU time (i.e, user and system time) used for each command
- is printed if timer >0 , if this time is bigger than a
- (customizable) minimal time and if `printlevel+1 >= voice'
- (which is by default true on the SINGULAR top level, but not
- true while procedures are executed).
-
- 2. yields the used CPU time since the start-up of SINGULAR in a
- (customizable) resolution.
-
- The default setting of `timer' is 0, the default minimal time is
- 0.5 seconds, and the default timer resolution is 1 (i.e., the
- default unit of time is one second). The minimal time and timer
- resolution can be set using the command line options `--min-time'
- and `--ticks-per-sec' and can be checked using
- `system("--min-time")' and `system("--ticks-per-sec")'.
-
- How to use `timer' in order to measure the time for a sequence of
- commands, see example below.
-
-`*Note for Windows95/98:*'
- The value of the `timer' cannot be used (resp. trusted) when
- SINGULAR is run under Windows95/98 (this is due to the shortcomings
- of the Windows95/98 operating system). Use *note rtimer::, instead.
-
-`*Example:*'
-
- timer=1; // The time of each command is printed
- int t=timer; // initialize t by timer
- ring r=0,(x,y,z),dp;
- poly p=(x+2y+3z+4xy+5xz+6yz)^20;
- // timer as int_expression:
- t=timer-t;
- t; // yields the time in ticks-per-sec (default 1)
- ==> 0
- // since t was initialized by timer
- int tps=system("--ticks-per-sec");
- t/tps; // yields the time in seconds truncated to int
- ==> 0
-
-* Menu:
-
-See
-* Command line options::
-* printlevel::
-* rtimer::
-* system::
-* voice::
-
-See *note Command line options::; *note printlevel::; *note rtimer::;
-*note system::; *note voice::.
-
-
-File: sing.info, Node: TRACE var, Next: rtimer, Prev: timer, Up: System
variables
-
-5.3.9 TRACE
------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- sets level of debugging.
-
- `TRACE=0'
- no debugging messages are printed.
-
- `TRACE=1'
- messages about entering and leaving of procedures are
- displayed.
-
- `TRACE=3'
- messages about entering and leaving of procedures together
- with line numbers are displayed.
-
- `TRACE=4'
- each line is echoed and the interpretation of commands in this
- line is suspended until the user presses `RETURN'.
-
-
- `TRACE' is defaulted to 0.
- `TRACE' does not affect the output of commands.
-
-`*Example:*'
-
- TRACE=1;
- LIB "general.lib";
- sum(1..100);
- ==> entering sum (level 0)
- ==> leaving sum (level 0)
- ==> 5050
-
-* Menu:
-
-See
-* int::
-
-See *note int::.
-
-
-File: sing.info, Node: rtimer, Next: voice, Prev: TRACE var, Up: System
variables
-
-5.3.10 rtimer
--------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- identical to `timer' (*note timer::), except that real times (i.e.,
- wall-clock) times are reported, instead of CPU times. This can be
- trusted on all operating systems (including Windows95/98).
-
-
-File: sing.info, Node: voice, Prev: rtimer, Up: System variables
-
-5.3.11 voice
-------------
-
-`*Type:*'
- int
-
-`*Purpose:*'
- shows the nesting level of procedures.
-
-`*Note:*'
- *Note Guidelines for writing a library::, for an small example how
- this is used for the display of comments while procedures are
- executed.
-
-`*Example:*'
-
- voice;
- ==> 1
- proc p
- {
- voice;
- };
- p();
- ==> 2
-
-* Menu:
-
-See
-* dbprint::
-* listvar::
-* printlevel::
-
-See *note dbprint::; *note listvar::; *note printlevel::.
-
-
-File: sing.info, Node: Tricks and pitfalls, Next: Examples, Prev: Functions
and system variables, Up: Top
-
-6 Tricks and pitfalls
-*********************
-
-* Menu:
-
-* Limitations::
-* Major differences to the C programming language::
-* Miscellaneous oddities::
-* Identifier resolution::
-
-
-File: sing.info, Node: Limitations, Next: Major differences to the C
programming language, Up: Tricks and pitfalls
-
-6.1 Limitations
-===============
-
-SINGULAR has the following limitations:
- * the characteristic of a prime field must be less than 2147483629
-
- * the (weighted) degree of a monomial must be smaller than the
- largest `long', usually 2147483648
-
- * the exponent of a ring variable must be smaller than 32768 unless
- the ring ordering start with the pseudo ordering `L(' max_exponent
- `)'
-
- * the rank of any free module must be smaller than the largest
- `long', usually 2147483648
-
- * the number of parameters must be smaller than 32768
-
- * the number of ring variables must be smaller than 32768
-
- * the precision of long floating point numbers (for ground field
- `real') must be smaller than 32768
-
- * integers (of type `int') have the limited range from -2147483647 to
- 2147483647
-
- * floating point numbers (type `number' from field `real') have a
- limited range which is machine dependent. A typical range is
- -1.0e-38 to 1.0e+38. The string representation of overflow and
- underflow is machine dependent, as well. For example "`Inf'" on
- Linux, or "`+.+00e+00'" on HPUX.
-
- * the length of an identifier is unlimited but `listvar' displays
- only the first 20 characters
-
- * statements may not contain more than 10000 tokens
-
- * All input to Singular must be 7-bit clean, i.e. special characters
- like the the German Umlaute (a", o", etc.), or the French accent
- characters may neither appear as input to SINGULAR, nor in
- libraries or procedure definitions.
-
-
-File: sing.info, Node: Major differences to the C programming language,
Next: Miscellaneous oddities, Prev: Limitations, Up: Tricks and pitfalls
-
-6.2 Major differences to the C programming language
-===================================================
-
-Although many constructs from SINGULAR's programming language are
-similar to those from the C programming language, there are some subtle
-differences. Most notably:
-
-* Menu:
-
-* No rvalue of increments and assignments::
-* Evaluation of logical expressions::
-* No case or switch statement::
-* Usage of commas::
-* Usage of brackets::
-* Behavior of continue::
-* Return type of procedures::
-
-
-File: sing.info, Node: No rvalue of increments and assignments, Next:
Evaluation of logical expressions, Up: Major differences to the C programming
language
-
-6.2.1 No rvalue of increments and assignments
----------------------------------------------
-
-The increment operator `++' (resp. decrement operator `--') has no
-rvalue, i.e., cannot be used on the right-hand sides of assignments.
-So, instead of
-
- j = i++; // WRONG!!!
-
-(which results in an error), it must be written
-
- i++; j = i;
-
-Likewise, an assignment expression does not have a result. Therefore,
-compound assignments like `i = j = k;' are not allowed and result in an
-error.
-
-
-File: sing.info, Node: Evaluation of logical expressions, Next: No case or
switch statement, Prev: No rvalue of increments and assignments, Up: Major
differences to the C programming language
-
-6.2.2 Evaluation of logical expressions
----------------------------------------
-
-*All* arguments of a logical expression are first evaluated and then the
-value of the logical expression is determined. For example, the logical
-expressions `(a || b)' is evaluated by first evaluating `a' _and_ `b',
-even though the value of `b' has no influence on the value of `(a ||
-b)', if `a' evaluates to true.
-
-Note, that this evaluation is different from the left-to-right,
-conditional evaluation of logical expressions (as found in most
-programming languages). For example, in these other languages, the value
-of `(1 || b)' is determined without ever evaluating `b'. This causes
-some problems with boolean tests on variables, which might not be
-defined at evaluation time. For example, the following results in an
-error, if the variable `i' is undefined:
-
- if (defined(i) && i > 0) {} // WRONG!!!
-
-This must be written instead as:
-
- if (defined(i))
- {
- if (i > 0) {}
- }
-
-However, there are several short work-arounds for this problem:
- 1. If a variable (say, `i') is only to be used as a boolean flag, then
- define (value is TRUE) and undefine (value is FALSE) `i' instead of
- assigning a value. Using this scheme, it is sufficient to simply
- write
-
- if (defined(i))
-
- in order to check whether `i' is TRUE. Use the command `kill' to
- undefine a variable, i.e. to assign it a FALSE value (*note
- kill::).
-
- 2. If a variable can have more than two values, then define it, if
- necessary, before it is used for the first time. For example, if
- the following is used within a procedure
-
- if (! defined(DEBUG)) { int DEBUG = 1;}
- ...
- if (DEBUG == 3) {...}
- if (DEBUG == 2) {...}
- ...
-
- then a user of this procedure does not need to care about the
- existence of the `DEBUG' variable - this remains hidden from the
- user. However, if `DEBUG' exists globally, then its local default
- value is overwritten by its global one.
-
-
-File: sing.info, Node: No case or switch statement, Next: Usage of commas,
Prev: Evaluation of logical expressions, Up: Major differences to the C
programming language
-
-6.2.3 No case or switch statement
----------------------------------
-
-SINGULAR does not offer a `case' (or `switch') statement. However, it
-can be imitated in the following way:
-
- while (1)
- {
- if (choice == choice_1) { ...; break;}
- ...
- if (choice == choice_n) { ...; break;}
- // default case
- ...; break;
- }
-
-
-File: sing.info, Node: Usage of commas, Next: Usage of brackets, Prev: No
case or switch statement, Up: Major differences to the C programming language
-
-6.2.4 Usage of commas
----------------------
-
-In SINGULAR, a comma separates list elements and the value of a comma
-expression is a list. Hence, commas can not be used to combine several
-expressions into a single expression. For example, instead of writing
-
- for (i=1, j=5; i<5 || j<10; i++, j++) {...} // WRONG!!!!!!
-
-one has to write
-
- for (i,j = 1,5; i<5 || j<10; i++, j++) {...}
-
-
-File: sing.info, Node: Usage of brackets, Next: Behavior of continue, Prev:
Usage of commas, Up: Major differences to the C programming language
-
-6.2.5 Usage of brackets
------------------------
-
-In SINGULAR, curly brackets (`{' `}') *must always* be used to enclose
-the statement body following such constructs like `if', `else', `for',
-or `while', even if this block consists of only a single statement.
-Similarly, in the return statement of a procedure, parentheses (`(' `)')
-*must always* be used to enclose the return value. Even if there is no
-value to return, parentheses have to be used after a return statement
-(i.e., `return();'). For example,
-
- if (i == 1) return i; // WRONG!!!!!
-
-results in an error. Instead, it must be written as
-
- if (i == 1) { return (i); }
-
-
-File: sing.info, Node: Behavior of continue, Next: Return type of
procedures, Prev: Usage of brackets, Up: Major differences to the C
programming language
-
-6.2.6 Behavior of continue
---------------------------
-
-SINGULAR's `continue' construct is only valid inside the body of a `for'
-or `while' construct. It skips the rest of the loop-body and jumps to
-the beginning of the block. Unlike the C-construct SINGULAR's `continue'
-*does not execute the increment statement*. For example,
-
- for (int i = 1 ; i<=10; i=i+1)
- {
- ...
- if (i==3) { i=8;continue; }
- // skip the rest if i is 3 and
- // continue with the next i: 8
- i;
- }
- ==> 1
- ==> 2
- ==> 8
- ==> 9
- ==> 10
-
-
-File: sing.info, Node: Return type of procedures, Prev: Behavior of
continue, Up: Major differences to the C programming language
-
-6.2.7 Return type of procedures
--------------------------------
-
-Although the SINGULAR language is a strongly typed programming language,
-the type of the return value of a procedure does not need to be
-specified. As a consequence, the return type of a procedure may vary,
-i.e., may, for example, depend on the input. However, the return value
-of such a procedure may then only be assigned to a variable of type
-`def'.
-
- proc type_return (int i)
- {
- if (i > 0) {return (i);}
- else {return (list(i));}
- }
- def t1 = type_return(1);
- def t2 = type_return(-1);
- typeof(t1); typeof(t2);
- ==> int
- ==> list
-
-Furthermore, it is mandatory to assign the return value of a procedure
-to a variable of type `def', if a procedure changes the current ring
-using the `keepring' command (*note keepring::) and returns a
-ring-dependent value (like a polynomial or module).
-
- proc def_return
- {
- ring r=0,(x,y),dp;
- poly p = x;
- keepring r;
- return (x);
- }
- def p = def_return();
- // poly p = def_return(); would be WRONG!!!
- typeof(p);
- ==> poly
-
-On the other hand, more than one value can be returned by a single
-`return' statement. For example,
-
- proc tworeturn () { return (1,2); }
- int i,j = tworeturn();
-
-
-File: sing.info, Node: Miscellaneous oddities, Next: Identifier resolution,
Prev: Major differences to the C programming language, Up: Tricks and pitfalls
-
-6.3 Miscellaneous oddities
-==========================
-
- 1. integer division
-
- If two numerical constants (i.e., two sequences of digits) are
- divided using the `/' operator, the surrounding whitespace
- determines which division to use: if there is no space between the
- constants and the `/' operator (e.g., "3/2"), both numerical
- constants are treated as of type `number' and the current ring
- division is used. If there is at least one space surrounding the
- `/' operator (e.g., "3 / 2"), both numerical constants are treated
- as of type `int' and an integer division is performed. To avoid
- confusion, use the `div' operator instead of `/' for integer
- division and an explicit type cast to `number' for ring division.
- Note, that this problem does only occur for divisions of numerical
- constants.
-
- ring r=32002,x,dp;
- 3/2; // ring division
- ==> -15994
- 3 / 2; // integer division
- ==> 1
- 3 div 2;
- ==> 1
- number(3) / number(2);
- ==> -15994
- number a=3;
- number b=2;
- a/b;
- ==> -15994
- int c=3;
- int d=2;
- c / d;
- ==> 1
-
- 2. monomials and precedence
-
- The computation of a monomial has precedence over all operators:
-
- ring r=0,(x,y),dp;
- 2xy^2 == (2*x*y)^2;
- ==> 1
- 2xy^2 == 2x*y^2;
- ==> 0
- 2x*y^2 == 2*x * (y^2);
- ==> 1
-
- 3. meaning of `mult'
-
- For an arbitrary ideal or module `i', `mult(i)' returns the
- multiplicity of the ideal generated by the leading monomials of the
- given generators of `i', hence depends on the monomial ordering!
-
- A standard mistake is to interpret `degree(i)' or `mult(i)' for an
- inhomogeneous ideal `i' as the degree of the homogenization or as
- something like the 'degree of the affine part'. For the ordering
- `dp' (degree reverse lexicographical) the converse is true: if `i'
- is given by a standard basis, `mult(i)' is the degree of the
- homogeneous ideal obtained by homogenization of `i' and then
- putting the homogenizing variable to 0, hence it is the degree of
- the part at infinity (this can also be checked by looking at the
- initial ideal).
-
- 4. size of ideals
-
- `size' counts the non-zero entries of an ideal or module. Use
- `ncols' to determine the actual number of entries in the ideal or
- module.
-
- 5. computations in `qring'
-
- In order to speed up computations in quotient rings, SINGULAR
- usually does not reduce polynomials w.r.t. the quotient ideal;
- rather the given representative is used as long as possible during
- computations. If it is necessary, reduction is done during standard
- base computations. To reduce a polynomial `f' by hand w.r.t. the
- current quotient ideal use the command `reduce(f,std(0))' (*note
- reduce::).
-
- 6. substring selection
-
- To extract substrings from a `string', square brackets are used,
- enclosing either two comma-separated `int's or an `intvec'.
- Although two comma-separated `int's represent an `intvec', they
- mean different things in substring access. Square brackets
- enclosing two `int's (e.g. `s[2,6]') return a substring where the
- first integer denotes the starting position and the second integer
- denotes the length of the substring. The result is returned as a
- `string'. Square brackets enclosing an `intvec' (e.g.
- `s[intvec(2,6)]') return the characters of the string at the
- position given by the values of the `intvec'. The result is
- returned as an expression list of strings.
-
- string s = "one-word";
- s[2,6]; // a substring starting at the second char
- ==> ne-wor
- size(_);
- ==> 6
- intvec v = 2,6;
- s[v]; // the second and the sixth char
- ==> n o
- string st = s[v]; // stick together by an assignment
- st;
- ==> no
- size(_);
- ==> 2
- v = 2,6,8;
- s[v];
- ==> n o d
-
-
-File: sing.info, Node: Identifier resolution, Prev: Miscellaneous oddities,
Up: Tricks and pitfalls
-
-6.4 Identifier resolution
-=========================
-
-In SINGULAR, an identifier (i.e., a "word") is resolved in the following
-way and order: It is checked for
- 1. a reserved name (like `ring', `std', ...),
-
- 2. a local variable (w.r.t. a procedure),
-
- 3. a local ring variable (w.r.t. the current basering locally set in a
- procedure),
-
- 4. a global variable,
-
- 5. a global ring variable (w.r.t. the current basering)
-
- 6. a monomial consisting of local ring variables written without
- operators,
-
- 7. a monomial consisting of global ring variables written without
- operators.
-
-Consequently, it is allowed to have general variables with the same name
-as ring variables. However, the above identifier resolution order must
-be kept in mind. Otherwise, surprising results may come up.
-
- ring r=0,(x,y),dp;
- int x;
- x*y; // resolved product int*poly, i.e., 0*y
- ==> 0
- xy; // "xy" is one identifier and resolved to monomial xy
- ==> xy
-
-For these reasons, we strongly recommend not to use variables which have
-the same name(s) as ring variables.
-
-Moreover, we strongly recommend not to use ring variables whose name is
-fully contained in (i.e., is a substring of) another name of a ring
-variable. Otherwise, effects like the following might occur:
-
- ring r=0,(x, x1),dp; // name x is substring of name x1 !!!!!!!!!
- x;x1; // resolved poly x
- ==> x
- ==> x1
- short=0; 2x1; // resolved to monomial 2*x^1 !!!!!!
- ==> 2*x
- 2*x1; // resolved to product 2 times x1
- ==> 2*x1
-
-
-File: sing.info, Node: Examples, Next: Polynomial data, Prev: Tricks and
pitfalls, Up: Top
-
-Appendix A Examples
-*******************
-
-The following topics are treated:
-
-* Menu:
-
-* Milnor and Tjurina::
-* Procedures and LIB::
-* Critical points::
-* Saturation::
-* Long coefficients::
-* Parameters::
-* T1 and T2::
-* Deformations::
-* Finite fields::
-* Elimination::
-* Free resolution::
-* Computation of Ext::
-* Polar curves::
-* Depth::
-* Formatting output::
-* Cyclic roots::
-* G_a -Invariants::
-* Invariants of a finite group::
-* Factorization::
-* Puiseux pairs::
-* Primary decomposition::
-* Normalization::
-* Branches of an Isolated Space Curve Singularity::
-* Kernel of module homomorphisms::
-* Algebraic dependence::
-* Classification::
-* Fast lexicographical GB::
-* Parallelization with MPtcp links::
-
-
-File: sing.info, Node: Milnor and Tjurina, Next: Procedures and LIB, Prev:
Examples, Up: Examples
-
-A.1 Milnor and Tjurina
-======================
-
-The Milnor number, resp. the Tjurina number, of a power series f in
$K[[x_1,\ldots,x_n]]$
-K[[x1,...,xn]] is
-milnor(f) = dim_K(K[[x1,...,xn]]/jacob(f))
-resp.
-tjurina(f) = dim_K(K[[x1,...,xn]]/((f)+jacob(f)))
-where $$
-\hbox{milnor}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/\hbox{jacob}(f)),
-$$
-respectively
-$$
-\hbox{tjurina}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/((f)+\hbox{jacob}(f)))
-$$
-where
-`jacob(f)' is the ideal generated by the partials of `f'. `tjurina(f)'
-is finite, if and only if `f' has an isolated singularity. The same
-holds for `milnor(f)' if K has characteristic 0. SINGULAR displays -1
-if the dimension is infinite.
-
-SINGULAR cannot compute with infinite power series. But it can work in
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$,
-Loc_(x)K[x1,...,xn], the localization of $K[x_1,\ldots,x_n]$
-K[x1,...,xn] at the maximal ideal $(x_1,\ldots,x_n)$.
-(x1,...,xn). To do this one has to define an s-ordering like ds, Ds,
-ls, ws, Ws or an appropriate matrix ordering (look at the manual to get
-information about the possible monomial orderings in SINGULAR, or type
-`help Monomial orderings;' to get a menu of possible orderings. For
-further help type, e.g., `help local orderings;'). See *note Monomial
-orderings::.
-
-We shall show in the example below how to realize the following:
- * set option `prot' to have a short protocol during standard basis
- computation
-
- * define the ring `r1' with char 32003, variables `x,y,z', monomial
- ordering `ds', series ring (i.e., K[x,y,z] localized at (x,y,z))
-
- * list the information about `r1' by typing its name
-
- * define the integers `a,b,c,t'
-
- * define a polynomial `f' (depending on `a,b,c,t') and display it
-
- * define the jacobian ideal `i' of `f'
-
- * compute a standard basis of `i'
-
- * compute the Milnor number (=250) with `vdim' and create and display
- a string in order to comment the result (text between quotes "
- "; is a 'string')
-
- * compute a standard basis of `i+(f)'
-
- * compute the Tjurina number (=195) with `vdim'
-
- * then compute the Milnor number (=248) and the Tjurina number (=195)
- for `t'=1
-
- * reset the option to `noprot'
-
- option(prot);
- ring r1 = 32003,(x,y,z),ds;
- r1;
- ==> // characteristic : 32003
- ==> // number of vars : 3
- ==> // block 1 : ordering ds
- ==> // : names x y z
- ==> // block 2 : ordering C
- int a,b,c,t=11,5,3,0;
- poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+
- x^(c-2)*y^c*(y^2+t*x)^2;
- f;
- ==> y5+x5y2+x2y2z3+xy7+z9+x11
- ideal i=jacob(f);
- i;
- ==> i[1]=5x4y2+2xy2z3+y7+11x10
- ==> i[2]=5y4+2x5y+2x2yz3+7xy6
- ==> i[3]=3x2y2z2+9z8
- ideal j=std(i);
- ==>
[1023:2]7(2)s8s10s11s12s(3)s13(4)s(5)s14(6)s(7)15--.s(6)-16.-.s(5)17.s(7)\
- s--s18(6).--19-..sH(24)20(3)...21....22....23.--24-
- ==> product criterion:10 chain criterion:69
- "The Milnor number of f(11,5,3) for t=0 is", vdim(j);
- ==> The Milnor number of f(11,5,3) for t=0 is 250
- j=i+f; // overwrite j
- j=std(j);
- ==>
[1023:2]7(3)s8(2)s10s11(3)ss12(4)s(5)s13(6)s(8)s14(9).s(10).15--sH(23)(8)\
-
...16......17.......sH(21)(9)sH(20)16(10).17...........18.......19..----.\
- .sH(19)
- ==> product criterion:10 chain criterion:53
- vdim(j); // compute the Tjurina number for t=0
- ==> 195
- t=1;
- f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
- +x^(c-2)*y^c*(y^2+t*x)^2;
- ideal i1=jacob(f);
- ideal j1=std(i1);
- ==>
[1023:2]7(2)s8s10s11s12s13(3)ss(4)s14(5)s(6)s15(7).....s(8)16.s...s(9)..1\
-
7............s18(10).....s(11)..-.19.......sH(24)(10).....20...........21\
-
..........22.............................23..............................\
- .24.----------.25.26
- ==> product criterion:11 chain criterion:83
- "The Milnor number of f(11,5,3) for t=1:",vdim(j1);
- ==> The Milnor number of f(11,5,3) for t=1: 248
- vdim(std(j1+f)); // compute the Tjurina number for t=1
- ==>
[1023:2]7(16)s8(15)s10s11ss(16)-12.s-s13s(17)s(18)s(19)-s(18).-14-s(17)-s\
-
(16)ss(17)s15(18)..-s...--.16....-.......s(16).sH(23)s(18)...17..........\
-
18.........sH(20)17(17)....................18..........19..---....-.-....\
-
.....20.-----...s17(9).........18..............19..-.......20.-......21..\
- .......sH(19)16(5).....18......19.-----
- ==> product criterion:15 chain criterion:174
- ==> 195
- option(noprot);
-
-
-File: sing.info, Node: Procedures and LIB, Next: Critical points, Prev:
Milnor and Tjurina, Up: Examples
-
-A.2 Procedures and LIB
-======================
-
-The computation of the Milnor number (for an arbitrary isolated complete
-intersection singularity ICIS) and the Tjurina number (for an arbitrary
-isolated singularity) can be done by using procedures from the library
-`sing.lib'. For a hypersurface singularity it is very easy to write a
-procedure which computes the Milnor number and the Tjurina number.
-
-We shall demonstrate:
- * load the library `sing.lib'
-
- * define a local ring in 2 variables and characteristic 0
-
- * define a plane curve singularity
-
- * compute Milnor number and Tjurina number by using the procedures
- `milnor' and `tjurina'
-
- * write your own procedures: (A procedure has a list of input
- parameters and of return values, both lists may be empty.)
-
- - the procedure `mil' which must be called with one
- parameter, a polynomial. The name g is local to the
- procedure and is killed automatically. `mil' returns the
- Milnor number (and displays a comment).
-
- - the procedure `tjur' where the parameters are not specified.
- They are referred to by `#[1]' for the 1st, `#[2]' for the
- 2nd parameter, etc. `tjur' returns the Tjurina number (and
- displays a comment).
-
- - the procedure `milrina' which returns a list consisting of two
- integers, the Milnor and the Tjurina number.
-
- LIB "sing.lib";
- // you should get the information that sing.lib has been loaded
- // together with some other libraries which are needed by sing.lib
- ring r = 0,(x,y),ds;
- poly f = x7+y7+(x-y)^2*x2y2;
- milnor(f);
- ==> 28
- tjurina(f);
- ==> 24
-
- proc mil (poly g)
- {
- "Milnor number:";
- return(vdim(std(jacob(g))));
- }
- mil(f);
- ==> Milnor number:
- ==> 28
-
- proc tjur
- {
- "Tjurina number:";
- return(vdim(std(jacob(#[1])+#[1])));
- }
- tjur(f);
- ==> Tjurina number:
- ==> 24
-
- proc milrina (poly f)
- {
- ideal j=jacob(f);
- list L=vdim(std(j)),vdim(std(j+f));
- return(L);
- }
- milrina(f); // a list containing Milnor and Tjurina number
- ==> [1]:
- ==> 28
- ==> [2]:
- ==> 24
- milrina(f)[2]; // the second element of the list
- ==> 24
-
-
-File: sing.info, Node: Critical points, Next: Saturation, Prev: Procedures
and LIB, Up: Examples
-
-A.3 Critical points
-===================
-
-The same computation which computes the Milnor, resp. the Tjurina,
-number, but with ordering `dp' instead of `ds' (i.e., in $K[x_1,\ldots,x_n]$
-K[x1,...,xn] instead of $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$
-Loc_(x)K[x1,...,xn]) gives:
- * the number of critical points of `f' in the affine plane (counted
- with multiplicities)
-
- * the number of singular points of `f' on the affine plane curve
- `f'=0 (counted with multiplicities).
-
-We start with the ring `r1' from section *note Milnor and Tjurina:: and
-its elements.
-
-The following will be realized below:
- * reset the protocol option and activate the timer
-
- * define the ring `r2' with char 32003, variables `x,y,z' and
- monomial ordering `dp' (= degrevlex) (i.e., the polynomial ring =
- K[x,y,z]).
-
- * Note that polynomials, ideals, matrices (of polys), vectors,
- modules belong to a ring, hence we have to define `f' and
- `jacob(f)' again in `r2'. Since these objects are local to a
- ring, we may use the same names. Instead of defining `f' again
- we map it from ring `r1' to `r2' by using the `imap' command
- (`imap' is a convenient way to map variables from some ring
- identically to variables with the same name in the basering, even
- if the ground field is different. Compare with `fetch' which
- works for almost identical rings, e.g., if the rings differ only
- by the ordering or by the names of the variables and which may be
- used to rename variables). Integers and strings, however, do not
- belong to any ring. Once defined they are globally known.
-
- * The result of the computation here (together with the previous one
- in *note Milnor and Tjurina::) shows that (for `t'=0)
$\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/\hbox{jacob}(f))$
- dim_K(Loc_(x,y,z)K[x,y,z]/jacob(f)) = 250 (previously computed)
- while $\hbox{dim}_K(K[x,y,z]/\hbox{jacob}(f))$
- dim_K(K[x,y,z]/jacob(f)) = 536. Hence `f' has 286 critical
- points, counted with multiplicity, outside the origin.
- Moreover, since
$\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/(\hbox{jacob}(f)+(f)))$
- dim_K(Loc_(x,y,z)K[x,y,z]/(jacob(f)+(f))) = 195 =
$\hbox{dim}_K(K[x,y,z]/(\hbox{jacob}(f)+(f)))$,
- dim_K(K[x,y,z]/(jacob(f)+(f))), the affine surface `f'=0 is smooth
- outside the origin.
-
- ring r1 = 32003,(x,y,z),ds;
- int a,b,c,t=11,5,3,0;
- poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+
- x^(c-2)*y^c*(y^2+t*x)^2;
- option(noprot);
- timer=1;
- ring r2 = 32003,(x,y,z),dp;
- poly f=imap(r1,f);
- ideal j=jacob(f);
- vdim(std(j));
- ==> 536
- vdim(std(j+f));
- ==> 195
- timer=0; // reset timer
-
-
-File: sing.info, Node: Saturation, Next: Long coefficients, Prev: Critical
points, Up: Examples
-
-A.4 Saturation
-==============
-
-Since in the example above, the ideal j+(f) $j+(f)$
- has the same `vdim' in the polynomial ring and in the localization at 0
-(each 195),
-
-f=0 $f=0$
- is smooth outside 0. Hence j+(f) $j+(f)$
- contains some power of the maximal ideal m $m$
-. We shall check this in a different manner: For any two ideals i, j $i, j$
- in the basering R $R$
- let $$
-\hbox{sat}(i,j)=\{x\in R\;|\; \exists\;n\hbox{ s.t. }
-x\cdot(j^n)\subseteq i\}
-= \bigcup_{n=1}^\infty i:j^n$$
-
-sat(i,j) = {x in R | there is an n s.t. x*(j^n) contained in i}
-= union_(n=1...) of i:j^n,
-denote the saturation of i $i$
- with respect to j $j$
-. This defines, geometrically, the closure of the complement of V( j $j$
-) in V( i $i$
-) (V( i $i$
-) denotes the variety defined by i $i$
-). In our case, sat(j+(f),m) $sat(j+(f),m)$
- must be the whole ring, hence generated by 1.
-
-The saturation is computed by the procedure `sat' in `elim.lib' by
-computing iterated ideal quotients with the maximal ideal. `sat'
-returns a list of two elements: the saturated ideal and the number of
-iterations. (Note that `maxideal(n)' denotes the n-th power of the
-maximal ideal).
-
- LIB "elim.lib"; // loading library elim.lib
- // you should get the information that elim.lib has been loaded
- // together with some other libraries which are needed by it
- option(noprot); // no protocol
- ring r2 = 32003,(x,y,z),dp;
- poly f = x^11+y^5+z^(3*3)+x^(3+2)*y^(3-1)+x^(3-1)*y^(3-1)*z3+
- x^(3-2)*y^3*(y^2)^2;
- ideal j=jacob(f);
- sat(j+f,maxideal(1));
- ==> [1]:
- ==> _[1]=1
- ==> [2]:
- ==> 17
- // list the variables defined so far:
- listvar();
- ==> // r2 [0] *ring
- ==> // j [0] ideal, 3 generator(s)
- ==> // f [0] poly
- ==> // LIB [0] string standard.lib,elim.li..., 83
char(s)
-
-
-File: sing.info, Node: Long coefficients, Next: Parameters, Prev:
Saturation, Up: Examples
-
-A.5 Long coefficients
-=====================
-
-The following innocent example produces in its standard basis extremely
-long coefficients in char 0 for the lexicographical ordering. But a
-very small deformation does not (the undeformed example is degenerate
-with respect to the Newton boundary). This example demonstrates that it
-might be wise, for complicated examples, to do the calculation first in
-positive char (e.g., 32003). It has been shown, that in complicated
-examples, more than 95 percent of the time needed for a standard basis
-computation is used in the computation of the coefficients (in char 0).
-The representation of long integers with real is demonstrated.
-
- timer = 1; // activate the timer
- option(prot);
- ring R0 = 0,(x,y),lp;
- poly f = x5+y11+xy9+x3y9;
- ideal i = jacob(f);
- ideal i1 = i,i[1]*i[2]; // undeformed ideal
- ideal i2 = i,i[1]*i[2]+1/1000000*x5y8; // deformation of i1
- i1; i2;
- ==> i1[1]=5x4+3x2y9+y9
- ==> i1[2]=9x3y8+9xy8+11y10
- ==> i1[3]=45x7y8+27x5y17+45x5y8+55x4y10+36x3y17+33x2y19+9xy17+11y19
- ==> i2[1]=5x4+3x2y9+y9
- ==> i2[2]=9x3y8+9xy8+11y10
- ==>
i2[3]=45x7y8+27x5y17+45000001/1000000x5y8+55x4y10+36x3y17+33x2y19+9xy17+1\
- 1y19
- ideal j = std(i1);
- ==>
[65535:1]11(2)ss19s20s21s22(3)-23-s27s28s29s30s31s32s33s34s35s36s37s38s39\
- s40s70-
- ==> product criterion:1 chain criterion:30
- j;
- ==>
j[1]=264627y39+26244y35-1323135y30-131220y26+1715175y21+164025y17+1830125\
- y16
- ==>
j[2]=12103947791971846719838321886393392913750065060875xy8-28639152114168\
-
3198701331939250003266767738632875y38-31954402206909026926764622877573565\
-
78554430672591y37+57436621420822663849721381265738895282846320y36+1657764\
-
214948799497573918210031067353932439400y35+213018481589308191195677223898\
-
98682697001205500y34+1822194158663066565585991976961565719648069806148y33\
-
-4701709279892816135156972313196394005220175y32-1351872269688192267600786\
-
97600850686824231975y31-3873063305929810816961516976025038053001141375y30\
-
+1325886675843874047990382005421144061861290080000y29+1597720195476063141\
-
9467945895542406089526966887310y28-26270181336309092660633348002625330426\
-
7126525y27-7586082690893335269027136248944859544727953125y26-867853074106\
-
49464602285843351672148965395945625y25-5545808143273594102173252331151835\
-
700278863924745y24+19075563013460437364679153779038394895638325y23+548562\
-
322715501761058348996776922561074021125y22+157465452677648386073957464715\
-
68100780933983125y21-1414279129721176222978654235817359505555191156250y20\
-
-20711190069445893615213399650035715378169943423125y19+272942733337472665\
-
573418092977905322984009750y18+789065115845334505801847294677413365720955\
-
3750y17+63554897038491686787729656061044724651089803125y16-22099251729923\
-
906699732244761028266074350255961625y14+147937139679655904353579489722585\
- 91339027857296625y10
- ==> j[3]=5x4+3x2y9+y9
- // Compute average coefficient length (=51) by
- // - converting j[2] to a string in order to compute the number
- // of characters
- // - divide this by the number of monomials:
- size(string(j[2]))/size(j[2]);
- ==> 51
- vdim(j);
- ==> 63
- // For a better representation normalize the long coefficients
- // of the polynomial j[2] and map it to real:
- poly p=(1/12103947791971846719838321886393392913750065060875)*j[2];
- ring R1=real,(x,y),lp;
- short=0; // force the long output format
- poly p=imap(R0,p);
- p;
- ==>
x*y^8-2.366e-02*y^38-2.640e-01*y^37+4.745e-06*y^36+1.370e-04*y^35+1.760e-\
-
03*y^34+1.505e-01*y^33+3.884e-07*y^32-1.117e-05*y^31-3.200e-04*y^30+1.095\
-
e-01*y^29+1.320e+00*y^28-2.170e-05*y^27-6.267e-04*y^26-7.170e-03*y^25-4.5\
-
82e-01*y^24+1.576e-06*y^23+4.532e-05*y^22+1.301e-03*y^21-1.168e-01*y^20-1\
-
.711e+00*y^19+2.255e-05*y^18+6.519e-04*y^17+5.251e-03*y^16-1.826e+00*y^14\
- +1.222e+00*y^10
- // Compute a standard basis for the deformed ideal:
- setring R0;
- j = std(i2);
- ==>
[65535:1]11(2)ss19s20s21s22(3)-s23(2)s27.28.s29(3)s30.s31ss32sss33sss34ss\
- 35--38-
- ==> product criterion:11 chain criterion:21
- j;
- ==> j[1]=y16
- ==>
j[2]=65610xy8+17393508y27+7223337y23+545292y19+6442040y18-119790y14+80190\
- y10
- ==> j[3]=5x4+3x2y9+y9
- vdim(j);
- ==> 40
-
-
-File: sing.info, Node: Parameters, Next: T1 and T2, Prev: Long
coefficients, Up: Examples
-
-A.6 Parameters
-==============
-
-Let us deform the above ideal now by introducing a parameter t and
-compute over the ground field Q(t). We compute the dimension at the
-generic point, i.e., $dim_{Q(t)}Q(t)[x,y]/j$.
-dim_Q(t) Q(t)[x,y]/j. (This gives the same result as for the deformed
-ideal above. Hence, the above small deformation was "generic".)
-
-For almost all $a \in Q$
-a in Q this is the same as $dim_Q Q[x,y]/j_0$,
-dim_Q Q[x,y]/j0, where $j_0=j|_{t=a}$.
-j_0=j_t=a
-
- ring Rt = (0,t),(x,y),lp;
- Rt;
- ==> // characteristic : 0
- ==> // 1 parameter : t
- ==> // minpoly : 0
- ==> // number of vars : 2
- ==> // block 1 : ordering lp
- ==> // : names x y
- ==> // block 2 : ordering C
- poly f = x5+y11+xy9+x3y9;
- ideal i = jacob(f);
- ideal j = i,i[1]*i[2]+t*x5y8; // deformed ideal, parameter t
- vdim(std(j));
- ==> 40
- ring R=0,(x,y),lp;
- ideal i=imap(Rt,i);
- int a=random(1,30000);
- ideal j=i,i[1]*i[2]+a*x5y8; // deformed ideal, fixed integer a
- vdim(std(j));
- ==> 40
-
-
-File: sing.info, Node: T1 and T2, Next: Deformations, Prev: Parameters,
Up: Examples
-
-A.7 T1 and T2
-=============
-
-T^1 $T^1$
-, resp. T^2 $T^2$
-, of an ideal j $j$
- usually denote the modules of infinitesimal deformations, resp. of
-obstructions. In SINGULAR there are procedures `T_1' and `T_2' in
-`sing.lib' such that `T_1(j)' and `T_2(j)' compute a standard basis of a
-presentation of these modules. If T_1 and T_2 are finite dimensional
-K-vector spaces (e.g., for isolated singularities), a basis can be
-computed by applying `kbase(T_1(j));', resp. `kbase(T_2(j));', the
-dimensions by applying `vdim'. For a complete intersection j the
-procedure `Tjurina' also computes T_1, but faster (T_2=0 in this case).
-For a non complete intersection, it is faster to use the procedure
-`T_12' instead of `T_1' and `T_2'. Type `help T_1;' (or `help T_2;' or
-`help T_12;') to obtain more detailed information about these
-procedures.
-
-We give three examples, the first being a hypersurface, the second a
-complete intersection, the third no complete intersection:
- * load `sing.lib'
-
- * check whether the ideal j is a complete intersection. It is, if
- number of variables = dimension + minimal number of generators
-
- * compute the Tjurina number
-
- * compute a vector space basis (kbase) of T_1
-
- * compute the Hilbert function of T_1
-
- * create a polynomial encoding the Hilbert series
-
- * compute the dimension of T_2
-
- LIB "sing.lib";
- ring R=32003,(x,y,z),ds;
- // ---------------------------------------
- // hypersurface case (from series T[p,q,r]):
- int p,q,r = 3,3,4;
- poly f = x^p+y^q+z^r+xyz;
- tjurina(f);
- ==> 8
- // Tjurina number = 8
- kbase(Tjurina(f));
- ==> // Tjurina number = 8
- ==> _[1]=z3
- ==> _[2]=z2
- ==> _[3]=yz
- ==> _[4]=xz
- ==> _[5]=z
- ==> _[6]=y
- ==> _[7]=x
- ==> _[8]=1
- // ---------------------------------------
- // complete intersection case (from series P[k,l]):
- int k,l =3,2;
- ideal j=xy,x^k+y^l+z2;
- dim(std(j)); // Krull dimension
- ==> 1
- size(minbase(j)); // minimal number of generators
- ==> 2
- tjurina(j); // Tjurina number
- ==> 6
- module T=Tjurina(j);
- ==> // Tjurina number = 6
- kbase(T); // a sparse output of the k-basis of T_1
- ==> _[1]=z*gen(1)
- ==> _[2]=gen(1)
- ==> _[3]=y*gen(2)
- ==> _[4]=x2*gen(2)
- ==> _[5]=x*gen(2)
- ==> _[6]=gen(2)
- print(kbase(T)); // columns of matrix are a k-basis of T_1
- ==> z,1,0,0, 0,0,
- ==> 0,0,y,x2,x,1
- // ---------------------------------------
- // general case (cone over rational normal curve of degree 4):
- ring r1=0,(x,y,z,u,v),ds;
- matrix m[2][4]=x,y,z,u,y,z,u,v;
- ideal i=minor(m,2); // 2x2 minors of matrix m
- module M=T_1(i); // a presentation matrix of T_1
- ==> // dim T_1 = 4
- vdim(M); // Tjurina number
- ==> 4
- hilb(M); // display of both Hilbert series
- ==> // 4 t^0
- ==> // -20 t^1
- ==> // 40 t^2
- ==> // -40 t^3
- ==> // 20 t^4
- ==> // -4 t^5
- ==>
- ==> // 4 t^0
- ==> // dimension (local) = 0
- ==> // multiplicity = 4
- intvec v1=hilb(M,1); // first Hilbert series as intvec
- intvec v2=hilb(M,2); // second Hilbert series as intvec
- v1;
- ==> 4,-20,40,-40,20,-4,0
- v2;
- ==> 4,0
- v1[3]; // 3rd coefficient of the 1st Hilbert series
- ==> 40
- module N=T_2(i);
- ==> // dim T_2 = 3
- // In some cases it might be useful to have a polynomial in some ring
- // encoding the Hilbert series. This polynomial can then be
- // differentiated, evaluated etc. It can be done as follows:
- ring H = 0,t,ls;
- poly h1;
- int ii;
- for (ii=1; ii<=size(v1); ii=ii+1)
- {
- h1=h1+v1[ii]*t^(ii-1);
- }
- h1; // 1st Hilbert series
- ==> 4-20t+40t2-40t3+20t4-4t5
- diff(h1,t); // differentiate h1
- ==> -20+80t-120t2+80t3-20t4
- subst(h1,t,1); // substitute t by 1
- ==> 0
-
- // The procedures T_1, T_2, T_12 may be called with two arguments and then
- // they return a list with more information (type help T_1; etc.)
- // e.g., T_12(i,<any>); returns a list with 9 nonempty objects where
- // _[1] = std basis of T_1-module, _[2] = std basis of T_2-module,
- // _[3]= vdim of T_1, _[4]= vdim of T_2
- setring r1; // make r1 again the basering
- list L = T_12(i,1);
- ==> // dim T_1 = 4
- ==> // dim T_2 = 3
- kbase(L[1]); // kbase of T_1
- ==> _[1]=1*gen(2)
- ==> _[2]=1*gen(3)
- ==> _[3]=1*gen(6)
- ==> _[4]=1*gen(7)
- kbase(L[2]); // kbase of T_2
- ==> _[1]=1*gen(6)
- ==> _[2]=1*gen(8)
- ==> _[3]=1*gen(9)
- L[3]; // vdim of T_1
- ==> 4
- L[4]; // vdim of T_2
- ==> 3
-
-
-File: sing.info, Node: Deformations, Next: Finite fields, Prev: T1 and T2,
Up: Examples
-
-A.8 Deformations
-================
-
- * The libraries `sing.lib', resp. `deform.lib', contain procedures to
- compute total and base space of the miniversal (= semiuniversal)
- deformation of an isolated complete intersection singularity, resp.
- arbitrary isolated singularity.
-
- * The procedure `deform' in `sing.lib' returns a matrix whose columns
- `h_1,..., h_r' $h_1,\ldots,h_r$
- represent all 1st order deformations. More precisely, if I in R is
- the ideal generated by `f_1,...,f_s', then any infinitesimal
- deformation of R/I over K[e]/(e^2) is given by `f+eg', where
- f=(f_1,...,f_s), g a K-linear combination of the h_i. $I \subset R$ is
the ideal generated by $f_1,...,f_s$, then any infinitesimal
- deformation of $R/I$ over $K[\varepsilon]/(\varepsilon^2)$ is given
- by $f+\varepsilon g$,
- where $f=(f_1,...,f_s)$, $g$ a $K$-linear combination of the $h_i$.
-
- * The procedure `versal' in `deform.lib' computes a formal miniversal
- deformation up to a certain order which can be prescribed by the
- user. For a complete intersection the 1st order part is already
- miniversal.
-
- * The procedure `versal' extends the basering to a new ring with
- additional deformation parameters which contains the equations for
- the miniversal base space and the miniversal total space.
-
- * There are default names for the objects created, but the user may
- also choose his own names.
-
- * If the user sets `printlevel=2;' before running `versal', some
- intermediate results are shown. This is useful since `versal' is
- already complicated and might run for some time on more complicated
- examples. (type `help versal;')
-
-We compute for the same examples as in the preceding section the
-miniversal deformations:
-
- LIB "deform.lib";
- ring R=32003,(x,y,z),ds;
- //----------------------------------------------------
- // hypersurface case (from series T[p,q,r]):
- int p,q,r = 3,3,4;
- poly f = x^p+y^q+z^r+xyz;
- print(deform(f));
- ==> z3,z2,yz,xz,z,y,x,1
- // the miniversal deformation of f=0 is the projection from the
- // miniversal total space to the miniversal base space:
- // { (A,B,C,D,E,F,G,H,x,y,z) | x3+y3+xyz+z4+A+Bx+Cxz+Dy+Eyz+Fz+Gz2+Hz3
=0 }
- // --> { (A,B,C,D,E,F,G,H) }
- //----------------------------------------------------
- // complete intersection case (from series P[k,l]):
- int k,l =3,2;
- ideal j=xy,x^k+y^l+z2;
- print(deform(j));
- ==> 0,0, 0,0,z,1,
- ==> y,x2,x,1,0,0
- versal(j); // using default names
- ==> // smooth base space
- ==> // ready: T_1 and T_2
- ==>
- ==> // Result belongs to ring Px.
- ==> // Equations of total space of miniversal deformation are
- ==> // given by Fs, equations of miniversal base space by Js.
- ==> // Make Px the basering and list objects defined in Px by typing:
- ==> setring Px; show(Px);
- ==> listvar(matrix);
- ==> // NOTE: rings Qx, Px, So are alive!
- ==> // (use 'kill_rings("");' to remove)
- setring Px;
- show(Px); // show is a procedure from inout.lib
- ==> // ring: (32003),(A,B,C,D,E,F,x,y,z),(ds(6),ds(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // Rs [0] matrix 2 x 1
- ==> // Fs [0] matrix 1 x 2
- ==> // Js [0] matrix 1 x 0
- listvar(matrix);
- ==> // Rs [0] matrix 2 x 1
- ==> // Fs [0] matrix 1 x 2
- ==> // Js [0] matrix 1 x 0
- // ___ Equations of miniversal base space ___:
- Js;
- ==>
- // ___ Equations of miniversal total space ___:
- Fs;
- ==> Fs[1,1]=xy+Ez+F
- ==> Fs[1,2]=y2+z2+x3+Ay+Bx2+Cx+D
- // the miniversal deformation of V(j) is the projection from the
- // miniversal total space to the miniversal base space:
- // { (A,B,C,D,E,F,x,y,z) | xy+F+Ez=0, y2+z2+x3+D+Cx+Bx2+Ay=0 }
- // --> { (A,B,C,D,E,F) }
- //----------------------------------------------------
- // general case (cone over rational normal curve of degree 4):
- ring r1=0,(x,y,z,u,v),ds;
- matrix m[2][4]=x,y,z,u,y,z,u,v;
- ideal i=minor(m,2); // 2x2 minors of matrix m
- int time=timer;
- // Def_r is the name of the miniversal base space with
- // parameters A(1),...,A(4)
- versal(i,0,"Def_r","A(");
- ==> // ready: T_1 and T_2
- ==>
- ==> // Result belongs to ring Def_rPx.
- ==> // Equations of total space of miniversal deformation are
- ==> // given by Fs, equations of miniversal base space by Js.
- ==> // Make Def_rPx the basering and list objects defined in Def_rPx by
typin\
- g:
- ==> setring Def_rPx; show(Def_rPx);
- ==> listvar(matrix);
- ==> // NOTE: rings Def_rQx, Def_rPx, Def_rSo are alive!
- ==> // (use 'kill_rings("Def_r");' to remove)
- "// used time:",timer-time,"sec"; // time of last command
- ==> // used time: 1 sec
- // the miniversal deformation of V(i) is the projection from the
- // miniversal total space to the miniversal base space:
- // { (A(1..4),x,y,z,u,v) |
- // -y^2+x*z+A(2)*x-A(3)*y=0, -y*z+x*u-A(1)*x-A(3)*z=0,
- // -y*u+x*v-A(3)*u-A(4)*z=0, -z^2+y*u-A(1)*y-A(2)*z=0,
- // -z*u+y*v-A(2)*u-A(4)*u=0, -u^2+z*v+A(1)*u-A(4)*v=0 }
- // --> { A(1..4) |
- // -A(1)*A(4) = A(3)*A(4) = -A(2)*A(4)-A(4)^2 = 0 }
- //----------------------------------------------------
-
-
-File: sing.info, Node: Finite fields, Next: Elimination, Prev:
Deformations, Up: Examples
-
-A.9 Finite fields
-=================
-
-We define a variety in n $n$
--space of codimension 2 defined by polynomials of degree d $d$
- with generic coefficients over the prime field Z/p $Z/p$
- and look for zeros on the torus. First over the prime field and then in
-the finite extension field with $p^k$
-p^k elements. In general there will be many more solutions in the
-second case. (Since the SINGULAR language is interpreted, the
-evaluation of many `for'-loops is not very fast):
-
- int p=3; int n=3; int d=5; int k=2;
- ring rp = p,(x(1..n)),dp;
- int s = size(maxideal(d));
- s;
- ==> 21
- // create a dense homogeneous ideal m, all generators of degree d, with
- // generic (random) coefficients:
- ideal m = maxideal(d)*random(p,s,n-2);
- m;
- ==>
m[1]=x(1)^3*x(2)^2-x(1)*x(2)^4+x(1)^4*x(3)-x(1)^3*x(2)*x(3)+x(1)*x(2)^3*x\
- (3)+x(2)^4*x(3)+x(2)^3*x(3)^2+x(1)*x(2)*x(3)^3+x(1)*x(3)^4-x(3)^5
- // look for zeros on the torus by checking all points (with no
component 0)
- // of the affine n-space over the field with p elements :
- ideal mt;
- int i(1..n); // initialize integers i(1),...,i(n)
- int l;
- s=0;
- for (i(1)=1;i(1)<p;i(1)=i(1)+1)
- {
- for (i(2)=1;i(2)<p;i(2)=i(2)+1)
- {
- for (i(3)=1;i(3)<p;i(3)=i(3)+1)
- {
- mt=m;
- for (l=1;l<=n;l=l+1)
- {
- mt=subst(mt,x(l),i(l));
- }
- if (size(mt)==0)
- {
- "solution:",i(1..n);
- s=s+1;
- }
- }
- }
- }
- ==> solution: 1 1 2
- ==> solution: 1 2 1
- ==> solution: 1 2 2
- ==> solution: 2 1 1
- ==> solution: 2 1 2
- ==> solution: 2 2 1
- "//",s,"solutions over GF("+string(p)+")";
- ==> // 6 solutions over GF(3)
- // Now go to the field with p^3 elements:
- // As long as there is no map from Z/p to the field with p^3 elements
- // implemented, use the following trick: convert the ideal to be mapped
- // to the new ring to a string and then execute this string in the
- // new ring
- string ms="ideal m="+string(m)+";";
- ms;
- ==> ideal
m=x(1)^3*x(2)^2-x(1)*x(2)^4+x(1)^4*x(3)-x(1)^3*x(2)*x(3)+x(1)*x(2)^\
- 3*x(3)+x(2)^4*x(3)+x(2)^3*x(3)^2+x(1)*x(2)*x(3)^3+x(1)*x(3)^4-x(3)^5;
- // define a ring rpk with p^k elements, call the primitive element z.
Hence
- // 'solution exponent: 0 1 5' means that (z^0,z^1,z^5) is a solution
- ring rpk=(p^k,z),(x(1..n)),dp;
- rpk;
- ==> // # ground field : 9
- ==> // primitive element : z
- ==> // minpoly : 1*z^2+1*z^1+2*z^0
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x(1) x(2) x(3)
- ==> // block 2 : ordering C
- execute(ms);
- s=0;
- ideal mt;
- for (i(1)=0;i(1)<p^k-1;i(1)=i(1)+1)
- {
- for (i(2)=0;i(2)<p^k-1;i(2)=i(2)+1)
- {
- for (i(3)=0;i(3)<p^k-1;i(3)=i(3)+1)
- {
- mt=m;
- for (l=1;l<=n;l=l+1)
- {
- mt=subst(mt,x(l),z^i(l));
- }
- if (size(mt)==0)
- {
- "solution exponent:",i(1..n);
- s=s+1;
- }
- }
- }
- }
- ==> solution exponent: 0 0 2
- ==> solution exponent: 0 0 4
- ==> solution exponent: 0 0 6
- ==> solution exponent: 0 1 0
- ==> solution exponent: 0 3 0
- ==> solution exponent: 0 4 0
- ==> solution exponent: 0 4 4
- ==> solution exponent: 0 4 5
- ==> solution exponent: 0 4 7
- ==> solution exponent: 1 1 3
- ==> solution exponent: 1 1 5
- ==> solution exponent: 1 1 7
- ==> solution exponent: 1 2 1
- ==> solution exponent: 1 4 1
- ==> solution exponent: 1 5 0
- ==> solution exponent: 1 5 1
- ==> solution exponent: 1 5 5
- ==> solution exponent: 1 5 6
- ==> solution exponent: 2 2 0
- ==> solution exponent: 2 2 4
- ==> solution exponent: 2 2 6
- ==> solution exponent: 2 3 2
- ==> solution exponent: 2 5 2
- ==> solution exponent: 2 6 1
- ==> solution exponent: 2 6 2
- ==> solution exponent: 2 6 6
- ==> solution exponent: 2 6 7
- ==> solution exponent: 3 3 1
- ==> solution exponent: 3 3 5
- ==> solution exponent: 3 3 7
- ==> solution exponent: 3 4 3
- ==> solution exponent: 3 6 3
- ==> solution exponent: 3 7 0
- ==> solution exponent: 3 7 2
- ==> solution exponent: 3 7 3
- ==> solution exponent: 3 7 7
- ==> solution exponent: 4 0 0
- ==> solution exponent: 4 0 1
- ==> solution exponent: 4 0 3
- ==> solution exponent: 4 0 4
- ==> solution exponent: 4 4 0
- ==> solution exponent: 4 4 2
- ==> solution exponent: 4 4 6
- ==> solution exponent: 4 5 4
- ==> solution exponent: 4 7 4
- ==> solution exponent: 5 0 5
- ==> solution exponent: 5 1 1
- ==> solution exponent: 5 1 2
- ==> solution exponent: 5 1 4
- ==> solution exponent: 5 1 5
- ==> solution exponent: 5 5 1
- ==> solution exponent: 5 5 3
- ==> solution exponent: 5 5 7
- ==> solution exponent: 5 6 5
- ==> solution exponent: 6 1 6
- ==> solution exponent: 6 2 2
- ==> solution exponent: 6 2 3
- ==> solution exponent: 6 2 5
- ==> solution exponent: 6 2 6
- ==> solution exponent: 6 6 0
- ==> solution exponent: 6 6 2
- ==> solution exponent: 6 6 4
- ==> solution exponent: 6 7 6
- ==> solution exponent: 7 0 7
- ==> solution exponent: 7 2 7
- ==> solution exponent: 7 3 3
- ==> solution exponent: 7 3 4
- ==> solution exponent: 7 3 6
- ==> solution exponent: 7 3 7
- ==> solution exponent: 7 7 1
- ==> solution exponent: 7 7 3
- ==> solution exponent: 7 7 5
- "//",s,"solutions over GF("+string(p^k)+")";
- ==> // 72 solutions over GF(9)
-
-
-File: sing.info, Node: Elimination, Next: Free resolution, Prev: Finite
fields, Up: Examples
-
-A.10 Elimination
-================
-
-Elimination is the algebraic counterpart of the geometric concept of
-projection. If $f=(f_1,\ldots,f_n):k^r\rightarrow k^n$
-f=(f1,...,fn) : k^r -> k^n is a polynomial map, the Zariski-closure of
-the image is the zero-set of the ideal $$
-\displaylines{
-j=J \cap k[x_1,\ldots,x_n], \;\quad\hbox{\rm where}\cr
-J=(x_1-f_1(t_1,\ldots,t_r),\ldots,x_n-f_n(t_1,\ldots,t_r))\subseteq
-k[t_1,\ldots,t_r,x_1,\ldots,x_n]
-}
-$$
-
- j = J intersected with K[x1,...,xn]
- J=(x1-f1(t1,...,tr),...,xn-fn(t1,...,tr)) in k[t1,...tr,x1,...,xn]
-
-i.e, of the ideal j obtained from J by eliminating the variables
$t_1,\ldots,t_r$.
-t1,...,tr. This can be done by computing a standard basis of J with
-respect to a product ordering where the block of t-variables precedes
-the block of x-variables and then selecting those polynomials which do
-not contain any t. In SINGULAR the most convenient way is to use the
-`eliminate' command. In contrast to the first method, with `eliminate'
-the result needs not be a standard basis in the given ordering. Hence,
-there may be cases where the first method is the preferred one.
-
-*WARNING:* In the case of a local or a mixed ordering, elimination needs
-special care. f may be considered as a map of germs
$f:(k^r,0)\rightarrow(k^n,0)$,
-f : (k^r,0) -> (k^n,0), but even if this map germ is finite, we are in
-general not able to compute the image germ because for this we would
-need an implementation of the Weierstrass preparation theorem. What we
-can compute, and what `eliminate' actually does, is the following: let
-V(J) be the zero-set of J in $k^r\times(k^n,0)$,
-k^r x (k^n,0), then the closure of the image of V(J) under the
-projection $$\hbox{pr}:k^r\times(k^n,0)\rightarrow(k^n,0)$$
-can be computed.
-
-pr: k^r x (k^n,0) -> (k^n,0)
-can be computed. Note that this germ contains also those components of
-V(J) which meet the fiber of pr outside the origin. This is achieved by
-an ordering with the block of t-variables having a global ordering (and
-preceding the x-variables) and the x-variables having a local ordering.
-In a local situation we propose `eliminate' with ordering ls.
-
-In any case, if the input is weighted homogeneous (=quasihomogeneous),
-the weights given to the variables should be chosen accordingly.
-SINGULAR offers a function `weight' which proposes, given an ideal or
-module, integer weights for the variables, such that the ideal, resp.
-module, is as homogeneous as possible with respect to these weights.
-The function finds correct weights, if the input is weighted homogeneous
-(but is rather slow for many variables). In order to check, whether the
-input is quasihomogeneous, use the function `qhweight', which returns an
-intvec of correct weights if the input is quasihomogeneous and an intvec
-of zeros otherwise.
-
-Let us give two examples:
- 1. First we compute the equations of the simple space curve
$\hbox{T}[7]^\prime$
- T[7]' consisting of two tangential cusps given in parametric
- form.
-
- 2. We compute weights for the equations such that the equations are
- quasihomogeneous w.r.t. these weights.
-
- 3. Then we compute the tangent developable of the rational normal
- curve in $P^4$.
- P^4.
-
- // 1. Compute equations of curve given in parametric form:
- // Two transversal cusps in (k^3,0):
- ring r1 = 0,(t,x,y,z),ls;
- ideal i1 = x-t2,y-t3,z; // parametrization of the first branch
- ideal i2 = y-t2,z-t3,x; // parametrization of the second branch
- ideal j1 = eliminate(i1,t);
- j1; // equations of the first branch
- ==> j1[1]=z
- ==> j1[2]=y2-x3
- ideal j2 = eliminate(i2,t);
- j2; // equations of the second branch
- ==> j2[1]=x
- ==> j2[2]=z2-y3
- // Now map to a ring with only x,y,z as variables and compute the
- // intersection of j1 and j2 there:
- ring r2 = 0,(x,y,z),ds;
- ideal j1= imap(r1,j1); // imap is a convenient ringmap for
- ideal j2= imap(r1,j2); // inclusions and projections of rings
- ideal i = intersect(j1,j2);
- i; // equations of both branches
- ==> i[1]=z2-y3+x3y
- ==> i[2]=xz
- ==> i[3]=xy2-x4
- ==> i[4]=x3z
- //
- // 2. Compute the weights:
- intvec v= qhweight(i); // compute weights
- v;
- ==> 4,6,9
- //
- // 3. Compute the tangent developable
- // The tangent developable of a projective variety given parametrically
- // by F=(f1,...,fn) : P^r --> P^n is the union of all tangent spaces
- // of the image. The tangent space at a smooth point F(t1,...,tr)
- // is given as the image of the tangent space at (t1,...,tr) under
- // the tangent map (affine coordinates)
- // T(t1,...,tr): (y1,...,yr) --> jacob(f)*transpose((y1,...,yr))
- // where jacob(f) denotes the jacobian matrix of f with respect to the
- // t's evaluated at the point (t1,...,tr).
- // Hence we have to create the graph of this map and then to eliminate
- // the t's and y's.
- // The rational normal curve in P^4 is given as the image of
- // F(s,t) = (s4,s3t,s2t2,st3,t4)
- // each component being homogeneous of degree 4.
- ring P = 0,(s,t,x,y,a,b,c,d,e),dp;
- ideal M = maxideal(1);
- ideal F = M[1..2]; // take the 1st two generators of M
- F=F^4;
- // simplify(...,2); deletes 0-columns
- matrix jac = simplify(jacob(F),2);
- ideal T = x,y;
- ideal J = jac*transpose(T);
- ideal H = M[5..9];
- ideal i = H-J; // this is tricky: difference between two
- // ideals is not defined, but between two
- // matrices. By automatic type conversion
- // the ideals are converted to matrices,
- // subtracted and afterwards converted
- // to an ideal. Note that '+' is defined
- // and adds (concatenates) two ideals
- i;
- ==> i[1]=-4s3x+a
- ==> i[2]=-3s2tx-s3y+b
- ==> i[3]=-2st2x-2s2ty+c
- ==> i[4]=-t3x-3st2y+d
- ==> i[5]=-4t3y+e
- // Now we define a ring with product ordering and weights 4
- // for the variables a,...,e.
- // Then we map i from P to P1 and eliminate s,t,x,y from i.
- ring P1 = 0,(s,t,x,y,a,b,c,d,e),(dp(4),wp(4,4,4,4,4));
- ideal i = fetch(P,i);
- ideal j= eliminate(i,stxy); // equations of tangent developable
- j;
- ==> j[1]=3c2-4bd+ae
- ==> j[2]=2bcd-3ad2-3b2e+4ace
- ==> j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde
- // We can use the product ordering to eliminate s,t,x,y from i
- // by a std-basis computation.
- // We need proc 'nselect' from elim.lib.
- LIB "elim.lib";
- j = std(i); // compute a std basis j
- j = nselect(j,1,4); // select generators from j not
- j; // containing variable 1,...,4
- ==> j[1]=3c2-4bd+ae
- ==> j[2]=2bcd-3ad2-3b2e+4ace
- ==> j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde
-
-
-File: sing.info, Node: Free resolution, Next: Computation of Ext, Prev:
Elimination, Up: Examples
-
-A.11 Free resolution
-====================
-
-In SINGULAR a free resolution of a module or ideal has its own type:
-`resolution'. It is a structure that stores all information related to
-free resolutions. This allows partial computations of resolutions via
-the command `res'. After applying `res', only a pre-format of the
-resolution is computed which allows to determine invariants like
-Betti-numbers or homological dimension. To see the differentials of the
-complex, a resolution must be converted into the type list which yields
-a list of modules: the k-th module in this list is the first
-syzygy-module (module of relations) of the (k-1)st module. There are
-the following commands to compute a resolution:
-`res'
- *note res::
- computes a free resolution of an ideal or module using a
- heuristically chosen method. This is the preferred method to
- compute free resolutions of ideals or modules.
-
-`lres'
- *note lres::
- computes a free resolution of an ideal or module with La Scala's
- method. The input needs to be homogeneous.
-
-`mres'
- *note mres::
- computes a minimal free resolution of an ideal or module with the
- syzygy method.
-
-`sres'
- *note sres::
- computes a free resolution of an ideal or module with Schreyer's
- method. The input has to be a standard basis.
-
-`nres'
- *note nres::
- computes a free resolution of an ideal or module with the standard
- basis method.
-
-`minres'
- *note minres::
- minimizes a free resolution of an ideal or module.
-
-`syz'
- *note syz::
- computes the first syzygy module.
-`res(i,r)', `lres(i,r)', `sres(i,r)', `mres(i,r)', `nres(i,r)' compute
-the first r modules of the resolution of i, resp. the full resolution if
-r=0 and the basering is not a qring. See the manual for a precise
-description of these commands.
-Note: The command `betti' does not require a minimal resolution for the
-minimal betti numbers.
-
-Now let's look at an example which uses resolutions: The Hilbert-Burch
-theorem says that the ideal i of a reduced curve in $K^3$
-K^3 has a free resolution of length 2 and that i is given by the 2x2
-minors of the 2nd matrix in the resolution. We test this for two
-transversal cusps in $K^3$.
-K^3. Afterwards we compute the resolution of the ideal j of the tangent
-developable of the rational normal curve in $P^4$
-P^4 from above. Finally we demonstrate the use of the type `resolution'
-in connection with the `lres' command.
-
- // Two transversal cusps in (k^3,0):
- ring r2 =0,(x,y,z),ds;
- ideal i =z2-1y3+x3y,xz,-1xy2+x4,x3z;
- resolution rs=mres(i,0); // computes a minimal resolution
- rs; // the standard representation of complexes
- ==> 1 3 2
- ==> r2 <-- r2 <-- r2
- ==>
- ==> 0 1 2
- ==>
- list resi=rs; // convertion to a list
- print(resi[1]); // the 1st module is i minimized
- ==> xz,
- ==> z2-y3+x3y,
- ==> xy2-x4
- print(resi[2]); // the 1st syzygy module of i
- ==> -z,-y2+x3,
- ==> x, 0,
- ==> y, z
- resi[3]; // the 2nd syzygy module of i
- ==> _[1]=0
- ideal j=minor(resi[2],2);
- reduce(j,std(i)); // check whether j is contained in i
- ==> _[1]=0
- ==> _[2]=0
- ==> _[3]=0
- size(reduce(i,std(j))); // check whether i is contained in j
- ==> 0
- // size(<ideal>) counts the non-zero generators
- // ---------------------------------------------
- // The tangent developable of the rational normal curve in P^4:
- ring P = 0,(a,b,c,d,e),dp;
- ideal j= 3c2-4bd+ae, -2bcd+3ad2+3b2e-4ace,
- 8b2d2-9acd2-9b2ce+9ac2e+2abde-1a2e2;
- resolution rs=mres(j,0);
- rs;
- ==> 1 2 1
- ==> P <-- P <-- P
- ==>
- ==> 0 1 2
- ==>
- list L=rs;
- print(L[2]);
- ==> 2bcd-3ad2-3b2e+4ace,
- ==> -3c2+4bd-ae
- // create an intmat with graded betti numbers
- intmat B=betti(rs);
- // this gives a nice output of betti numbers
- print(B,"betti");
- ==> 0 1 2
- ==> ------------------------
- ==> 0: 1 - -
- ==> 1: - 1 -
- ==> 2: - 1 -
- ==> 3: - - 1
- ==> ------------------------
- ==> total: 1 2 1
- // the user has access to all betti numbers
- // the 2-nd column of B:
- B[1..4,2];
- ==> 0 1 1 0
- ring cyc5=32003,(a,b,c,d,e,h),dp;
- ideal i=
- a+b+c+d+e,
- ab+bc+cd+de+ea,
- abc+bcd+cde+dea+eab,
- abcd+bcde+cdea+deab+eabc,
- h5-abcde;
- resolution rs=lres(i,0); //computes the resolution according La Scala
- rs; //the shape of the minimal resolution
- ==> 1 5 10 10 5 1
- ==> cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5
- ==>
- ==> 0 1 2 3 4 5
- ==> resolution not minimized yet
- ==>
- print(betti(rs),"betti"); //shows the Betti-numbers of cyclic 5
- ==> 0 1 2 3 4 5
- ==> ------------------------------------------
- ==> 0: 1 1 - - - -
- ==> 1: - 1 1 - - -
- ==> 2: - 1 1 - - -
- ==> 3: - 1 2 1 - -
- ==> 4: - 1 2 1 - -
- ==> 5: - - 2 2 - -
- ==> 6: - - 1 2 1 -
- ==> 7: - - 1 2 1 -
- ==> 8: - - - 1 1 -
- ==> 9: - - - 1 1 -
- ==> 10: - - - - 1 1
- ==> ------------------------------------------
- ==> total: 1 5 10 10 5 1
- dim(rs); //the homological dimension
- ==> 4
- size(list(rs)); //gets the full (non-reduced) resolution
- ==> 6
- minres(rs); //minimizes the resolution
- ==> 1 5 10 10 5 1
- ==> cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5
- ==>
- ==> 0 1 2 3 4 5
- ==>
- size(list(rs)); //gets the minimized resolution
- ==> 6
-
-
-File: sing.info, Node: Computation of Ext, Next: Polar curves, Prev: Free
resolution, Up: Examples
-
-A.12 Computation of Ext
-=======================
-
-We start by showing how to calculate the n $n$
--th Ext group of an ideal. The ingredients to do this are by the
-definition of Ext the following: calculate a (minimal) resolution at
-least up to length
-
-n $n$
-, apply the Hom-functor, and calculate the n $n$
--th homology group, that is form the quotient $\hbox{\rm ker} / \hbox{\rm Im}$
-ker/Im in the resolution sequence.
-
-The Hom functor is given simply by transposing (hence dualizing) the
-module or the corresponding matrix with the command `transpose'. The
-image of the (n-1) $(n-1)$
--st map is generated by the columns of the corresponding matrix. To
-calculate the kernel apply the command `syz' at the (n-1) $(n-1)$
--st transposed entry of the resolution. Finally, the quotient is
-obtained by the command `modulo', which gives for two modules A = ker, B
-= Im the module of relations of $A/(A \cap B)$
-A/(A intersect B) in the usual way. As we have a chain complex this is
-obviously the same as ker/Im.
-
-We collect these statements in the following short procedure:
-
- proc ext(int n, ideal I)
- {
- resolution rs = mres(I,n+1);
- module tAn = transpose(rs[n+1]);
- module tAn_1 = transpose(rs[n]);
- module ext_n = modulo(syz(tAn),tAn_1);
- return(ext_n);
- }
-
-Now consider the following example:
-
- ring r5 = 32003,(a,b,c,d,e),dp;
- ideal I = a2b2+ab2c+b2cd, a2c2+ac2d+c2de,a2d2+ad2e+bd2e,a2e2+abe2+bce2;
- print(ext(2,I));
- ==> 1,0,0,0,0,0,0,
- ==> 0,1,0,0,0,0,0,
- ==> 0,0,1,0,0,0,0,
- ==> 0,0,0,1,0,0,0,
- ==> 0,0,0,0,1,0,0,
- ==> 0,0,0,0,0,1,0,
- ==> 0,0,0,0,0,0,1
- ext(3,I); // too big to be displayed here
-
-The library `homolog.lib' contains several procedures for computing
-Ext-modules and related modules, which are much more general and
-sophisticated then the above one. They are used in the following
-example.
-
-If M $M$
- is a module, then $\hbox{Ext}^1(M,M)$, resp.\ $\hbox{Ext}^2(M,M)$,
-Ext^1(M,M), resp. Ext^2(M,M), are the modules of infinitesimal
-deformations, resp. of obstructions, of
-
-M $M$
- (like T1 and T2 for a singularity). Similar to the treatment for
-singularities, the semiuniversal deformation of M $M$
- can be computed (if $\hbox{Ext}^1$
-Ext^1 is finite dimensional) with the help of $\hbox{Ext}^1$, $\hbox{Ext}^2$
-Ext^1, Ext^2 and the cup product. There is an extra procedure for
$\hbox{Ext}^k(R/J,R)$
-Ext^k(R/J,R) if J $J$
- is an ideal in R $R$
- since this is faster than the general Ext.
-
-We compute
- * the infinitesimal deformations ($=\hbox{Ext}^1(K,K)$)
- (=Ext^1(K,K)) and obstructions ($=\hbox{Ext}^2(K,K)$)
- (=Ext^2(K,K)) of the residue field K=R/m $K=R/m$
- of an ordinary cusp, $R=Loc_m K[x,y]/(x^2-y^3)$, $m=(x,y)$.
- R=Loc_m K[x,y]/(x^2-y^3), m=(x,y). To compute $\hbox{Ext}^1(m,m)$
- Ext^1(m,m), we have to apply `Ext(1,syz(m),syz(m))' with `syz(m)'
- the first syzygy module of m $m$
- , which is isomorphic to $\hbox{Ext}^2(K,K)$.
- Ext^2(K,K).
-
- * $\hbox{Ext}^k(R/i,R)$
- Ext^k(R/i,R) for some ideal i $i$
- and with an extra option.
-
- LIB "homolog.lib";
- ring R=0,(x,y),ds;
- ideal i=x2-y3;
- qring q = std(i); // defines the quotient ring Loc_m k[x,y]/(x2-y3)
- ideal m = maxideal(1);
- module T1K = Ext(1,m,m); // computes Ext^1(R/m,R/m)
- ==> // dimension of Ext^1: 0
- ==> // vdim of Ext^1: 2
- ==>
- print(T1K);
- ==> 0, 0,y,x,0,y,0, x2-y3,
- ==> -y2,x,x,0,y,0,x2-y3,0,
- ==> 1, 0,0,0,0,0,0, 0
- printlevel=2; // gives more explanation
- module T2K=Ext(2,m,m); // computes Ext^2(R/m,R/m)
- ==> // Computing Ext^2 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F2,G0)-->Hom(F3,G0) is given by:
- ==> y2,x,
- ==> x, y
- ==> // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by:
- ==> -y,x, x,0,y,0,
- ==> x, -y2,0,x,0,y
- ==>
- ==> // dimension of Ext^2: 0
- ==> // vdim of Ext^2: 2
- ==>
- print(std(T2K));
- ==> -y2,0,x,0,y,
- ==> 0, x,0,y,0,
- ==> 1, 0,0,0,0
- printlevel=0;
- module E = Ext(1,syz(m),syz(m));
- ==> // dimension of Ext^1: 0
- ==> // vdim of Ext^1: 2
- ==>
- print(std(E));
- ==> -y,x, 0, 0,0,x,0,y,
- ==> 0, -y,-y,0,x,0,y,0,
- ==> 0, 0, 0, 1,0,0,0,0,
- ==> 0, 0, 1, 0,0,0,0,0,
- ==> 0, 1, 0, 0,0,0,0,0,
- ==> 1, 0, 0, 0,0,0,0,0
- //The matrices which we have just computed are presentation matrices
- //of the modules T2K and E. Hence we may ignore those columns
- //containing 1 as an entry and see that T2K and E are isomorphic
- //as expected, but differently presented.
- //-------------------------------------------
- ring S=0,(x,y,z),dp;
- ideal i = x2y,y2z,z3x;
- module E = Ext_R(2,i);
- ==> // dimension of Ext^2: 1
- ==>
- print(E);
- ==> 0,y,0,z2,
- ==> z,0,0,-x,
- ==> 0,0,x,-y
- // if a 3-rd argument is given (of any type)
- // a list of Ext^k(R/i,R), a SB of Ext^k(R/i,R) and a vector space basis
- // is returned:
- list LE = Ext_R(3,i,"");
- ==> // dimension of Ext^3: 0
- ==> // vdim of Ext^3: 2
- ==>
- LE;
- ==> [1]:
- ==> _[1]=y*gen(1)
- ==> _[2]=x*gen(1)
- ==> _[3]=z2*gen(1)
- ==> [2]:
- ==> _[1]=y*gen(1)
- ==> _[2]=x*gen(1)
- ==> _[3]=z2*gen(1)
- ==> [3]:
- ==> _[1,1]=z
- ==> _[1,2]=1
- print(LE[2]);
- ==> y,x,z2
- print(kbase(LE[2]));
- ==> z,1
-
-
-File: sing.info, Node: Polar curves, Next: Depth, Prev: Computation of Ext,
Up: Examples
-
-A.13 Polar curves
-=================
-
-The polar curve of a hypersurface given by a polynomial $f\in
k[x_1,\ldots,x_n,t]$
-f in k[x1,...,xn,t] with respect to t $t$
- (we may consider f=0 $f=0$
- as a family of hypersurfaces parametrized by t $t$
-) is defined as the Zariski closure of $V(\partial f/\partial
x_1,\ldots,\partial f/\partial x_n) \setminus V(f)$
-V(diff(f,x1),...,diff(f,xn)) \ V(f) if this happens to be a curve. Some
-authors consider $V(\partial f/\partial x_1,\ldots,\partial f/\partial x_n)$
-V(diff(f,x1),...,diff(f,xn)) itself as polar curve.
-
-We may consider projective hypersurfaces (in $P^n$),
-(in P^n), affine hypersurfaces (in $k^n$)
-(in k^n) or germs of hypersurfaces (in $(k^n,0)$),
-(in (k^n,0)), getting in this way projective, affine or local polar
-curves.
-
-Now let us compute this for a family of curves. We need the library
-`elim.lib' for saturation and `sing.lib' for the singular locus.
-
- LIB "elim.lib";
- LIB "sing.lib";
- // Affine polar curve:
- ring R = 0,(x,z,t),dp; // global ordering dp
- poly f = z5+xz3+x2-tz6;
- dim_slocus(f); // dimension of singular locus
- ==> 1
- ideal j = diff(f,x),diff(f,z);
- dim(std(j)); // dim V(j)
- ==> 1
- dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
- ==> 1
- // j defines a curve, but to get the polar curve we must remove the
- // branches contained in f=0 (they exist since dim V(j,f) = 1). This
- // gives the polar curve set theoretically. But for the structure we
- // may take either j:f or j:f^k for k sufficiently large. The first is
- // just the ideal quotient, the second the iterated ideal quotient
- // or saturation. In our case both coincide.
- ideal q = quotient(j,ideal(f)); // ideal quotient
- ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
- ideal sq = std(q);
- dim(sq);
- ==> 1
- // 1-dimensional, hence q defines the affine polar curve
- //
- // to check that q and qsat are the same, we show both inclusions, i.e.,
- // both reductions must give the 0-ideal
- size(reduce(qsat,sq));
- ==> 0
- size(reduce(q,std(qsat)));
- ==> 0
- qsat;
- ==> qsat[1]=12zt+3z-10
- ==> qsat[2]=5z2+12xt+3x
- ==> qsat[3]=144xt2+72xt+9x+50z
- // We see that the affine polar curve does not pass through the origin,
- // hence we expect the local polar "curve" to be empty
- // ------------------------------------------------
- // Local polar curve:
- ring r = 0,(x,z,t),ds; // local ordering ds
- poly f = z5+xz3+x2-tz6;
- ideal j = diff(f,x),diff(f,z);
- dim(std(j)); // V(j) 1-dimensional
- ==> 1
- dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
- ==> 1
- ideal q = quotient(j,ideal(f)); // ideal quotient
- q;
- ==> q[1]=1
- // The local polar "curve" is empty, i.e., V(j) is contained in V(f)
- // ------------------------------------------------
- // Projective polar curve: (we need "sing.lib" and "elim.lib")
- ring P = 0,(x,z,t,y),dp; // global ordering dp
- poly f = z5y+xz3y2+x2y4-tz6;
- // but consider t as parameter
- dim_slocus(f); // projective 1-dimensional singular locus
- ==> 2
- ideal j = diff(f,x),diff(f,z);
- dim(std(j)); // V(j), projective 1-dimensional
- ==> 2
- dim(std(j+ideal(f))); // V(j,f) also projective
1-dimensional
- ==> 2
- ideal q = quotient(j,ideal(f));
- ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
- dim(std(qsat));
- ==> 2
- // projective 1-dimensional, hence q and/or qsat define the projective
- // polar curve. In this case, q and qsat are not the same, we needed
- // 2 quotients.
- // Let us check both reductions:
- size(reduce(qsat,std(q)));
- ==> 4
- size(reduce(q,std(qsat)));
- ==> 0
- // Hence q is contained in qsat but not conversely
- q;
- ==> q[1]=12zty+3zy-10y2
- ==> q[2]=60z2t-36xty-9xy-50zy
- qsat;
- ==> qsat[1]=12zt+3z-10y
- ==> qsat[2]=12xty+5z2+3xy
- ==> qsat[3]=144xt2+72xt+9x+50z
- ==> qsat[4]=z3+2xy2
- //
- // Now consider again the affine polar curve,
- // homogenize it with respect to y (deg t=0) and compare:
- // affine polar curve:
- ideal qa = 12zt+3z-10,5z2+12xt+3x,-144xt2-72xt-9x-50z;
- // homogenized:
- ideal qh = 12zt+3z-10y,5z2+12xyt+3xy,-144xt2-72xt-9x-50z;
- size(reduce(qh,std(qsat)));
- ==> 0
- size(reduce(qsat,std(qh)));
- ==> 0
- // both ideals coincide
-
-
-File: sing.info, Node: Depth, Next: Formatting output, Prev: Polar curves,
Up: Examples
-
-A.14 Depth
-==========
-
-We compute the depth of the module of Kaehler differentials D$_k$(R)
-D_k(R) of the variety defined by the (m+1) $(m+1)$
--minors of a generic symmetric $(n \times n)$-matrix.
-(n x n)-matrix. We do this by computing the resolution over the
-polynomial ring. Then, by the Auslander-Buchsbaum formula, the depth is
-equal to the number of variables minus the length of a minimal
-resolution. This example was suggested by U. Vetter in order to check
-whether his bound $\hbox{depth}(\hbox{D}_k(R))\geq m(m+1)/2 + m-1$
-depth(D_k(R)) >= m(m+1)/2 + m-1 could be improved.
-
- LIB "matrix.lib"; LIB "sing.lib";
- int n = 4;
- int m = 3;
- int N = n*(n+1)/2; // will become number of variables
- ring R = 32003,x(1..N),dp;
- matrix X = symmat(n); // proc from matrix.lib
- // creates the symmetric generic nxn matrix
- print(X);
- ==> x(1),x(2),x(3),x(4),
- ==> x(2),x(5),x(6),x(7),
- ==> x(3),x(6),x(8),x(9),
- ==> x(4),x(7),x(9),x(10)
- ideal J = minor(X,m);
- J=std(J);
- // Kaehler differentials D_k(R)
- // of R=k[x1..xn]/J:
- module D = J*freemodule(N)+transpose(jacob(J));
- ncols(D);
- ==> 110
- nrows(D);
- ==> 10
- //
- // Note: D is a submodule with 110 generators of a free module
- // of rank 10 over a polynomial ring in 10 variables.
- // Compute a full resolution of D with sres.
- // This takes about 17 sec on a Mac PB 520c and 2 sec an a HP 735
- int time = timer;
- module sD = std(D);
- list Dres = sres(sD,0); // the full resolution
- timer-time; // time used for std + sres
- ==> 0
- intmat B = betti(Dres);
- print(B,"betti");
- ==> 0 1 2 3 4 5 6
- ==> ------------------------------------------------
- ==> 0: 10 - - - - - -
- ==> 1: - 10 - - - - -
- ==> 2: - 84 144 60 - - -
- ==> 3: - - 35 80 60 16 1
- ==> ------------------------------------------------
- ==> total: 10 94 179 140 60 16 1
- N-ncols(B)+1; // the desired depth
- ==> 4
-
-
-File: sing.info, Node: Formatting output, Next: Cyclic roots, Prev: Depth,
Up: Examples
-
-A.15 Formatting output
-======================
-
-We show how to insert the result of a computation inside a text by using
-strings. First we compute the powers of 2 and comment the result with
-some text. Then we do the same and give the output a nice format by
-computing and adding appropriate space.
-
- // The powers of 2:
- int n;
- for (n = 2; n <= 128; n = n * 2)
- {"n = " + string (n);}
- ==> n = 2
- ==> n = 4
- ==> n = 8
- ==> n = 16
- ==> n = 32
- ==> n = 64
- ==> n = 128
- // The powers of 2 in a nice format
- int j;
- string space = "";
- for (n = 2; n <= 128; n = n * 2)
- {
- space = "";
- for (j = 1; j <= 5 - size (string (n)); j = j+1)
- { space = space + " "; }
- "n =" + space + string (n);
- }
- ==> n = 2
- ==> n = 4
- ==> n = 8
- ==> n = 16
- ==> n = 32
- ==> n = 64
- ==> n = 128
-
-
-File: sing.info, Node: Cyclic roots, Next: G_a -Invariants, Prev:
Formatting output, Up: Examples
-
-A.16 Cyclic roots
-=================
-
-We write a procedure returning a string that enables us to create
-automatically the ideal of cyclic roots over the basering with n
-variables. The procedure assumes that the variables consist of a single
-letter each (hence no indexed variables are allowed; the procedure
-`cyclic' in `poly.lib' does not have this restriction). Then we compute
-a standard basis of this ideal and some numerical information. (This
-ideal is used as a classical benchmark for standard basis computations).
-
- // We call the procedure 'cyclic':
- proc cyclic (int n)
- {
- string vs = varstr(basering)+varstr(basering);
- int c=find(vs,",");
- while ( c!=0 )
- {
- vs=vs[1,c-1]+vs[c+1,size(vs)];
- c=find(vs,",");
- }
- string t,s;
- int i,j;
- for ( j=1; j<=n-1; j=j+1 )
- {
- t="";
- for ( i=1; i <=n; i=i+1 )
- {
- t = t + vs[i,j] + "+";
- }
- t = t[1,size(t)-1] + ","+newline;
- s=s+t;
- }
- s=s+vs[1,n]+"-1";
- return (s);
- }
-
- ring r=0,(a,b,c,d,e),lp; // basering, char 0, lex ordering
- string sc=cyclic(nvars(basering));
- sc; // the string of the ideal
- ==> a+b+c+d+e,
- ==> ab+bc+cd+de+ea,
- ==> abc+bcd+cde+dea+eab,
- ==> abcd+bcde+cdea+deab+eabc,
- ==> abcde-1
- execute("ideal i="+sc+";"); // this defines the ideal of cyclic roots
- i;
- ==> i[1]=a+b+c+d+e
- ==> i[2]=ab+bc+cd+ae+de
- ==> i[3]=abc+bcd+abe+ade+cde
- ==> i[4]=abcd+abce+abde+acde+bcde
- ==> i[5]=abcde-1
- timer=1;
- ideal j=std(i);
- ==> //used time: 7.5 sec
- size(j); // number of elements in the std basis
- ==> 11
- degree(j);
- ==> // codimension = 5
- ==> // dimension = 0
- ==> // degree = 70
-
-
-File: sing.info, Node: G_a -Invariants, Next: Invariants of a finite group,
Prev: Cyclic roots, Up: Examples
-
-A.17 G_a -Invariants
-====================
-
-We work in characteristic 0 and use the Lie algebra generated by one
-vector field of the form $\sum x_i \partial /\partial x_{i+1}$.
-sum x(i)*d/dx(i+1).
- LIB "ainvar.lib";
- int n=5;
- int i;
- ring s=32003,(x(1..n)),wp(1,2,3,4,5);
- // definition of the vector field m=sum m[i,1]*d/dx(i)
- matrix m[n][1];
- for (i=1;i<=n-1;i=i+1)
- {
- m[i+1,1]=x(i);
- }
- // computation of the ring of invariants
- ideal in=invariantRing(m,x(2),x(1),0);
- in; //invariant ring is generated by 5 invariants
- ==> in[1]=x(1)
- ==> in[2]=x(2)^2-2*x(1)*x(3)
- ==> in[3]=x(3)^2-2*x(2)*x(4)+2*x(1)*x(5)
- ==> in[4]=x(2)^3-3*x(1)*x(2)*x(3)+3*x(1)^2*x(4)
- ==>
in[5]=x(3)^3-3*x(2)*x(3)*x(4)-15997*x(1)*x(4)^2+3*x(2)^2*x(5)-6*x(1)*x(3)\
- *x(5)
- ring q=32003,(x,y,z,u,v,w),dp;
- matrix m[6][1];
- m[2,1]=x;
- m[3,1]=y;
- m[5,1]=u;
- m[6,1]=v;
- // the vector field is: xd/dy+yd/dz+ud/dv+vd/dw
- ideal in=invariantRing(m,y,x,0);
- in; //invariant ring is generated by 6 invariants
- ==> in[1]=x
- ==> in[2]=u
- ==> in[3]=v2-2uw
- ==> in[4]=zu-yv+xw
- ==> in[5]=yu-xv
- ==> in[6]=y2-2xz
-
-
-File: sing.info, Node: Invariants of a finite group, Next: Factorization,
Prev: G_a -Invariants, Up: Examples
-
-A.18 Invariants of a finite group
-=================================
-
-Two algorithms to compute the invariant ring are implemented in
-SINGULAR, `invariant_ring' and `invariant_ring_random', both by Agnes E.
-Heydtmann (address@hidden').
-
-Bases of homogeneous invariants are generated successively and those are
-chosen as primary invariants that lower the dimension of the ideal
-generated by the previously found invariants (see paper "Generating a
-Noetherian Normalization of the Invariant Ring of a Finite Group" by
-Decker, Heydtmann, Schreyer (1997) to appear in JSC). In the
-non-modular case secondary invariants are calculated by finding a basis
-(in terms of monomials) of the basering modulo the primary invariants,
-mapping to invariants with the Reynolds operator and using those or
-their power products such that they are linearly independent modulo the
-primary invariants (see paper "Some Algorithms in Invariant Theory of
-Finite Groups" by Kemper and Steel (1997)). In the modular case they
-are generated according to "Generating Invariant Rings of Finite Groups
-over Arbitrary Fields" by Kemper (1996, to appear in JSC).
-
-We calculate now an example from Sturmfels: "Algorithms in Invariant
-Theory 2.3.7":
-
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- // the group G is generated by A in Gl(3,Q);
- print(A);
- ==> 0, 1,0,
- ==> -1,0,0,
- ==> 0, 0,-1
- print(A*A*A*A); // the fourth power of A is 1
- ==> 1,0,0,
- ==> 0,1,0,
- ==> 0,0,1
- // Use the first method to compute the invariants of G:
- matrix B(1..3);
- B(1..3)=invariant_ring(A);
- // SINGULAR returns 2 matrices, the first containing
- // primary invariants and the second secondary
- // invariants, i.e., module generators over a Noetherian
- // normalization
- // the third result are the irreducible secondary invariants
- // if the Molien series was available
- print(B(1));
- ==> z2,x2+y2,x2y2
- print(B(2));
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(B(3));
- ==> xyz,x2z-y2z,x3y-xy3
- // Use the second method,
- // with random numbers between -1 and 1:
- B(1..3)=invariant_ring_random(A,1);
- print(B(1..3));
- ==> z2,x2+y2,x4+y4-z4
- ==> 1,xyz,x2z-y2z,x3y-xy3
- ==> xyz,x2z-y2z,x3y-xy3
-
Index: test/singular_manual/res_info/singular_httex/sing.info-3
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.info-3
diff -N test/singular_manual/res_info/singular_httex/sing.info-3
--- test/singular_manual/res_info/singular_httex/sing.info-3 1 Nov 2009
19:00:55 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,9494 +0,0 @@
-This is sing.info, produced by makeinfo version 4.13 from singular.texi.
-
-
-
-File: sing.info, Node: Factorization, Next: Puiseux pairs, Prev: Invariants
of a finite group, Up: Examples
-
-A.19 Factorization
-==================
-
-The factorization of polynomials is implemented in the C++ libraries
-Factory (written mainly by Ruediger Stobbe) and libfac (written by
-Michael Messollen) which are part of the SINGULAR system.
-
- ring r = 0,(x,y),dp;
- poly f = 9x16-18x13y2-9x12y3+9x10y4-18x11y2+36x8y4
- +18x7y5-18x5y6+9x6y4-18x3y6-9x2y7+9y8;
- // = 9 * (x5-1y2)^2 * (x6-2x3y2-1x2y3+y4)
- factorize(f);
- ==> [1]:
- ==> _[1]=9
- ==> _[2]=x6-2x3y2-x2y3+y4
- ==> _[3]=-x5+y2
- ==> [2]:
- ==> 1,1,2
- // returns factors and multiplicities,
- // first factor is a constant.
- poly g = (y4+x8)*(x2+y2);
- factorize(g);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x8+y4
- ==> _[3]=x2+y2
- ==> [2]:
- ==> 1,1,1
- // The same in characteristic 2:
- ring s =2,(x,y),dp;
- poly g = (y4+x8)*(x2+y2);
- factorize(g);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x+y
- ==> _[3]=x2+y
- ==> [2]:
- ==> 1,2,4
-
-
-File: sing.info, Node: Puiseux pairs, Next: Primary decomposition, Prev:
Factorization, Up: Examples
-
-A.20 Puiseux pairs
-==================
-
-The Puiseux pairs of an irreducible and reduced curve singularity are
-its most important invariants. They can be computed from its
-Hamburger-Noether expansion. The library `hnoether.lib' written by
-Martin Lamm uses the algorithm of Antonio Campillo "Algebroid curves in
-positive characteristic" SLN 813, 1980. This algorithm has the
-advantage that it needs least possible field extensions and, moreover,
-works in any characteristic. This fact can be used to compute the
-invariants over a field of finite characteristic, say 32003, which will
-then most probably be the same in characteristic 0.
-
-We compute the Hamburger-Noether expansion of a plane curve singularity
-given by a polynomial f $f$
- in two variables. This is a matrix which allows to compute the
-parametrization (up to a given order) and all numerical invariants like
-the
- * characteristic exponents,
-
- * Puiseux pairs (of a complex model),
-
- * degree of the conductor,
-
- * delta invariant,
-
- * generators of the semigroup.
-Besides this, the library contains procedures to compute the Newton
-polygon of f $f$
-, the squarefree part of f $f$
- and a procedure to convert one set of invariants to another.
-
- LIB "hnoether.lib";
- // ======== The irreducible case ========
- ring s = 0,(x,y),ds;
- poly f = y4-2x3y2-4x5y+x6-x7;
- list hn = develop(f);
- show(hn[1]); // Hamburger-Noether matrix
- ==> // matrix, 3x3
- ==> 0,x, 0,
- ==> 0,1, x,
- ==> 0,1/4,-1/2
- displayHNE(hn); // Hamburger-Noether development
- ==> HNE[1]=-y+z(0)*z(1)
- ==> HNE[2]=-x+z(1)^2+z(1)^2*z(2)
- ==> HNE[3]=1/4*z(2)^2-1/2*z(2)^3
- setring s;
- displayInvariants(hn);
- ==> characteristic exponents : 4,6,7
- ==> generators of semigroup : 4,6,13
- ==> Puiseux pairs : (3,2)(7,2)
- ==> degree of the conductor : 16
- ==> delta invariant : 8
- ==> sequence of multiplicities: 4,2,2,1,1
- // invariants(hn); returns the invariants as list
- // partial parametrization of f: param takes the first variable
- // as infinite except the ring has more than 2 variables. Then
- // the 3rd variable is chosen.
- param(hn);
- ==> // ** Warning: result is exact up to order 5 in x and 7 in y !
- ==> _[1]=1/16x4-3/16x5+1/4x7
- ==> _[2]=1/64x6-5/64x7+3/32x8+1/16x9-1/8x10
- ring extring=0,(x,y,t),ds;
- poly f=x3+2xy2+y2;
- list hn=develop(f,-1);
- param(hn); // partial parametrization of f
- ==> // ** Warning: result is exact up to order 2 in x and 3 in y !
- ==> _[1]=-t2
- ==> _[2]=-t3
- list hn1=develop(f,6);
- param(hn1); // a better parametrization
- ==> // ** Warning: result is exact up to order 6 in x and 7 in y !
- ==> _[1]=-t2+2t4-4t6
- ==> _[2]=-t3+2t5-4t7
- // instead of recomputing you may extend the development:
- list hn2=extdevelop(hn,12);
- param(hn2); // a still better parametrization
- ==> // ** Warning: result is exact up to order 12 in x and 13 in y !
- ==> _[1]=-t2+2t4-4t6+8t8-16t10+32t12
- ==> _[2]=-t3+2t5-4t7+8t9-16t11+32t13
- //
- // ======== The reducible case ========
- ring r = 0,(x,y),dp;
- poly f=x11-2y2x8-y3x7-y2x6+y4x5+2y4x3+y5x2-y6;
- // = (x5-1y2) * (x6-2x3y2-1x2y3+y4)
- list hn=reddevelop(f);
- show(hn[1][1]); // Hamburger-Noether matrix of 1st branch
- ==> // matrix, 3x3
- ==> 0,x,0,
- ==> 0,1,x,
- ==> 0,1,-1
- displayInvariants(hn);
- ==> --- invariants of branch number 1 : ---
- ==> characteristic exponents : 4,6,7
- ==> generators of semigroup : 4,6,13
- ==> Puiseux pairs : (3,2)(7,2)
- ==> degree of the conductor : 16
- ==> delta invariant : 8
- ==> sequence of multiplicities: 4,2,2,1,1
- ==>
- ==> --- invariants of branch number 2 : ---
- ==> characteristic exponents : 2,5
- ==> generators of semigroup : 2,5
- ==> Puiseux pairs : (5,2)
- ==> degree of the conductor : 4
- ==> delta invariant : 2
- ==> sequence of multiplicities: 2,2,1,1
- ==>
- ==> -------------- contact numbers : --------------
- ==>
- ==> branch | 2
- ==> -------+-----
- ==> 1 | 2
- ==>
- ==> -------------- intersection multiplicities : --------------
- ==>
- ==> branch | 2
- ==> -------+-----
- ==> 1 | 12
- ==>
- ==> -------------- delta invariant of the curve : 22
- param(hn[2]); // parametrization of 2nd branch
- ==> _[1]=x2
- ==> _[2]=x5
-
-
-File: sing.info, Node: Primary decomposition, Next: Normalization, Prev:
Puiseux pairs, Up: Examples
-
-A.21 Primary decomposition
-==========================
-
-There are two algorithms implemented in SINGULAR which provide primary
-decomposition: `primdecGTZ', based on Gianni/Trager/Zacharias (written
-by Gerhard Pfister) and `primdecSY', based on Shimoyama/Yokoyama
-(written by Wolfram Decker and Hans Schoenemann).
-
-The result of `primdecGTZ' and `primdecSY' is returned as a list of
-pairs of ideals, where the second ideal form the prime ideal and the
-first ideal form the corresponding primary ideal.
-
- LIB "primdec.lib";
- ring r = 0,(a,b,c,d,e,f),dp;
- ideal i= f3, ef2, e2f, bcf-adf, de+cf, be+af, e3;
- primdecGTZ(i);
- ==> [1]:
- ==> [1]:
- ==> _[1]=f
- ==> _[2]=e
- ==> [2]:
- ==> _[1]=f
- ==> _[2]=e
- ==> [2]:
- ==> [1]:
- ==> _[1]=f3
- ==> _[2]=ef2
- ==> _[3]=e2f
- ==> _[4]=e3
- ==> _[5]=de+cf
- ==> _[6]=be+af
- ==> _[7]=-bc+ad
- ==> [2]:
- ==> _[1]=f
- ==> _[2]=e
- ==> _[3]=-bc+ad
- // We consider now the ideal J of the base space of the
- // miniversal deformation of the cone over the rational
- // normal curve computed in section *8* and compute
- // its primary decomposition.
- ring R = 0,(A,B,C,D),dp;
- ideal J = CD, BD+D2, AD;
- primdecGTZ(J);
- ==> [1]:
- ==> [1]:
- ==> _[1]=D
- ==> [2]:
- ==> _[1]=D
- ==> [2]:
- ==> [1]:
- ==> _[1]=C
- ==> _[2]=B+D
- ==> _[3]=A
- ==> [2]:
- ==> _[1]=C
- ==> _[2]=B+D
- ==> _[3]=A
- // We see that there are two components which are both
- // prime, even linear subspaces, one 3-dimensional,
- // the other 1-dimensional.
- // (This is Pinkhams example and was the first known
- // surface singularity with two components of
- // different dimensions)
- //
- // Let us now produce an embedded component in the last
- // example, compute the minimal associated primes and
- // the radical. We use the Characteristic set methods
- // from prim_dec.lib.
- J = intersect(J,maxideal(3));
- // The following shows that the maximal ideal defines an embedded
- // (prime) component.
- primdecSY(J);
- ==> [1]:
- ==> [1]:
- ==> _[1]=D
- ==> [2]:
- ==> _[1]=D
- ==> [2]:
- ==> [1]:
- ==> _[1]=C
- ==> _[2]=B+D
- ==> _[3]=A
- ==> [2]:
- ==> _[1]=C
- ==> _[2]=B+D
- ==> _[3]=A
- ==> [3]:
- ==> [1]:
- ==> _[1]=D2
- ==> _[2]=C2
- ==> _[3]=B2
- ==> _[4]=AB
- ==> _[5]=A2
- ==> _[6]=BCD
- ==> _[7]=ACD
- ==> [2]:
- ==> _[1]=D
- ==> _[2]=C
- ==> _[3]=B
- ==> _[4]=A
- minAssChar(J);
- ==> [1]:
- ==> _[1]=C
- ==> _[2]=B+D
- ==> _[3]=A
- ==> [2]:
- ==> _[1]=D
- radical(J);
- ==> _[1]=CD
- ==> _[2]=BD+D2
- ==> _[3]=AD
-
-
-File: sing.info, Node: Normalization, Next: Branches of an Isolated Space
Curve Singularity, Prev: Primary decomposition, Up: Examples
-
-A.22 Normalization
-==================
-
-The normalization will be computed for a reduced ring R/I $R/I$
-. The result is a list of rings; ideals are always called `norid' in the
-rings of this list. The normalization of R/I $R/I$
- is the product of the factor rings of the rings in the list divided out
-by the ideals `norid'.
-
- LIB "normal.lib";
- // ----- first example: rational quadruple point -----
- ring R=32003,(x,y,z),wp(3,5,15);
- ideal I=z*(y3-x5)+x10;
- list pr=normal(I);
- ==>
- ==> // 'normal' created a list of 1 ring(s).
- ==> // nor[1+1] is the delta-invariant in case of choose=wd.
- ==> // To see the rings, type (if the name of your list is nor):
- ==> show( nor);
- ==> // To access the 1-st ring and map (similar for the others), type:
- ==> def R = nor[1]; setring R; norid; normap;
- ==> // R/norid is the 1-st ring of the normalization and
- ==> // normap the map from the original basering to R/norid
- def S=pr[1];
- setring S;
- norid;
- ==> norid[1]=T(2)*T(3)-T(1)*T(4)
- ==> norid[2]=T(1)^7-T(1)^2*T(3)+T(2)*T(5)
- ==> norid[3]=T(1)^2*T(5)-T(2)*T(4)
- ==> norid[4]=T(1)^5*T(4)-T(3)*T(4)+T(5)^2
- ==> norid[5]=T(1)^6*T(3)-T(1)*T(3)^2+T(4)*T(5)
- ==> norid[6]=T(1)*T(3)*T(5)-T(4)^2
- // ----- second example: union of straight lines -----
- ring R1=0,(x,y,z),dp;
- ideal I=(x-y)*(x-z)*(y-z);
- list qr=normal(I);
- ==>
- ==> // 'normal' created a list of 3 ring(s).
- ==> // nor[3+1] is the delta-invariant in case of choose=wd.
- ==> // To see the rings, type (if the name of your list is nor):
- ==> show( nor);
- ==> // To access the 1-st ring and map (similar for the others), type:
- ==> def R = nor[1]; setring R; norid; normap;
- ==> // R/norid is the 1-st ring of the normalization and
- ==> // normap the map from the original basering to R/norid
- def S1=qr[1]; def S2=qr[2];
- setring S1; norid;
- ==> norid[1]=0
- setring S2; norid;
- ==> norid[1]=0
-
-
-File: sing.info, Node: Branches of an Isolated Space Curve Singularity,
Next: Kernel of module homomorphisms, Prev: Normalization, Up: Examples
-
-A.23 Branches of an Isolated Space Curve Singularity
-====================================================
-
-In this example, the number of branches of a given quasihomogeneous
-isolated space curve singularity will be computed as an example of the
-pitfalls appearing in the use of primary decomposition. When dealing
-with singularities, two situations are possible in which the primary
-decomposition algorithm might not lead to a complete decomposition:
-first of all, one of the computed components could be globally
-irreducible, but analytically reducible (this is impossible for
-quasihomogeneous singularities) and, as a second possibility, a
-component might be irreducible over the rational numbers, but reducible
-over the complex numbers.
- ring r=0,(x,y,z),ds;
- ideal i=x^4-y*z^2,x*y-z^3,y^2-x^3*z; // the space curve singularity
- qhweight(i);
- ==> 1,2,1
- // The given space curve singularity is quasihomogeneous. Hence we can
pass
- // to the polynomial ring.
- ring rr=0,(x,y,z),dp;
- ideal i=imap(r,i);
- resolution ires=mres(i,0);
- ires;
- ==> 1 3 2
- ==> rr <-- rr <-- rr
- ==>
- ==> 0 1 2
- ==>
- // From the structure of the resolution, we see that the Cohen-Macaulay
- // type of the given singularity is 2
- //
- // Let us now look for the branches using the primdec library.
- LIB "primdec.lib";
- primdecSY(i);
- ==> [1]:
- ==> [1]:
- ==> _[1]=z3-xy
- ==> _[2]=x3+x2z+xz2+xy+yz
- ==> _[3]=x2z2+x2y+xyz+yz2+y2
- ==> [2]:
- ==> _[1]=z3-xy
- ==> _[2]=x3+x2z+xz2+xy+yz
- ==> _[3]=x2z2+x2y+xyz+yz2+y2
- ==> [2]:
- ==> [1]:
- ==> _[1]=x-z
- ==> _[2]=z2-y
- ==> [2]:
- ==> _[1]=x-z
- ==> _[2]=z2-y
- def li=_[2];
- ideal i2=li[2]; // call the second ideal i2
- // The curve seems to have 2 branches by what we computed using the
- // algorithm of Shimoyama-Yokoyama.
- // Now the same computation by the Gianni-Trager-Zacharias algorithm:
- primdecGTZ(i);
- ==> [1]:
- ==> [1]:
- ==> _[1]=z8+yz6+y2z4+y3z2+y4
- ==> _[2]=xz5+z6+yz4+y2z2+y3
- ==> _[3]=-z3+xy
- ==> _[4]=x2z2+xz3+xyz+yz2+y2
- ==> _[5]=x3+x2z+xz2+xy+yz
- ==> [2]:
- ==> _[1]=z8+yz6+y2z4+y3z2+y4
- ==> _[2]=xz5+z6+yz4+y2z2+y3
- ==> _[3]=-z3+xy
- ==> _[4]=x2z2+xz3+xyz+yz2+y2
- ==> _[5]=x3+x2z+xz2+xy+yz
- ==> [2]:
- ==> [1]:
- ==> _[1]=-z2+y
- ==> _[2]=x-z
- ==> [2]:
- ==> _[1]=-z2+y
- ==> _[2]=x-z
- // Having computed the primary decomposition in 2 different ways and
- // having obtained the same number of branches, we might expect that the
- // number of branches is really 2, but we can check this by formulae
- // for the invariants of space curve singularities:
- //
- // mu = tau - t + 1 (for quasihomogeneous curve singularities)
- // where mu denotes the Milnor number, tau the Tjurina number and
- // t the Cohen-Macaulay type
- //
- // mu = 2 delta - r + 1
- // where delta denotes the delta-Invariant and r the number of branches
- //
- // tau can be computed by using the corresponding procedure T1 from
- // sing.lib.
- setring r;
- LIB "sing.lib";
- T_1(i);
- ==> // dim T_1 = 13
- ==> _[1]=gen(6)+2z*gen(5)
- ==> _[2]=gen(4)+3x2*gen(2)
- ==> _[3]=gen(3)+gen(1)
- ==> _[4]=x*gen(5)-y*gen(2)-z*gen(1)
- ==> _[5]=x*gen(1)-z2*gen(2)
- ==> _[6]=y*gen(5)+3x2z*gen(2)
- ==> _[7]=y*gen(2)-z*gen(1)
- ==> _[8]=2y*gen(1)-z2*gen(5)
- ==> _[9]=z2*gen(5)
- ==> _[10]=z2*gen(1)
- ==> _[11]=x3*gen(2)
- ==> _[12]=x2z2*gen(2)
- ==> _[13]=xz3*gen(2)
- ==> _[14]=z4*gen(2)
- setring rr;
- // Hence tau is 13 and therefore mu is 12. But then it is impossible
that
- // the singularity has two branches, since mu is even and delta is an
- // integer!
- // So obviously, we did not decompose completely. Because the first
branch
- // is smooth, only the second ideal can be the one which can be
decomposed
- // further.
- // Let us now consider the normalization of this second ideal i2.
- LIB "normal.lib";
- normal(i2);
- ==>
- ==> // 'normal' created a list of 1 ring(s).
- ==> // nor[1+1] is the delta-invariant in case of choose=wd.
- ==> // To see the rings, type (if the name of your list is nor):
- ==> show( nor);
- ==> // To access the 1-st ring and map (similar for the others), type:
- ==> def R = nor[1]; setring R; norid; normap;
- ==> // R/norid is the 1-st ring of the normalization and
- ==> // normap the map from the original basering to R/norid
- ==> [1]:
- ==> // characteristic : 0
- ==> // number of vars : 1
- ==> // block 1 : ordering dp
- ==> // : names T(1)
- ==> // block 2 : ordering C
- def rno=_[1];
- setring rno;
- norid;
- ==> norid[1]=0
- // The ideal is generated by a polynomial in one variable of degree 4
which
- // factors completely into 4 polynomials of type T(2)+a.
- // From this, we know that the ring of the normalization is the direct
sum of
- // 4 polynomial rings in one variable.
- // Hence our original curve has these 4 branches plus a smooth one
- // which we already determined by primary decomposition.
- // Our final result is therefore: 5 branches.
-
-
-File: sing.info, Node: Kernel of module homomorphisms, Next: Algebraic
dependence, Prev: Branches of an Isolated Space Curve Singularity, Up:
Examples
-
-A.24 Kernel of module homomorphisms
-===================================
-
-Let A $A$
-, B $B$
- be two matrices of size $m\times r$ and $m\times s$
-m x r and m x s over the ring R $R$
- and consider the corresponding maps $$
-R^r \buildrel{A}\over{\longrightarrow}
-R^m \buildrel{B}\over{\longleftarrow} R^s\;.
-$$
-
- r A m
- R -----> R
- ^
- |
- |
- s
- R .
-
-We want to compute the kernel of the map $R^r
\buildrel{A}\over{\longrightarrow}
-R^m\longrightarrow
-R^m/\hbox{Im}(B) \;.$
-
- r A m m
- R -----> R -----> R /Im(B) .
-
-This can be done using the `modulo' command: $$
-\hbox{\tt modulo}(A,B)=\hbox{ker}(R^r
-\buildrel{A}\over{\longrightarrow}R^m/\hbox{Im}(B)) \; .
-$$
-
- r A m
- modulo(A,B)=ker(R -----> R /Im(B)) .
-
- ring r=0,(x,y,z),(c,dp);
- matrix A[2][2]=x,y,z,1;
- matrix B[2][2]=x2,y2,z2,xz;
- print(modulo(A,B));
- ==> yz2-x2, xyz-y2, x2z-xy, x3-y2z,
- ==> x2z-xz2,-x2z+y2z,xyz-yz2,0
-
-
-File: sing.info, Node: Algebraic dependence, Next: Classification, Prev:
Kernel of module homomorphisms, Up: Examples
-
-A.25 Algebraic dependence
-=========================
-
-Let $g$, $f_1$, \dots, $f_r\in K[x_1,\ldots,x_n]$.
-g, f_1, ..., f_r in K[x1,...,xn]. We want to check whether
- 1. $f_1$, \dots, $f_r$
- f_1, ..., f_r are algebraically dependent.
-
- Let $I=\langle Y_1-f_1,\ldots,Y_r-f_r \rangle \subseteq
- K[x_1,\ldots,x_n,Y_1,\ldots,Y_r]$.
-
- I=<Y_1-f_1,...,Y_r-f_r> subset K[x1,...,xn,Y_1,...,Y_r].
-
- Then $I \cap K[Y_1,\ldots,Y_r]$
- I intersected with K[Y_1,...,Y_r] are the algebraic relations
- between $f_1$, \dots, $f_r$.
- f_1, ..., f_r.
-
- 2. $g \in K [f_1,\ldots,f_r]$.
- g in K[f_1,...,f_r].
-
-$g \in K[f_1,\ldots,f_r]$
- g in K[f_1,...,f_r] if and only if the normal form of g $g$
- with respect to I $I$
- and a block ordering with respect to $X=(x_1,\ldots,x_n)$ and
$Y=(Y_1,\ldots,Y_r)$ with $X>Y$
- X=(x1,...,xn) and Y=(Y_1,...,Y_r) with X>Y is in K[Y] $K[Y]$
- .
-
-Both questions can be answered using the following procedure. If the
-second argument is zero, it checks for algebraic dependence and returns
-the ideal of relations between the generators of the given ideal.
-Otherwise it checks for subring membership and returns the normal form
-of the second argument with respect to the ideal I.
-
- proc algebraicDep(ideal J, poly g)
- {
- def R=basering; // give a name to the basering
- int n=size(J);
- int k=nvars(R);
- int i;
- intvec v;
-
- // construction of the new ring:
-
- // construct a weight vector
- v[n+k]=0; // gives a zero vector of length n+k
- for(i=1;i<=k;i++)
- {
- v[i]=1;
- }
- string orde="(a("+string(v)+"),dp);";
- string ri="ring Rhelp=("+charstr(R)+"),
- ("+varstr(R)+",Y(1.."+string(n)+")),"+orde;
- // ring definition as a string
- execute(ri); // execution of the string
-
- // construction of the new ideal I=(J[1]-Y(1),...,J[n]-Y(n))
- ideal I=imap(R,J);
- for(i=1;i<=n;i++)
- {
- I[i]=I[i]-var(k+i);
- }
- poly g=imap(R,g);
- if(g==0)
- {
- // construction of the ideal of relations by elimination
- poly el=var(1);
- for(i=2;i<=k;i++)
- {
- el=el*var(i);
- }
- ideal KK=eliminate(I,el);
- keepring(Rhelp);
- return(KK);
- }
- // reduction of g with respect to I
- ideal KK=reduce(g,std(I));
- keepring(Rhelp);
- return(KK);
- }
-
- // applications of the procedure
- ring r=0,(x,y,z),dp;
- ideal i=xz,yz;
- algebraicDep(i,0);
- ==> _[1]=0
- // Note: after call of algebraicDep(), the basering is Rhelp.
- setring r; kill Rhelp;
- ideal j=xy+z2,z2+y2,x2y2-2xy3+y4;
- algebraicDep(j,0);
- ==> _[1]=Y(1)^2-2*Y(1)*Y(2)+Y(2)^2-Y(3)
- setring r; kill Rhelp;
- poly g=y2z2-xz;
- algebraicDep(i,g);
- ==> _[1]=Y(2)^2-Y(1)
- // this shows that g is contained in i.
- setring r; kill Rhelp;
- algebraicDep(j,g);
- ==> _[1]=-z^4+z^2*Y(2)-x*z
- // this shows that g is contained in j.
-
-
-File: sing.info, Node: Classification, Next: Fast lexicographical GB, Prev:
Algebraic dependence, Up: Examples
-
-A.26 Classification
-===================
-
-Classification of isolated hypersurface singularities with respect to
-right equivalence is provided by the command `classify' of the library
-`classify.lib'. The classification is done using the algorithm of
-Arnold. Before entering this algorithm, a first guess based on the
-Hilbert polynomial of the Milnor algebra is made.
-
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- poly p=singularity("E[6k+2]",2)[1];
- p=p+z^2;
- p;
- ==> z2+x3+xy6+y8
- // We received an E_14 singularity in normal form
- // from the database of normal forms. Since only the residual
- // part is saved in the database, we added z^2 to get an E_14
- // of embedding dimension 3.
- //
- // Now we apply a coordinate change in order to deal with a
- // singularity which is not in normal form:
- map phi=r,x+y,y+z,x;
- poly q=phi(p);
- // Yes, q really looks ugly, now:
- q;
- ==>
x2+x3+3x2y+3xy2+y3+xy6+y7+6xy5z+6y6z+15xy4z2+15y5z2+20xy3z3+20y4z3+15xy2z\
-
4+15y3z4+6xyz5+6y2z5+xz6+yz6+y8+8y7z+28y6z2+56y5z3+70y4z4+56y3z5+28y2z6+8\
- yz7+z8
- // Classification
- classify(q);
- ==> About the singularity :
- ==> Milnor number(f) = 14
- ==> Corank(f) = 2
- ==> Determinacy <= 12
- ==> Guessing type via Milnorcode: E[6k+2]=E[14]
- ==>
- ==> Computing normal form ...
- ==> I have to apply the splitting lemma. This will take some time....:-)
- ==> Arnold step number 9
- ==> The singularity
- ==>
x3-9/4x4+27/4x5-189/8x6+737/8x7+6x6y+15x5y2+20x4y3+15x3y4+6x2y5+xy6-24\
-
089/64x8-x7y+11/2x6y2+26x5y3+95/2x4y4+47x3y5+53/2x2y6+8xy7+y8+104535/64x9\
-
+27x8y+135/2x7y2+90x6y3+135/2x5y4+27x4y5+9/2x3y6-940383/128x10-405/4x9y-2\
-
025/8x8y2-675/2x7y3-2025/8x6y4-405/4x5y5-135/8x4y6+4359015/128x11+1701/4x\
-
10y+8505/8x9y2+2835/2x8y3+8505/8x7y4+1701/4x6y5+567/8x5y6-82812341/512x12\
-
-15333/8x11y-76809/16x10y2-25735/4x9y3-78525/16x8y4-16893/8x7y5-8799/16x6\
- y6-198x5y7-495/4x4y8-55x3y9-33/2x2y10-3xy11-1/4y12
- ==> is R-equivalent to E[14].
- ==> Milnor number = 14
- ==> modality = 1
- ==> 2z2+x3+xy6+y8
- // The library also provides routines to determine the corank of q
- // and its residual part without going through the whole
- // classification algorithm.
- corank(q);
- ==> 2
- morsesplit(q);
- ==>
y3-9/4y4+27/4y5-189/8y6+737/8y7+6y6z+15y5z2+20y4z3+15y3z4+6y2z5+yz6-24089\
-
/64y8-y7z+11/2y6z2+26y5z3+95/2y4z4+47y3z5+53/2y2z6+8yz7+z8+104535/64y9+27\
-
y8z+135/2y7z2+90y6z3+135/2y5z4+27y4z5+9/2y3z6-940383/128y10-405/4y9z-2025\
-
/8y8z2-675/2y7z3-2025/8y6z4-405/4y5z5-135/8y4z6+4359015/128y11+1701/4y10z\
-
+8505/8y9z2+2835/2y8z3+8505/8y7z4+1701/4y6z5+567/8y5z6-82812341/512y12-15\
-
333/8y11z-76809/16y10z2-25735/4y9z3-78525/16y8z4-16893/8y7z5-8799/16y6z6-\
- 198y5z7-495/4y4z8-55y3z9-33/2y2z10-3yz11-1/4z12
-
-
-File: sing.info, Node: Fast lexicographical GB, Next: Parallelization with
MPtcp links, Prev: Classification, Up: Examples
-
-A.27 Fast lexicographical GB
-============================
-
-Compute Groebner basis in lexicographical ordering by using the FGLM
-algorithm (`stdfglm') and Hilbert driven Groebner (`stdhilb').
-
-The command `stdfglm' applies only for zero-dimensional ideals and
-returns a reduced Groebner basis.
-
-For the ideal below, `stdfglm' is more than 100 times and `stdhilb'
-about 10 times faster than `std'.
-
- ring r =32003,(a,b,c,d,e),lp;
- ideal i=a+b+c+d, ab+bc+cd+ae+de, abc+bcd+abe+ade+cde,
- abc+abce+abde+acde+bcde, abcde-1;
- int t=timer;
- ideal j1=stdfglm(i);
- timer-t;
- ==> 0
- size(j1); // size (no. of polys) in computed GB
- ==> 5
- t=timer;
- ideal j2=stdhilb(i);
- timer-t;
- ==> 0
- size(j2); // size (no. of polys) in computed GB
- ==> 158
- // usual Groebner basis computation for lex ordering
- t=timer;
- ideal j0 =std(i);
- timer-t;
- ==> 1
-
-
-File: sing.info, Node: Parallelization with MPtcp links, Prev: Fast
lexicographical GB, Up: Examples
-
-A.28 Parallelization with MPtcp links
-=====================================
-
-In this example, we demonstrate how MPtcp links can be used to
-parallelize computations.
-
-To compute a standard basis for a zero-dimensional ideal in the
-lexicographical ordering, one of the two powerful routines `stdhilb'
-(see *note stdhilb::) and `stdfglm' (see *note stdfglm::) should be
-used. However, a priory one can not predict which one of the two
-commands is faster. This very much depends on the (input) example.
-Therefore, we use MPtcp links to let both commands work on the problem
-independently and in parallel, so that the one which finishes first
-delivers the result.
-
-The example we use is the so-called "omdi example". See Tim Wichmann;
-Der FGLM-Algorithmus: verallgemeinert und implementiert in Singular;
-Diplomarbeit Fachbereich Mathematik, Universitaet Kaiserslautern; 1997
-for more details.
-
- ring r=0,(a,b,c,u,v,w,x,y,z),lp;
- ideal i=a+c+v+2x-1, ab+cu+2vw+2xy+2xz-2/3, ab2+cu2+2vw2+2xy2+2xz2-2/5,
- ab3+cu3+2vw3+2xy3+2xz3-2/7, ab4+cu4+2vw4+2xy4+2xz4-2/9, vw2+2xyz-1/9,
- vw4+2xy2z2-1/25, vw3+xyz2+xy2z-1/15, vw4+xyz3+xy3z-1/21;
-
- link l_hilb,l_fglm = "MPtcp:fork","MPtcp:fork"; // 1.
-
- open(l_fglm); open(l_hilb);
-
- write(l_hilb, quote(system("pid"))); // 2.
- write(l_fglm, quote(system("pid")));
- int pid_hilb,pid_fglm = read(l_hilb),read(l_fglm);
-
- write(l_hilb, quote(stdhilb(i))); // 3.
- write(l_fglm, quote(stdfglm(eval(i))));
-
- while ((! status(l_hilb, "read", "ready", 1)) && // 4.
- (! status(l_fglm, "read", "ready", 1))) {}
-
- if (status(l_hilb, "read", "ready"))
- {
- "stdhilb won !!!!"; size(read(l_hilb));
- close(l_hilb); pid_fglm = system("sh","kill "+string(pid_fglm));
- }
- else // 5.
- {
- "stdfglm won !!!!"; size(read(l_fglm));
- close(l_fglm); pid_hilb = system("sh","kill "+string(pid_hilb));
- }
- ==> stdfglm won !!!!
- ==> 9
-Some explanatory remarks are in order:
- 1. Instead of using links of the type `MPtcp:fork', we alternatively
- could use `MPtcp:launch' links such that the two "competing"
- SINGULAR processes run on different machines. This has the
- advantage of "true" parallel computing since no resource sharing is
- involved (as it usually is with forked processes).
-
- 2. Unfortunately, MPtcp links do not offer means to (asynchronously)
- interrupt or kill an attached (i.e., launched or forked) process.
- Therefore, we explicitly need to get the process id numbers of the
- competing SINGULAR processes, so that we can "kill" the looser
- later.
-
- 3. Notice how quoting is used in order to prevent local evaluation
- (i.e., local computation of results). Since we "forked" the two
- competing processes, the identifier `i' is defined and has
- identical values in both child processes. Therefore, the innermost
- `eval' can be omitted (as is done for the `l_hilb' link), and only
- the identifier `i' needs to be communicated to the children.
- However, when `MPtcp:launch' links are used, the inner evaluation
- must be applied so that actual values, and not the identifiers are
- communicated (as is done for the `l_fglm' link).
-
- 4. We go into a "sleepy" loop and wait until one of the two children
- finished the computation. That is, the current process checks
- approximately once per second the status of one of the connecting
- links, and sleeps (i.e., suspends its execution) in the
- intermediate time.
-
- 5. The child which has won delivers the result and is terminated with
- the usual `close' command. The other child which is still computing
- needs to be terminated by an explicit (i.e., system) kill command,
- since it can not be terminated through the link while it is still
- computing.
-
-
-File: sing.info, Node: Polynomial data, Next: Mathematical background,
Prev: Examples, Up: Top
-
-Appendix B Polynomial data
-**************************
-
-* Menu:
-
-* Representation of mathematical objects::
-* Monomial orderings::
-
-
-File: sing.info, Node: Representation of mathematical objects, Next:
Monomial orderings, Up: Polynomial data
-
-B.1 Representation of mathematical objects
-==========================================
-
-SINGULAR distinguishes between objects which do not belong to a ring and
-those which belong to a specific ring (see *note Rings and orderings::).
-We comment only on the latter ones.
-
-Internally all ring-dependent objects are polynomials or structures
-built from polynomials (and some additional information). Note that
-SINGULAR stores (and hence prints) a polynomial automatically w.r.t. the
-monomial ordering.
-
-Hence, in order to define such an object in SINGULAR, one has to give a
-list of polynomials in a specific format.
-
-For ideals, resp. matrices, this is straight forward: The user gives a
-list of polynomials which generate the ideal, resp. which are the
-entries of the matrix. (The number of rows and columns has to be given
-when creating the matrix.)
-
-A vector in SINGULAR is always an element of a free module over the
-basering. It is given as a list of polynomials in one of the following
-formats $[f_1,...,f_n]$ or $f_1*gen(1)+...+f_n*gen(n)$, where $gen(i)$
-[f_1,...,f_n] or f_1*gen(1)+...+f_n*gen(n), where gen(i) denotes the
-i-th canonical generator of a free module (with 1 at place i and 0
-everywhere else). Both forms are equivalent. A vector is internally
-represented in the second form with the $gen(i)$
-gen(i) being "special" ring variables, ordered accordingly to the
-monomial ordering. Therefore, the form $[f_1,...,f_n]$
-[f_1,...,f_n] is given as output only if the monomial ordering gives
-priority to the component, i.e., is of the form `(c,...)' (see *note
-Module orderings::). However, in any case the procedure `show' from the
-library `inout.lib' displays the bracket format.
-
-A vector $v=[f_1,...,f_n]$
-v=[f_1,...,f_n] should always be considered as a column vector in a free
-module of rank equal to nrows($v$)
-nrows(v) where nrows($v$)
-nrows(v) is equal to the maximal index $r$
-r such that $f_r \not= 0$.
-f_r<>0. This is due to the fact, that internally $v$
-v is a polynomial in a sparse representation, i.e., $f_i*gen(i)$
-f_i*gen(i) is not stored if $f_i=0$
-f_i=0 (for reasons of efficiency), hence the last 0-entries of $v$
-v are lost. Only more complex structures are able to keep the rank.
-
-A module $M$
-M in SINGULAR is given by a list of vectors $v_1,...,v_k$
-v_1,....v_k which generate the module as a submodule of the free module
-of rank equal to nrows($M$)
-nrows(M) which is the maximum of nrows($v_i$).
-nrows(v_i).
-
-If one wants to create a module with a larger rank than given by its
-generators, one has to use the command `attrib(M,"rank",r)' (see *note
-attrib::, *note nrows::) or to define a matrix first, then converting it
-into a module. Modules in SINGULAR are almost the same as matrices,
-they may be considered as sparse representations of matrices. A module
-of a matrix is generated by the columns of the matrix and a matrix of a
-module has as columns the generators of the module. These conversions
-preserve the rank and the number of generators, resp. the number of rows
-and columns.
-
-By the above remarks it might appear that SINGULAR is only able to
-handle submodules of a free module. However, this is not true. SINGULAR
-can compute with any finitely generated module over the basering $R$.
-R. Such a module, say $N$,
-N, is not represented by its generators but by its (generators and)
-relations. This means that $N = R^n/M$ where $n$
-N = R^n/M where n is the number of generators of $N$ and $M \subseteq R^n$
-N and M in R^n is the module of relations. In other words, defining a
-module $M$
-M as a submodule of a free module $R^n$
-R^n can also be considered as the definition of $N = R^n/M$.
-N=R^n/M.
-
-Note that most functions, when applied to a module $M$,
-M, really deal with $M$.
-M. However, there are some functions which deal with $N = R^n/M$ instead of
$M$.
-N=R^n/M instead of M.
-
-For example, `std(M)' computes a standard basis of $M$
-M (and thus gives another representation of $N$ as $N = R^n/$std($M$)).
-N as N=R^n/std(M)). However, `dim(M)', resp. `vdim(M)', returns dim$(R^n/M)$,
resp.@: dim$_k(R^n/M)$
-dim(R^n/M), resp. dim_k(R^n/M) (if M is given by a standard basis).
-
-The function `syz(M)' returns the first syzygy module of $M$,
-M, i.e., the module of relations of the given generators of $M$
-M which is equal to the second syzygy module of $N$.
-N. Refer to the description of each function in *note Functions:: to
-get information which module the function deals with.
-
-The numbering in `res' and other commands for computing resolutions
-refers to a resolution of $N = R^n/M$
-N=R^n/M (see *note res::; *note Syzygies and resolutions::).
-
-It is possible to compute in any field which is a valid ground field in
-SINGULAR. For doing so, one has to define a ring with the desired
-ground field and at least one variable. The elements of the field are of
-type number, but may also be considered as polynomials (of degree 0).
-Large computations should be faster if the elements of the field are
-defined as numbers.
-
-The above remarks do also apply to quotient rings. Polynomial data are
-stored internally in the same manner, the only difference is that this
-polynomial representation is in general not unique. `reduce(f,std(0))'
-computes a normal form of a polynomial f in a quotient ring (cf. *note
-reduce::).
-
-
-File: sing.info, Node: Monomial orderings, Prev: Representation of
mathematical objects, Up: Polynomial data
-
-B.2 Monomial orderings
-======================
-
-* Menu:
-
-* Introduction to orderings::
-* General definitions for orderings::
-* Global orderings::
-* Local orderings::
-* Module orderings::
-* Matrix orderings::
-* Product orderings::
-* Extra weight vector::
-
-
-File: sing.info, Node: Introduction to orderings, Next: General definitions
for orderings, Up: Monomial orderings
-
-B.2.1 Introduction to orderings
--------------------------------
-
-SINGULAR offers a great variety of monomial orderings which provide an
-enormous functionality, if used diligently. However, this flexibility
-might also be confusing for the novice user. Therefore, we recommend to
-those not familiar with monomial orderings to generally use the ordering
-`dp' for computations in the polynomial ring $K[x_1,\ldots,x_n]$,
-K[x1,...,xn], resp. `ds' for computations in the localization
$\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$.
-Loc_(x)K[x1,...,xn].
-
-For inhomogeneous input ideals, standard (resp. groebner) bases
-computations are generally faster with the orderings $\hbox{Wp}(w_1, \ldots,
w_n)$
-Wp(w_1, ..., w_n) (resp. $\hbox{Ws}(w_1, \ldots, w_n)$)
-Ws(w_1, ..., w_n)) if the input is quasihomogeneous w.r.t. the weights $w_1$,
$\ldots$, $w_n$ of $x_1$, $\ldots$, $x_n$.
-w_1, ..., w_n of x_1, ..., x_n.
-
-If the output needs to be "triangular" (resp. "block-triangular"), the
-lexicographical ordering `lp' (resp. lexicographical block-orderings)
-need to be used. However, these orderings usually result in much less
-efficient computations.
-
-
-File: sing.info, Node: General definitions for orderings, Next: Global
orderings, Prev: Introduction to orderings, Up: Monomial orderings
-
-B.2.2 General definitions for orderings
----------------------------------------
-
-A monomial ordering (term ordering) on $K[x_1, \ldots, x_n]$ is
-a total ordering $<$ on the
-set of monomials (power products) $\{x^\alpha \mid \alpha \in \bf{N}^n\}$
-which is compatible with the
-natural semigroup structure, i.e., $x^\alpha < x^\beta$ implies $x^\gamma
-x^\alpha < x^\gamma x^\beta$ for any $\gamma \in \bf{N}^n$.
-We do not require
-$<$ to be a well ordering.
-A monomial ordering (term ordering) on K[x_1, ..., x_n] is a total
-ordering < on the set of monomials (power products) {x^a | a in N^n}
-which is compatible with the natural semigroup structure, i.e., x^a <
-x^b implies x^c*x^a < x^c*x^b for any c in N^n. We do not require < to
-be a well ordering. See the literature cited in *note References::.
-
-It is known that any monomial ordering can be represented by a matrix $M$ in
$GL(n,R)$,
-M in GL(n,R), but, of course, only integer coefficients are of relevance
-in practice.
-
-Global orderings are well orderings (i.e., \hbox{$1 < x_i$} for each variable
-$x_i$), local orderings satisfy $1 > x_i$ for each variable. If some
variables are ordered globally and others locally we
-call it a mixed ordering. Local or mixed orderings are not well orderings.
-
-Let $K$ be the ground field, \hbox{$x = (x_1, \ldots, x_n)$} the
-variables and $<$ a monomial ordering, then Loc $K[x]$ denotes the
-localization of $K[x]$ with respect to the multiplicatively closed set $$\{1 +
-g \mid g = 0 \hbox{ or } g \in K[x]\backslash \{0\} \hbox{ and }L(g) <
-1\}.$$ Here, $L(g)$
-denotes the leading monomial of $g$, i.e., the biggest monomial of $g$ with
-respect to $<$. The result of any computation which uses standard basis
-computations has to be interpreted in Loc $K[x]$.
-Global orderings are well orderings (i.e., 1 < x_i for each variable
-x_i), local orderings satisfy 1 > x_i for each variable. If some
-variables are ordered globally and others locally we call it a mixed
-ordering. Local or mixed orderings are not well orderings.
-
-If K is the ground field, x = (x_1, ..., x_n) the variables and < a
-monomial ordering, then Loc K[x] denotes the localization of K[x] with
-respect to the multiplicatively closed set {1 + g | g = 0 or g in
-K[x]\{0} and L(g) < 1}. L(g) denotes the leading monomial of g, i.e.,
-the biggest monomial of g with respect to <. The result of any
-computation which uses standard basis computations has to be interpreted
-in Loc K[x].
-
-Note that the definition of a ring includes the definition of its
-monomial ordering (see *note Rings and orderings::). SINGULAR offers the
-monomial orderings described in the following sections.
-
-
-File: sing.info, Node: Global orderings, Next: Local orderings, Prev:
General definitions for orderings, Up: Monomial orderings
-
-B.2.3 Global orderings
-----------------------
-
-For all these orderings: Loc $K[x]$ = $K[x]$
-For all these orderings: Loc K[x] = K[x]
-
-lp:
- lexicographical ordering:
- x^a < x^b <==> there is an i, 1 <= i <= n :
- a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
- \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i <
- \beta_i$.
-
-rp:
- reverse lexicographical ordering:
- x^a < x^b <==> there is an i, 1 <= i <= n :
- a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
- \alpha_n = \beta_n,
- \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
-
-dp:
- degree reverse lexicographical ordering:
- let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
-
- x^a < x^b <==>
- deg(x^a) < deg(x^b),
- or
- deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
- a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or
-
-\phantom{$x^\alpha < x^\beta \Leftrightarrow $}$ \deg(x^\alpha) =
- \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n,
- \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
-
-Dp:
- degree lexicographical ordering:
- let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
-
- x^a < x^b <==>
- deg(x^a) < deg(x^b)
- or
- deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
- a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or
-
-\phantom{ $x^\alpha < x^\beta \Leftrightarrow $} $\deg(x^\alpha) =
- \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1,
- \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$
-
-wp:
- weighted reverse lexicographical ordering:
- wp(w_1, ..., w_n), w_i positive integers, let $w_1, \ldots, w_n$ be
positive integers. Then ${\tt wp}(w_1, \ldots,
- w_n)$
- is defined as `dp' but with deg(x^a) = w_1 a_1 + ... + w_n a_n.
-$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$
-
-Wp:
- weighted lexicographical ordering:
- Wp(w_1, ..., w_n), w_i positive integers, let $w_1, \ldots, w_n$ be
positive integers. Then ${\tt Wp}(w_1, \ldots,
- w_n)$
- is defined as `Dp' but with deg(x^a) = w_1 a_1 + ... + w_n a_n.
-$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$
-
-
-File: sing.info, Node: Local orderings, Next: Module orderings, Prev:
Global orderings, Up: Monomial orderings
-
-B.2.4 Local orderings
----------------------
-
-For ls, ds, Ds and, if the weights are positive integers, also for ws
-and Ws, we have Loc K[x] = K[x]_(x), Loc $K[x]$ = $K[x]_{(x)}$,
- the localization of $K[x]$
-K[x] at the maximal ideal (x_1, ..., x_n). \ $(x_1, ..., x_n)$.
-
-ls:
- negative lexicographical ordering:
- x^a < x^b <==> there is an i, 1 <= i <= n :
- a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \exists\; 1 \le i \le n :
- \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i >
- \beta_i$.
-
-ds:
- negative degree reverse lexicographical ordering:
- let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
-
- x^a < x^b <==>
- deg(x^a) > deg(x^b)
- or
- deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
- a_n = b_n, ..., a_(i+1) = b_(i+1), a_i > b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or
-
-\phantom{ $x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) =
- \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n,
- \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$
-
-Ds:
- negative degree lexicographical ordering:
- let deg(x^a) = a_1 + ... + a_n, then let $\deg(x^\alpha) = \alpha_1 +
\cdots + \alpha_n,$ then
- x^a < x^b <==>
- deg(x^a) > deg(x^b)
- or
- deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n:
- a_1 = b_1, ..., a_(i-1) = b_(i-1), a_i < b_i. $x^\alpha < x^\beta
\Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or
-
-\phantom{ $ x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) =
- \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1,
- \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$
-
-ws:
- (general) weighted reverse lexicographical ordering:
- ws(w_1, ..., w_n), w_1 ${\tt ws}(w_1, \ldots, w_n),\; w_1$
- a nonzero integer, w_2,...,w_n $w_2,\ldots,w_n$
- any integer (including 0), is defined as `ds' but with
- deg(x^a) = w_1 a_1 + ... + w_n a_n. $\deg(x^\alpha) = w_1 \alpha_1 +
\cdots + w_n\alpha_n.$
-
-Ws:
- (general) weighted lexicographical ordering:
- Ws(w_1, ..., w_n), w_1 ${\tt Ws}(w_1, \ldots, w_n),\; w_1$
- a nonzero integer, w_2,...,w_n $w_2,\ldots,w_n$
- any integer (including 0), is defined as `Ds' but with
- deg(x^a) = w_1 a_1 + ... + w_n a_n. $\deg(x^\alpha) = w_1 \alpha_1 +
\cdots + w_n\alpha_n.$
-
-
-File: sing.info, Node: Module orderings, Next: Matrix orderings, Prev:
Local orderings, Up: Monomial orderings
-
-B.2.5 Module orderings
-----------------------
-
-SINGULAR offers also orderings on the set of "monomials" { x^a*gen(i) |
-a in N^n, 1 <= i <= r } in Loc K[x]^r = Loc K[x]gen(1) + ... + Loc
-K[x]gen(r), where gen(1), ..., gen(r) denote the canonical generators of
-Loc K[x]^r, the r-fold direct sum of Loc K[x]. $\{ x^a e_i \mid a \in N^n,
1 \leq i \leq r \}$ in Loc $K[x]^r$ = Loc
-$K[x]e_1
-+ \ldots +$Loc $K[x]e_r$, where $e_1, \ldots, e_r$ denote the canonical
-generators of Loc $K[x]^r$, the r-fold direct sum of Loc $K[x]$.
-(The function {\tt gen(i)} yields $e_i$).
-
-We have two possibilities: either to give priority to the component of a
-vector in Loc K[x]^r Loc $K[x]^r$
-or (which is the default in SINGULAR) to give priority to the
-coefficients. The orderings `(<,c)' and `(<,C)' give priority to the
-coefficients; whereas `(c,<)' and `(C,<)' give priority to the
-components.
-Let < be any of the monomial orderings of Loc $K[x]$
-Loc K[x] as above.
-
-(<,C):
- <_m = (<,C) denotes the module ordering (giving priority to the
- coefficients):
- x^a*gen(i) <_m x^b*gen(j) <==>
- x^a < x^b
- or
- x^a = x^b and i < j. $<_m = (<,C)$ denotes the module ordering (giving
priority to the coefficients):
-
-\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha <
- x^\beta$ or ($x^\alpha = x^\beta $ and $ i < j$).
-
- *Example:*
-
- ring r = 0, (x,y,z), ds;
- // the same as ring r = 0, (x,y,z), (ds, C);
- [x+y2,z3+xy];
- ==> x*gen(1)+xy*gen(2)+y2*gen(1)+z3*gen(2)
- [x,x,x];
- ==> x*gen(3)+x*gen(2)+x*gen(1)
-
-(C,<):
- <_m = (C, <) denotes the module ordering (giving priority to the
- component):
- x^a*gen(i) <_m x^b*gen(j) <==>
- i<j
- or
- i = j and x^a < x^b. $<_m = (C, <)$ denotes the module ordering (giving
priority to the component):
-
-\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow i < j$ or ($
- i = j $ and $ x^\alpha < x^\beta $).
-
- *Example:*
-
- ring r = 0, (x,y,z), (C,lp);
- [x+y2,z3+xy];
- ==> xy*gen(2)+z3*gen(2)+x*gen(1)+y2*gen(1)
- [x,x,x];
- ==> x*gen(3)+x*gen(2)+x*gen(1)
-
-(<,c):
- <_m = (<,c) denotes the module ordering (giving priority to the
- coefficients):
- x^a*gen(i) <_m x^b*gen(j) <==>
- x^a < x^b
- or
- x^a = x^b and i > j. $<_m = (<,c)$ denotes the module ordering (giving
priority to the coefficients):
-
-\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha <
- x^\beta$ or ($x^\alpha = x^\beta $ and $ i > j$).
-
- *Example:*
-
- ring r = 0, (x,y,z), (lp,c);
- [x+y2,z3+xy];
- ==> xy*gen(2)+x*gen(1)+y2*gen(1)+z3*gen(2)
- [x,x,x];
- ==> x*gen(1)+x*gen(2)+x*gen(3)
-
-(c,<):
- <_m = (c, <) denotes the module ordering (giving priority to the
- component):
- x^a*gen(i) <_m x^b*gen(j) <==>
- i>j
- or
- i = j and x^a < x^b. $<_m = (c, <)$ denotes the module ordering (giving
priority to the component):
-
-\quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow i > j$ or ($
- i = j $ and $ x^\alpha < x^\beta $).
-
- *Example:*
-
- ring r = 0, (x,y,z), (c,lp);
- [x+y2,z3+xy];
- ==> [x+y2,xy+z3]
- [x,x,x];
- ==> [x,x,x]
-
-The output of a vector v in K[x]^r with components v_1, ..., v_r has the
-format v_1 * gen(1) + ... + v_r * gen(r) The output of a vector $v$ in
$K[x]^r$ with components $v_1,
-\ldots, v_r$ has the format $v_1 * gen(1) + \ldots + v_r * gen(r)$
-(up to permutation) unless the ordering starts with `c'. In this case a
-vector is written as [v_1, ..., v_r]. In this case a vector is written as
$[v_1, \ldots, v_r]$.
-In all cases SINGULAR can read input in both formats.
-
-
-File: sing.info, Node: Matrix orderings, Next: Product orderings, Prev:
Module orderings, Up: Monomial orderings
-
-B.2.6 Matrix orderings
-----------------------
-
-Let $M$
-M be an invertible $(n \times n)$-matrix
-(n x n)-matrix with integer coefficients and M_1, ..., M_n the rows of
-M. $M_1, \ldots, M_n$ the rows of $M$.
-
-The M-ordering < is defined as follows:
-x^a < x^b <==> there exists an i: 1 <= i <= n : M_1*a = M_1*b, ...,
-M_(i-1)*a = M_(i-1)*b, M_i*a < M_i*b. \quad \quad $x^a < x^b \Leftrightarrow
\exists\ 1 \leq i \leq n :
-M_1 a = \; M_1 b, \ldots, M_{i-1} a = \; M_{i-1} b$ and $M_i a < \; M_i b$.
-
-Thus, x^a < x^b if and only if M*a is smaller than M*b $x^a < x^b$
-if and only if $M a$ is smaller than $M b$
-with respect to the lexicographical ordering.
-
-The following matrices represent (for 3 variables) the global and local
-orderings defined above (note that the matrix is not uniquely determined
-by the ordering):
-
-lp:
- 1 0 0
- 0 1 0
- 0 0 1
-
-dp:
- 1 1 1
- 0 0 -1
- 0 -1 0
-
-Dp:
- 1 1 1
- 1 0 0
- 0 1 0
-
-wp(1,2,3):
- 1 2 3
- 0 0 -1
- 0 -1 0
-
-Wp(1,2,3):
- 1 2 3
- 1 0 0
- 0 1 0
-
-ls:
- -1 0 0
- 0 -1 0
- 0 0 -1
-
-ds:
- -1 -1 -1
- 0 0 -1
- 0 -1 0
-
-Ds:
- -1 -1 -1
- 1 0 0
- 0 1 0
-
-ws(1,2,3):
- -1 -2 -3
- 0 0 -1
- 0 -1 0
-
-Ws(1,2,3):
- -1 -2 -3
- 1 0 0
- 0 1 0
-
-$\quad$ lp:
-$\left(\matrix{
- 1 & 0 & 0 \cr
- 0 & 1 & 0 \cr
- 0 & 0 & 1 \cr
- }\right)$
-\quad dp:
-$\left(\matrix{
- 1 & 1 & 1 \cr
- 0 & 0 &-1 \cr
- 0 &-1 & 0 \cr
- }\right)$
-\quad Dp:
-$\left(\matrix{
- 1 & 1 & 1 \cr
- 1 & 0 & 0 \cr
- 0 & 1 & 0 \cr
- }\right)$
-
-$\quad$ wp(1,2,3):
-$\left(\matrix{
- 1 & 2 & 3 \cr
- 0 & 0 &-1 \cr
- 0 &-1 & 0 \cr
- }\right)$
-\quad Wp(1,2,3):
-$\left(\matrix{
- 1 & 2 & 3 \cr
- 1 & 0 & 0 \cr
- 0 & 1 & 0 \cr
- }\right)$
-
-$\quad$ ls:
-$\left(\matrix{
--1 & 0 & 0 \cr
- 0 &-1 & 0 \cr
- 0 & 0 &-1 \cr
- }\right)$
-\quad ds:
-$\left(\matrix{
--1 &-1 &-1 \cr
- 0 & 0 &-1 \cr
- 0 &-1 & 0 \cr
- }\right)$
-\quad Ds:
-$\left(\matrix{
--1 &-1 &-1 \cr
- 1 & 0 & 0 \cr
- 0 & 1 & 0 \cr
- }\right)$
-
-$\quad$ ws(1,2,3):
-$\left(\matrix{
--1 &-2 &-3 \cr
- 0 & 0 &-1 \cr
- 0 &-1 & 0 \cr
- }\right)$
-\quad Ws(1,2,3):
-$\left(\matrix{
--1 &-2 &-3 \cr
- 1 & 0 & 0 \cr
- 0 & 1 & 0 \cr
- }\right)$
-
-Product orderings (see next section) represented by a matrix:
-
-(dp(3), wp(1,2,3)):
- 1 1 1 0 0 0
- 0 0 -1 0 0 0
- 0 -1 0 0 0 0
- 0 0 0 1 2 3
- 0 0 0 0 0 -1
- 0 0 0 0 -1 0
-
-(Dp(3), ds(3)):
- 1 1 1 0 0 0
- 1 0 0 0 0 0
- 0 1 0 0 0 0
- 0 0 0 -1 -1 -1
- 0 0 0 0 0 -1
- 0 0 0 0 -1 0
-$\quad$ (dp(3), wp(1,2,3)):
-$\left(\matrix{
-1& 1& 1& 0& 0& 0 \cr
-0& 0& -1& 0& 0& 0 \cr
-0& -1& 0& 0& 0& 0 \cr
-0& 0& 0& 1& 2& 3 \cr
-0& 0& 0& 0& 0& -1 \cr
-0& 0& 0& 0& -1& 0 \cr
- }\right)$
-
-$\quad$ (Dp(3), ds(3)):
-$\left(\matrix{
-1& 1& 1& 0& 0& 0 \cr
-1& 0& 0& 0& 0& 0 \cr
-0& 1& 0& 0& 0& 0 \cr
-0& 0& 0& -1& -1& -1 \cr
-0& 0& 0& 0& 0& -1 \cr
-0& 0& 0& 0& -1& 0 \cr
- }\right)$
-
-Orderings with extra weight vector (see below) represented by a matrix:
-
-(dp(3), a(1,2,3),dp(3)):
- 1 1 1 0 0 0
- 0 0 -1 0 0 0
- 0 -1 0 0 0 0
- 0 0 0 1 2 3
- 0 0 0 1 1 1
- 0 0 0 0 0 -1
- 0 0 0 0 -1 0
-
-(a(1,2,3,4,5),Dp(3), ds(3)):
- 1 2 3 4 5 0
- 1 1 1 0 0 0
- 1 0 0 0 0 0
- 0 1 0 0 0 0
- 0 0 0 -1 -1 -1
- 0 0 0 0 0 -1
- 0 0 0 0 -1 0
-$\quad$ (dp(3), a(1,2,3),dp(3)):
-$\left(\matrix{
-1& 1& 1& 0& 0& 0 \cr
-0& 0& -1& 0& 0& 0 \cr
-0& -1& 0& 0& 0& 0 \cr
-0& 0& 0& 1& 2& 3 \cr
-0& 0& 0& 1& 1& 1 \cr
-0& 0& 0& 0& 0& -1 \cr
-0& 0& 0& 0& -1& 0 \cr
- }\right)$
-
-$\quad$ (a(1,2,3,4,5),Dp(3), ds(3)):
-$\left(\matrix{
-1& 2& 3& 4& 5& 0 \cr
-1& 1& 1& 0& 0& 0 \cr
-1& 0& 0& 0& 0& 0 \cr
-0& 1& 0& 0& 0& 0 \cr
-0& 0& 0& -1& -1& -1 \cr
-0& 0& 0& 0& 0 & -1 \cr
-0& 0& 0& 0& -1& 0 \cr
- }\right)$
-
-
-*Example*:
- ring r = 0, (x,y,z), M(1, 0, 0, 0, 1, 0, 0, 0, 1);
-
-which may also be written as:
- intmat m[3][3]=1, 0, 0, 0, 1, 0, 0, 0, 1;
- m;
- ==> 1,0,0,
- ==> 0,1,0,
- ==> 0,0,1
- ring r = 0, (x,y,z), M(m);
- r;
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering M
- ==> // : names x y z
- ==> // : weights 1 0 0
- ==> // : weights 0 1 0
- ==> // : weights 0 0 1
- ==> // block 2 : ordering C
-
-If the ring has $n$
-n variables and the matrix contains less than $n \times n$
-n x n entries an error message is given, if there are more entries, the
-last ones are ignored.
-
-*WARNING:* SINGULAR does not check whether the matrix has full rank.
-In such a case some computations might not terminate, others might give
-a nonsense result.
-
-Having these matrix orderings SINGULAR can compute standard bases for
-any monomial ordering which is compatible with the natural semigroup
-structure. In practice the global and local orderings together with
-block orderings should be sufficient in most cases. These orderings are
-faster than the corresponding matrix orderings, since evaluating a
-matrix product is time consuming.
-
-
-File: sing.info, Node: Product orderings, Next: Extra weight vector, Prev:
Matrix orderings, Up: Monomial orderings
-
-B.2.7 Product orderings
------------------------
-
-Let x = (x_1, ..., x_n) = x(1..n) and y = (y_1, ..., y_m) = y(1..m) $x = (x_1,
\ldots, x_n)$ and $y = (y_1, \ldots, y_m)$
-be two ordered sets of variables, <_1 a monomial ordering on K[x] and
-<_2 a monomial ordering on K[y]. The product ordering (or block
-ordering) < = (<_1,<_2) on K[x,y] is the following:
-x^a y^b < x^A y^B <==>
-x^a <_1 x^A
-or
-x^a = x^A and y^b <_2 y^B. $<_1$ a monomial
-ordering on $K[x]$ and $<_2$ a monomial ordering on $K[y]$. The product
-ordering (or block ordering) $<\ := (<_1,<_2)$ on $K[x,y]$ is the following:
-
-\quad \quad $x^a y^b < x^A y^B \Leftrightarrow x^a <_1 x^A $ or ($x^a =
-x^A$ and $y^b <_2 y^B$).
-
-Inductively one defines the product ordering of more than two monomial
-orderings.
-
-In SINGULAR, any of the above global orderings, local orderings or
-matrix orderings may be combined (in an arbitrary manner and length) to
-a product ordering. E.g., `(lp(3), M(1, 2, 3, 1, 1, 1, 1, 0, 0),
-ds(4), ws(1,2,3))' defines: `lp' on the first 3 variables, the matrix
-ordering `M(1, 2, 3, 1, 1, 1, 1, 0, 0)' on the next 3 variables, `ds' on
-the next 4 variables and `ws(1,2,3)' on the last 3 variables.
-
-
-File: sing.info, Node: Extra weight vector, Prev: Product orderings, Up:
Monomial orderings
-
-B.2.8 Extra weight vector
--------------------------
-
-a(w_1, ..., w_n), ${\tt a}(w_1, \ldots, w_n),\; $
-w_1,...,w_n $w_1,\ldots,w_n$
-any integers (including 0), defines deg(x^a) = w_1 a_1 + ... + w_n a_n
-$\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n$
-and
-deg(x^a) < deg(x^b) ==> x^a < x^b $$\deg(x^\alpha) < \deg(x^\beta)
\Rightarrow x^\alpha < x^\beta,$$
-
-deg(x^a) > deg(x^b) ==> x^a > x^b. $$\deg(x^\alpha) > \deg(x^\beta)
\Rightarrow x^\alpha > x^\beta. $$
-
-An extra weight vector does not define a monomial ordering by itself: it
-can only be used in combination with other orderings to insert an extra
-line of weights into the ordering matrix.
-
-
-*Example*:
- ring r = 0, (x,y,z), (a(1,2,3),wp(4,5,2));
- ring s = 0, (x,y,z), (a(1,2,3),dp);
- ring q = 0, (a,b,c,d),(lp(1),a(1,2,3),ds);
-
-
-File: sing.info, Node: Mathematical background, Next: SINGULAR libraries,
Prev: Polynomial data, Up: Top
-
-Appendix C Mathematical background
-**********************************
-
-This chapter introduces some of the mathematical notions and definitions
-used throughout the manual. It is mostly a collection of the most
-prominent definitions and properties. For details, please, refer to some
-articles or text books (see *note References::).
-
-* Menu:
-
-* Standard bases::
-* Hilbert function::
-* Syzygies and resolutions::
-* Characteristic sets::
-* Gauss-Manin connection::
-* Toric ideals and integer programming::
-* References::
-
-
-File: sing.info, Node: Standard bases, Next: Hilbert function, Up:
Mathematical background
-
-C.1 Standard bases
-==================
-
-Definition
-----------
-
-Let $R = \hbox{Loc}_< K[\underline{x}]$ and let $I$ be a submodule of $R^r$.
-Note that for r=1 this means that $I$ is an ideal in $R$.
-Denote by $L(I)$ the submodule of $R^r$ generated by the leading terms
-of elements of $I$, i.e. by $\left\{L(f) \mid f \in I\right\}$.
-Then $f_1, \ldots, f_s \in I$ is called a {\bf standard basis} of $I$
-if $L(f_1), \ldots, L(f_s)$ generate $L(I)$.
-Let R = Loc K[x] and let I be a submodule of $R^r$. Denote by L(I) the
-submodule of R^r generated by the leading terms of elements in $I$, i.e.
-by { L(f) | f in I}. Then f_1, ..., f_s in I is called a *standard
-basis* of I if L(f_1), ..., L(f_s) generate L(I).
-
-Properties
-----------
-
-normal form:
-A function $\hbox{NF} : R^r \times \{G \mid G\ \hbox{ a standard
- basis}\} \to R^r, (p,G) \mapsto \hbox{NF}(p|G)$, is called a {\bf normal
- form} if for any $p \in R^r$ and any standard basis $G$ the following
- holds: if $\hbox{NF}(p|G) \not= 0$ then $L(g)$ does not divide
- $L(\hbox{NF}(p|G))$ for all $g \in G$.
-
- \noindent
- $\hbox{NF}(p|G)$ is called a {\bf normal form of} $p$ {\bf with
- respect to} $G$ (note that such a function is not unique).
- A function NF : R^r x {G | G a standard basis} -> R^r, (p,G) ->
- NF(p|G), is called a *normal form* if for any p in R^r and any
- standard basis G the following holds: if NF(p|G) <> 0 then L(g)
- does not divide L(NF(p|G)) for all g in G.
- NF(p|G) is called a *normal form* of p with respect to G (note that
- such a function is not unique).
-
-ideal membership:
-For a standard basis $G$ of $I$ the following holds:
- $f \in I$ if and only if $\hbox{NF}(f,G) = 0$.
- For a standart basis G of I the following holds: f in I if and only
- if NF(f,G) = 0.
-
-Hilbert function:
-Let \hbox{$I \subseteq K[\underline{x}]^r$} be a homogeneous module, then the
Hilbert function
- $H_I$ of $I$ (see below)
- and the Hilbert function $H_{L(I)}$ of the leading module $L(I)$
- coincide, i.e.,
- $H_I=H_{L(I)}$.
- Let I in K[x]^r be a homogeneous ideal, then the Hilbert function
- H_I of I and the Hilbert function H_L(I) of the leading ideal L(I)
- coincide.
-
-
-File: sing.info, Node: Hilbert function, Next: Syzygies and resolutions,
Prev: Standard bases, Up: Mathematical background
-
-C.2 Hilbert function
-====================
-
-Let M $=\bigoplus_i M_i$ be a graded module over $K[x_1,..,x_n]$ with
-respect to weights $(w_1,..w_n)$.
-The {\bf Hilbert function} of $M$, $H_M$, is defined (on the integers) by
-$$H_M(k) :=dim_K M_k.$$
-The {\bf Hilbert-Poincare series} of $M$ is the power series
-$$\hbox{HP}_M(t) :=\sum_{i=-\infty}^\infty
-H_M(i)t^i=\sum_{i=-\infty}^\infty dim_K M_i \cdot t^i.$$
-It turns out that $\hbox{HP}_M(t)$ can be written in two useful ways
-for weights $(1,..,1)$:
-$$\hbox{HP}_M(t)={Q(t)\over (1-t)^n}={P(t)\over (1-t)^{dim(M)}}$$
-where $Q(t)$ and $P(t)$ are polynomials in ${\bf Z}[t]$.
-$Q(t)$ is called the {\bf first Hilbert series},
-and $P(t)$ the {\bf second Hilbert series}.
-If \hbox{$P(t)=\sum_{k=0}^N a_k t^k$}, and \hbox{$d = dim(M)$},
-then \hbox{$H_M(s)=\sum_{k=0}^N a_k$ ${d+s-k-1}\choose{d-1}$}
-(the {\bf Hilbert polynomial}) for $s \ge N$.
-Let M =(+) M_i be a graded module over K[x_1,...,x_n] with respect to
-weights (w_1,..w_n). The Hilbert function of M H_M is defined by
- H_M(k)=dim_K M_k.
-The Hilbert-Poincare series of M is the power series
- HP_M(t)=sum_i dim_K (M_i)*t^i.
-It turns out that HP_M(t) can be written in two useful ways for weights
-$(1,..,1)$:
- H_M(t)=Q(t)/(1-t)^n=P(t)/(1-t)^dim(M).
-where Q(t) and P(t) are polynomials in Z[t]. Q(t) is called the first
-Hilbert series, and P(t) the second Hilbert series. If P(t)=sum_(k=0)^N
-a_k t^k, and d=dim(M), then
- H_M(s)=sum_(k=0)^N a_k binomial(d+s-k-1,d-1) (the Hilbert polynomial)
-for s >= N.
-Generalizing these to quasihomogeneous modules we get
-$$\hbox{HP}_M(t)={Q(t)\over {\Pi_{i=1}^n(1-t^{w_i})}}$$
-where $Q(t)$ is a polynomial in ${\bf Z}[t]$.
-$Q(t)$ is called the {\bf first (weighted) Hilbert series} of M.
-Generalizing these to quasihomogeneous modules we get
- H_M(t)=Q(t)/Prod((1-t)^(w_i)).
-where Q(t) is a polynomial in Z[t]. Q(t) is called the first (weighted)
-Hilbert series of M.
-
-
-File: sing.info, Node: Syzygies and resolutions, Next: Characteristic sets,
Prev: Hilbert function, Up: Mathematical background
-
-C.3 Syzygies and resolutions
-============================
-
-Syzygies
---------
-
-Let $R$ be a quotient of $\hbox{Loc}_< K[\underline{x}]$ and let
\hbox{$I=(g_1, ..., g_s)$} be a submodule of $R^r$.
-Then the {\bf module of syzygies} (or {\bf 1st syzygy module}, {\bf module of
relations}) of $I$, syz($I$), is defined to be the kernel of the map \hbox{$R^s
\rightarrow R^r,\; \sum_{i=1}^s w_ie_i \mapsto \sum_{i=1}^s w_ig_i$.}
-Let R be a quotient of Loc K[x] and let I=(g_1, ..., g_s) be a submodule
-of R^r. Then the *module of syzygies* (or *1st syzygy module*, *module
-of relations*) of I, syz(I), is defined to be the kernel of the map
- R^s -> R^r,
- w_1*e_1 + ... + w_s*e_s -> w_1*g_1 + ... + w_s*g_s.
-
-The *k-th syzygy module* is defined inductively to be the module of
-syzygies of the $(k-1)$-st
-(k-1)-st syzygy module.
-
-Note, that the syzygy modules of $I$ depend on a choice of generators $g_1,
..., g_s$.
-But one can show that they depend on $I$ uniquely up to direct summands.
-Note, that the syzygy modules of I depend on a choice of generators g_1,
-..., g_s. But one can show that they depend on I uniquely up to direct
-summands.
-
-`*Example:*'
-
- ring R= 0,(u,v,x,y,z),dp;
- ideal i=ux, vx, uy, vy;
- print(syz(i));
- ==> -y,0, -v,0,
- ==> 0, -y,u, 0,
- ==> x, 0, 0, -v,
- ==> 0, x, 0, u
-
-Free resolutions
-----------------
-
-Let $I=(g_1,...,g_s)\subseteq R^r$ and $M= R^r/I$.
-A {\bf free resolution of $M$} is a long exact sequence
-$$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1
-\buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow M\longrightarrow
-0,$$
-Let I=(g_1,...,g_s) in R^r and M=R^r/I. A free resolution of M is a
-long exact sequence
- ...-> F2 -A2-> F1 -A1-> F0->M->0,
-
-where the columns of the matrix $A_1$
-A_1 generate I $I$
-. Note, that resolutions need not to be finite (i.e., of finite length).
-The Hilbert Syzygy Theorem states, that for $R=\hbox{Loc}_< K[\underline{x}]$
-R=Loc K[x] there exists a ("minimal") resolution of length not exceeding
-the number of variables.
-
-`*Example:*'
-
- ring R= 0,(u,v,x,y,z),dp;
- ideal I = ux, vx, uy, vy;
- resolution resI = mres(I,0); resI;
- ==> 1 4 4 1
- ==> R <-- R <-- R <-- R
- ==>
- ==> 0 1 2 3
- ==>
- // The matrix A_1 is given by
- print(matrix(resI[1]));
- ==> vy,uy,vx,ux
- // We see that the columns of A_1 generate I.
- // The matrix A_2 is given by
- print(matrix(resI[3]));
- ==> u,
- ==> -v,
- ==> -x,
- ==> y
-
-Betti numbers and regularity
-----------------------------
-
-Let $R$ be a graded ring (e.g., $R = \hbox{Loc}_< K[\underline{x}]$) and
-let $I \subset R^r$ be a graded submodule. Let
-$$
- R^r = \bigoplus_a R\cdot e_{a,0} \buildrel A_1 \over \longleftarrow
- \bigoplus_a R\cdot e_{a,1} \longleftarrow \ldots \longleftarrow
- \bigoplus_a R\cdot e_{a,n} \longleftarrow 0
-$$
-be a minimal free resolution of $R^n/I$ considered with homogeneous maps
-of degree 0. Then the {\bf graded Betti number} $b_{i,j}$ of $R^r/I$ is
-the minimal number of generators $e_{a,j}$ in degree $i+j$ of the $j$-th
-syzygy module of $R^r/I$ (i.e., the $(j-1)$-st syzygy module of
-$I$). Note, that by definition the $0$-th syzygy module of $R^r/I$ is $R^r$
-and the 1st syzygy module of $R^r/I$ is $I$.
-Let R be a graded ring (e.g., R = K[x]) and let I in R^r be a graded
-submodule. Let
- R^r = (+) K[x]e(a,0) <-- (+) K[x]e(a,1)
- <-- ... <-- (+) K[x]e(a,n) <-- 0
-be a minimal free resolution of R^n/I considered with homogeneous maps
-of degree 0. Then the *graded Betti number* b_i,j of R^r/I is the
-minimal number of generators e_a,j in degree i+j of the j-th syzygy
-module of R^r/I (i.e., the (j-1)-st syzygy module of I). Note, that by
-definition the 0th syzygy module of R^r/I is R^r and the 1st syzygy
-module of R^r/I is I.
-
-The *regularity* of I $I$
- is the smallest integer s $s$
-
-such that $$
- \hbox{deg}(e_{a,j}) \le s+j-1 \quad \hbox{for all $j$.}
-$$
- deg(e(a,j)) <= s+j-1 for all j.
-
-`*Example:*'
-
- ring R= 0,(u,v,x,y,z),dp;
- ideal I = ux, vx, uy, vy;
- resolution resI = mres(I,0); resI;
- ==> 1 4 4 1
- ==> R <-- R <-- R <-- R
- ==>
- ==> 0 1 2 3
- ==>
- // the betti number:
- print(betti(resI), "betti");
- ==> 0 1 2 3
- ==> ------------------------------
- ==> 0: 1 - - -
- ==> 1: - 4 4 1
- ==> ------------------------------
- ==> total: 1 4 4 1
- // the regularity:
- regularity(resI);
- ==> 2
-
-
-File: sing.info, Node: Characteristic sets, Next: Gauss-Manin connection,
Prev: Syzygies and resolutions, Up: Mathematical background
-
-C.4 Characteristic sets
-=======================
-
-Let $<$ be the lexicographical ordering on $R=K[x_1,...,x_n]$ with $x_1
-< ... < x_n$.
-For $f \in R$ let lvar($f$) (the leading variable of $f$) be the largest
-variable in $f$,
-i.e., if $f=a_s(x_1,...,x_{k-1})x_k^s+...+a_0(x_1,...,x_{k-1})$ for some
-$k \leq n$ then lvar$(f)=x_k$.
-
-Moreover, let
-\hbox{ini}$(f):=a_s(x_1,...,x_{k-1})$. The pseudo remainder
-$r=\hbox{prem}(g,f)$ of $g$ with respect to $f$ is
-defined by the equality $\hbox{ini}(f)^a\cdot g = qf+r$ with
-$\hbox{deg}_{lvar(f)}(r)<\hbox{deg}_{lvar(f)}(f)$ and $a$
-minimal.
-
-A set $T=\{f_1,...,f_r\} \subset R$ is called triangular if
-$\hbox{lvar}(f_1)<...<\hbox{lvar}(f_r)$. Moreover, let $ U \subset T $,
-then $(T,U)$ is called a triangular system, if $T$ is a triangular set
-such that $\hbox{ini}(T)$ does not vanish on $V(T) \setminus V(U)
-(=:V(T\setminus U))$.
-
-$T$ is called irreducible if for every $i$ there are no
-$d_i$,$f_i'$,$f_i''$ such that
-$$ \hbox{lvar}(d_i)<\hbox{lvar}(f_i) =
-\hbox{lvar}(f_i')=\hbox{lvar}(f_i''),$$
-$$ 0 \not\in \hbox{prem}(\{ d_i, \hbox{ini}(f_i'),
-\hbox{ini}(f_i'')\},\{ f_1,...,f_{i-1}\}),$$
-$$\hbox{prem}(d_if_i-f_i'f_i'',\{f_1,...,f_{i-1}\})=0.$$
-Furthermore, $(T,U)$ is called irreducible if $T$ is irreducible.
-
-The main result on triangular sets is the following:
-let $G=\{g_1,...,g_s\} \subset R$ then there are irreducible triangular sets
$T_1,...,T_l$
-such that $V(G)=\bigcup_{i=1}^{l}(V(T_i\setminus I_i))$
-where $I_i=\{\hbox{ini}(f) \mid f \in T_i \}$. Such a set
-$\{T_1,...,T_l\}$ is called an {\bf irreducible characteristic series} of
-the ideal $(G)$.
-Let > be the lexicographical ordering on R=K[x_1,...,x_n] with
-x_1<...<x_n . For f in R let lvar(f) (the leading variable of f) be the
-largest variable in lead(f) (the leading term of f with respect to >),
-i.e., if f=a_s(x_1,...,x_(k-1))x_k^s+...+a_0(x_1,...,x_(k-1)) for some
-k<=n then lvar(f)=x_k.
-
-Moreover, let ini(f):=a_s(x_1,...,x_(k-1)). The pseudo remainder
-r=prem(g,f) of g with respect to f is defined by ini(f)^a*g=q*f+r with
-the property deg_(lvar(f))(r)<deg_(lvar(f))(f), `a' minimal.
-
-A set T={f_1,...,f_r} in R is called triangular if
-lvar(f_1)<...<lvar(f_r).
-
-(T,U) is called a triangular system, if U is a subset of T and if T is a
-triangular set such that ini(T) does not vanish on the zero-set of T \
-zero-set of U ( =:Zero(T\U)).
-
-T is called irreducible if for every i there are no d_i,f_i',f_i" with
-the property:
- lvar(d_i)<lvar(f_i)
- lvar(f_i')=lvar(f_i")=lvar(f_i)
- 0 not in prem({ d_i, ini(f_i'), ini(f_i")},{ f_1,...,f_(i-1)})
-such that prem(d_i*f_i-f_i'*f_i",{f_1,...,f_(i-1)})=0.
-
-(T,U) is called irreducible if T is irreducible.
-
-The main result on triangular sets is the following: let G={g_1,...,g_s}
-then there are irreducible triangular sets T_1,...,T_l such that
-Zero(G)=Union(i=1,...,l: Zero(T_i\I_i)) where I_i={ini(f), f in T_i }.
-Such a set {T_1,...,T_l} is called an *irreducibel characteristic
-series* of the ideal (G).
-
-`*Example:*'
-
- ring R= 0,(x,y,z,u),dp;
- ideal i=-3zu+y2-2x+2,
- -3x2u-4yz-6xz+2y2+3xy,
- -3z2u-xu+y2z+y;
- print(char_series(i));
- ==> _[1,1],3x2z-y2+2yz,3x2u-3xy-2y2+2yu,
- ==> x, -y+2z, -2y2+3yu-4
-
-
-File: sing.info, Node: Gauss-Manin connection, Next: Toric ideals and
integer programming, Prev: Characteristic sets, Up: Mathematical background
-
-C.5 Gauss-Manin connection
-==========================
-
-Let $f\colon(C^{n+1},0)\rightarrow(C,0)$ be a complex isolated hypersurface
singularity given by a polynomial with algebraic coefficients which we also
denote by $f$.
-Let $O=C[x_0,\ldots,x_n]_{(x_0,\ldots,x_n)}$ be the local ring at the origin
and $J_f$ the Jacobian ideal of $f$.
-
-A {\bf Milnor representative} of $f$ defines a differentiable fibre bundle
over the punctured disc with fibres of homotopy type of $\mu$ $n$-spheres.
-The $n$-th cohomology bundle is a flat vector bundle of dimension $n$ and
carries a natural flat connection with covariant derivative $\partial_t$.
-The {\bf monodromy operator} is the action of a positively oriented generator
of the fundamental group of the puctured disc on the Milnor fibre.
-Sections in the cohomology bundle of {\bf moderate growth} at $0$ form a
regular $D=C\{t\}[\partial_t]$-module $G$, the {\bf Gauss-Manin connection}.
-
-By integrating along flat multivalued families of cycles, one can consider
fibrewise global holomorphic differential forms as elements of $G$.
-This factors through an inclusion of the {\bf Brieskorn lattice}
$H'':=\Omega^{n+1}_{C^{n+1},0}/df\wedge d\Omega^{n-1}_{C^{n+1},0}$ in $G$.
-
-The $D$-module structure defines the {\bf V-filtration} $V$ on $G$ by
$V^\alpha:=\sum_{\beta\ge\alpha}C\{t\}ker(t\partial_t-\beta)^{n+1}$.
-The Brieskorn lattice defines the {\bf Hodge filtration} $F$ on $G$ by
$F_k=\partial_t^kH''$ which comes from the {\bf mixed Hodge structure} on the
Milnor fibre.
-Note that $F_{-1}=H'$.
-
-The induced V-filtration on the Brieskorn lattice determines the {\bf
singularity spectrum} $Sp$ by $Sp(\alpha):=\dim_CGr_V^\alpha Gr^F_0G$.
-The spectrum consists of $\mu$ rational numbers $\alpha_1,\dots,\alpha_\mu$
such that $e^{2\pi i\alpha_1},\dots,e^{2\pi i\alpha_\mu}$ are the eigenvalues
of the monodromy.
-These {\bf spectral numbers} lie in the open interval $(-1,n)$, symmetric
about the midpoint $(n-1)/2$.
-
-The spectrum is constant under $\mu$-constant deformations and has the
following semicontinuity property:
-The number of spectral numbers in an interval $(a,a+1]$ of all singularities
of a small deformation of $f$ is greater or equal to that of f in this interval.
-For semiquasihomogeneous singularities, this also holds for intervals of the
form $(a,a+1)$.
-
-Two given isolated singularities $f$ and $g$ determine two spectra and from
these spectra we get an integer.
-This integer is the maximal positive integer $k$ such that the semicontinuity
holds for the spectrum of $f$ and $k$ times the spectrum of $g$.
-These numbers give bounds for the maximal number of isolated singularities of
a specific type on a hypersurface $X\subset{P}^n$ of degree $d$:
-such a hypersurface has a smooth hyperplane section, and the complement is a
small deformation of a cone over this hyperplane section.
-The cone itself being a $\mu$-constant deformation of $x_0^d+\dots+x_n^d=0$,
the singularities are bounded by the spectrum of $x_0^d+\dots+x_n^d$.
-
-Using the library {\tt gaussman.lib} one can compute the {\bf monodromy}, the
V-filtration on $H''/H'$, and the spectrum.
-
-Let f:(C^(n+1),0)-->(C,0) be a complex isolated hypersurface singularity
-given by a polynomial with algebraic coefficients which we also denote
-by f. Let O=C[x_0,...,x_n]_(x_0,...,x_n) be the local ring at the
-origin and J_f the Jacobian ideal of f.
-
-A *Milnor representative* of f defines a differentiable fibre bundle
-over the punctured disc with fibres of homotopy type of mu n-spheres.
-The n-th cohomology bundle is a flat vector bundle of dimension n and
-carries a natural flat connection with covariant derivative d_t. The
-*monodromy operator* is the action of a positively oriented generator of
-the fundamental group of the puctured disc on the Milnor fibre.
-Sections in the cohomology bundle of *moderate growth* at 0 form a
-regular D=C{t}[d_t]-module G, the *Gauss-Manin connection*.
-
-By integrating along flat multivalued families of cycles, one can
-consider fibrewise global holomorphic differential forms as elements of
-G. This factors through an inclusion of the *Brieskorn lattice*
-H":=Omega^(n+1)_(C^(n+1),0)/df*dOmega^(n-1)_(C^(n+1),0) in G.
-
-The D-module structure defines the *V-filtration* V on G by
-V^a:=sum_(b>=a)C{t}ker(t*d_t-b)^(n+1). The Brieskorn lattice defines
-the *Hodge filtration* F on G by F_k=d_t^kH" which comes from the *mixed
-Hodge structure* on the Milnor fibre. Note that F_(-1)=H'.
-
-The induced V-filtration on the Brieskorn lattice determines the
-*singularity spectrum* Sp by Sp(a):=dim_CGr_V^a Gr^F_0G. The spectrum
-consists of mu rational numbers a_1,...,a_mu such that
-exp(2*pi*i*a_1),...,exp(2*pi*i*a_mu) are the eigenvalues of the
-monodromy. These *spectral numbers* lie in the open interval (-1,n),
-symmetric about the midpoint (n-1)/2.
-
-The spectrum is constant under mu-constant deformations and has the
-following semicontinuity property: The number of spectral numbers in an
-interval (a,a+1] of all singularities of a small deformation of f is
-greater or equal to that of f in this interval. For
-semiquasihomogeneous singularities, this also holds for intervals of the
-form (a,a+1).
-
-Two given isolated singularities f and g determine two spectra and from
-these spectra we get an integer. This integer is the maximal positive
-integer k such that the semicontinuity holds for the spectrum of f and k
-times the spectrum of g. These numbers give bounds for the maximal
-number of isolated singularties of a specific type on a hypersurface X
-in P^n of degree d: such a hypersurface has a smooth hyperplane section,
-and the complement is a small deformation of a cone over this hyperplane
-section. The cone itself being a mu-constant deformation of
-x_0^d+...+x_n^d=0, the singularities are bounded by the spectrum of
-x_0^d+...+x_n^d.
-
-Using the library `gaussman.lib' one can compute the *monodromy*, the
-V-filtration on H"/H', and the spectrum.
-
-Let us consider as an example f=x^5+x^2y^2+y^5 $f=x^5+x^2y^2+y^5$
-. First, we compute a matrix M $M$
- such that $\exp(2\pi iM)$
-exp(-2*pi*i*M) is a monodromy matrix of f $f$
- and the Jordan normal form of M $M$
-:
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly f=x5+x2y2+y5;
- list l=monodromy(f);
- matrix M=jordanmatrix(l[1],l[2],l[3]);
- print(M);
- ==> 1/2,0, 0, 0, 0, 0, 0,0, 0, 0, 0,
- ==> 1, 1/2,0, 0, 0, 0, 0,0, 0, 0, 0,
- ==> 0, 0, 7/10,0, 0, 0, 0,0, 0, 0, 0,
- ==> 0, 0, 0, 7/10,0, 0, 0,0, 0, 0, 0,
- ==> 0, 0, 0, 0, 9/10,0, 0,0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 9/10,0,0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0, 1,0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0, 0,11/10,0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0, 0,0, 11/10,0, 0,
- ==> 0, 0, 0, 0, 0, 0, 0,0, 0, 13/10,0,
- ==> 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10
-
-Now, we compute the V-filtration on H''/H' $H''/H'$
- and the spectrum:
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly f=x5+x2y2+y5;
- list l=vfilt(f);
- print(l[1]);
- ==> -1/2,
- ==> -3/10,
- ==> -1/10,
- ==> 0,
- ==> 1/10,
- ==> 3/10,
- ==> 1/2
- print(l[2]);
- ==> 1,2,2,1,2,2,1
- print(l[3]);
- ==> [1]:
- ==> _[1]=gen(11)
- ==> [2]:
- ==> _[1]=gen(10)
- ==> _[2]=gen(6)
- ==> [3]:
- ==> _[1]=gen(9)
- ==> _[2]=gen(4)
- ==> [4]:
- ==> _[1]=gen(5)
- ==> [5]:
- ==> _[1]=gen(3)
- ==> _[2]=gen(8)
- ==> [6]:
- ==> _[1]=gen(2)
- ==> _[2]=gen(7)
- ==> [7]:
- ==> _[1]=gen(1)
- print(l[4]);
- ==> y5,
- ==> y4,
- ==> y3,
- ==> y2,
- ==> xy,
- ==> y,
- ==> x4,
- ==> x3,
- ==> x2,
- ==> x,
- ==> 1
-Here `l[1]' contains the spectral numbers, `l[2]' the corresponding
-multiplicities, `l[3]' a C $C$
--basis of the V-filtration on H''/H' $H''/H'$
- in terms of the monomial basis of $O/J_f\cong H''/H'$
-O/J_f~=H"/H' in `l[4]'.
-
-If the principal part of $f$ is $C$-nondegenerate, one can compute the
spectrum using the library {\tt spectrum.lib}.
-In this case, the V-filtration on $H''$ coincides with the Newton-filtration
on $H''$ which allows to compute the spectrum more efficiently.
-
-If the principal part of f is C-nondegenerate, one can compute the
-spectrum using the library `spectrum.lib'. In this case, the
-V-filtration on H" coincides with the Newton-filtration on H" which
-allows to compute the spectrum more efficiently.
-
-Let us calculate one specific example, the maximal number of triple
-points of type $\tilde{E}_6$ on a surface $X\subset{P}^3$
-E~_6 on a surface X in P^3 of degree seven. This calculation can be
-done over the rationals. So choose a local ordering on Q[x,y,z] $Q[x,y,z]$
-. Here we take the negative degree lexicographical ordering which is
-denoted `ds' in SINGULAR:
-
- ring r=0,(x,y,z),ds;
- LIB "spectrum.lib";
- poly f=x^7+y^7+z^7;
- list s1=spectrumnd( f );
- s1;
- ==> [1]:
- ==> _[1]=-4/7
- ==> _[2]=-3/7
- ==> _[3]=-2/7
- ==> _[4]=-1/7
- ==> _[5]=0
- ==> _[6]=1/7
- ==> _[7]=2/7
- ==> _[8]=3/7
- ==> _[9]=4/7
- ==> _[10]=5/7
- ==> _[11]=6/7
- ==> _[12]=1
- ==> _[13]=8/7
- ==> _[14]=9/7
- ==> _[15]=10/7
- ==> _[16]=11/7
- ==> [2]:
- ==> 1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1
-
-The command `spectrumnd(f)' computes the spectrum of f $f$
- and returns a list with six entries: The Milnor number $\mu(f)$, the
geometric genus $p_g(f)$
-mu(f), the geometric genus p_g(f) and the number of different spectrum
-numbers. The other three entries are of type `intvec'. They contain
-the numerators, denominators and multiplicities of the spectrum numbers.
-So $x^7+y^7+z^7=0$
-x^7+y^7+z^7=0 has Milnor number 216 and geometrical genus 35. Its
-spectrum consists of the 16 different rationals
-${3 \over 7}, {4 \over 7}, {5 \over 7}, {6 \over 7}, {1 \over 1},
-{8 \over 7}, {9 \over 7}, {10 \over 7}, {11 \over 7}, {12 \over 7},
-{13 \over 7}, {2 \over 1}, {15 \over 7}, {16 \over 7}, {17 \over 7},
-{18 \over 7}$
-3/7, 4/7, 5/7, 6/7, 1, 8/7, 9/7, 10/7, 11/7, 12/7, 13/7, 2, 15/7, 16/7,
-17/7, 18/7
-appearing with multiplicities
-1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1.
-
-The singularities of type $\tilde{E}_6$ form a
-$\mu$-constant one parameter family given by
-$x^3+y^3+z^3+\lambda xyz=0,\quad \lambda^3\neq-27$.
-The singularities of type E~_6 form a mu-constant one parameter family
-given by x^3+y^3+z^3+lambda xyz=0, lambda^3 <> -27. Therefore they have
-all the same spectrum, which we compute for $x^3+y^3+z^3$.
-x^3+y^3+z^3.
-
- poly g=x^3+y^3+z^3;
- list s2=spectrumnd(g);
- s2;
- ==> [1]:
- ==> 8
- ==> [2]:
- ==> 1
- ==> [3]:
- ==> 4
- ==> [4]:
- ==> 1,4,5,2
- ==> [5]:
- ==> 1,3,3,1
- ==> [6]:
- ==> 1,3,3,1
-Evaluating semicontinuity is very easy:
- semicont(s1,s2);
- ==> 18
-
-This tells us that there are at most 18 singularities of type $\tilde{E}_6$ on
a septic in $P^3$. But $x^7+y^7+z^7$
-E~_6 on a septic in P^3. But x^7+y^7+z^7 is semiquasihomogeneous (sqh),
-so we can also apply the stronger form of semicontinuity:
-
- semicontsqh(s1,s2);
- ==> 17
-
-So in fact a septic has at most 17 triple points of type $\tilde{E}_6$.
-E~_6.
-
-Note that `spectrumnd(f)' works only if f $f$
- has nondegenerate principal part. In fact `spectrumnd' will detect a
-degenerate principal part in many cases and print out an error message.
-However if it is known in advance that f $f$
- has nondegenerate principal part, then the spectrum may be computed
-much faster using `spectrumnd(f,1)'.
-
-
-File: sing.info, Node: Toric ideals and integer programming, Next:
References, Prev: Gauss-Manin connection, Up: Mathematical background
-
-C.6 Toric ideals and integer programming
-========================================
-
-* Menu:
-
-* Toric ideals:: Definition and computation.
-* Integer programming:: An algorithm using toric ideals.
-* Relevant References::
-
-
-File: sing.info, Node: Toric ideals, Next: Integer programming, Up: Toric
ideals and integer programming
-
-C.6.1 Toric ideals
-------------------
-
-Let $A$ denote an $m\times n$ matrix with integral coefficients. For $u
-\in Z\!\!\! Z^n$, we define $u^+,u^-$ to be the uniquely determined
-vectors with nonnegative coefficients and disjoint support (i.e.,
-$u_i^+=0$ or $u_i^-=0$ for each component $i$) such that
-$u=u^+-u^-$. For $u\geq 0$ component-wise, let $x^u$ denote the monomial
-$x_1^{u_1}\cdot\ldots\cdot x_n^{u_n}\in K[x_1,\ldots,x_n]$.
-
-The ideal
-$$ I_A:=<x^{u^+}-x^{u^-} | u\in\ker(A)\cap Z\!\!\! Z^n>\ \subset
-K[x_1,\ldots,x_n] $$
-is called a \bf toric ideal. \rm
-
-The first problem in computing toric ideals is to find a finite
-generating set: Let $v_1,\ldots,v_r$ be a lattice basis of $\ker(A)\cap
-Z\!\!\! Z^n$ (i.e, a basis of the $Z\!\!\! Z$-module). Then
-$$ I_A:=I:(x_1\cdot\ldots\cdot x_n)^\infty $$
-where
-$$ I=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
-
-Let A denote an mxn matrix with integral coefficients. For u in Z^n, we
-define u+,u- to be the uniquely determined vectors with nonnegative
-coefficients and disjoint support (i.e., u+[i]=0 or u-[i]=0 for each
-component i) such that u = u+ - u-. For u>=0 component-wise, let x^u
-denote the monomial x(1)^u[1] *...* x(n)^u[n] in K[x(1),...,x(n)].
-
-The ideal in K[x(1),...,x(n)]
- I(A):= < x^u+ - x^u- | u in ker(A), u in Z^n >
-is called a *toric ideal*.
-
-The first problem in computing toric ideals is to find a finite
-generating set: Let v(1),...,v(r) be a lattice basis of ker(A) as a
-subset of Z^n (i.e., a basis of the Z-module). Then
- I(A):= sat( I, x[1] *...* x[n])
-where
- I= < x^v(i)+ - x^v(i)- | i=1,...,r >.
-
-The required lattice basis can be computed using the LLL-algorithm
-(*note [Coh93]::). For the computation of the saturation, there are
-various possibilities described in the section Algorithms.
-menu entry Algorithms.
-
-* Menu:
-
-* Algorithms:: Various algorithms for computing toric ideals.
-* Buchberger algorithm:: Specializing it for toric ideals.
-
-
-File: sing.info, Node: Algorithms, Next: Buchberger algorithm, Up: Toric
ideals
-
-C.6.2 Algorithms
-----------------
-
-The following algorithms are implemented in *note toric_lib::.
-
-* Menu:
-
-* Conti and Traverso::
-* Pottier::
-* Hosten and Sturmfels::
-* Di Biase and Urbanke::
-* Bigatti and La Scala and Robbiano::
-
-
-File: sing.info, Node: Conti and Traverso, Next: Pottier, Up: Algorithms
-
-C.6.2.1 The algorithm of Conti and Traverso
-...........................................
-
-The algorithm of Conti and Traverso (*note [CoTr91]::) computes $I_A$ via the
-extended matrix $B=(I_m|A)$,
-where $I_m$ is the $m\times m$ unity matrix. A lattice basis of $B$ is
-given by the set of vectors $(a^j,-e_j)\in Z\!\!\! Z^{m+n}$, where $a^j$
-is the $j$-th row of $A$ and $e_j$ the $j$-th coordinate vector. We
-look at the ideal in $K[y_1,\ldots,y_m,x_1,\ldots,x_n]$ corresponding to
-these vectors, namely
-$$ I_1=<y^{a_j^+}- x_j y^{a_j^-} | j=1,\ldots, n>.$$
-We introduce a further variable $t$ and adjoin the binomial $t\cdot
-y_1\cdot\ldots\cdot y_m -1$ to the generating set of $I_1$, obtaining
-an ideal $I_2$ in the polynomial ring $K[t,
-y_1,\ldots,y_m,x_1,\ldots,x_n]$. $I_2$ is saturated w.r.t. all
-variables because all variables are invertible modulo $I_2$. Now $I_A$
-can be computed from $I_2$ by eliminating the variables
-$t,y_1,\ldots,y_m$.
-computes I(A) via the extended matrix B= ( I | A ), where I is the mxm
-unity matrix. A lattice basis of B is given by the set of vectors
-(a^j,-e_j) in Z^(m+n), where a^j is the j-th row of A and e_j the j-th
-coordinate vector. We look at the ideal in
-K[y(1),...,y(m),x(1),...,x(n)] corresponding to these vectors, namely
- I1= < y^(a_j)+ - x(j) * y^(a_j)- | j=1,...,n >.
-We introduce a further variable t and adjoin the binomial t * y(1) *...*
-y(m) -1 to the generating set of I1, obtaining an ideal I2 in the
-polynomial ring K[t,y(1),...,y(m),x(1),...,x(n)]. I2 is saturated w.r.t.
-all variables because all variables are invertible modulo I2. Now I(A)
-can be computed from I2 by eliminating the variables t,y(1),...,y(m).
-
-Because of the big number of auxiliary variables needed to compute a
-toric ideal, this algorithm is rather slow in practice. However, it has
-a special importance in the application to integer programming (*note
-Integer programming::).
-
-
-File: sing.info, Node: Pottier, Next: Hosten and Sturmfels, Prev: Conti and
Traverso, Up: Algorithms
-
-C.6.2.2 The algorithm of Pottier
-................................
-
-The algorithm of Pottier (*note [Pot94]::) starts by computing a lattice
-basis $v_1,\ldots,v_r$ for the integer kernel of $A$ using the
-LLL-algorithm. The ideal corresponding to the lattice basis vectors
-$$ I_1=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
-is saturated -- as in the algorithm of Conti and Traverso -- by
-inversion of all variables: One adds an auxiliary variable $t$ and the
-generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ to obtain an ideal $I_2$
-in $K[t,x_1,\ldots,x_n]$ from which one computes $I_A$ by elimination of
-$t$.
-basis v(1),...,v(r) for the integer kernel of A using the LLL-algorithm.
-The ideal corresponding to the lattice basis vectors
- I1= < x^v(i)+ - x^v(i)- | i=1,...,r >
-is saturated - as in the algorithm of Conti and Traverso - by inversion
-of all variables: One adds an auxiliary variable t and the generator t *
-x(1) *...* x(n) -1 to obtain an ideal I2 in K[t,x(1),...,x(n)] from
-which one computes I(A) by elimination of t.
-
-
-File: sing.info, Node: Hosten and Sturmfels, Next: Di Biase and Urbanke,
Prev: Pottier, Up: Algorithms
-
-C.6.2.3 The algorithm of Hosten and Sturmfels
-.............................................
-
-The algorithm of Hosten and Sturmfels (*note [HoSt95]::) allows to compute
$I_A$ without any auxiliary variables, provided that $A$ contains a vector $w$
-with positive coefficients in its row space. This is a real restriction,
-i.e., the algorithm will not necessarily work in the general case.
-
-A lattice basis $v_1,\ldots,v_r$ is again computed via the
-LLL-algorithm. The saturation step is performed in the following way:
-First note that $w$ induces a positive grading w.r.t. which the ideal
-$$ I=<x^{v_i^+}-x^{v_i^-}|i=1,\ldots,r> $$
-corresponding to our lattice basis is homogeneous. We use the following
-lemma:
-
-Let $I$ be a homogeneous ideal w.r.t. the weighted reverse
-lexicographical ordering with weight vector $w$ and variable order $x_1
-> x_2 > \ldots > x_n$. Let $G$ denote a Groebner basis of $I$ w.r.t. to
-this ordering. Then a Groebner basis of $(I:x_n^\infty)$ is obtained by
-dividing each element of $G$ by the highest possible power of $x_n$.
-
-From this fact, we can successively compute
-$$ I_A= I:(x_1\cdot\ldots\cdot x_n)^\infty
-=(((I:x_1^\infty):x_2^\infty):\ldots :x_n^\infty); $$
-in the $i$-th step we take $x_i$ as the cheapest variable and apply the
-lemma with $x_i$ instead of $x_n$.
-
-This procedure involves $n$ Groebner basis computations. Actually, this
-number can be reduced to at most $n/2$
-compute I(A) without any auxiliary variables, provided that A contains a
-vector w with positive coefficients in its row space. This is a real
-restriction, i.e., the algorithm will not necessarily work in the
-general case.
-
-A lattice basis v(1),...,v(r) is again computed via the LLL-algorithm.
-The saturation step is performed in the following way: First note that w
-induces a positive grading w.r.t. which the ideal
- I= < x^v(i)+ - x^v(i)- | i=1,...,r >
-corresponding to our lattice basis is homogeneous. We use the following
-lemma:
-
-Let I be a homogeneous ideal w.r.t. the weighted reverse lexicographical
-ordering with weight vector w and variable order x(1) > x(2) > ... >
-x(n). Let G denote a Groebner basis of I w.r.t. to this ordering. Then
-a Groebner basis of sat(I,x(n)) is obtained by dividing each element of
-G by the highest possible power of x(n).
-
-From this fact, we can successively compute
- I(A)= sat(I, x(1) *...* x(n))
- = sat(...(sat(sat(I,x(1)), x(2)), ..., x(n)));
-in the i-th step we take x(i) as the cheapest variable and apply the
-lemma with x(i) instead of x(n).
-
-This procedure involves n Groebner basis computations. Actually, this
-number can be reduced to at most n/2 (*note [HoSh98]::), and the single
-computations - except from the first one - show to be easy and fast in
-practice.
-
-
-File: sing.info, Node: Di Biase and Urbanke, Next: Bigatti and La Scala and
Robbiano, Prev: Hosten and Sturmfels, Up: Algorithms
-
-C.6.2.4 The algorithm of Di Biase and Urbanke
-.............................................
-
-Like the algorithm of Hosten and Sturmfels, the algorithm of Di Biase
-and Urbanke (*note [DBUr95]::) performs up to $n/2$ Groebner basis
-computations. It needs no auxiliary variables, but a supplementary
-precondition; namely, the existence of a vector without zero components
-in the kernel of $A$.
-
-The main idea comes from the following observation:
-
-Let $B$ be an integer matrix, $u_1,\ldots,u_r$ a lattice basis of the
-integer kernel of $B$. Assume that all components of $u_1$ are
-positive. Then
-$$ I_B=<x^{u_i^+}-x^{u_i^-}|i=1,\ldots,r>, $$
-i.e., the ideal on the right is already saturated w.r.t. all variables.
-
-The algorithm starts by finding a lattice basis $v_1,\ldots,v_r$ of the
-kernel of $A$ such that $v_1$ has no zero component. Let
-$\{i_1,\ldots,i_l\}$ be the set of indices $i$ with
-$v_{1,i}<0$. Multiplying the components $i_1,\ldots,i_l$ of
-$v_1,\ldots,v_r$ and the columns $i_1,\ldots,i_l$ of $A$ by $-1$ yields
-a matrix $B$ and a lattice basis $u_1,\ldots,u_r$ of the kernel of $B$
-that fulfill the assumption of the observation above. We are then able
-to compute a generating set of $I_A$ by applying the following
-``variable flip'' successively to $i=i_1,\ldots,i_l$:
-
-Let $>$ be an elimination ordering for $x_i$. Let $A_i$ be the matrix
-obtained by multiplying the $i$-th column of $A$ with $-1$. Let
-$$\{x_i^{r_j} x^{a_j} - x^{b_j} | j\in J \}$$
-be a Groebner basis of $I_{A_i}$ w.r.t. $>$ (where $x_i$ is neither
-involved in $x^{a_j}$ nor in $x^{b_j}$). Then
-$$\{x^{a_j} - x_i^{r_j} x^{b_j} | j\in J \}$$
-is a generating set for $I_A$.
-to n/2 Groebner basis computations. It needs no auxiliary variables, but
-a supplementary precondition; namely, the existence of a vector without
-zero components in the kernel of A.
-
-The main idea comes from the following observation:
-
-Let B be an integer matrix, u(1),...,u(r) a lattice basis of the integer
-kernel of B. Assume that all components of u(1) are positive. Then
- I(B)= < x^u(i)+ - x^u(i)- | i=1,...,r >,
-i.e., the ideal on the right is already saturated w.r.t. all variables.
-
-The algorithm starts by finding a lattice basis v(1),...,v(r) of the
-kernel of A such that v(1) has no zero component. Let { i1,...,il } be
-the set of indices i with v(1)_i <0. Multiplying the components
-i1,...,il of v(1),...,v(r) and the columns i1,...,il of A by -1 yields a
-matrix B and a lattice basis u(1),...,u(r) of the kernel of B that
-fulfill the assumption of the observation above. We are then able to
-compute a generating set of I(A) by applying the following "variable
-flip" successively to i=i1,...,il:
-
-Let > be an elimination ordering for x(i). Let A(i) be the matrix
-obtained by multiplying the i-th column of A with -1. Let
- { x(i)^r(j) * x^a(j) - x^b(j) | j in J }
-be a Groebner basis of I(A(i)) w.r.t. > (where x(i) is neither involved
-in x^a(j) nor in x^b(j)). Then
- { x^a(j) - x(i)^r(j) * x^b(j) | j in J }
-is a generating set for I(A).
-
-
-File: sing.info, Node: Bigatti and La Scala and Robbiano, Prev: Di Biase and
Urbanke, Up: Algorithms
-
-C.6.2.5 The algorithm of Bigatti, La Scala and Robbiano
-.......................................................
-
-The algorithm of Bigatti, La Scala and Robbiano (*note [BLR98]::)
-combines the ideas of the algorithms of Pottier and of Hosten and
-Sturmfels. The computations are performed on a graded ideal with one
-auxiliary variable $u$ and one supplementary generator $x_1\cdot\ldots\cdot
x_n -
-u$ (instead of the generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ in
-the algorithm of Pottier). The algorithm uses a quite unusual technique to
-get rid of the variable $u$ again.
-variable u and one supplementary generator x(1) *...* x(n) -u (instead
-of the generator t * x(1) *...* x(n) -1 in the algorithm of Pottier).
-The algorithm uses a quite unusual technique to get rid of the variable
-u again.
-
-There is another algorithm of the authors which tries to parallelize the
-computations (but which is not implemented in this library).
-
-
-File: sing.info, Node: Buchberger algorithm, Prev: Algorithms, Up: Toric
ideals
-
-C.6.3 The Buchberger algorithm for toric ideals
------------------------------------------------
-
-Toric ideals have a very special structure that allows us to improve the
-Buchberger algorithm in many respects: They are prime ideals and
-generated by binomials. Pottier used this fact to describe all
-operations of the Buchberger algorithm on the ideal generators in terms
-of vector additions and subtractions. Some other strategies like
-multiple reduction (*note [CoTr91]::) or the use of bit vectors to
-represent the support of a monomial (*note [Big97]::) may be applied to
-more general ideals, but show to be especially useful in the toric case.
-
-
-File: sing.info, Node: Integer programming, Next: Relevant References,
Prev: Toric ideals, Up: Toric ideals and integer programming
-
-C.6.4 Integer programming
--------------------------
-
-Let $A$ be an $m\times n$ matrix with integral coefficients, $b\in
-Z\!\!\! Z^m$ and $c\in Z\!\!\! Z^n$. The problem
-$$ \min\{c^T x | x\in Z\!\!\! Z^n, Ax=b, x\geq 0\hbox{
-component-wise}\} $$
-is called an instance of the \bf integer programming problem \rm or
-\bf IP problem. \rm
-
-The IP problem is very hard; namely, it is NP-complete.
-
-For the following discussion let $c\geq 0$ (component-wise). We
-consider $c$ as a weight vector; because of its non-negativity, $c$ can
-be refined into a monomial ordering $>_c$. It turns out that we can
-solve such an IP instance with the help of toric ideals:
-
-First we assume that an initial solution $v$ (i.e., $v\in Z\!\!\!
-Z^n, v\geq 0, Av=b$) is already known. We obtain the optimal solution
-$v_0$ (i.e., with $c^T v_0$ minimal) by the following procedure:
-
-Let A be an mxn matrix with integral coefficients, b in Z^m and c in
-Z^n. The problem
- min { c*x | x in Z^n, A*x=b, x>=0 component-wise }
-is called an instance of the *integer programming problem* or *IP
-problem*.
-
-The IP problem is very hard; namely, it is NP-complete.
-
-For the following discussion let c>=0 (component-wise). We consider c as
-a weight vector; because of its non-negativity, c can be refined into a
-monomial ordering >_c. It turns out that we can solve such an IP
-instance with the help of toric ideals:
-
-First we assume that an initial solution v (i.e., v in Z^n, v>=0, A*v=b)
-is already known. We obtain the optimal solution v(opt) (i.e., with
-c*v(opt) minimal) by the following procedure:
-
- * (1) Compute the toric ideal I(A) using one of the algorithms in the
- previous section.
-
- * (2) Compute the reduced Groebner basis G(c) of I(A) w.r.t. >_c $>_c$
- .
-
- * (3) Reduce x^v $x^v$
- modulo G(c) using the Hironaka division algorithm. If the result
- of this reduction is x^(v_0) $x^(v_0)$
- , then v_0 $v_0$
- is an optimal solution of the given instance.
-
-If no initial solution is known, we are nevertheless able to solve the
-problem with similar techniques. For this purpose we replace our
-instance by an extended instance with the matrix used in the
-Conti-Traverso algorithm. Indeed, the Conti-Traverso algorithm offers
-the possibility to verify solvability of a given instance and to find an
-initial solution in the case of existence (but none of the other
-algorithms does!). Details can be found in [CoTr91] and [The99].
-
-An implementation of the above algorithm and some examples can be found
-in *note intprog_lib::.
-
-Classical methods for solving IP instances like Branch-and-Bound methods
-seem to be faster in general than the methods using toric ideals. But
-the latter have one great advantage: If one wants to solve various
-instances that differ only by the vector b $b$
-, one has to perform steps (1) and (2) above only once. As the running
-time of step (3) is very short, solving all the instances is not much
-harder than solving one single instance.
-
-For a detailed discussion see [The99].
-
-
-File: sing.info, Node: Relevant References, Prev: Integer programming, Up:
Toric ideals and integer programming
-
-C.6.5 Relevant References
--------------------------
-
- * [Big97] Bigatti, A.M.: Computation of Hilbert-Poincare
- series. Journal of Pure and Applied Algebra (1997) 199, 237-253
-
- * [BLR98] Bigatti, A.M.; La Scala, R.; Robbiano, L.: Computing
- toric ideals. Journal of Symbolic Computation (to appear)
-
- * [Coh93] Cohen, H.: A Course in Computational Algebraic Number
- Theory. Springer (1997)
-
- * [CoTr91] Conti, P.; Traverso, C.: Buchberger algorithm and
- integer programming. Proceedings AAECC-9 (new Orleans),
- Springer LNCS (1991) 539, 130-139
-
- * [DBUr95] Di Biase, F.; Urbanke, R.: An algorithm to calculate
- the kernel of certain polynomial ring homomorphisms.
- Experimental Mathematics (1995) 4, 227-234
-
- * [HoSh98] Hosten, S.; Shapiro, J.: Primary decomposition of
- lattice basis ideals. (to appear)
-
- * [HoSt95] Hosten, S.; Sturmfels, B.: GRIN: An implementation
- of Groebner bases for integer programming. in Balas, E.;
- Clausen, J. (editors): Integer Programming and Combinatorial
- Optimization. Springer LNCS (1995) 920, 267-276
-
- * [Pot94] Pottier, L.: Groebner bases of toric ideals.
- Rapport de recherche 2224 (1997), INRIA Sophia Antipolis
-
- * [Stu96] Sturmfels, B.: Groebner Bases and Convex Polytopes.
- University Lecture Series, Volume 8 (1996), American Mathematical
- Society
-
- * [The99] Theis, C.: Der Buchberger-Algorithmus fuer torische
- Ideale und seine Anwendung in der ganzzahligen Optimierung.
- Diplomarbeit, Universitaet des Saarlandes (1999), Saarbruecken
- (Germany)
-
-
-File: sing.info, Node: References, Prev: Toric ideals and integer
programming, Up: Mathematical background
-
-C.7 References
-==============
-
-The Centre for Computer Algebra Kaiserslautern publishes a series of
-preprints which are electronically available at
-`http://www.mathematik.uni-kl.de/~zca/Reports_on_ca'. Other sources to
-check are `http://symbolicnet.mcs.kent.edu/', `http://www.can.nl/',...
-and the following list of books:
-
-Text books on computational algebraic geometry
-----------------------------------------------
-
- * Adams, W.; Loustaunau, P.: An Introduction to Gro"bner Bases.
- Providence, RI, AMS, 1996
-
- * Becker, T.; Weisspfenning, V.: Gro"bner Bases - A Computational
- Approach to Commutative Algebra. Springer, 1993
-
- * Cohen, H.: A Course in Computational Algebraic Number Theory,
- Springer, 1995
-
- * Cox, D.; Little, J.; O'Shea, D.: Ideals, Varieties and Algorithms.
- Springer, 1996
-
- * Eisenbud, D.: Commutative Algebra with a View Toward Algebraic
- Geometry. Springer, 1995
-
- * Greuel, G.-M.; Pfister, G.: A SINGULAR Introduction to Commuative
- Algebra, Springer, 2002
-
- * Mishra, B.: Algorithmic Algebra, Texts and Monographs in Computer
- Science. Springer, 1993
-
- * Sturmfels, B.: Algorithms in Invariant Theory. Springer 1993
-
- * Vasconcelos, W.: Computational Methods in Commutative Algebra and
- Algebraic Geometry. Springer, 1998
-
-Descriptions of algorithms
---------------------------
-
- * Bareiss, E.: Sylvester's identity and multistep integer-preserving
- Gaussian elimination. Math. Comp. 22 (1968), 565-578
-
- * Campillo, A.: Algebroid curves in positive characteristic. SLN 813,
- 1980
-
- * Chou, S.: Mechanical Geometry Theorem Proving. D.Reidel Publishing
- Company, 1988
-
- * Decker, W.; Greuel, G.-M.; Pfister, G.: Primary decomposition:
- algorithms and comparisons. Preprint, Univ. Kaiserslautern, 1998.
- To appear in: Greuel, G.-M.; Matzat, B. H.; Hiss, G. (Eds.),
- Algorithmic Algebra and Number Theory. Springer Verlag, Heidelberg,
- 1998
-
- * Decker, W.; Greuel, G.-M.; de Jong, T.; Pfister, G.: The
- normalization: a new algorithm, implementation and comparisons.
- Preprint, Univ. Kaiserslautern, 1998
-
- * Decker, W.; Heydtmann, A.; Schreyer, F. O.: Generating a Noetherian
- Normalization of the Invariant Ring of a Finite Group, 1997, to
- appear in Journal of Symbolic Computation
-
- * Faug\`ere,
- Faugere, J. C.; Gianni, P.; Lazard, D.; Mora, T.: Efficient
- computation of zero-dimensional Gro"bner bases by change of
- ordering. Journal of Symbolic Computation, 1989
-
- * Gra"be, H.-G.: On factorized Gro"bner bases, Univ. Leipzig, Inst.
- fu"r Informatik, 1994
-
- * Grassmann, H.; Greuel, G.-M.; Martin, B.; Neumann, W.; Pfister, G.;
- Pohl, W.; Scho"nemann, H.; Siebert, T.: On an implementation of
- standard bases and syzygies in SINGULAR. Proceedings of the
- Workshop Computational Methods in Lie theory in AAECC (1995)
-
- * Greuel, G.-M.; Pfister, G.: Advances and improvements in the theory
- of standard bases and syzygies. Arch. d. Math. 63(1995)
-
- * Kemper; Generating Invariant Rings of Finite Groups over Arbitrary
- Fields. 1996, to appear in Journal of Symbolic Computation
-
- * Kemper and Steel: Some Algorithms in Invariant Theory of Finite
- Groups. 1997
-
- * Lee, H.R.; Saunders, B.D.: Fraction Free Gaussian Elimination for
- Sparse Matrices. Journal of Symbolic Computation (1995) 19, 393-402
-
- * Scho"nemann, H.: Algorithms in SINGULAR, Reports on Computer
- Algebra 2(1996), Kaiserslautern
-
- * Siebert, T.: On strategies and implementations for computations of
- free resolutions. Reports on Computer Algebra 8(1996),
- Kaiserslautern
-
- * Wang, D.: Characteristic Sets and Zero Structure of Polynomial
- Sets. Lecture Notes, RISC Linz, 1989
-
-
-File: sing.info, Node: SINGULAR libraries, Next: Release Notes, Prev:
Mathematical background, Up: Top
-
-Appendix D SINGULAR libraries
-*****************************
-
-SINGULAR comes with a set of standard libraries. Their content is
-described in the following subsections.
-
-Use the *note LIB:: command for loading of single libraries, and the
-command `LIB "all.lib";' for loading all libraries.
-
-* Menu:
-
-* standard_lib:: extensions of Singular kernel
-* General purpose::
-* Linear algebra::
-* Commutative algebra::
-* Singularities::
-* Invariant theory::
-* Symbolic-numerical solving::
-* Visualization::
-* Coding theory::
-
-
-File: sing.info, Node: standard_lib, Next: General purpose, Prev: SINGULAR
libraries, Up: SINGULAR libraries
-
-D.1 standard_lib
-================
-
-The library `standard.lib' provides extensions to the set of built-in
-commands and is automatically loaded during the start of SINGULAR,
-unless SINGULAR is started up with the `--no-stdlib' command line option
-(see *note Command line options::).
-
-*Library:*
- standard.lib
-
-*Purpose:*
- Procedures which are always loaded at Start-up
-
-*Procedures:*
-
-* Menu:
-
-* stdfglm:: standard basis of ideal via fglm [and ordering ord]
-* stdhilb:: standard basis of ideal using the Hilbert function
-* groebner:: standard basis using a heuristically chosen method
-* quot:: quotient using heuristically chosen method
-* res:: free resolution of ideal or module
-* sprintf:: returns formatted string
-* fprintf:: writes formatted string to link
-* printf:: displays formatted string
-
-
-File: sing.info, Node: General purpose, Next: Linear algebra, Prev:
standard_lib, Up: SINGULAR libraries
-
-D.2 General purpose
-===================
-
-* Menu:
-
-* all_lib:: load all other libraries
-* general_lib:: procedures of general type
-* inout_lib:: procedures for manipulating in- and output
-* poly_lib:: procedures for manipulating polynomials and ideals
-* random_lib:: procedures of random/sparse matrix and poly operations
-* ring_lib:: procedures for manipulating rings and maps
-
-
-File: sing.info, Node: all_lib, Next: general_lib, Prev: General purpose,
Up: General purpose
-
-D.2.1 all_lib
--------------
-
-The library `all.lib' provides a convenient way to load all libraries of
-the SINGULAR distribution.
-
-*Example:*
- option(loadLib);
- LIB "all.lib";
- ==> // ** loaded all.lib (1.35.2.4,2003/02/25)
- ==> // ** loaded makedbm.lib (1.11,2000/12/22)
- ==> // ** loaded brnoeth.lib (1.11.2.5,2002/10/18)
- ==> // ** loaded paramet.lib (1.11.2.1,2002/10/21)
- ==> // ** loaded surf.lib (1.19.2.6,2002/07/17)
- ==> // ** loaded latex.lib (1.19.2.1,2002/02/20)
- ==> // ** loaded graphics.lib (1.10,2001/02/19)
- ==> // ** loaded zeroset.lib (1.7.2.2,2002/02/20)
- ==> // ** loaded ntsolve.lib (1.12.2.1,2002/04/12)
- ==> // ** loaded triang.lib (1.7,2001/02/19)
- ==> // ** loaded solve.lib (1.21.2.13,2002/10/21)
- ==> // ** loaded presolve.lib (1.17.2.6,2003/03/26)
- ==> // ** loaded stratify.lib (1.7.2.4,2002/04/11)
- ==> // ** loaded rinvar.lib (1.7.2.3,2002/02/20)
- ==> // ** loaded finvar.lib (1.32.2.2,2002/08/13)
- ==> // ** loaded ainvar.lib (1.6.2.2,2002/04/12)
- ==> // ** loaded spectrum.lib (1.12.2.3,2002/03/06)
- ==> // ** loaded spcurve.lib (1.15.2.1,2002/02/20)
- ==> // ** loaded sing.lib (1.24.2.5,2003/04/15)
- ==> // ** loaded qhmoduli.lib (1.0,2000/12/12)
- ==> // ** loaded mondromy.lib (1.22.2.2,2002/02/20)
- ==> // ** loaded hnoether.lib (1.29.2.14,2002/10/21)
- ==> // ** loaded gaussman.lib (1.33.2.26,2003/02/10)
- ==> // ** loaded equising.lib (1.7.2.5,2003/02/25)
- ==> // ** loaded deform.lib (1.25.2.2,2003/02/24)
- ==> // ** loaded classify.lib (1.48.2.4,2002/04/11)
- ==> // ** loaded toric.lib (1.11,2001/02/06)
- ==> // ** loaded intprog.lib (1.5,2001/02/06)
- ==> // ** loaded reesclos.lib (1.50,2001/08/06)
- ==> // ** loaded primitiv.lib (1.15,2001/02/05)
- ==> // ** loaded primdec.lib (1.98.2.14,2003/04/07)
- ==> // ** loaded normal.lib (1.34.2.17,2002/10/21)
- ==> // ** loaded mregular.lib (1.6.2.1,2002/02/20)
- ==> // ** loaded mprimdec.lib (1.1.2.3,2002/03/19)
- ==> // ** loaded homolog.lib (1.15.2.2,2002/10/07)
- ==> // ** loaded elim.lib (1.14.2.4,2003/04/16)
- ==> // ** loaded algebra.lib (1.9.2.3,2002/04/11)
- ==> // ** loaded linalg.lib (1.10.2.15,2003/04/04)
- ==> // ** loaded matrix.lib (1.26.2.2,2002/10/07)
- ==> // ** loaded ring.lib (1.17.2.1,2002/02/20)
- ==> // ** loaded random.lib (1.16.2.1,2002/02/20)
- ==> // ** loaded poly.lib (1.33.2.6,2003/02/10)
- ==> // ** loaded inout.lib (1.21.2.5,2002/06/12)
- ==> // ** loaded general.lib (1.38.2.9,2003/04/04)
-
-
-File: sing.info, Node: general_lib, Next: inout_lib, Prev: all_lib, Up:
General purpose
-
-D.2.2 general_lib
------------------
-
-*Library:*
- general.lib
-
-*Purpose:*
- Elementary Computations of General Type
-
-*Procedures:*
-
-* Menu:
-
-* A_Z:: string a,b,... of n comma separated letters
-* ASCII:: string of printable ASCII characters (number n to m)
-* absValue:: absolute value of c
-* binomial:: n choose m (type int), [type string/type number]
-* deleteSublist:: delete entries given by iv from list l
-* factorial:: n factorial (=n!) (type int), [type string/number]
-* fibonacci:: nth Fibonacci number [char p]
-* kmemory:: active [allocated] memory in kilobyte
-* killall:: kill all user-defined variables
-* number_e:: compute exp(1) up to n decimal digits
-* number_pi:: compute pi (area of unit circle) up to n digits
-* primes:: intvec of primes p, n<=p<=m
-* product:: multiply components of vector/ideal/...[indices v]
-* sort:: sort generators according to monomial ordering
-* sum:: add components of vector/ideal/...[with indices v]
-* watchdog:: only wait for result of command cmd for i seconds
-* which:: search for command and return absolute path, if found
-* primecoeffs:: primefactors <= min(p,32003) of coeffs of J
-* primefactors:: primefactors <= min(p,32003) of n
-* timeStd:: std(i) if computation finished after d seconds else i
-* timeFactorize:: works as timeStd with factorization
-* factorH:: factorizes with good choice of principal variable
-
-
-File: sing.info, Node: A_Z, Next: ASCII, Up: general_lib
-
-D.2.2.1 A_Z
-...........
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- A_Z("a",n); a any letter, n integer (-26<= n <=26, !=0)
-
-*Return:*
- string of n small (if a is small) or capital (if a is capital)
- letters, comma separated, beginning with a, in alphabetical order
- (or revers alphabetical order if n<0)
-
-*Example:*
- LIB "general.lib";
- A_Z("c",5);
- ==> c,d,e,f,g
- A_Z("Z",-5);
- ==> Z,Y,X,W,V
- string sR = "ring R = (0,"+A_Z("A",6)+"),("+A_Z("a",10)+"),dp;";
- sR;
- ==> ring R = (0,A,B,C,D,E,F),(a,b,c,d,e,f,g,h,i,j),dp;
- execute(sR);
- R;
- ==> // characteristic : 0
- ==> // 6 parameter : A B C D E F
- ==> // minpoly : 0
- ==> // number of vars : 10
- ==> // block 1 : ordering dp
- ==> // : names a b c d e f g h i j
- ==> // block 2 : ordering C
-
-
-File: sing.info, Node: ASCII, Next: absValue, Prev: A_Z, Up: general_lib
-
-D.2.2.2 ASCII
-.............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- ASCII([n,m]); n,m= integers (32 <= n <= m <= 126)
-
-*Return:*
- string of printable ASCII characters (no native language support)
- ASCII(): string of all ASCII characters with its numbers, ASCII(n):
- n-th ASCII character
- ASCII(n,m): n-th up to m-th ASCII character (inclusive)
-
-*Example:*
- LIB "general.lib";
- ASCII();"";
- ==> ! " # $ % & ' ( ) * + , -
.
- ==> 32 33 34 35 36 37 38 39 40 41 42 43 44 45
46
- ==> / 0 1 2 3 4 5 6 7 8 9 : ; <
=
- ==> 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61
- ==> > ? @ A B C D E F G H I J K
L
- ==> 62 63 64 65 66 67 68 69 70 71 72 73 74 75
76
- ==> M N O P Q R S T U V W X Y Z
[
- ==> 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91
- ==> \ ] ^ _ ` a b c d e f g h i
j
- ==> 92 93 94 95 96 97 98 99 100 101 102 103 104 105
10
- ==> k l m n o p q r s t u v w x
y
- ==> 107 108 109 110 111 112 113 114 115 116 117 118 119 120
121
- ==> z { | } ~
- ==> 122 123 124 125 126
- ==>
- ASCII(42);
- ==> *
- ASCII(32,126);
- ==> !"#$%&'()*+,-./0123456789:;<=>address@hidden
- ijklmnopqrstuvwxyz{|}~
-
-
-File: sing.info, Node: absValue, Next: binomial, Prev: ASCII, Up:
general_lib
-
-D.2.2.3 absValue
-................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- absValue(c); c int, number or poly
-
-*Return:*
- absValue(c); the absolute value of c
-
-*Note:*
- absValue(c)=c if c>=0; absValue=-c if c<=0.
- So the function can be applied to any type, for which comparison
- operators are defined.
-
-*Example:*
- LIB "general.lib";
- ring r1 = 0,x,dp;
- absValue(-2002);
- ==> 2002
- poly f=-4;
- absValue(f);
- ==> 4
-
-* Menu:
-
-See also:
-* boolean expressions::
-
-*See also:* *note boolean expressions::.
-
-
-File: sing.info, Node: binomial, Next: deleteSublist, Prev: absValue, Up:
general_lib
-
-D.2.2.4 binomial
-................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- binomial(n,k[,p]); n,k,p integers
-
-*Return:*
- binomial(n,k); binomial coefficient n choose k
- - of type string (computed in characteristic 0)
- binomial(n,k,p); n choose k, computed in characteristic 0 or
- prime(p)
- - of type number if a basering, say R, is present and p=0=char(R)
- or if prime(p)=char(R)
- - of type string else
-
-*Note:*
- In any characteristic, binomial(n,k) = coefficient of x^k in
- (1+x)^n
-
-*Example:*
- LIB "general.lib";
- binomial(200,100);""; //type string, computed in char 0
- ==> 90548514656103281165404177077484163874504589675413336841320
- ==>
- binomial(200,100,3);""; //type string, computed in char 3
- ==> 0
- ==>
- int n,k = 200,100;
- ring r = 0,x,dp;
- number b1 = binomial(n,k,0); //type number, computed in ring r
- poly b2 = coeffs((x+1)^n,x)[k+1,1]; //coefficient of x^k in (x+1)^n
- b1-b2; //b1 and b2 should coincide
- ==> 0
-
-* Menu:
-
-See also:
-* prime::
-
-*See also:* *note prime::.
-
-
-File: sing.info, Node: deleteSublist, Next: factorial, Prev: binomial, Up:
general_lib
-
-D.2.2.5 deleteSublist
-.....................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- deleteSublist(v,l); intvec v; list l
- where the entries of the integer vector v correspond to the
- positions of the elements to be deleted
-
-*Return:*
- list without the deleted elements
-
-*Example:*
- LIB "general.lib";
- list l=1,2,3,4,5;
- intvec v=1,3,4;
- l=deleteSublist(v,l);
- l;
- ==> [1]:
- ==> 2
- ==> [2]:
- ==> 5
-
-
-File: sing.info, Node: factorial, Next: fibonacci, Prev: deleteSublist,
Up: general_lib
-
-D.2.2.6 factorial
-.................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- factorial(n[,p]); n,p integers
-
-*Return:*
- factorial(n): n! (computed in characteristic 0), of type string.
- factorial(n,p): n! computed in characteristic 0 or prime(p)
- - of type number if a basering is present and 0=p=char(basering) or
- if prime(p)=char(basering)
- - of type string else
-
-*Example:*
- LIB "general.lib";
- factorial(37);""; //37! of type string (as long integer)
- ==> 13763753091226345046315979581580902400000000
- ==>
- ring r1 = 0,x,dp;
- number p = factorial(37,0); //37! of type number, computed in r
- p;
- ==> 13763753091226345046315979581580902400000000
-
-* Menu:
-
-See also:
-* prime::
-
-*See also:* *note prime::.
-
-
-File: sing.info, Node: fibonacci, Next: kmemory, Prev: factorial, Up:
general_lib
-
-D.2.2.7 fibonacci
-.................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- fibonacci(n); n,p integers
-
-*Return:*
- fibonacci(n): nth Fibonacci number, f(0)=f(1)=1, f(i+1)=f(i-1)+f(i)
-
- - computed in characteristic 0, of type string
- fibonacci(n,p): f(n) computed in characteristic 0 or prime(p)
- - of type number if a basering is present and p=0=char(basering) or
- if prime(p)=char(basering)
- - of type string else
-
-*Example:*
- LIB "general.lib";
- fibonacci(42); ""; //f(42) of type string (as long integer)
- ==> 267914296
- ==>
- ring r = 2,x,dp;
- number b = fibonacci(42,2); //f(42) of type number, computed in r
- b;
- ==> 0
-
-* Menu:
-
-See also:
-* prime::
-
-*See also:* *note prime::.
-
-
-File: sing.info, Node: kmemory, Next: killall, Prev: fibonacci, Up:
general_lib
-
-D.2.2.8 kmemory
-...............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- kmemory([n,[v]]); n,v integers
-
-*Return:*
- memory in kilobyte of type int
- n=0: memory used by active variables (same as no parameters)
- n=1: total memory allocated by Singular
- n=2: difference between top and init memory address (sbrk memory)
- n!=0,1,2: 0
-
-*Display:*
- detailed information about allocated and used memory if v!=0
-
-*Note:*
- kmemory uses internal function 'memory' to compute kilobyte, and is
- the same as 'memory' for n!=0,1,2
-
-*Example:*
- LIB "general.lib";
- kmemory();
- ==> 152
- kmemory(1,1);
- ==> // total memory allocated, at the moment, by SINGULAR (kilobyte):
- ==> 650
-
-
-File: sing.info, Node: killall, Next: number_e, Prev: kmemory, Up:
general_lib
-
-D.2.2.9 killall
-...............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- killall(); (no parameter)
- killall("type_name");
- killall("not", "type_name");
-
-*Return:*
- killall(); kills all user-defined variables except loaded
- procedures, no return value.
- - killall("type_name"); kills all user-defined variables, of type
- "type_name"
- - killall("not", "type_name"); kills all user-defined variables,
- except those of type "type_name" and except loaded procedures
- - killall("not", "name_1", "name_2", ...); kills all user-defined
- variables, except those of name "name_i" and except loaded
- procedures
-
-*Note:*
- killall should never be used inside a procedure
-
-*Example:*
- LIB "general.lib";
- ring rtest; ideal i=x,y,z; string str="hi"; int j = 3;
- export rtest,i,str,j; //this makes the local variables global
- ==> // ** `rtest` is already global
- ==> // ** `i` is already global
- ==> // ** `str` is already global
- ==> // ** `j` is already global
- listvar();
- ==> // j [0] int 3
- ==> // str [0] string hi
- ==> // rtest [0] *ring
- ==> // i [0] ideal, 3 generator(s)
- ==> // LIB [0] string standard.lib,general..., 74
char(s)
- killall("ring"); // kills all rings
- ==> // ** killing the basering for level 0
- listvar();
- ==> // j [0] int 3
- ==> // str [0] string hi
- ==> // LIB [0] string standard.lib,general..., 74
char(s)
- killall("not", "int"); // kills all variables except int's (and
procs)
- listvar();
- ==> // j [0] int 3
- ==> // LIB [0] string standard.lib,general..., 74
char(s)
- killall(); // kills all vars except loaded procs
- listvar();
- ==> // j [0] int 3
- ==> // LIB [0] string standard.lib,general..., 74
char(s)
-
-
-File: sing.info, Node: number_e, Next: number_pi, Prev: killall, Up:
general_lib
-
-D.2.2.10 number_e
-.................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- number_e(n); n integer
-
-*Return:*
- Euler number e=exp(1) up to n decimal digits (no rounding)
- - of type string if no basering of char 0 is defined
- - of type number if a basering of char 0 is defined
-
-*Display:*
- decimal format of e if printlevel > 0 (default:printlevel=0 )
-
-*Note:*
- procedure uses algorithm of A.H.J. Sale
-
-*Example:*
- LIB "general.lib";
- number_e(30);"";
- ==> 2.71828182845904523536028747135
- ==>
- ring R = 0,t,lp;
- number e = number_e(30);
- e;
- ==> 13591409142295226176801437356763/5000000000000000000000000000000
-
-
-File: sing.info, Node: number_pi, Next: primes, Prev: number_e, Up:
general_lib
-
-D.2.2.11 number_pi
-..................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- number_pi(n); n positive integer
-
-*Return:*
- pi (area of unit circle) up to n decimal digits (no rounding)
- - of type string if no basering of char 0 is defined,
- - of type number, if a basering of char 0 is defined
-
-*Display:*
- decimal format of pi if printlevel > 0 (default:printlevel=0 )
-
-*Note:*
- procedure uses algorithm of S. Rabinowitz
-
-*Example:*
- LIB "general.lib";
- number_pi(11);"";
- ==> 3.1415926535
- ==>
- ring r = (real,10),t,dp;
- number pi = number_pi(11); pi;
- ==> 3.1415926536
-
-
-File: sing.info, Node: primes, Next: product, Prev: number_pi, Up:
general_lib
-
-D.2.2.12 primes
-...............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- primes(n,m); n,m integers
-
-*Return:*
- intvec, consisting of all primes p, prime(n)<=p<=m, in increasing
- order if n<=m, resp. prime(m)<=p<=n, in decreasing order if m<n.
-
-*Note:*
- prime(n); returns the biggest prime number <= min(n,32003) if n>=2,
- else 2
-
-*Example:*
- LIB "general.lib";
- primes(50,100);"";
- ==> 47,53,59,61,67,71,73,79,83,89,97
- ==>
- intvec v = primes(37,1); v;
- ==> 37,31,29,23,19,17,13,11,7,5,3,2
-
-
-File: sing.info, Node: product, Next: sort, Prev: primes, Up: general_lib
-
-D.2.2.13 product
-................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- product(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list,
- v intvec (default: v=1..number of entries of id)
-
-*Assume:*
- list members can be multiplied.
-
-*Return:*
- The product of all entries of id [with index given by v] of type
- depending on the entries of id.
-
-*Note:*
- If id is not a list, id is treated as a list of polys resp.
- integers. A module m is identified with the corresponding matrix M
- (columns of M generate m).
- If v is outside the range of id, we have the empty product and the
- result will be 1 (of type int).
-
-*Example:*
- LIB "general.lib";
- ring r= 0,(x,y,z),dp;
- ideal m = maxideal(1);
- product(m);
- ==> xyz
- product(m[2..3]);
- ==> yz
- matrix M[2][3] = 1,x,2,y,3,z;
- product(M);
- ==> 6xyz
- intvec v=2,4,6;
- product(M,v);
- ==> xyz
- intvec iv = 1,2,3,4,5,6,7,8,9;
- v=1..5,7,9;
- product(iv,v);
- ==> 7560
- intmat A[2][3] = 1,1,1,2,2,2;
- product(A,3..5);
- ==> 4
-
-
-File: sing.info, Node: sort, Next: sum, Prev: product, Up: general_lib
-
-D.2.2.14 sort
-.............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- sort(id[v,o,n]); id = ideal/module/intvec/list(of intvec's or
- int's)
- sort may be called with 1, 2 or 3 arguments in the following way:
- sort(id[v,n]); v=intvec of positive integers, n=integer,
- sort(id[o,n]); o=string (any allowed ordstr of a ring), n=integer
-
-*Return:*
- a list l of two elements:
-
- l[1]: object of same type as input but sorted in the following
way:
- - if id=ideal/module: generators of id are sorted w.r.t.
intvec v
- (id[v[1]] becomes 1-st, id[v[2]] 2-nd element, etc.). If no
v is
- present, id is sorted w.r.t. ordering o (if o is given) or
w.r.t.
- actual monomial ordering (if no o is given):
- NOTE: generators with SMALLER(!) leading term come FIRST
- (e.g. sort(id); sorts backwards to actual monomial ordering)
- - if id=list of intvec's or int's: consider a list element, say
- id[1]=3,2,5, as exponent vector of the monomial x^3*y^2*z^5;
- the corresponding monomials are ordered w.r.t. intvec v
(s.a.).
- If no v is present, the monomials are sorted w.r.t. ordering
o
- (if o is given) or w.r.t. lexicographical ordering (if no o
is
- given). The corresponding ordered list of exponent vectors is
- returned.
- (e.g. sort(id); sorts lexicographically, smaller int's come
first)
- WARNING: Since negative exponents create the 0 polynomial in
- Singular, id should not contain negative integers: the result
- might not be as expected
- - if id=intvec: id is treated as list of integers
- - if n!=0 the ordering is inverse, i.e. w.r.t. v(size(v)..1)
- default: n=0
- l[2]: intvec, describing the permutation of the input (hence
l[2]=v
- if v is given (with positive integers))
-
-*Note:*
- If v is given id may be any simply indexed object (e.g. any list or
- string); if v[i]<0 and i<=size(id) v[i] is set internally to i;
- entries of v must be pairwise distinct to get a permutation if id.
- Zero generators of ideal/module are deleted
-
-*Example:*
- LIB "general.lib";
- ring r0 = 0,(x,y,z,t),lp;
- ideal i = x3,z3,xyz;
- sort(i); //sorts using lex ordering, smaller polys come first
- ==> [1]:
- ==> _[1]=z3
- ==> _[2]=xyz
- ==> _[3]=x3
- ==> [2]:
- ==> 2,3,1
- sort(i,3..1);
- ==> [1]:
- ==> _[1]=xyz
- ==> _[2]=z3
- ==> _[3]=x3
- ==> [2]:
- ==> 3,2,1
- sort(i,"ls")[1]; //sort w.r.t. negative lex ordering
- ==> _[1]=x3
- ==> _[2]=xyz
- ==> _[3]=z3
- intvec v =1,10..5,2..4;v;
- ==> 1,10,9,8,7,6,5,2,3,4
- sort(v)[1]; // sort v lexicographically
- ==> 1,2,3,4,5,6,7,8,9,10
- sort(v,"Dp",1)[1]; // sort v w.r.t (total sum, reverse lex)
- ==> 10,9,8,7,6,5,4,3,2,1
-
-
-File: sing.info, Node: sum, Next: watchdog, Prev: sort, Up: general_lib
-
-D.2.2.15 sum
-............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- sum(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list, v
- intvec (default: v=1..number of entries of id)
-
-*Assume:*
- list members can be added.
-
-*Return:*
- The sum of all entries of id [with index given by v] of type
- depending on the entries of id.
-
-*Note:*
- If id is not a list, id is treated as a list of polys resp.
- integers. A module m is identified with the corresponding matrix M
- (columns of M generate m).
- If v is outside the range of id, we have the empty sum and the
- result will be 0 (of type int).
-
-*Example:*
- LIB "general.lib";
- ring r= 0,(x,y,z),dp;
- vector pv = [xy,xz,yz,x2,y2,z2];
- sum(pv);
- ==> x2+xy+y2+xz+yz+z2
- sum(pv,2..5);
- ==> x2+y2+xz+yz
- matrix M[2][3] = 1,x,2,y,3,z;
- intvec w=2,4,6;
- sum(M,w);
- ==> x+y+z
- intvec iv = 1,2,3,4,5,6,7,8,9;
- sum(iv,2..4);
- ==> 9
-
-
-File: sing.info, Node: watchdog, Next: which, Prev: sum, Up: general_lib
-
-D.2.2.16 watchdog
-.................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Return:*
- Result of cmd, if the result can be computed in i seconds.
- Otherwise the computation is interrupted after i seconds, the
- string "Killed" is returned and the global variable
- 'watchdog_interrupt' is defined.
-
-*Note:*
- * the MP package must be enabled
- * the current basering should not be watchdog_rneu, since
- watchdog_rneu will be killed
- * if there are variable names of the structure x(i) all polynomials
- have to be put into eval(...) in order to be interpreted correctly
- * a second Singular process is started by this procedure
-
-*Example:*
- LIB "general.lib";
- ring r=0,(x,y,z),dp;
- poly f=x^30+y^30;
- watchdog(1,"factorize(eval("+string(f)+"))");
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16
- ==> _[3]=x8-x6y2+x4y4-x2y6+y8
- ==> _[4]=x4-x2y2+y4
- ==> _[5]=x2+y2
- ==> [2]:
- ==> 1,1,1,1,1
- watchdog(100,"factorize(eval("+string(f)+"))");
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16
- ==> _[3]=x8-x6y2+x4y4-x2y6+y8
- ==> _[4]=x4-x2y2+y4
- ==> _[5]=x2+y2
- ==> [2]:
- ==> 1,1,1,1,1
-
-
-File: sing.info, Node: which, Next: primecoeffs, Prev: watchdog, Up:
general_lib
-
-D.2.2.17 which
-..............
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- which(command); command = string expression
-
-*Return:*
- Absolute pathname of command, if found in search path. Empty
- string, otherwise.
-
-*Note:*
- Based on the Unix command 'which'.
-
-*Example:*
- LIB "general.lib";
- which("sh");
- ==> /bin/sh
-
-
-File: sing.info, Node: primecoeffs, Next: primefactors, Prev: which, Up:
general_lib
-
-D.2.2.18 primecoeffs
-....................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- primecoeffs(J[,q]); J any type which can be converted to a matrix
- e.g. ideal, matrix, vector, module, int, intvec
- q = intger
-
-*Compute:*
- primefactors <= min(p,32003) of coeffs of J (default p = 32003)
-
-*Return:*
- a list, say l, of two intvectors:
- l[1] : the different primefactors of all coefficients of J l[2] :
- the different remaining factors
-
-*Note:*
- the procedure works for small integers only, just by testing all
- primes (not to be considerd as serious prime factorization!)
-
-*Example:*
- LIB "general.lib";
- primecoeffs(intvec(7*8*121,7*8));"";
- ==> [1]:
- ==> 2,7,11
- ==> [2]:
- ==> 1
- ==>
- ring r = 0,(b,c,t),dp;
- ideal I = -13b6c3t+4b5c4t,-10b4c2t-5b4ct2;
- primecoeffs(I);
- ==> [1]:
- ==> 2,5,13
- ==> [2]:
- ==> _[1]=1
-
-
-File: sing.info, Node: primefactors, Next: timeStd, Prev: primecoeffs, Up:
general_lib
-
-D.2.2.19 primefactors
-.....................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- primefactors(n [,p]); n = int or number, p = integer
-
-*Compute:*
- primefactors <= min(p,32003) of n (default p = 32003)
-
-*Return:*
- a list, say l,
- l[1] : primefactors <= min(p,32003) of n
- l[2] : l[2][i] = multiplicity of l[1][i]
- l[3] : remaining factor ( n=product{ (l[1][i]^l[2][i])*l[3]} )
- type(l[3])=typeof(n)
-
-*Note:*
- If n is a long integer (of type number) then the procedure finds
- primefactors <= min(p,32003) but n may be larger as 2147483647
- (max. integer representation)
-
-*Warning:*
- the procedure works for small integers only, just by testing all
- primes (not to be considerd as serious prime factorization!)
-
-*Example:*
- LIB "general.lib";
- primefactors(7*8*121);
- ==> [1]:
- ==> 2,7,11
- ==> [2]:
- ==> 3,1,2
- ==> [3]:
- ==> 1
- ring r = 0,x,dp;
- primefactors(123456789100);
- ==> [1]:
- ==> 2,5
- ==> [2]:
- ==> 2,2
- ==> [3]:
- ==> 1234567891
-
-
-File: sing.info, Node: timeStd, Next: timeFactorize, Prev: primefactors,
Up: general_lib
-
-D.2.2.20 timeStd
-................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- timeStd(i,d), i ideal, d integer
-
-*Return:*
- std(i) if the standard basis computation finished after d-1 seconds
- and i otherwise
-
-*Example:*
- LIB "general.lib";
- ring r=32003,(a,b,c,d,e),dp;
- int n=6;
- ideal i=
- a^n-b^n,
- b^n-c^n,
- c^n-d^n,
- d^n-e^n,
- a^(n-1)*b+b^(n-1)*c+c^(n-1)*d+d^(n-1)*e+e^(n-1)*a;
- ideal j=timeStd(i,2);
- j;
- ==> j[1]=a6-b6
- ==> j[2]=b6-c6
- ==> j[3]=c6-d6
- ==> j[4]=d6-e6
- ==> j[5]=a5b+b5c+c5d+d5e+ae5
-
-
-File: sing.info, Node: timeFactorize, Next: factorH, Prev: timeStd, Up:
general_lib
-
-D.2.2.21 timeFactorize
-......................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- timeFactorize(p,d) poly p , integer d
-
-*Return:*
- factorize(p) if the factorization finished after d-1
- seconds otherwise f is considered to be irreducible
-
-*Example:*
- LIB "general.lib";
- ring r=0,(x,y),dp;
- poly p=((x2+y3)^2+xy6)*((x3+y2)^2+x10y);
- p=p^2;
- list l=timeFactorize(p,2);
- l;
- ==> [1]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==>
x22y14+2x21y14+4x23y11+x20y14+2x25y8+4x22y11+6x24y8+4x26y5+2x18y13+\
-
x28y2+4x17y13+4x15y15+8x19y10+2x16y13+8x14y15+2x12y17+4x21y7+8x18y10+16x1\
-
6y12+4x13y15+4x11y17+12x20y7+8x18y9+16x15y12+8x13y14+2x10y17+8x22y4+24x17\
-
y9+4x15y11+x14y12+8x12y14+2x24y+16x19y6+12x14y11+2x13y12+4x11y14+4x21y3+8\
-
x16y8+4x15y9+x12y12+8x10y14+6x8y16+2x18y5+2x17y6+4x14y9+16x12y11+4x9y14+1\
-
2x7y16+4x5y18+6x16y6+8x14y8+16x11y11+24x9y13+6x6y16+8x4y18+x2y20+4x18y3+2\
-
4x13y8+12x11y10+24x8y13+16x6y15+4x3y18+2xy20+x20+16x15y5+36x10y10+8x8y12+\
-
16x5y15+4x3y17+y20+4x17y2+24x12y7+24x7y12+2x5y14+4x2y17+6x14y4+16x9y9+6x4\
- y14+4x11y6+4x6y11+x8y8
- ==> [2]:
- ==> 1,1
-
-
-File: sing.info, Node: factorH, Prev: timeFactorize, Up: general_lib
-
-D.2.2.22 factorH
-................
-
-Procedure from library `general.lib' (*note general_lib::).
-
-*Usage:*
- factorH(p) p poly
-
-*Return:*
- factorize(p)
-
-*Note:*
- changes variables to become the last variable the principal one in
- the multivariate factorization and factorizes then the polynomial
-
-*Example:*
- LIB "general.lib";
- system("random",992851144);
- ring r=32003,(x,y,z,w,t),lp;
- poly p=y2w9+yz7t-yz5w4-z2w4t4-w8t3;
- //factorize(p); //fast
- //system("random",992851262);
- //factorize(p); //slow
- //system("random",992851262);
- factorH(p);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=y2w9+yz7t-yz5w4-z2w4t4-w8t3
- ==> [2]:
- ==> 1,1
-
-
-File: sing.info, Node: inout_lib, Next: poly_lib, Prev: general_lib, Up:
General purpose
-
-D.2.3 inout_lib
----------------
-
-*Library:*
- inout.lib
-
-*Purpose:*
- Printing and Manipulating In- and Output
-
-*Procedures:*
-
-* Menu:
-
-* allprint:: print list if ALLprint is defined, with pause if >0
-* lprint:: display poly/... fitting to pagewidth [size n]
-* pmat:: print form-matrix [first n chars of each column]
-* rMacaulay:: read Macaulay_1 output and return its Singular format
-* show:: display any object in a compact format
-* showrecursive:: display id recursively with respect to variables in p
-* split:: split given string into lines of length n
-* tab:: string of n space tabs
-* writelist:: write a list into a file and keep the list structure
-* pause:: stop the computation until user input
-
-
-File: sing.info, Node: allprint, Next: lprint, Up: inout_lib
-
-D.2.3.1 allprint
-................
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- allprint(L); L list
-
-*Display:*
- prints L[1], L[2], ... if an integer with name ALLprint is defined.
-
- makes "pause", if ALLprint > 0
- listvar(matrix), if ALLprint = 2
-
-*Return:*
- no return value
-
-*Example:*
- LIB "inout.lib";
- ring S;
- matrix M=matrix(freemodule(2),3,3);
- int ALLprint; export ALLprint;
- ==> // ** `ALLprint` is already global
- allprint("M =",M);
- ==> M =
- ==> 1,0,0,
- ==> 0,1,0,
- ==> 0,0,0
- kill ALLprint;
-
-
-File: sing.info, Node: lprint, Next: pmat, Prev: allprint, Up: inout_lib
-
-D.2.3.2 lprint
-..............
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- lprint(id[,n]); id poly/ideal/vector/module/matrix, n integer
-
-*Return:*
- string of id in a format fitting into lines of size n, such that no
- monomial is destroyed, i.e. the new line starts with + or -;
- (default: n = pagewidth).
-
-*Note:*
- id is printed columnwise, each column separated by a blank line;
- hence lprint(transpose(id)); displays a matrix id in a format which
- can be used as input.
-
-*Example:*
- LIB "inout.lib";
- ring r= 0,(x,y,z),ds;
- poly f=((x+y)*(x-y)*(x+z)*(y+z)^2);
- lprint(f,40);
- ==> x3y2-xy4+2x3yz+x2y2z-2xy3z-y4z+x3z2
- ==> +2x2yz2-xy2z2-2y3z2+x2z3-y2z3
- module m = [f*(x-y)],[0,f*(x-y)];
- string s=lprint(m); s;"";
- ==>
x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2
- ==> +2y4z2+x3z3-x2yz3-xy2z3+y3z3,
- ==> 0,
- ==>
- ==> 0,
- ==>
x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2
- ==> +2y4z2+x3z3-x2yz3-xy2z3+y3z3
- ==>
- execute("matrix M[2][2]="+s+";"); //use the string s as input
- module m1 = transpose(M); //should be the same as m
- print(m-m1);
- ==> 0,0,
- ==> 0,0
-
-
-File: sing.info, Node: pmat, Next: rMacaulay, Prev: lprint, Up: inout_lib
-
-D.2.3.3 pmat
-............
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- pmat(M,[n]); M matrix, n integer
-
-*Display:*
- display M in array format if it fits into pagewidth; if n is given,
- only the first n characters of each column are shown
-
-*Return:*
- no return value
-
-*Example:*
- LIB "inout.lib";
- ring r=0,(x,y,z),ls;
- ideal i= x,z+3y,x+y,z;
- matrix m[3][3]=i^2;
- pmat(m);
- ==> x2, xz+3xy, xy+x2,
- ==> xz, z2+6yz+9y2, yz+3y2+xz+3xy,
- ==> z2+3yz, y2+2xy+x2, yz+xz
- pmat(m,3);
- ==> x2 xz+ xy+
- ==> xz z2+ yz+
- ==> z2+ y2+ yz+
-
-
-File: sing.info, Node: rMacaulay, Next: show, Prev: pmat, Up: inout_lib
-
-D.2.3.4 rMacaulay
-.................
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- rMacaulay(s[,n]); s string, n integer
-
-*Return:*
- A string which should be readable by Singular if s is a string
- which was produced by Macaulay. If a second argument is present the
- first n lines of the file are deleted (which is useful if the file
- was produced e.g. by the putstd command of Macaulay).
-
-*Note:*
- This does not always work with 'cut and paste' since the character
- \ is treated differently
-
-*Example:*
- LIB "inout.lib";
- // Assume there exists a file 'Macid' with the following ideal in
- // Macaulay format:"
- // x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2] \
- // -4/71x[0]x[1]x[2]
- // Read this file into Singular and assign it to the string s1 by:
- // string s1 = read("Macid");
- // This is equivalent to";
- string s1 =
-
"x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2]-4/71x[0]x[1]x[2]";
- rMacaulay(s1);
- ==>
x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)-4/71*\
- x(0)*x(1)*x(2)
- // You may wish to assign s1 to a Singular ideal id:
- string sid = "ideal id =",rMacaulay(s1),";";
- ring r = 0,x(0..3),dp;
- execute(sid);
- id; "";
- ==>
id[1]=x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)\
- -4/71*x(0)*x(1)*x(2)
- ==>
- // Now treat a matrix in Macaulay format. Using the execute
- // command, this could be assinged to a Singular matrix as above.
- string s2 = "
- 0 0 0 0 0
- a3 0 0 0 0
- 0 b3 0 0 0
- 0 0 c3 0 0
- 0 0 0 d3 0
- 0 0 0 0 e3 ";
- rMacaulay(s2);
- ==> 0, 0, 0, 0, 0,
- ==> a3,0, 0, 0, 0,
- ==> 0, b3,0, 0, 0,
- ==> 0, 0, c3,0, 0,
- ==> 0, 0, 0, d3,0,
- ==> 0, 0, 0, 0, e3
-
-
-File: sing.info, Node: show, Next: showrecursive, Prev: rMacaulay, Up:
inout_lib
-
-D.2.3.5 show
-............
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- show(id); id any object of basering or of type ring/qring
- show(R,s); R=ring, s=string (s = name of an object belonging to R)
-
-*Display:*
- display id/s in a compact format together with some information
-
-*Return:*
- no return value
-
-*Note:*
- objects of type string, int, intvec, intmat belong to any ring. id
- may be a ring or a qring. In this case the minimal polynomial is
- displayed, and, for a qring, also the defining ideal.
- id may be of type list but the list must not contain a ring.
- show(R,s) does not work inside a procedure!
-
-*Example:*
- LIB "inout.lib";
- ring r;
- show(r);
- ==> // ring: (32003),(x,y,z),(dp(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ideal i=x^3+y^5-6*z^3,xy,x3-y2;
- show(i,3); // introduce 3 space tabs before information
- ==> // ideal, 3 generator(s)
- ==> y5+x3-6z3,
- ==> xy,
- ==> x3-y2
- vector v=x*gen(1)+y*gen(3);
- module m=v,2*v+gen(4);
- list L = i,v,m;
- show(L);
- ==> // list, 3 element(s):
- ==> [1]:
- ==> // ideal, 3 generator(s)
- ==> y5+x3-6z3,
- ==> xy,
- ==> x3-y2
- ==> [2]:
- ==> // vector
- ==> [x,0,y]
- ==> [3]:
- ==> // module, 2 generator(s)
- ==> [x,0,y]
- ==> [2x,0,2y,1]
- ring S=(0,T),(a,b,c,d),ws(1,2,3,4);
- minpoly = T^2+1;
- ideal i=a2+b,c2+T^2*d2; i=std(i);
- qring Q=i;
- show(Q);
- ==> // qring: (0,T),(a,b,c,d),(ws(1,2,3,4),C);
- ==> // minpoly = (T2+1)
- ==> // quotient ring from ideal:
- ==> _[1]=a2+b
- ==> _[2]=c2-d2
- map F=r,a2,b^2,3*c3;
- show(F);
- ==> // i-th variable of preimage ring is mapped to @map[i]
- ==> // @map [1] map from r
- ==> @map[1]=a2
- ==> @map[2]=b2
- ==> @map[3]=3*c3
- // Apply 'show' to i (which does not belong to the basering) by typing
- // ring r; ideal i=xy,x3-y2; ring Q; show(r,"i");
-
-
-File: sing.info, Node: showrecursive, Next: split, Prev: show, Up:
inout_lib
-
-D.2.3.6 showrecursive
-.....................
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- showrecursive(id,p[ord]); id= any object of basering, p= product of
- variables and ord=string (any allowed ordstr)
-
-*Display:*
- display 'id' in a recursive format as a polynomial in the variables
- occurring in p with coefficients in the remaining variables. This
- is done by mapping to a ring with parameters [and ordering 'ord',
- if a 3rd argument is present (default: ord="dp")] and applying
- procedure 'show'
-
-*Return:*
- no return value
-
-*Example:*
- LIB "inout.lib";
- ring r=2,(a,b,c,d,x,y),ds;
- poly f=y+ax2+bx3+cx2y2+dxy3;
- showrecursive(f,x);
- ==> // poly, 4 monomial(s)
- ==> (b)*x3+(a+cy2)*x2+(dy3)*x+(y)
- showrecursive(f,xy,"lp");
- ==> // poly, 5 monomial(s)
- ==> (b)*x3+(c)*x2y2+(a)*x2+(d)*xy3+y
-
-
-File: sing.info, Node: split, Next: tab, Prev: showrecursive, Up: inout_lib
-
-D.2.3.7 split
-.............
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- split(s[,n]); s string, n integer
-
-*Return:*
- same string, split into lines of length n separated by \ (default:
- n=pagewidth)
-
-*Note:*
- may be used in connection with lprint
-
-*Example:*
- LIB "inout.lib";
- ring r= 0,(x,y,z),ds;
- poly f = (x+y+z)^4;
- split(string(f),50);
- ==> x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x\
- ==> 2z2+12xyz2+6y2z2+4xz3+4yz3+z4
- split(lprint(f));
- ==>
x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x2z2+12xyz2+6y2z2+4xz3+4\
- yz3\
- ==> +z4
-
-
-File: sing.info, Node: tab, Next: writelist, Prev: split, Up: inout_lib
-
-D.2.3.8 tab
-...........
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- tab(n); n integer
-
-*Return:*
- string of n space tabs
-
-*Example:*
- LIB "inout.lib";
- for(int n=0; n<=5; n=n+1)
- { tab(5-n)+"*"+tab(n)+"+"+tab(n)+"*"; }
- ==> *+*
- ==> * + *
- ==> * + *
- ==> * + *
- ==> * + *
- ==> * + *
-
-
-File: sing.info, Node: writelist, Next: pause, Prev: tab, Up: inout_lib
-
-D.2.3.9 writelist
-.................
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- writelist(file,name,L); file,name strings (file-name, list-name), L
- a list.
-
-*Create:*
- a file with name `file`, write the content of the list L into it
- and call the list `name`, keeping the list structure
-
-*Return:*
- no return value
-
-*Note:*
- The syntax of writelist uses and is similar to the syntax of the
- write command of Singular which does not manage lists properly. If
- (file,name) = ("listfile","L1"), writelist creates (resp. appends
- if listfile exists) a file with name listfile and stores there the
- list L under the name L1. The Singular command
- execute(read("listfile")); assigns the content of L (stored in
- listfile) to a list L1.
- On a UNIX system, write(">file",...) overwrites an existing file
- `file` while write("file",...) and write(">>file",...) append.
-
-*Example:*
- LIB "inout.lib";
- ring r;
- ideal i=x,y,z;
- list k="Hi",nameof(basering),i,37;
- writelist("zumSpass","lustig",k);
- read("zumSpass");
- ==> list lustig;
- ==> lustig[1]=
- ==> Hi;
- ==> lustig[2]=
- ==> r;
- ==> lustig[3]=
- ==> x,y,z;
- ==> lustig[4]=
- ==> 37;
- ==>
- list L=res(i,0); //resolution of the ideal i
- writelist("res_list","res-name",L); "";
- ==>
- read("res_list");
- ==> list res-name;
- ==> res-name[1]=
- ==> z,y,x;
- ==> res-name[2]=
- ==> -y*gen(1)+z*gen(2),-x*gen(1)+z*gen(3),-x*gen(2)+y*gen(3);
- ==> res-name[3]=
- ==> x*gen(1)-y*gen(2)+z*gen(3);
- ==>
- // execute(read("res_list")); would create a list with name res-name,
- // which is the resolution of i (the same content as L)
- system("sh","/bin/rm res_list zumSpass");
- ==> 0
- // Under UNIX, this removes the files 'res_list' and 'zumSpass'
- // Type help system; to get more information about the shell escape
- // If your operating system does not accept the shell escape, you
- // must remove the just created files 'zumSpass' and 'res_list' directly
-
-
-File: sing.info, Node: pause, Prev: writelist, Up: inout_lib
-
-D.2.3.10 pause
-..............
-
-Procedure from library `inout.lib' (*note inout_lib::).
-
-*Usage:*
- pause([ prompt ]) prompt string
-
-*Return:*
- none
-
-*Purpose:*
- interrupt the execution of commands until user input
-
-*Note:*
- pause is useful in procedures in connection with printlevel to
- interrupt the computation and to display intermediate results.
-
-*Example:*
- LIB "inout.lib";
- // can only be shown interactively, try the following commands:
- // pause("press <return> to continue");
- // pause();
- // In the following pocedure TTT, xxx is printed and the execution of
- // TTT is stopped until the return-key is pressed, if printlevel>0.
- // xxx may be any result of a previous computation or a comment, etc:
- //
- // proc TTT
- // { int pp = printlevel-voice+2; //pp=0 if printlevel=0 and if TTT is
- // .... //not called from another procedure
- // if( pp>0 )
- // {
- // print( xxx );
- // pause("press <return> to continue");
- // }
- // ....
- // }
-
-* Menu:
-
-See also:
-* printlevel::
-* read::
-
-*See also:* *note printlevel::; *note read::.
-
-
-File: sing.info, Node: poly_lib, Next: random_lib, Prev: inout_lib, Up:
General purpose
-
-D.2.4 poly_lib
---------------
-
-*Library:*
- poly.lib
-
-*Purpose:*
- Procedures for Manipulating Polys, Ideals, Modules
-
-*Authors:*
- O. Bachmann, G.-M: Greuel, A. Fruehbis
-
-*Procedures:*
-
-* Menu:
-
-* cyclic:: ideal of cyclic n-roots
-* katsura:: katsura [i] ideal
-* freerank:: rank of coker(input) if coker is free else -1
-* is_homog:: int, =1 resp. =0 if input is homogeneous resp. not
-* is_zero:: int, =1 resp. =0 if coker(input) is 0 resp. not
-* lcm:: lcm of given generators of ideal
-* maxcoef:: maximal length of coefficient occurring in poly/...
-* maxdeg:: int/intmat = degree/s of terms of maximal order
-* maxdeg1:: int = [weighted] maximal degree of input
-* mindeg:: int/intmat = degree/s of terms of minimal order
-* mindeg1:: int = [weighted] minimal degree of input
-* normalize:: normalize poly/... such that leading coefficient is 1
-* rad_con:: check radical containment of poly p in ideal I
-* content:: content of polynomial/vector f
-* numerator:: numerator of number n
-* denominator:: denominator of number n
-* mod2id:: conversion of a module M to an ideal
-* id2mod:: conversion inverse to mod2id
-* substitute:: substitute in I variables by polynomials
-* subrInterred:: interred w.r.t. a subset of variables
-* hilbPoly:: Hilbert polynomial of basering/I
-
-
-File: sing.info, Node: cyclic, Next: katsura, Up: poly_lib
-
-D.2.4.1 cyclic
-..............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- cyclic(n); n integer
-
-*Return:*
- ideal of cyclic n-roots from 1-st n variables of basering
-
-*Example:*
- LIB "poly.lib";
- ring r=0,(u,v,w,x,y,z),lp;
- cyclic(nvars(basering));
- ==> _[1]=u+v+w+x+y+z
- ==> _[2]=uv+uz+vw+wx+xy+yz
- ==> _[3]=uvw+uvz+uyz+vwx+wxy+xyz
- ==> _[4]=uvwx+uvwz+uvyz+uxyz+vwxy+wxyz
- ==> _[5]=uvwxy+uvwxz+uvwyz+uvxyz+uwxyz+vwxyz
- ==> _[6]=uvwxyz-1
- homog(cyclic(5),z);
- ==> _[1]=u+v+w+x+y
- ==> _[2]=uv+uy+vw+wx+xy
- ==> _[3]=uvw+uvy+uxy+vwx+wxy
- ==> _[4]=uvwx+uvwy+uvxy+uwxy+vwxy
- ==> _[5]=uvwxy-z5
-
-
-File: sing.info, Node: katsura, Next: freerank, Prev: cyclic, Up: poly_lib
-
-D.2.4.2 katsura
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- katsura([n]): n integer
-
-*Return:*
- katsura(n) : n-th katsura ideal of
- (1) newly created and set ring (32003, x(0..n), dp), if
- nvars(basering) < n
- (2) basering, if nvars(basering) >= n
- katsura() : katsura ideal of basering
-
-*Example:*
- LIB "poly.lib";
- ring r; basering;
- ==> // characteristic : 32003
- ==> // number of vars : 3
- ==> // block 1 : ordering dp
- ==> // : names x y z
- ==> // block 2 : ordering C
- katsura();
- ==> _[1]=x+2y+2z-1
- ==> _[2]=x2+2y2+2z2-x
- ==> _[3]=2xy+2yz-y
- katsura(4); basering;
- ==> _[1]=x(0)+2*x(1)+2*x(2)+2*x(3)-1
- ==> _[2]=x(0)^2+2*x(1)^2+2*x(2)^2+2*x(3)^2-x(0)
- ==> _[3]=2*x(0)*x(1)+2*x(1)*x(2)+2*x(2)*x(3)-x(1)
- ==> _[4]=x(1)^2+2*x(0)*x(2)+2*x(1)*x(3)-x(2)
- ==> // characteristic : 32003
- ==> // number of vars : 5
- ==> // block 1 : ordering dp
- ==> // : names x(0) x(1) x(2) x(3) x(4)
- ==> // block 2 : ordering C
-
-
-File: sing.info, Node: freerank, Next: is_homog, Prev: katsura, Up:
poly_lib
-
-D.2.4.3 freerank
-................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- freerank(M[,any]); M=poly/ideal/vector/module/matrix
-
-*Compute:*
- rank of module presented by M in case it is free.
- By definition this is vdim(coker(M)/m*coker(M)) if coker(M) is
- free, where m = maximal ideal of the variables of the basering and
- M is considered as matrix.
- (the 0-module is free of rank 0)
-
-*Return:*
- rank of coker(M) if coker(M) is free and -1 else;
- in case of a second argument return a list:
- L[1] = rank of coker(M) or -1
- L[2] = minbase(M)
-
-*Note:*
- freerank(syz(M)); computes the rank of M if M is free (and -1 else)
-
-*Example:*
- LIB "poly.lib";
- ring r;
- ideal i=x;
- module M=[x,0,1],[-x,0,-1];
- freerank(M); // should be 2, coker(M) is not free
- ==> 2
- freerank(syz (M),"");
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> _[1]=gen(2)+gen(1)
- // [1] should be 1, coker(syz(M))=M is free of rank 1
- // [2] should be gen(2)+gen(1) (minimal relation of M)
- freerank(i);
- ==> -1
- freerank(syz(i)); // should be 1, coker(syz(i))=i is free of rank 1
- ==> 1
-
-
-File: sing.info, Node: is_homog, Next: is_zero, Prev: freerank, Up:
poly_lib
-
-D.2.4.4 is_homog
-................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- is_homog(id); id poly/ideal/vector/module/matrix
-
-*Return:*
- integer which is 1 if input is homogeneous (resp. weighted
- homogeneous if the monomial ordering consists of one block of type
- ws,Ws,wp or Wp, assuming that all weights are positive) and 0
- otherwise
-
-*Note:*
- A vector is homogeneous, if the components are homogeneous of same
- degree, a module/matrix is homogeneous if all column vectors are
- homogeneous
- //*** ergaenzen, wenn Matrizen-Spalten Gewichte haben
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),wp(1,2,3);
- is_homog(x5-yz+y3);
- ==> 0
- ideal i = x6+y3+z2, x9-z3;
- is_homog(i);
- ==> 1
- ring s = 0,(a,b,c),ds;
- vector v = [a2,0,ac+bc];
- vector w = [a3,b3,c4];
- is_homog(v);
- ==> 1
- is_homog(w);
- ==> 0
-
-
-File: sing.info, Node: is_zero, Next: lcm, Prev: is_homog, Up: poly_lib
-
-D.2.4.5 is_zero
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- is_zero(M[,any]); M=poly/ideal/vector/module/matrix
-
-*Return:*
- integer, 1 if coker(M)=0 resp. 0 if coker(M)!=0, where M is
- considered as matrix.
- If a second argument is given, return a list:
- L[1] = 1 if coker(M)=0 resp. 0 if coker(M)!=0
- L[2] = dim(M)
-
-*Example:*
- LIB "poly.lib";
- ring r;
- module m = [x],[y],[1,z];
- is_zero(m,1);
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> 2
- qring q = std(ideal(x2+y3+z2));
- ideal j = x2+y3+z2-37;
- is_zero(j);
- ==> 1
-
-
-File: sing.info, Node: lcm, Next: maxcoef, Prev: is_zero, Up: poly_lib
-
-D.2.4.6 lcm
-...........
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- lcm(p[,q]); p int/intvec q a list of integers or
- p poly/ideal q a list of polynomials
-
-*Return:*
- the least common multiple of the common entries of p and q:
- - of type int if p is an int/intvec
- - of type poly if p is a poly/ideal
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),lp;
- poly p = (x+y)*(y+z);
- poly q = (z4+2)*(y+z);
- lcm(p,q);
- ==> xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz
- ideal i=p,q,y+z;
- lcm(i,p);
- ==> xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz
- lcm(2,3,6);
- ==> 6
- lcm(2..6);
- ==> 60
-
-
-File: sing.info, Node: maxcoef, Next: maxdeg, Prev: lcm, Up: poly_lib
-
-D.2.4.7 maxcoef
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- maxcoef(f); f poly/ideal/vector/module/matrix
-
-*Return:*
- maximal length of coefficient of f of type int (by counting the
- length of the string of each coefficient)
-
-*Example:*
- LIB "poly.lib";
- ring r= 0,(x,y,z),ds;
- poly g = 345x2-1234567890y+7/4z;
- maxcoef(g);
- ==> 10
- ideal i = g,10/1234567890;
- maxcoef(i);
- ==> 11
- // since i[2]=1/123456789
-
-
-File: sing.info, Node: maxdeg, Next: maxdeg1, Prev: maxcoef, Up: poly_lib
-
-D.2.4.8 maxdeg
-..............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- maxdeg(id); id poly/ideal/vector/module/matrix
-
-*Return:*
- int/intmat, each component equals maximal degree of monomials in
- the corresponding component of id, independent of ring ordering
- (maxdeg of each var is 1).
- Of type int if id is of type poly, of type intmat else
-
-*Note:*
- proc maxdeg1 returns 1 integer, the absolute maximum; moreover, it
- has an option for computing weighted degrees
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),wp(1,2,3);
- poly f = x+y2+z3;
- deg(f); //deg; returns weighted degree (in case of 1 block)!
- ==> 9
- maxdeg(f);
- ==> 3
- matrix m[2][2]=f+x10,1,0,f^2;
- maxdeg(m);
- ==> 10,0,
- ==> -1,6
-
-
-File: sing.info, Node: maxdeg1, Next: mindeg, Prev: maxdeg, Up: poly_lib
-
-D.2.4.9 maxdeg1
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- maxdeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
-
-*Return:*
- integer, maximal [weighted] degree of monomials of id independent
- of ring ordering, maxdeg1 of i-th variable is v[i] (default:
- v=1..1).
-
-*Note:*
- This proc returns one integer while maxdeg returns, in general, a
- matrix of integers. For one polynomial and if no intvec v is given
- maxdeg is faster
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),wp(1,2,3);
- poly f = x+y2+z3;
- deg(f); //deg returns weighted degree (in case of 1 block)!
- ==> 9
- maxdeg1(f);
- ==> 3
- intvec v = ringweights(r);
- maxdeg1(f,v); //weighted maximal degree
- ==> 9
- matrix m[2][2]=f+x10,1,0,f^2;
- maxdeg1(m,v); //absolute weighted maximal degree
- ==> 18
-
-
-File: sing.info, Node: mindeg, Next: mindeg1, Prev: maxdeg1, Up: poly_lib
-
-D.2.4.10 mindeg
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- mindeg(id); id poly/ideal/vector/module/matrix
-
-*Return:*
- minimal degree/s of monomials of id, independent of ring ordering
- (mindeg of each variable is 1) of type int if id of type poly, else
- of type intmat.
-
-*Note:*
- proc mindeg1 returns one integer, the absolute minimum; moreover it
- has an option for computing weighted degrees.
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),ls;
- poly f = x5+y2+z3;
- ord(f); // ord returns weighted order of leading term!
- ==> 3
- mindeg(f); // computes minimal degree
- ==> 2
- matrix m[2][2]=x10,1,0,f^2;
- mindeg(m); // computes matrix of minimum degrees
- ==> 10,0,
- ==> -1,4
-
-
-File: sing.info, Node: mindeg1, Next: normalize, Prev: mindeg, Up: poly_lib
-
-D.2.4.11 mindeg1
-................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- mindeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
-
-*Return:*
- integer, minimal [weighted] degree of monomials of id independent
- of ring ordering, mindeg1 of i-th variable is v[i] (default
- v=1..1).
-
-*Note:*
- This proc returns one integer while mindeg returns, in general, a
- matrix of integers. For one polynomial and if no intvec v is given
- mindeg is faster.
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),ls;
- poly f = x5+y2+z3;
- ord(f); // ord returns weighted order of leading term!
- ==> 3
- intvec v = 1,-3,2;
- mindeg1(f,v); // computes minimal weighted degree
- ==> -6
- matrix m[2][2]=x10,1,0,f^2;
- mindeg1(m,1..3); // computes absolute minimum of weighted degrees
- ==> -1
-
-
-File: sing.info, Node: normalize, Next: rad_con, Prev: mindeg1, Up:
poly_lib
-
-D.2.4.12 normalize
-..................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- normalize(id); id=poly/vector/ideal/module
-
-*Return:*
- object of same type with leading coefficient equal to 1
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(x,y,z),ls;
- poly f = 2x5+3y2+4z3;
- normalize(f);
- ==> z3+3/4y2+1/2x5
- module m=[9xy,0,3z3],[4z,6y,2x];
- normalize(m);
- ==> _[1]=z3*gen(3)+3xy*gen(1)
- ==> _[2]=z*gen(1)+3/2y*gen(2)+1/2x*gen(3)
- ring s = 0,(x,y,z),(c,ls);
- module m=[9xy,0,3z3],[4z,6y,2x];
- normalize(m);
- ==> _[1]=[xy,0,1/3z3]
- ==> _[2]=[z,3/2y,1/2x]
-
-
-File: sing.info, Node: rad_con, Next: content, Prev: normalize, Up:
poly_lib
-
-D.2.4.13 rad_con
-................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- rad_con(g,I); g polynomial, I ideal
-
-*Return:*
- 1 (TRUE) (type int) if g is contained in the radical of I
- 0 (FALSE) (type int) otherwise
-
-*Example:*
- LIB "poly.lib";
- ring R=0,(x,y,z),dp;
- ideal I=x2+y2,z2;
- poly f=x4+y4;
- rad_con(f,I);
- ==> 0
- ideal J=x2+y2,z2,x4+y4;
- poly g=z;
- rad_con(g,I);
- ==> 1
-
-
-File: sing.info, Node: content, Next: numerator, Prev: rad_con, Up:
poly_lib
-
-D.2.4.14 content
-................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- content(f); f polynomial/vector
-
-*Return:*
- number, the content (greatest common factor of coefficients) of the
- polynomial/vector f
-
-*Example:*
- LIB "poly.lib";
- ring r=0,(x,y,z),(c,lp);
- content(3x2+18xy-27xyz);
- ==> 3
- vector v=[3x2+18xy-27xyz,15x2+12y4,3];
- content(v);
- ==> 3
-
-
-File: sing.info, Node: numerator, Next: denominator, Prev: content, Up:
poly_lib
-
-D.2.4.15 numerator
-..................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- numerator(n); n number
-
-*Return:*
- number, the numerator of n
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,x, dp;
- number n = 3/2;
- numerator(n);
- ==> 3
-
-* Menu:
-
-See also:
-* cleardenom::
-* content::
-* denominator::
-
-*See also:* *note cleardenom::; *note content::; *note denominator::.
-
-
-File: sing.info, Node: denominator, Next: mod2id, Prev: numerator, Up:
poly_lib
-
-D.2.4.16 denominator
-....................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- denominator(n); n number
-
-*Return:*
- number, the denominator of n
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,x, dp;
- number n = 3/2;
- denominator(n);
- ==> 2
-
-* Menu:
-
-See also:
-* cleardenom::
-* content::
-* denominator::
-
-*See also:* *note cleardenom::; *note content::; *note denominator::.
-
-
-File: sing.info, Node: mod2id, Next: id2mod, Prev: denominator, Up:
poly_lib
-
-D.2.4.17 mod2id
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- mod2id(M,vpos); M matrix, vpos intvec
-
-*Assume:*
- vpos is an integer vector such that gen(i) corresponds to
- var(vpos[i]).
- The basering contains variables var(vpos[i]) which do not occur in
- M.
-
-*Return:*
- ideal I in which each gen(i) from the module is replaced by
- var(vpos[i]) and all monomials var(vpos[i])*var(vpos[j]) have been
- added to the generating set of I.
-
-*Note:*
- This procedure should be used in the following situation: one wants
- to pass to a ring with new variables, say e(1),..,e(s), which
- correspond to the components gen(1),..,gen(s) of the module M such
- that e(i)*e(j)=0 for all i,j.
- The new ring should already exist and be the current ring
-
-*Example:*
- LIB "poly.lib";
- ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
- module mo=x*gen(1)+y*gen(2);
- intvec iv=2,1;
- mod2id(mo,iv);
- ==> _[1]=e(2)^2
- ==> _[2]=e(1)*e(2)
- ==> _[3]=e(1)^2
- ==> _[4]=e(1)*y+e(2)*x
-
-
-File: sing.info, Node: id2mod, Next: substitute, Prev: mod2id, Up: poly_lib
-
-D.2.4.18 id2mod
-...............
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- id2mod(I,vpos); I ideal, vpos intvec
-
-*Return:*
- module corresponding to the ideal by replacing var(vpos[i]) by
- gen(i) and omitting all generators var(vpos[i])*var(vpos[j])
-
-*Note:*
- * This procedure only makes sense if the ideal contains all
- var(vpos[i])*var(vpos[j]) as monomial generators and all other
- generators of I are linear combinations of the var(vpos[i]) over
- the ring in the other variables.
- * This is the inverse procedure to mod2id and should be applied
- only to ideals created by mod2id using the same intvec vpos
- (possibly after a standard basis computation)
-
-*Example:*
- LIB "poly.lib";
- ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
- ideal i=e(2)^2,e(1)*e(2),e(1)^2,e(1)*y+e(2)*x;
- intvec iv=2,1;
- id2mod(i,iv);
- ==> _[1]=x*gen(1)+y*gen(2)
-
-
-File: sing.info, Node: substitute, Next: subrInterred, Prev: id2mod, Up:
poly_lib
-
-D.2.4.19 substitute
-...................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- - case 1: typeof(#[1])==poly:
- substitute (I,v,f[,v1,f1,v2,f2,...]); I object of basering which
- can be mapped, v,v1,v2,.. ring variables, f,f1,f2,... poly
- - case 2: typeof(#[1])==ideal: substitute1 (I,v,f); I object of
- basering which can be mapped, v ideal of ring variables, f ideal
-
-*Return:*
- object of same type as I,
- - case 1: ring variable v,v1,v2,... substituted by polynomials
- f,f1,f2,..., in this order
- - case 2: ring variables in v substituted by polynomials in f: v[i]
- is substituted by f[i], i=1,...,i=min(size(v),ncols(f))
-
-*Note:*
- this procedure extends the built-in command subst which substitutes
- ring variables only by monomials
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(b,c,t),dp;
- ideal I = -bc+4b2c2t,bc2t-5b2c;
- substitute(I,c,b+c,t,0,b,b-1);
- ==> _[1]=-b2-bc+2b+c-1
- ==> _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5
- ideal v = c,t,b;
- ideal f = b+c,0,b-1;
- substitute(I,v,f);
- ==> _[1]=-b2-bc+2b+c-1
- ==> _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5
-
-
-File: sing.info, Node: subrInterred, Next: hilbPoly, Prev: substitute, Up:
poly_lib
-
-D.2.4.20 subrInterred
-.....................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- subrInterred(mon,sm,iv);
- sm: ideal in a ring r with n + s variables,
- e.g. x_1,..,x_n and t_1,..,t_s
- mon: ideal with monomial generators (not divisible by any of the
- t_i) such that sm is contained in the module
- k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]
- iv: intvec listing the variables which are supposed to be used as
- x_i
-
-*Return:*
- list l:
- l[1]=the monomials from mon in the order used
- l[2]=their coefficients after interreduction
- l[3]=l[1]*l[2]
-
-*Purpose:*
- Do interred only w.r.t. a subset of variables.
- The procedure returns an interreduced system of generators of sm
- considered as a k[t_1,..,t_s]-submodule of the free module
- k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]).
-
-*Example:*
- LIB "poly.lib";
- ring r=0,(x,y,z),dp;
- ideal i=x^2+x*y^2,x*y+x^2*y,z;
- ideal j=x^2+x*y^2,x*y,z;
- ideal mon=x^2,z,x*y;
- intvec iv=1,3;
- subrInterred(mon,i,iv);
- ==> [1]:
- ==> _[1,1]=z
- ==> _[1,2]=xy
- ==> _[1,3]=x2
- ==> [2]:
- ==> _[1]=gen(1)
- ==> _[2]=y2*gen(2)-gen(2)
- ==> _[3]=y*gen(2)+gen(3)
- ==> [3]:
- ==> _[1,1]=z
- ==> _[1,2]=xy3-xy
- ==> _[1,3]=xy2+x2
- subrInterred(mon,j,iv);
- ==> [1]:
- ==> _[1,1]=z
- ==> _[1,2]=xy
- ==> _[1,3]=x2
- ==> [2]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=gen(3)
- ==> [3]:
- ==> _[1,1]=z
- ==> _[1,2]=xy
- ==> _[1,3]=x2
-
-
-File: sing.info, Node: hilbPoly, Prev: subrInterred, Up: poly_lib
-
-D.2.4.21 hilbPoly
-.................
-
-Procedure from library `poly.lib' (*note poly_lib::).
-
-*Usage:*
- hilbPoly(I) I a homogeneous ideal
-
-*Return:*
- the Hilbert polynomial of basering/I as an intvec v=v_0,...,v_r
- such that the Hilbert polynomial is (v_0+v_1*t+...v_r*t^r)/r!
-
-*Example:*
- LIB "poly.lib";
- ring r = 0,(b,c,t,h),dp;
- ideal I=
- bct-t2h+2th2+h3,
- bt3-ct3-t4+b2th+c2th-2bt2h+2ct2h+2t3h-bch2-2bth2+2cth2+2th3,
- b2c2+bt2h-ct2h-t3h+b2h2+2bch2+c2h2-2bth2+2cth2+t2h2-2bh3+2ch3+2th3+3h4,
- c2t3+ct4-c3th-2c2t2h-2ct3h-t4h+bc2h2-2c2th2-bt2h2+4t3h2+2bth3-2cth3-t2h3
- +bh4-6th4-2h5;
- hilbPoly(I);
- ==> -11,10
-
-
-File: sing.info, Node: random_lib, Next: ring_lib, Prev: poly_lib, Up:
General purpose
-
-D.2.5 random_lib
-----------------
-
-*Library:*
- random.lib
-
-*Purpose:*
- Creating Random and Sparse Matrices, Ideals, Polys
-
-*Procedures:*
-
-* Menu:
-
-* genericid:: generic sparse linear combinations of generators of i
-* randomid:: random linear combinations of generators of id
-* randommat:: nxm matrix of random linear combinations of id
-* sparseid:: ideal of k random sparse poly's of degree d [u<=d<=o]
-* sparsematrix:: nxm sparse matrix of polynomials of degree<=o
-* sparsemat:: nxm sparse integer matrix with random coefficients
-* sparsepoly:: random sparse polynomial with terms of degree in [u,o]
-* sparsetriag:: nxm sparse lower-triag intmat with random coefficients
-* triagmatrix:: nxm sparse lower-triag matrix of poly's of degree<=o
-* randomLast:: random transformation of the last variable
-* randomBinomial:: binomial ideal, k random generators of degree >=u
-
-
-File: sing.info, Node: genericid, Next: randomid, Up: random_lib
-
-D.2.5.1 genericid
-.................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- genericid(id,[,p,b]); id ideal/module, k,p,b integers
-
-*Return:*
- system of generators of id which are generic, sparse, triagonal
- linear combinations of given generators with coefficients in [1,b]
- and sparseness p percent, bigger p being sparser (default: p=75,
- b=30000)
-
-*Note:*
- For performance reasons try small bound b in characteristic 0
-
-*Example:*
- LIB "random.lib";
- ring r=0,(t,x,y,z),ds;
- ideal i= x3+y4,z4+yx,t+x+y+z;
- genericid(i,0,10);
- ==> _[1]=3t+3x+3y+3z+2xy+x3+y4+2z4
- ==> _[2]=4t+4x+4y+4z+xy+z4
- ==> _[3]=t+x+y+z
- module m=[x,0,0,0],[0,y2,0,0],[0,0,z3,0],[0,0,0,t4];
- print(genericid(m));
- ==> x, 0, 0, 0,
- ==> 17904y2,y2, 0, 0,
- ==> 0, 24170z3,z3,0,
- ==> 0, 0, 0, t4
-
-
-File: sing.info, Node: randomid, Next: randommat, Prev: genericid, Up:
random_lib
-
-D.2.5.2 randomid
-................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- randomid(id,[k,b]); id ideal/module, b,k integers
-
-*Return:*
- ideal/module having k generators which are random linear
- combinations of generators of id with coefficients in the interval
- [-b,b] (default: b=30000, k=size(id))
-
-*Note:*
- For performance reasons try small bound b in characteristic 0
-
-*Example:*
- LIB "random.lib";
- ring r=0,(x,y,z),dp;
- randomid(maxideal(2),2,9);
- ==> _[1]=-5x2-9xy+6y2-8xz-8yz+4z2
- ==> _[2]=-9xy+2y2+xz+yz-z2
- module m=[x,0,1],[0,y2,0],[y,0,z3];
- show(randomid(m));
- ==> // module, 3 generator(s)
- ==> [1369x-11685y,-4481y2,-11685z3+1369]
- ==> [-642x-13756y,25342y2,-13756z3-642]
- ==> [2536x-6355y,8285y2,-6355z3+2536]
-
-
-File: sing.info, Node: randommat, Next: sparseid, Prev: randomid, Up:
random_lib
-
-D.2.5.3 randommat
-.................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- randommat(n,m[,id,b]); n,m,b integers, id ideal
-
-*Return:*
- nxm matrix, entries are random linear combinations of elements of
- id and coefficients in [-b,b]
- [default: (id,b) = (maxideal(1),30000)]
-
-*Note:*
- For performance reasons try small bound b in char 0
-
-*Example:*
- LIB "random.lib";
- ring r=0,(x,y,z),dp;
- matrix A=randommat(3,3,maxideal(2),9);
- print(A);
- ==> 9x2-2xy-8y2-9xz+yz+4z2, 9x2-4xy+y2-5xz+6yz-z2, 8x2+xy-9y2+2yz-8z2,
- ==> -x2+5xy-8y2-7xz+4yz-3z2,x2+xy-4y2-xz+5z2,
5x2-8xy+8y2+6xz+yz+7z2,
- ==> 4x2-5xy-6y2-4yz-5z2,
-4x2-6xy-4y2-8xz+3yz+5z2,2x2+3xy+y2+4xz-3yz+2z2
- A=randommat(2,3);
- print(A);
- ==> 15276x+9897y+7526z, 6495x-24178y+11295z,-5745x-14754y+15979z,
- ==> 20788x-28366y-20283z,24911x-10978y+3341z,12412x+11216y+15344z
-
-
-File: sing.info, Node: sparseid, Next: sparsematrix, Prev: randommat, Up:
random_lib
-
-D.2.5.4 sparseid
-................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- sparseid(k,u[,o,p,b]); k,u,o,p,b integers
-
-*Return:*
- ideal having k generators, each of degree d, u<=d<=o, p percent of
- terms in degree d are 0, the remaining have random coefficients in
- the interval [1,b], (default: o=u=d, p=75, b=30000)
-
-*Example:*
- LIB "random.lib";
- ring r = 0,(a,b,c,d),ds;
- sparseid(2,3);"";
- ==> _[1]=12773a3+24263a2c+20030abc+17904b2c+26359c3
- ==> _[2]=24004a3+6204b2c+24170bc2+19505c2d+21962bd2
- ==>
- sparseid(3,0,4,90,9);
- ==> _[1]=1+4a2+8b2c+3c3+4a3b+4a2b2+5abc2+3ac3
- ==> _[2]=a+a2+7ab2+6a2c+3c3+5a3b+9ab3+2c4+3c3d+8ad3
- ==> _[3]=5a+ab+2ac2+2b3c+8abcd
-
-
-File: sing.info, Node: sparsematrix, Next: sparsemat, Prev: sparseid, Up:
random_lib
-
-D.2.5.5 sparsematrix
-....................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- sparsematrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers
-
-*Return:*
- nxm matrix, about pe percent of the entries are 0, the remaining
- are random polynomials of degree d, u<=d<=o, with pp percent of the
- terms being 0, the remaining have random coefficients in the
- interval [1,b] [default: (pe,u,pp,b) = (0,50,75,100)]
-
-*Example:*
- LIB "random.lib";
- ring r = 0,(a,b,c,d),dp;
- // sparse matrix of sparse polys of degree <=2:
- print(sparsematrix(3,4,2));"";
- ==> 14ab+20bc+79cd+30b, 32a2+97bc+5b, 0, 0,
- ==> 0, 0, 6c2+16b+64c+76,0,
- ==> 17a2+30ab+94bc+19b+45d,88a2+44bc+13d2+31a,59ac, 0
- ==>
- // dense matrix of sparse linear forms:
- print(sparsematrix(3,3,1,1,0,55,9));
- ==> 9b+7c+8d,9b+9d,5a,
- ==> 7c+d, a+6b, 2b+2d,
- ==> 9a+5b+9c,2a+9d,2d
-
-
-File: sing.info, Node: sparsemat, Next: sparsepoly, Prev: sparsematrix,
Up: random_lib
-
-D.2.5.6 sparsemat
-.................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- sparsemat(n,m[,p,b]); n,m,p,b integers
-
-*Return:*
- nxm integer matrix, p percent of the entries are 0, the remaining
- are random coefficients >=1 and <= b; [defaults: (p,b) = (75,1)]
-
-*Example:*
- LIB "random.lib";
- sparsemat(5,5);"";
- ==> 0,0,0,0,0,
- ==> 0,1,0,0,1,
- ==> 0,0,0,1,0,
- ==> 0,1,0,0,0,
- ==> 0,1,0,1,1
- ==>
- sparsemat(5,5,95);"";
- ==> 1,0,0,0,0,
- ==> 0,0,0,0,0,
- ==> 0,0,0,0,0,
- ==> 0,0,0,0,0,
- ==> 0,0,0,1,0
- ==>
- sparsemat(5,5,5);"";
- ==> 1,1,1,1,1,
- ==> 1,1,1,1,1,
- ==> 1,1,1,1,1,
- ==> 1,0,1,1,1,
- ==> 1,1,1,1,0
- ==>
- sparsemat(5,5,50,100);
- ==> 0,17,24,80,0,
- ==> 0,13,30,45,0,
- ==> 19,0,0,0,0,
- ==> 93,0,23,0,69,
- ==> 0,88,44,31,0
-
-
-File: sing.info, Node: sparsepoly, Next: sparsetriag, Prev: sparsemat, Up:
random_lib
-
-D.2.5.7 sparsepoly
-..................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- sparsepoly(u[,o,p,b]); u,o,p,b integers
-
-*Return:*
- poly having only terms in degree d, u<=d<=o, p percent of the terms
- in degree d are 0, the remaining have random coefficients in [1,b),
- (defaults: o=u=d, p=75, b=30000)
-
-*Example:*
- LIB "random.lib";
- ring r=0,(x,y,z),dp;
- sparsepoly(5);"";
- ==> 24263xy4+24170x4z+21962x3yz+26642xy3z+5664xy2z2+17904xz4
- ==>
- sparsepoly(3,5,90,9);
- ==> 8x3z2+2y3z2+3xyz3+2xy3+yz3+xy2
-
-
-File: sing.info, Node: sparsetriag, Next: triagmatrix, Prev: sparsepoly,
Up: random_lib
-
-D.2.5.8 sparsetriag
-...................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- sparsetriag(n,m[,p,b]); n,m,p,b integers
-
-*Return:*
- nxm lower triagonal integer matrix, diagonal entries equal to 1,
- about p percent of lower diagonal entries are 0, the remaining are
- random integers >=1 and <= b; [defaults: (p,b) = (75,1)]
-
-*Example:*
- LIB "random.lib";
- sparsetriag(5,7);"";
- ==> 1,0,0,0,0,0,0,
- ==> 0,1,0,0,0,0,0,
- ==> 0,1,1,0,0,0,0,
- ==> 0,0,0,1,0,0,0,
- ==> 1,1,0,0,1,0,0
- ==>
- sparsetriag(7,5,90);"";
- ==> 1,0,0,0,0,
- ==> 0,1,0,0,0,
- ==> 0,1,1,0,0,
- ==> 0,0,0,1,0,
- ==> 0,0,0,0,1,
- ==> 0,0,0,1,0,
- ==> 0,1,0,0,0
- ==>
- sparsetriag(5,5,0);"";
- ==> 1,0,0,0,0,
- ==> 1,1,0,0,0,
- ==> 1,1,1,0,0,
- ==> 1,1,1,1,0,
- ==> 1,1,1,1,1
- ==>
- sparsetriag(5,5,50,100);
- ==> 1,0,0,0,0,
- ==> 73,1,0,0,0,
- ==> 0,79,1,0,0,
- ==> 14,0,0,1,0,
- ==> 0,48,23,0,1
-
-
-File: sing.info, Node: triagmatrix, Next: randomLast, Prev: sparsetriag,
Up: random_lib
-
-D.2.5.9 triagmatrix
-...................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- triagmatrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers
-
-*Return:*
- nxm lower triagonal matrix, diagonal entries equal to 1, about p
- percent of lower diagonal entries are 0, the remaining are random
- polynomials of degree d, u<=d<=o, with pp percent of the terms
- being 0, the remaining have random coefficients in the interval
- [1,b] [default: (pe,u,pp,b) = (0,50,75,100)]
-
-*Example:*
- LIB "random.lib";
- ring r = 0,(a,b,c,d),dp;
- // sparse triagonal matrix of sparse polys of degree <=2:
- print(triagmatrix(3,4,2));"";
- ==> 1, 0,0,0,
- ==> 52ac+54cd+14c, 1,0,0,
- ==> 17a2+19b2+45ac+94bc+50b+87c+54d+21,0,1,0
- ==>
- // dense triagonal matrix of sparse linear forms:
- print(triagmatrix(3,3,1,1,0,55,9));
- ==> 1, 0, 0,
- ==> 7a+8d, 1, 0,
- ==> 9b+7c+4d,7b+9d,1
-
-
-File: sing.info, Node: randomLast, Next: randomBinomial, Prev: triagmatrix,
Up: random_lib
-
-D.2.5.10 randomLast
-...................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- randomLast(b); b int
-
-*Return:*
- ideal = maxideal(1), but the last variable is exchanged by a random
- linear combination of all variables, with coefficients in the
- interval [-b,b].
-
-*Example:*
- LIB "random.lib";
- ring r = 0,(x,y,z),lp;
- ideal i = randomLast(10);
- i;
- ==> i[1]=x
- ==> i[2]=y
- ==> i[3]=-x+z
-
-
-File: sing.info, Node: randomBinomial, Prev: randomLast, Up: random_lib
-
-D.2.5.11 randomBinomial
-.......................
-
-Procedure from library `random.lib' (*note random_lib::).
-
-*Usage:*
- randomBinomial(k,u[,o,b]); k,u,o,b integers
-
-*Return:*
- binomial ideal, k homogeneous generators of degree d, u<=d<=o, with
- randomly chosen monomials and coefficients in the interval [-b,b]
- (default: u=o, b=10).
-
-*Example:*
- LIB "random.lib";
- ring r = 0,(x,y,z),lp;
- ideal i = randomBinomial(4,5,6);
- i;
- ==> i[1]=-x4z-xz4
- ==> i[2]=8x2y3+8xy3z
- ==> i[3]=-4x2y2z2-4xy5
- ==> i[4]=5x3yz2+5xz5
-
-
-File: sing.info, Node: ring_lib, Prev: random_lib, Up: General purpose
-
-D.2.6 ring_lib
---------------
-
-*Library:*
- ring.lib
-
-*Purpose:*
- Manipulating Rings and Maps
-
-*Procedures:*
-
-* Menu:
-
-* changechar:: make a copy R of basering [ring r] with new char c
-* changeord:: make a copy R of basering [ring r] with new ord o
-* changevar:: make a copy R of basering [ring r] with new vars v
-* defring:: define a ring R in specified char c, n vars v, ord o
-* defrings:: define ring Sn in n vars, char 32003 [p], ord ds
-* defringp:: define ring Pn in n vars, char 32003 [p], ord dp
-* extendring:: extend given ring by n vars v, ord o and name it R
-* fetchall:: fetch all objects of ring R to basering
-* imapall:: imap all objects of ring R to basering
-* mapall:: map all objects of ring R via ideal i to basering
-* ord_test:: test whether ordering of R is global, local or mixed
-* ringtensor:: create ring R, tensor product of rings s,t,...
-* ringweights:: intvec of weights of ring variables of ring r
-
-
-File: sing.info, Node: changechar, Next: changeord, Up: ring_lib
-
-D.2.6.1 changechar
-..................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- changechar(newr,c[,r]); newr,c=strings, r=ring
-
-*Create:*
- create a new ring with name `newr` and make it the basering if r is
- an existing ring [default: r=basering].
- The new ring differs from the old ring only in the characteristic.
- If, say, (newr,c) = ("R","0,A") and the ring r exists, the new
- basering will have name R, characteristic 0 and one parameter A.
-
-*Return:*
- No return value
-
-*Note:*
- Works for qrings if map from old_char to new_char is implemented
- This proc uses 'execute' or calls a procedure using 'execute'. If
- you use it in your own proc, let the local names of your proc start
- with @.
-
-*Example:*
- LIB "ring.lib";
- ring r=0,(x,y,u,v),(dp(2),ds);
- changechar("R","2,A"); R;"";
- ==> // basering is now R
- ==> // characteristic : 2
- ==> // 1 parameter : A
- ==> // minpoly : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names x y
- ==> // block 2 : ordering ds
- ==> // : names u v
- ==> // block 3 : ordering C
- ==>
- changechar("R1","32003",R); R1;
- ==> // basering is now R1
- ==> // characteristic : 32003
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names x y
- ==> // block 2 : ordering ds
- ==> // : names u v
- ==> // block 3 : ordering C
- kill R,R1;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::R,Top::R1;
- } else {
- kill Ring::R,Ring::R1;
- }
- }
-
-
-File: sing.info, Node: changeord, Next: changevar, Prev: changechar, Up:
ring_lib
-
-D.2.6.2 changeord
-.................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- changeord(newr,o[,r]); newr,o=strings, r=ring/qring
-
-*Create:*
- create a new ring with name `newr` and make it the basering if r is
- an existing ring/qring [default: r=basering].
- The new ring differs from the old ring only in the ordering. If,
- say, (newr,o) = ("R","wp(2,3),dp") and the ring r exists and has
- >=3 variables, the new basering will have name R and ordering
- wp(2,3),dp.
-
-*Return:*
- No return value
-
-*Note:*
- This proc uses 'execute' or calls a procedure using 'execute'. If
- you use it in your own proc, let the local names of your proc start
- with @.
-
-*Example:*
- LIB "ring.lib";
- ring r=0,(x,y,u,v),(dp(2),ds);
- changeord("R","wp(2,3),dp"); R; "";
- ==> // basering is now R
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering wp
- ==> // : names x y
- ==> // : weights 2 3
- ==> // block 2 : ordering dp
- ==> // : names u v
- ==> // block 3 : ordering C
- ==>
- ideal i = x^2,y^2-u^3,v;
- qring Q = std(i);
- changeord("Q'","lp",Q); Q';
- ==> // basering is now Q'
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering lp
- ==> // : names x y u v
- ==> // block 2 : ordering C
- ==> // quotient ring from ideal
- ==> _[1]=v
- ==> _[2]=x2
- ==> _[3]=y2-u3
- kill R,Q,Q';
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::R,Top::Q';
- } else {
- kill Ring::R,Ring::Q';
- }
- }
-
-
-File: sing.info, Node: changevar, Next: defring, Prev: changeord, Up:
ring_lib
-
-D.2.6.3 changevar
-.................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- changevar(newr,vars[,r]); newr,vars=strings, r=ring/qring
-
-*Create:*
- creates a new ring with name `newr` and makes it the basering if r
- is an existing ring/qring [default: r=basering].
- The new ring differs from the old ring only in the variables. If,
- say, (newr,vars) = ("R","t()") and the ring r exists and has n
- variables, the new basering will have name R and variables
- t(1),...,t(n).
- If vars = "a,b,c,d", the new ring will have the variables a,b,c,d.
-
-*Return:*
- No return value
-
-*Note:*
- This procedure is useful in connection with the procedure
- ringtensor, when a conflict between variable names must be avoided.
- This proc uses 'execute' or calls a procedure using 'execute'. If
- you use it in your own proc, let the local names of your proc start
- with @.
-
-*Example:*
- LIB "ring.lib";
- ring r=0,(x,y,u,v),(dp(2),ds);
- ideal i = x^2,y^2-u^3,v;
- qring Q = std(i);
- setring(r);
- changevar("R","A()"); R; "";
- ==> // basering is now R
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names A(1) A(2)
- ==> // block 2 : ordering ds
- ==> // : names A(3) A(4)
- ==> // block 3 : ordering C
- ==>
- changevar("Q'","a,b,c,d",Q); Q';
- ==> // basering is now Q'
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names a b
- ==> // block 2 : ordering ds
- ==> // : names c d
- ==> // block 3 : ordering C
- ==> // quotient ring from ideal
- ==> _[1]=d
- ==> _[2]=a2
- ==> _[3]=b2-c3
- kill R,Q,Q';
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::R,Top::Q';
- } else {
- kill Ring::R,Ring::Q';
- }
- }
-
-
-File: sing.info, Node: defring, Next: defrings, Prev: changevar, Up:
ring_lib
-
-D.2.6.4 defring
-...............
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- defring(s1,s2,n,s3,s4); s1..s4=strings, n=integer
-
-*Create:*
- Define a ring with name 's1', characteristic 's2', ordering 's4'
- and n variables with names derived from s3 and make it the
- basering. If s3 is a single letter, say s3="a", and if n<=26 then
- a and the following n-1 letters from the alphabet (cyclic order)
- are taken as variables. If n>26 or if s3 is a single letter
- followed by (, say s3="T(", the variables are T(1),...,T(n).
-
-*Return:*
- No return value
-
-*Note:*
- This proc is useful for defining a ring in a procedure. This proc
- uses 'execute' or calls a procedure using 'execute'. If you use it
- in your own proc, let the local names of your proc start with @.
-
-*Example:*
- LIB "ring.lib";
- defring("r","0",5,"u","ls"); r; "";
- ==> // basering is now: r
- ==> // characteristic : 0
- ==> // number of vars : 5
- ==> // block 1 : ordering ls
- ==> // : names u v w x y
- ==> // block 2 : ordering C
- ==>
- defring("R","2,A",10,"x(","dp(3),ws(1,2,3),ds"); R;
- ==> // basering is now: R
- ==> // characteristic : 2
- ==> // 1 parameter : A
- ==> // minpoly : 0
- ==> // number of vars : 10
- ==> // block 1 : ordering dp
- ==> // : names x(1) x(2) x(3)
- ==> // block 2 : ordering ws
- ==> // : names x(4) x(5) x(6)
- ==> // : weights 1 2 3
- ==> // block 3 : ordering ds
- ==> // : names x(7) x(8) x(9) x(10)
- ==> // block 4 : ordering C
- kill r,R;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::r,Top::R;
- } else {
- kill Ring::r,Ring::R;
- }
- }
-
-
-File: sing.info, Node: defrings, Next: defringp, Prev: defring, Up:
ring_lib
-
-D.2.6.5 defrings
-................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- defrings(n,[p]); n,p integers
-
-*Create:*
- Defines a ring with name Sn, characteristic p, ordering ds and n
- variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes
- it the basering (default: p=32003)
-
-*Return:*
- No return value
-
-*Example:*
- LIB "ring.lib";
- defrings(5,0); S5; "";
- ==> // basering is now: ring S5=0,(x,y,z,a,b),ds;
- ==> // characteristic : 0
- ==> // number of vars : 5
- ==> // block 1 : ordering ds
- ==> // : names x y z a b
- ==> // block 2 : ordering C
- ==>
- defrings(30); S30;
- ==> // basering is now: ring S30=32003,x(1..30),ds;
- ==> // characteristic : 32003
- ==> // number of vars : 30
- ==> // block 1 : ordering ds
- ==> // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7)
x(8) x(\
- 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20)
x(21\
- ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30)
- ==> // block 2 : ordering C
- kill S5, S30;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::S5,Top::S30;
- } else {
- kill Ring::S5,Ring::S30;
- }
- }
-
-
-File: sing.info, Node: defringp, Next: extendring, Prev: defrings, Up:
ring_lib
-
-D.2.6.6 defringp
-................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- defringp(n,[p]); n,p=integers
-
-*Create:*
- defines a ring with name Pn, characteristic p, ordering dp and n
- variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes
- it the basering (default: p=32003)
-
-*Return:*
- No return value
-
-*Example:*
- LIB "ring.lib";
- defringp(5,0); P5; "";
- ==> // basering is now: ring P5=0,(x,y,z,a,b),dp;
- ==> // characteristic : 0
- ==> // number of vars : 5
- ==> // block 1 : ordering dp
- ==> // : names x y z a b
- ==> // block 2 : ordering C
- ==>
- defringp(30); P30;
- ==> // basering is now: ring P30=32003,x(1..30),dp;
- ==> // characteristic : 32003
- ==> // number of vars : 30
- ==> // block 1 : ordering dp
- ==> // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7)
x(8) x(\
- 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20)
x(21\
- ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30)
- ==> // block 2 : ordering C
- kill P5, P30;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::P5,Top::P30;
- } else {
- kill Ring::P5,Ring::P30;
- }
- }
-
-
-File: sing.info, Node: extendring, Next: fetchall, Prev: defringp, Up:
ring_lib
-
-D.2.6.7 extendring
-..................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- extendring(na,n,va,o[iv,i,r]); na,va,o=strings,
- n,i=integers, r=ring, iv=intvec of positive integers or iv=0
-
-*Create:*
- Define a ring with name `na` which extends the ring r by adding n
- new variables in front of [after, if i!=0] the old variables and
- make it the basering [default: (i,r)=(0,basering)].
- - The characteristic is the characteristic of r.
- - The new vars are derived from va. If va is a single letter, say
- va="T", and if n<=26 then T and the following n-1 letters from
- T..Z..T (resp. T(1..n) if n>26) are taken as additional variables.
- If va is a single letter followed by (, say va="x(", the new
- variables are x(1),...,x(n).
- - The ordering is the product ordering between the ordering of r
- and an ordering derived from `o` [and iv].
- - If o contains a 'c' or a 'C' in front resp. at the end this is
- taken for the whole ordering in front resp. at the end. If o does
- not contain a 'c' or a 'C' the same rule applies to ordstr(r).
- - If no intvec iv is given, or if iv=0, o may be any allowed
- ordstr, like "ds" or "dp(2),wp(1,2,3),Ds(2)" or "ds(a),dp(b),ls" if
- a and b are globally (!) defined integers and if a+b+1<=n. If,
- however, a and b are local to a proc calling extendring, the intvec
- iv must be used to let extendring know the values of a and b
- - If an intvec iv !=0 is given, iv[1],iv[2],... is taken for the
- 1st, 2nd,... block of o, if o contains no substring "w" or "W" i.e.
- no weighted ordering (in the above case o="ds,dp,ls" and iv=a,b).
- If o contains a weighted ordering (only one (!) weighted block is
- allowed) iv[1] is taken as size for the weight-vector, the next
- iv[1] values of iv are taken as weights and the remaining values of
- iv as block-size for the remaining non-weighted blocks. e.g.
- o="dp,ws,Dp,ds", iv=3,2,3,4,2,5 creates the ordering
- dp(2),ws(2,3,4),Dp(5),ds
-
-*Return:*
- No return value
-
-*Note:*
- This proc is useful for adding deformation parameters.
- This proc uses 'execute' or calls a procedure using 'execute'. If
- you use it in your own proc, let the local names of your proc start
- with @ (see the file HelpForProc)
-
-*Example:*
- LIB "ring.lib";
- ring r=0,(x,y,z),ds;
- show(r);"";
- ==> // ring: (0),(x,y,z),(ds(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==>
- //blocksize is derived from no of vars:
- int t=5;
- extendring("R1",t,"a","dp"); //t global: "dp" -> "dp(5)"
- ==> // basering is now R1
- show(R1); "";
- ==> // ring: (0),(a,b,c,d,e,x,y,z),(dp(5),ds(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==>
- extendring("R2",4,"T(","c,dp",1,r); //"dp" -> "c,..,dp(4)"
- ==> // basering is now R2
- show(R2);"";
- ==> // ring: (0),(x,y,z,T(1),T(2),T(3),T(4)),(c,ds(3),dp(4));
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==>
- //no intvec given, blocksize given: given blocksize is used:
- extendring("R3",4,"T(","dp(2)",0,r); // "dp(2)" -> "dp(2)"
- ==> // basering is now R3
- show(R3);"";
- ==> // ring: (0),(T(1),T(2),T(3),T(4),x,y,z),(dp(2),ds(5),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==>
- //intvec given: weights and blocksize is derived from given intvec
- //(no specification of a blocksize in the given ordstr is allowed!)
- //if intvec does not cover all given blocks, the last block is used
- //for the remaining variables, if intvec has too many components,
- //the last ones are ignored
- intvec v=3,2,3,4,1,3;
- extendring("R4",10,"A","ds,ws,Dp,dp",v,0,r);
- ==> // basering is now R4
- //v covers 3 blocks: v[1] (=3) : no of components of ws
- //next v[1] values (=v[2..4]) give weights
- //remaining components of v are used for the remaining blocks
- show(R4);
- ==> // ring:
(0),(A,B,C,D,E,F,G,H,I,J,x,y,z),(ds(1),ws(2,3,4),Dp(3),dp(3),ds(\
- 3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- kill r,R1,R2,R3,R4;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::R1,Top::R2,Top::R3,Top::R4;
- } else {
- kill Ring::R1,Ring::R2,Ring::R3,Ring::R4;
- }
- }
-
-
-File: sing.info, Node: fetchall, Next: imapall, Prev: extendring, Up:
ring_lib
-
-D.2.6.8 fetchall
-................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- fetchall(R[,s]); R=ring/qring, s=string
-
-*Create:*
- fetch all objects of ring R (of type
- poly/ideal/vector/module/number/ matrix) into the basering.
- If no 3rd argument is present, the names are the same as in R. If,
- say, f is a poly in R and the 3rd argument is the string "R", then
- f is mapped to f_R etc.
-
-*Return:*
- no return value
-
-*Note:*
- As fetch, this procedure maps the 1st, 2nd, ... variable of R to
- the 1st, 2nd, ... variable of the basering.
- The 3rd argument is useful in order to avoid conflicts of names,
- the empty string is allowed
-
-*Caution:*
- fetchall does not work inside a procedure.
- It does not work if R contains a map.
-
-*Example:*
- LIB "ring.lib";
- // The example is not shown since fetchall does not work in a procedure;
- // (and hence not in the example procedure). Try the following commands:
- // ring R=0,(x,y,z),dp;
- // ideal j=x,y2,z2;
- // matrix M[2][3]=1,2,3,x,y,z;
- // j; print(M);
- // ring S=0,(a,b,c),ds;
- // fetchall(R); //map from R to S: x->a, y->b, z->c;
- // names(S);
- // j; print(M);
- // fetchall(S,"1"); //identity map of S: copy objects, change names
- // names(S);
- // kill R,S;
-
-
-File: sing.info, Node: imapall, Next: mapall, Prev: fetchall, Up: ring_lib
-
-D.2.6.9 imapall
-...............
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- imapall(R[,s]); R=ring/qring, s=string
-
-*Create:*
- map all objects of ring R (of type poly/ideal/vector/module/number/
- matrix) into the basering, by applying imap to all objects of R.
- If no 3rd argument is present, the names are the same as in R. If,
- say, f is a poly in R and the 3rd argument is the string "R", then
- f is mapped to f_R etc.
-
-*Return:*
- no return value
-
-*Note:*
- As imap, this procedure maps the variables of R to the variables
- with the same name in the basering, the other variables are mapped
- to 0. The 3rd argument is useful in order to avoid conflicts of
- names, the empty string is allowed
-
-*Caution:*
- imapall does not work inside a procedure
- It does not work if R contains a map
-
-*Example:*
- LIB "ring.lib";
- // The example is not shown since imapall does not work in a procedure
- // (and hence not in the example procedure). Try the following commands:
- // ring R=0,(x,y,z,u),dp;
- // ideal j=x,y,z,u2+ux+z;
- // matrix M[2][3]=1,2,3,x,y,uz;
- // j; print(M);
- // ring S=0,(a,b,c,x,z,y),ds;
- // imapall(R); //map from R to S: x->x, y->y, z->z, u->0
- // names(S);
- // j; print(M);
- // imapall(S,"1"); //identity map of S: copy objects, change names
- // names(S);
- // kill R,S;
-
-
-File: sing.info, Node: mapall, Next: ord_test, Prev: imapall, Up: ring_lib
-
-D.2.6.10 mapall
-...............
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- mapall(R,i[,s]); R=ring/qring, i=ideal of basering, s=string
-
-*Create:*
- map all objects of ring R (of type poly/ideal/vector/module/number/
- matrix, map) into the basering, by mapping the j-th variable of R
- to the j-th generator of the ideal i. If no 3rd argument is
- present, the names are the same as in R. If, say, f is a poly in R
- and the 3rd argument is the string "R", then f is mapped to f_R
- etc.
-
-*Return:*
- no return value.
-
-*Note:*
- This procedure has the same effect as defining a map, say psi, by
- map psi=R,i; and then applying psi to all objects of R. In
- particular, maps from R to some ring S are composed with psi,
- creating thus a map from the basering to S.
- mapall may be combined with copyring to change vars for all
- objects. The 3rd argument is useful in order to avoid conflicts of
- names, the empty string is allowed.
-
-*Caution:*
- mapall does not work inside a procedure.
-
-*Example:*
- LIB "ring.lib";
- // The example is not shown since mapall does not work in a procedure
- // (and hence not in the example procedure). Try the following commands:
- // ring R=0,(x,y,z),dp;
- // ideal j=x,y,z;
- // matrix M[2][3]=1,2,3,x,y,z;
- // map phi=R,x2,y2,z2;
- // ring S=0,(a,b,c),ds;
- // ideal i=c,a,b;
- // mapall(R,i); //map from R to S: x->c, y->a, z->b
- // names(S);
- // j; print(M); phi; //phi maps R to S: x->c2, y->a2, z->b2
- // ideal i1=a2,a+b,1;
- // mapall(R,i1,""); //map from R to S: x->a2, y->a+b, z->1
- // names(S);
- // j_; print(M_); phi_;
- // changevar("T","x()",R); //change vars in R and call result T
- // mapall(R,maxideal(1)); //identity map from R to T
- // names(T);
- // j; print(M); phi;
- // kill R,S,T;
-
-
-File: sing.info, Node: ord_test, Next: ringtensor, Prev: mapall, Up:
ring_lib
-
-D.2.6.11 ord_test
-.................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- ord_test(r); r ring
-
-*Return:*
- int 1 (resp. -1, resp. 0) if ordering of r is global (resp. local,
- resp. mixed)
-
-*Example:*
- LIB "ring.lib";
- ring R = 0,(x,y),dp;
- ring S = 0,(u,v),ls;
- ord_test(R);
- ==> 1
- ord_test(S);
- ==> -1
- ord_test(R+S);
- ==> 0
-
-
-File: sing.info, Node: ringtensor, Next: ringweights, Prev: ord_test, Up:
ring_lib
-
-D.2.6.12 ringtensor
-...................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- ringtensor(s,r1,r2,...); s=string, r1,r2,...=rings
-
-*Create:*
- A new base ring with name `s` if r1,r2,... are existing rings. If,
- say, s = "R" and the rings r1,r2,... exist, the new ring will have
- name R, variables from all rings r1,r2,... and as monomial ordering
- the block (product) ordering of r1,r2,... . Hence, R is the tensor
- product of the rings r1,r2,... with ordering matrix equal to the
- direct sum of the ordering matrices of r1,r2,...
-
-*Return:*
- no return value
-
-*Note:*
- The characteristic of the new ring will be that of r1. The names of
- variables in the rings r1,r2,... should differ (if a name, say x,
- occurs in r1 and r2, then, in the new ring r, x always refers to
- the variable with name x in r1, there is no access to x in r2).
- The procedure works also for quotient rings ri, if the
- characteristic of ri is compatible with the characteristic of r1
- (i.e. if imap from ri to r1 is implemented)
- This proc uses 'execute' or calls a procedure using 'execute'. If
- you use it in your own proc, let the local names of your proc start
- with @ (see the file HelpForProc)
-
-*Example:*
- LIB "ring.lib";
- ring r=32003,(x,y,u,v),dp;
- ring s=0,(a,b,c),wp(1,2,3);
- ring t=0,x(1..5),(c,ls);
- ringtensor("R",r,s,t);
- ==> // basering is now R
- type R;
- ==> // R [0] *ring
- ==> // characteristic : 32003
- ==> // number of vars : 12
- ==> // block 1 : ordering dp
- ==> // : names x y u v
- ==> // block 2 : ordering wp
- ==> // : names a b c
- ==> // : weights 1 2 3
- ==> // block 3 : ordering ls
- ==> // : names x(1) x(2) x(3) x(4) x(5)
- ==> // block 4 : ordering C
- setring s;
- ideal i = a2+b3+c5;
- changevar("S","x,y,z"); //change vars of sand make S the basering
- ==> // basering is now S
- qring qS =std(fetch(s,i)); //create qring of S mod i (mapped to S)
- changevar("T","d,e,f,g,h",t); //change vars of t and make T the basering
- ==> // basering is now T
- qring qT=std(d2+e2-f3); //create qring of T mod d2+e2-f3
- ringtensor("Q",s,qS,t,qT);
- ==> // basering is now Q
- type Q;
- ==> // Q [0] *qring
- ==> // characteristic : 0
- ==> // number of vars : 16
- ==> // block 1 : ordering wp
- ==> // : names a b c
- ==> // : weights 1 2 3
- ==> // block 2 : ordering wp
- ==> // : names x y z
- ==> // : weights 1 2 3
- ==> // block 3 : ordering ls
- ==> // : names x(1) x(2) x(3) x(4) x(5)
- ==> // block 4 : ordering ls
- ==> // : names d e f g h
- ==> // block 5 : ordering C
- ==> // quotient ring from ideal
- ==> _[1]=f3-e2-d2
- ==> _[2]=z5+y3+x2
- kill R,Q,S,T;
- if(system("with","Namespaces")) {
- if( nameof(Current) == "Ring" ) {
- kill Top::R,Top::Q,Top::S,Top::T;
- } else {
- kill Ring::R,Ring::Q,Ring::S,Ring::T;
- }
- }
-
-
-File: sing.info, Node: ringweights, Prev: ringtensor, Up: ring_lib
-
-D.2.6.13 ringweights
-....................
-
-Procedure from library `ring.lib' (*note ring_lib::).
-
-*Usage:*
- ringweights(P); P=name of an existing ring (true name, not a
- string)
-
-*Return:*
- intvec consisting of the weights of the variables of P, as they
- appear when typing P;.
-
-*Note:*
- This is useful when enlarging P but keeping the weights of the old
- variables.
-
-*Example:*
- LIB "ring.lib";
- ring r0 = 0,(x,y,z),dp;
- ringweights(r0);
- ==> 1,1,1
- ring r1 = 0,x(1..5),(ds(3),wp(2,3));
- ringweights(r1);"";
- ==> 1,1,1,2,3
- ==>
- // an example for enlarging the ring, keeping the first weights:
- intvec v = ringweights(r1),6,2,3,4,5;
- ring R = 0,x(1..10),(a(v),dp);
- ordstr(R);
- ==> a(1,1,1,2,3,6,2,3,4,5),dp(10),C
-
-
-File: sing.info, Node: Linear algebra, Next: Commutative algebra, Prev:
General purpose, Up: SINGULAR libraries
-
-D.3 Linear algebra
-==================
-
-* Menu:
-
-* matrix_lib:: procedures for matrix operations
-* linalg_lib:: procedures for algorithmic linear algebra
-
-
-File: sing.info, Node: matrix_lib, Next: linalg_lib, Prev: Linear algebra,
Up: Linear algebra
-
-D.3.1 matrix_lib
-----------------
-
-*Library:*
- matrix.lib
-
-*Purpose:*
- Elementary Matrix Operations
-
-*Procedures:*
-
-* Menu:
-
-* compress:: matrix, zero columns from A deleted
-* concat:: matrix, concatenation of matrices A1,A2,...
-* diag:: matrix, nxn diagonal matrix with entries poly p
-* dsum:: matrix, direct sum of matrices A1,A2,...
-* flatten:: ideal, generated by entries of matrix A
-* genericmat:: generic nxm matrix [entries from id]
-* is_complex:: 1 if list c is a complex, 0 if not
-* outer:: matrix, outer product of matrices A and B
-* power:: matrix/intmat, n-th power of matrix/intmat A
-* skewmat:: generic skew-symmetric nxn matrix [entries from id]
-* submat:: submatrix of A with rows/cols specified by intvec r/c
-* symmat:: generic symmetric nxn matrix [entries from id]
-* tensor:: matrix, tensor product of matrices A nd B
-* unitmat:: unit square matrix of size n
-* gauss_col:: transform a matrix into col-reduced Gauss normal form
-* gauss_row:: transform a matrix into row-reduced Gauss normal form
-* addcol:: add p*(c1-th col) to c2-th column of matrix A, p poly
-* addrow:: add p*(r1-th row) to r2-th row of matrix A, p poly
-* multcol:: multiply c-th column of A with poly p
-* multrow:: multiply r-th row of A with poly p
-* permcol:: permute i-th and j-th columns
-* permrow:: permute i-th and j-th rows
-* rowred:: reduction of matrix A with elementary row-operations
-* colred:: reduction of matrix A with elementary col-operations
-* rm_unitrow:: remove unit rows and associated columns of A
-* rm_unitcol:: remove unit columns and associated rows of A
-* headStand:: A[n-i+1,m-j+1]=headStand(A[i,j])
-
-
-File: sing.info, Node: compress, Next: concat, Up: matrix_lib
-
-D.3.1.1 compress
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- compress(A); A matrix/ideal/module/intmat/intvec
-
-*Return:*
- same type, zero columns/generators from A deleted
- (if A=intvec, zero elements are deleted)
-
-*Example:*
- LIB "matrix.lib";
- ring r=0,(x,y,z),ds;
- matrix A[3][4]=1,0,3,0,x,0,z,0,x2,0,z2,0;
- print(A);
- ==> 1, 0,3, 0,
- ==> x, 0,z, 0,
- ==> x2,0,z2,0
- print(compress(A));
- ==> 1, 3,
- ==> x, z,
- ==> x2,z2
- module m=module(A); show(m);
- ==> // module, 4 generator(s)
- ==> [1,x,x2]
- ==> [0]
- ==> [3,z,z2]
- ==> [0]
- show(compress(m));
- ==> // module, 2 generator(s)
- ==> [1,x,x2]
- ==> [3,z,z2]
- intmat B[3][4]=1,0,3,0,4,0,5,0,6,0,7,0;
- compress(B);
- ==> 1,3,
- ==> 4,5,
- ==> 6,7
- intvec C=0,0,1,2,0,3;
- compress(C);
- ==> 1,2,3
-
-
-File: sing.info, Node: concat, Next: diag, Prev: compress, Up: matrix_lib
-
-D.3.1.2 concat
-..............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- concat(A1,A2,..); A1,A2,... matrices
-
-*Return:*
- matrix, concatenation of A1,A2,.... Number of rows of result matrix
- is max(nrows(A1),nrows(A2),...)
-
-*Example:*
- LIB "matrix.lib";
- ring r=0,(x,y,z),ds;
- matrix A[3][3]=1,2,3,x,y,z,x2,y2,z2;
- matrix B[2][2]=1,0,2,0; matrix C[1][4]=4,5,x,y;
- print(A);
- ==> 1, 2, 3,
- ==> x, y, z,
- ==> x2,y2,z2
- print(B);
- ==> 1,0,
- ==> 2,0
- print(C);
- ==> 4,5,x,y
- print(concat(A,B,C));
- ==> 1, 2, 3, 1,0,4,5,x,y,
- ==> x, y, z, 2,0,0,0,0,0,
- ==> x2,y2,z2,0,0,0,0,0,0
-
-
-File: sing.info, Node: diag, Next: dsum, Prev: concat, Up: matrix_lib
-
-D.3.1.3 diag
-............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- diag(p,n); p poly, n integer
- diag(A); A matrix
-
-*Return:*
- diag(p,n): diagonal matrix, p times unit matrix of size n.
- diag(A) : n*m x n*m diagonal matrix with entries all the entries of
- the nxm matrix A, taken from the 1st row, 2nd row etc of A
-
-*Example:*
- LIB "matrix.lib";
- ring r = 0,(x,y,z),ds;
- print(diag(xy,4));
- ==> xy,0, 0, 0,
- ==> 0, xy,0, 0,
- ==> 0, 0, xy,0,
- ==> 0, 0, 0, xy
- matrix A[3][2] = 1,2,3,4,5,6;
- print(A);
- ==> 1,2,
- ==> 3,4,
- ==> 5,6
- print(diag(A));
- ==> 1,0,0,0,0,0,
- ==> 0,2,0,0,0,0,
- ==> 0,0,3,0,0,0,
- ==> 0,0,0,4,0,0,
- ==> 0,0,0,0,5,0,
- ==> 0,0,0,0,0,6
-
-
-File: sing.info, Node: dsum, Next: flatten, Prev: diag, Up: matrix_lib
-
-D.3.1.4 dsum
-............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- dsum(A1,A2,..); A1,A2,... matrices
-
-*Return:*
- matrix, direct sum of A1,A2,...
-
-*Example:*
- LIB "matrix.lib";
- ring r = 0,(x,y,z),ds;
- matrix A[3][3] = 1,2,3,4,5,6,7,8,9;
- matrix B[2][2] = 1,x,y,z;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(B);
- ==> 1,x,
- ==> y,z
- print(dsum(A,B));
- ==> 1,2,3,0,0,
- ==> 4,5,6,0,0,
- ==> 7,8,9,0,0,
- ==> 0,0,0,1,x,
- ==> 0,0,0,y,z
-
-
-File: sing.info, Node: flatten, Next: genericmat, Prev: dsum, Up:
matrix_lib
-
-D.3.1.5 flatten
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- flatten(A); A matrix
-
-*Return:*
- ideal, generated by all entries from A
-
-*Example:*
- LIB "matrix.lib";
- ring r = 0,(x,y,z),ds;
- matrix A[2][3] = 1,2,x,y,z,7;
- print(A);
- ==> 1,2,x,
- ==> y,z,7
- flatten(A);
- ==> _[1]=1
- ==> _[2]=2
- ==> _[3]=x
- ==> _[4]=y
- ==> _[5]=z
- ==> _[6]=7
-
-
-File: sing.info, Node: genericmat, Next: is_complex, Prev: flatten, Up:
matrix_lib
-
-D.3.1.6 genericmat
-..................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- genericmat(n,m[,id]); n,m=integers, id=ideal
-
-*Return:*
- nxm matrix, with entries from id.
-
-*Note:*
- if id has less than nxm elements, the matrix is filled with 0's,
- (default: id=maxideal(1)).
- genericmat(n,m); creates the generic nxm matrix
-
-*Example:*
- LIB "matrix.lib";
- ring R = 0,x(1..16),lp;
- print(genericmat(3,3)); // the generic 3x3 matrix
- ==> x(1),x(2),x(3),
- ==> x(4),x(5),x(6),
- ==> x(7),x(8),x(9)
- ring R1 = 0,(a,b,c,d),dp;
- matrix A = genericmat(3,4,maxideal(1)^3);
- print(A);
- ==> a3, a2b,a2c,a2d,
- ==> ab2,abc,abd,ac2,
- ==> acd,ad2,b3, b2c
- int n,m = 3,2;
- ideal i = ideal(randommat(1,n*m,maxideal(1),9));
- print(genericmat(n,m,i)); // matrix of generic linear forms
- ==> 4a-8b-2c-3d,-a+b-4c+5d,
- ==> -8a-9b+c+7d,a-9b+9c+4d,
- ==> 6a-5b+9c, 2a+8c+d
-
-
-File: sing.info, Node: is_complex, Next: outer, Prev: genericmat, Up:
matrix_lib
-
-D.3.1.7 is_complex
-..................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- is_complex(c); c = list of size-compatible modules or matrices
-
-*Return:*
- 1 if c[i]*c[i+1]=0 for all i, 0 if not, hence checking whether the
- list of matrices forms a complex.
-
-*Note:*
- Ideals are treated internally as 1-line matrices.
- If printlevel > 0, the position where c is not a complex is shown.
-
-*Example:*
- LIB "matrix.lib";
- ring r = 32003,(x,y,z),ds;
- ideal i = x4+y5+z6,xyz,yx2+xz2+zy7;
- list L = nres(i,0);
- is_complex(L);
- ==> 1
- L[4] = matrix(i);
- is_complex(L);
- ==> 0
-
-
-File: sing.info, Node: outer, Next: power, Prev: is_complex, Up: matrix_lib
-
-D.3.1.8 outer
-.............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- outer(A,B); A,B matrices
-
-*Return:*
- matrix, outer (tensor) product of A and B
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),ds;
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- matrix B[2][2]=x,y,0,z;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(B);
- ==> x,y,
- ==> 0,z
- print(outer(A,B));
- ==> x, y, 2x,2y,3x,3y,
- ==> 0, z, 0, 2z,0, 3z,
- ==> 4x,4y,5x,5y,6x,6y,
- ==> 0, 4z,0, 5z,0, 6z,
- ==> 7x,7y,8x,8y,9x,9y,
- ==> 0, 7z,0, 8z,0, 9z
-
-
-File: sing.info, Node: power, Next: skewmat, Prev: outer, Up: matrix_lib
-
-D.3.1.9 power
-.............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- power(A,n); A a square-matrix of type intmat or matrix, n=integer
-
-*Return:*
- intmat resp. matrix, the n-th power of A
-
-*Note:*
- for A=intmat and big n the result may be wrong because of int
- overflow
-
-*Example:*
- LIB "matrix.lib";
- intmat A[3][3]=1,2,3,4,5,6,7,8,9;
- print(power(A,3));"";
- ==> 468 576 684
- ==> 1062 1305 1548
- ==> 1656 2034 2412
- ==>
- ring r=0,(x,y,z),dp;
- matrix B[3][3]=0,x,y,z,0,0,y,z,0;
- print(power(B,3));"";
- ==> yz2, xy2+x2z,y3+xyz,
- ==> y2z+xz2,yz2, 0,
- ==> y3+xyz, y2z+xz2,yz2
- ==>
-
-
-File: sing.info, Node: skewmat, Next: submat, Prev: power, Up: matrix_lib
-
-D.3.1.10 skewmat
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- skewmat(n[,id]); n integer, id ideal
-
-*Return:*
- skew-symmetric nxn matrix, with entries from id
- (default: id=maxideal(1))
- skewmat(n); creates the generic skew-symmetric matrix
-
-*Note:*
- if id has less than n*(n-1)/2 elements, the matrix is
- filled with 0's,
-
-*Example:*
- LIB "matrix.lib";
- ring R=0,x(1..5),lp;
- print(skewmat(4)); // the generic skew-symmetric matrix
- ==> 0, x(1), x(2),x(3),
- ==> -x(1),0, x(4),x(5),
- ==> -x(2),-x(4),0, 0,
- ==> -x(3),-x(5),0, 0
- ring R1 = 0,(a,b,c),dp;
- matrix A=skewmat(4,maxideal(1)^2);
- print(A);
- ==> 0, a2, ab, ac,
- ==> -a2,0, b2, bc,
- ==> -ab,-b2,0, c2,
- ==> -ac,-bc,-c2,0
- int n=3;
- ideal i = ideal(randommat(1,n*(n-1) div 2,maxideal(1),9));
- print(skewmat(n,i)); // skew matrix of generic linear forms
- ==> 0, 4a+b-8c, -a+6b+c,
- ==> -4a-b+8c,0, -8a+2b-9c,
- ==> a-6b-c, 8a-2b+9c,0
- kill R1;
-
-
-File: sing.info, Node: submat, Next: symmat, Prev: skewmat, Up: matrix_lib
-
-D.3.1.11 submat
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- submat(A,r,c); A=matrix, r,c=intvec
-
-*Return:*
- matrix, submatrix of A with rows specified by intvec r and columns
- specified by intvec c.
-
-*Example:*
- LIB "matrix.lib";
- ring R=32003,(x,y,z),lp;
- matrix A[4][4]=x,y,z,0,1,2,3,4,5,6,7,8,9,x2,y2,z2;
- print(A);
- ==> x,y, z, 0,
- ==> 1,2, 3, 4,
- ==> 5,6, 7, 8,
- ==> 9,x2,y2,z2
- intvec v=1,3,4;
- matrix B=submat(A,v,1..3);
- print(B);
- ==> x,y, z,
- ==> 5,6, 7,
- ==> 9,x2,y2
-
-
-File: sing.info, Node: symmat, Next: tensor, Prev: submat, Up: matrix_lib
-
-D.3.1.12 symmat
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- symmat(n[,id]); n integer, id ideal
-
-*Return:*
- symmetric nxn matrix, with entries from id (default:
- id=maxideal(1))
-
-*Note:*
- if id has less than n*(n+1)/2 elements, the matrix is filled with
- 0's, symmat(n); creates the generic symmetric matrix
-
-*Example:*
- LIB "matrix.lib";
- ring R=0,x(1..10),lp;
- print(symmat(4)); // the generic symmetric matrix
- ==> x(1),x(2),x(3),x(4),
- ==> x(2),x(5),x(6),x(7),
- ==> x(3),x(6),x(8),x(9),
- ==> x(4),x(7),x(9),x(10)
- ring R1 = 0,(a,b,c),dp;
- matrix A=symmat(4,maxideal(1)^3);
- print(A);
- ==> a3, a2b,a2c,ab2,
- ==> a2b,abc,ac2,b3,
- ==> a2c,ac2,b2c,bc2,
- ==> ab2,b3, bc2,c3
- int n=3;
- ideal i = ideal(randommat(1,n*(n+1) div 2,maxideal(1),9));
- print(symmat(n,i)); // symmetric matrix of generic linear forms
- ==> 4a-8b-2c,-a+b-4c, -8a-9b+c,
- ==> -a+b-4c, a-9b+9c, 6a-5b+9c,
- ==> -8a-9b+c,6a-5b+9c,2a+8c
- kill R1;
-
-
-File: sing.info, Node: tensor, Next: unitmat, Prev: symmat, Up: matrix_lib
-
-D.3.1.13 tensor
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- tensor(A,B); A,B matrices
-
-*Return:*
- matrix, tensor product of A and B
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),(c,ds);
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- matrix B[2][2]=x,y,0,z;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(B);
- ==> x,y,
- ==> 0,z
- print(tensor(A,B));
- ==> x, y, 2x,2y,3x,3y,
- ==> 0, z, 0, 2z,0, 3z,
- ==> 4x,4y,5x,5y,6x,6y,
- ==> 0, 4z,0, 5z,0, 6z,
- ==> 7x,7y,8x,8y,9x,9y,
- ==> 0, 7z,0, 8z,0, 9z
-
-
-File: sing.info, Node: unitmat, Next: gauss_col, Prev: tensor, Up:
matrix_lib
-
-D.3.1.14 unitmat
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- unitmat(n); n integer >= 0
-
-*Return:*
- nxn unit matrix
-
-*Note:*
- needs a basering, diagonal entries are numbers (=1) in the basering
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- print(xyz*unitmat(4));
- ==> xyz,0, 0, 0,
- ==> 0, xyz,0, 0,
- ==> 0, 0, xyz,0,
- ==> 0, 0, 0, xyz
- print(unitmat(5));
- ==> 1,0,0,0,0,
- ==> 0,1,0,0,0,
- ==> 0,0,1,0,0,
- ==> 0,0,0,1,0,
- ==> 0,0,0,0,1
-
-
-File: sing.info, Node: gauss_col, Next: gauss_row, Prev: unitmat, Up:
matrix_lib
-
-D.3.1.15 gauss_col
-..................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- gauss_col(A[,e]); A a matrix, e any type
-
-*Return:*
- - a matrix B, if called with one argument; B is the complete
- column- reduced upper-triangular normal form of A if A is constant,
- (resp. as far as this is possible if A is a polynomial matrix; no
- division by polynomials).
- - a list L of two matrices, if called with two arguments; L
- satisfies L[1] = A * L[2] with L[1] the column-reduced form of A
- and L[2] the transformation matrix.
-
-*Note:*
- * The procedure just applies interred to A with ordering (C,dp).
- The transformation matrix is obtained by applying 'lift'. This
- should be faster than the procedure colred.
- * It should only be used with exact coefficient field (there is no
- pivoting and rounding error treatment).
- * Parameters are allowed. Hence, if the entries of A are
- parameters, B is the column-reduced form of A over the rational
- function field.
-
-*Example:*
- LIB "matrix.lib";
- ring r=(0,a,b),(A,B,C),dp;
- matrix m[8][6]=
- 0, 2*C, 0, 0, 0, 0,
- 0, -4*C,a*A, 0, 0, 0,
- b*B, -A, 0, 0, 0, 0,
- -A, B, 0, 0, 0, 0,
- -4*C, 0, B, 2, 0, 0,
- 2*A, B, 0, 0, 0, 0,
- 0, 3*B, 0, 0, 2b, 0,
- 0, AB, 0, 2*A,A, 2a;"";
- ==>
- list L=gauss_col(m,1);
- print(L[1]);
- ==> 0,0,2*C, 0, 0,0,
- ==> A,0,-4*C,0, 0,0,
- ==> 0,0,-A, (1/2b)*B,0,0,
- ==> 0,0,B, -1/2*A, 0,0,
- ==> 0,1,0, 0, 0,0,
- ==> 0,0,B, A, 0,0,
- ==> 0,0,0, 0, 1,0,
- ==> 0,0,0, 0, 0,1
- print(L[2]);
- ==> 0, 0, 0, 1/2, 0, 0,
- ==> 0, 0, 1, 0, 0, 0,
- ==> 1/(a), 0, 0, 0, 0, 0,
- ==> -1/(2a)*B, 1/2, 0, C, 0, 0,
- ==> 0, 0, -3/(2b)*B, 0, 1/(2b), 0,
- ==> 1/(2a2)*AB,-1/(2a)*A,(-2b+3)/(4ab)*AB,-1/(a)*AC,-1/(4ab)*A,1/(2a)
- ring S=0,x,(c,dp);
- matrix A[5][4] =
- 3, 1, 1, 1,
- 13, 8, 6,-7,
- 14,10, 6,-7,
- 7, 4, 3,-3,
- 2, 1, 0, 3;
- print(gauss_col(A));
- ==> 8/9,-5/9,-1/3,7/9,
- ==> 1, 0, 0, 0,
- ==> 0, 1, 0, 0,
- ==> 0, 0, 1, 0,
- ==> 0, 0, 0, 1
-
-* Menu:
-
-See also:
-* colred::
-
-*See also:* *note colred::.
-
-
-File: sing.info, Node: gauss_row, Next: addcol, Prev: gauss_col, Up:
matrix_lib
-
-D.3.1.16 gauss_row
-..................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- gauss_row(A [,e]); A matrix, e any type
-
-*Return:*
- - a matrix B, if called with one argument; B is the complete row-
- reduced lower-triangular normal form of A if A is constant, (resp.
- as far as this is possible if A is a polynomial matrix; no division
- by polynomials).
- - a list L of two matrices, if called with two arguments; L
- satisfies L[1] = L[2] * A with L[1] the row-reduced form of A and
- L[2] the transformation matrix.
-
-*Note:*
- * This procedure just applies gauss_col to the transposed matrix.
- The transformation matrix is obtained by applying lift. This
- should be faster than the procedure rowred.
- * It should only be used with exact coefficient field (there is no
- pivoting and rounding error treatment).
- * Parameters are allowed. Hence, if the entries of A are
- parameters, B is the row-reduced form of A over the rational
- function field.
-
-*Example:*
- LIB "matrix.lib";
- ring r=(0,a,b),(A,B,C),dp;
- matrix m[6][8]=
- 0, 0, b*B, -A,-4C,2A,0, 0,
- 2C,-4C,-A,B, 0, B, 3B,AB,
- 0,a*A, 0, 0, B, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 2A,
- 0, 0, 0, 0, 0, 0, 2b, A,
- 0, 0, 0, 0, 0, 0, 0, 2a;"";
- ==>
- print(gauss_row(m));"";
- ==> 0, A, 0, 0, 0,0,0,0,
- ==> 0, 0, 0, 0, 1,0,0,0,
- ==> 2*C,-4*C,-A, B, 0,B,0,0,
- ==> 0, 0, (1/2b)*B,-1/2*A,0,A,0,0,
- ==> 0, 0, 0, 0, 0,0,1,0,
- ==> 0, 0, 0, 0, 0,0,0,1
- ==>
- ring S=0,x,dp;
- matrix A[4][5] = 3, 1,1,-1,2,
- 13, 8,6,-7,1,
- 14,10,6,-7,1,
- 7, 4,3,-3,3;
- list L=gauss_row(A,1);
- print(L[1]);
- ==> 1/2,-7/3,-19/6,5/6,
- ==> 1, 0, 0, 0,
- ==> 0, 1, 0, 0,
- ==> 0, 0, 1, 0,
- ==> 0, 0, 0, 1
- print(L[2]);
- ==> 0, -6, -5, 1,
- ==> -1/2,2/3, -1/6,-1/6,
- ==> 1/2, -5/3,-5/6,1/6,
- ==> 0, 13/3,11/3,-1/3
-
-* Menu:
-
-See also:
-* rowred::
-
-*See also:* *note rowred::.
-
-
-File: sing.info, Node: addcol, Next: addrow, Prev: gauss_row, Up:
matrix_lib
-
-D.3.1.17 addcol
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- addcol(A,c1,p,c2); A matrix, p poly, c1, c2 positive integers
-
-*Return:*
- matrix, A being modified by adding p times column c1 to column c2
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(addcol(A,1,xy,2));
- ==> 1,xy+2, 3,
- ==> 4,4xy+5,6,
- ==> 7,7xy+8,9
-
-
-File: sing.info, Node: addrow, Next: multcol, Prev: addcol, Up: matrix_lib
-
-D.3.1.18 addrow
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- addcol(A,r1,p,r2); A matrix, p poly, r1, r2 positive integers
-
-*Return:*
- matrix, A being modified by adding p times row r1 to row r2
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(addrow(A,1,xy,3));
- ==> 1, 2, 3,
- ==> 4, 5, 6,
- ==> xy+7,2xy+8,3xy+9
-
-
-File: sing.info, Node: multcol, Next: multrow, Prev: addrow, Up: matrix_lib
-
-D.3.1.19 multcol
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- addcol(A,c,p); A matrix, p poly, c positive integer
-
-*Return:*
- matrix, A being modified by multiplying column c with p
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(multcol(A,2,xy));
- ==> 1,2xy,3,
- ==> 4,5xy,6,
- ==> 7,8xy,9
-
-
-File: sing.info, Node: multrow, Next: permcol, Prev: multcol, Up:
matrix_lib
-
-D.3.1.20 multrow
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- multrow(A,r,p); A matrix, p poly, r positive integer
-
-*Return:*
- matrix, A being modified by multiplying row r with p
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,2,3,4,5,6,7,8,9;
- print(A);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(multrow(A,2,xy));
- ==> 1, 2, 3,
- ==> 4xy,5xy,6xy,
- ==> 7, 8, 9
-
-
-File: sing.info, Node: permcol, Next: permrow, Prev: multrow, Up:
matrix_lib
-
-D.3.1.21 permcol
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- permcol(A,c1,c2); A matrix, c1,c2 positive integers
-
-*Return:*
- matrix, A being modified by permuting column c1 and c2
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,x,3,4,y,6,7,z,9;
- print(A);
- ==> 1,x,3,
- ==> 4,y,6,
- ==> 7,z,9
- print(permcol(A,2,3));
- ==> 1,3,x,
- ==> 4,6,y,
- ==> 7,9,z
-
-
-File: sing.info, Node: permrow, Next: rowred, Prev: permcol, Up: matrix_lib
-
-D.3.1.22 permrow
-................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- permrow(A,r1,r2); A matrix, r1,r2 positive integers
-
-*Return:*
- matrix, A being modified by permuting row r1 and r2
-
-*Example:*
- LIB "matrix.lib";
- ring r=32003,(x,y,z),lp;
- matrix A[3][3]=1,2,3,x,y,z,7,8,9;
- print(A);
- ==> 1,2,3,
- ==> x,y,z,
- ==> 7,8,9
- print(permrow(A,2,1));
- ==> x,y,z,
- ==> 1,2,3,
- ==> 7,8,9
-
-
-File: sing.info, Node: rowred, Next: colred, Prev: permrow, Up: matrix_lib
-
-D.3.1.23 rowred
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- rowred(A[,e]); A matrix, e any type
-
-*Return:*
- - a matrix B, being the row reduced form of A, if rowred is called
- with one argument.
- (as far as this is possible over the polynomial ring; no division
- by polynomials)
- - a list L of two matrices, such that L[1] = L[2] * A with L[1] the
- row-reduced form of A and L[2] the transformation matrix (if rowred
- is called with two arguments).
-
-*Note:*
- * This procedure is designed for teaching purposes mainly.
- * The straight forward Gaussian algorithm is implemented in the
- library (no standard basis computation).
- The transformation matrix is obtained by concatenating a unit
- matrix to A. proc gauss_row should be faster.
- * It should only be used with exact coefficient field (there is no
- pivoting) over the polynomial ring (ordering lp or dp).
- * Parameters are allowed. Hence, if the entries of A are parameters
- the computation takes place over the field of rational functions.
-
-*Example:*
- LIB "matrix.lib";
- ring r=(0,a,b),(A,B,C),dp;
- matrix m[6][8]=
- 0, 0, b*B, -A,-4C,2A,0, 0,
- 2C,-4C,-A,B, 0, B, 3B,AB,
- 0,a*A, 0, 0, B, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 2A,
- 0, 0, 0, 0, 0, 0, 2b, A,
- 0, 0, 0, 0, 0, 0, 0, 2a;"";
- ==>
- print(rowred(m));"";
- ==> 0, 0, 0, 0, 1,0, 0,0,
- ==> 0, 0, 0, 0, 0,0, 1,0,
- ==> 0, 0, 0, 0, 0,0, 0,1,
- ==> 0, 0, (b)*B,-A,0,2*A,0,0,
- ==> 2*C,-4*C, -A, B, 0,B, 0,0,
- ==> 0, (a)*A,0, 0, 0,0, 0,0
- ==>
- list L=rowred(m,1);
- print(L[1]);
- ==> 0, 0, 0, 0, 1,0, 0,0,
- ==> 0, 0, 0, 0, 0,0, 1,0,
- ==> 0, 0, 0, 0, 0,0, 0,1,
- ==> 0, 0, (b)*B,-A,0,2*A,0,0,
- ==> 2*C,-4*C, -A, B, 0,B, 0,0,
- ==> 0, (a)*A,0, 0, 0,0, 0,0
- print(L[2]);
- ==> 0,0,0,1/2, 0, -1/(2a)*A,
- ==> 0,0,0,0, 1/(2b), -1/(4ab)*A,
- ==> 0,0,0,0, 0, 1/(2a),
- ==> 1,0,0,2*C, 0, -2/(a)*AC,
- ==> 0,1,0,0, -3/(2b)*B,(-2b+3)/(4ab)*AB,
- ==> 0,0,1,-1/2*B,0, 1/(2a)*AB
-
-* Menu:
-
-See also:
-* gauss_row::
-
-*See also:* *note gauss_row::.
-
-
-File: sing.info, Node: colred, Next: rm_unitrow, Prev: rowred, Up:
matrix_lib
-
-D.3.1.24 colred
-...............
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- colred(A[,e]); A matrix, e any type
-
-*Return:*
- - a matrix B, being the column reduced form of A, if colred is
- called with one argument.
- (as far as this is possible over the polynomial ring; no division
- by polynomials)
- - a list L of two matrices, such that L[1] = A * L[2] with L[1] the
- column-reduced form of A and L[2] the transformation matrix (if
- colred is called with two arguments).
-
-*Note:*
- * This procedure is designed for teaching purposes mainly.
- * It applies rowred to the transposed matrix. proc gauss_col
- should be faster.
- * It should only be used with exact coefficient field (there is no
- pivoting) over the polynomial ring (ordering lp or dp).
- * Parameters are allowed. Hence, if the entries of A are parameters
- the computation takes place over the field of rational functions.
-
-*Example:*
- LIB "matrix.lib";
- ring r=(0,a,b),(A,B,C),dp;
- matrix m[8][6]=
- 0, 2*C, 0, 0, 0, 0,
- 0, -4*C,a*A, 0, 0, 0,
- b*B, -A, 0, 0, 0, 0,
- -A, B, 0, 0, 0, 0,
- -4*C, 0, B, 2, 0, 0,
- 2*A, B, 0, 0, 0, 0,
- 0, 3*B, 0, 0, 2b, 0,
- 0, AB, 0, 2*A,A, 2a;"";
- ==>
- print(colred(m));"";
- ==> 0,0,0,0, 2*C, 0,
- ==> 0,0,0,0, -4*C,(a)*A,
- ==> 0,0,0,(b)*B,-A, 0,
- ==> 0,0,0,-A, B, 0,
- ==> 1,0,0,0, 0, 0,
- ==> 0,0,0,2*A, B, 0,
- ==> 0,1,0,0, 0, 0,
- ==> 0,0,1,0, 0, 0
- ==>
- list L=colred(m,1);
- print(L[1]);
- ==> 0,0,0,0, 2*C, 0,
- ==> 0,0,0,0, -4*C,(a)*A,
- ==> 0,0,0,(b)*B,-A, 0,
- ==> 0,0,0,-A, B, 0,
- ==> 1,0,0,0, 0, 0,
- ==> 0,0,0,2*A, B, 0,
- ==> 0,1,0,0, 0, 0,
- ==> 0,0,1,0, 0, 0
- print(L[2]);
- ==> 0, 0, 0, 1, 0, 0,
- ==> 0, 0, 0, 0, 1, 0,
- ==> 0, 0, 0, 0, 0, 1,
- ==> 1/2, 0, 0, 2*C, 0, -1/2*B,
- ==> 0, 1/(2b), 0, 0, -3/(2b)*B, 0,
- ==> -1/(2a)*A,-1/(4ab)*A,1/(2a),-2/(a)*AC,(-2b+3)/(4ab)*AB,1/(2a)*AB
-
-* Menu:
-
-See also:
-* gauss_col::
-
-*See also:* *note gauss_col::.
-
-
-File: sing.info, Node: rm_unitrow, Next: rm_unitcol, Prev: colred, Up:
matrix_lib
-
-D.3.1.25 rm_unitrow
-...................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- rm_unitrow(A); A matrix (being col-reduced)
-
-*Return:*
- matrix, obtained from A by deleting unit rows (having just one 1
- and else 0 as entries) and associated columns
-
-*Example:*
- LIB "matrix.lib";
- ring r=0,(A,B,C),dp;
- matrix m[8][6]=
- 0,0, 0, 0, 2C, 0,
- 0,0, 0, 0, -4C,A,
- A,-C2,0, B, -A, 0,
- 0,0, 1/2B,-A,B, 0,
- 1,0, 0, 0, 0, 0,
- 0,0, 0, 2A,B, 0,
- 0,1, 0, 0, 0, 0,
- 0,0, 1, 0, 0, 0;
- print(rm_unitrow(m));
- ==> 0, 2C, 0,
- ==> 0, -4C,A,
- ==> B, -A, 0,
- ==> -A,B, 0,
- ==> 2A,B, 0
-
-
-File: sing.info, Node: rm_unitcol, Next: headStand, Prev: rm_unitrow, Up:
matrix_lib
-
-D.3.1.26 rm_unitcol
-...................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-*Usage:*
- rm_unitcol(A); A matrix (being row-reduced)
-
-*Return:*
- matrix, obtained from A by deleting unit columns (having just one 1
- and else 0 as entries) and associated rows
-
-*Example:*
- LIB "matrix.lib";
- ring r=0,(A,B,C),dp;
- matrix m[6][8]=
- 0, 0, A, 0, 1,0, 0,0,
- 0, 0, -C2, 0, 0,0, 1,0,
- 0, 0, 0,1/2B, 0,0, 0,1,
- 0, 0, B, -A, 0,2A, 0,0,
- 2C,-4C, -A, B, 0,B, 0,0,
- 0, A, 0, 0, 0,0, 0,0;
- print(rm_unitcol(m));
- ==> 0, 0, B, -A,2A,
- ==> 2C,-4C,-A,B, B,
- ==> 0, A, 0, 0, 0
-
-
-File: sing.info, Node: headStand, Prev: rm_unitcol, Up: matrix_lib
-
-D.3.1.27 headStand
-..................
-
-Procedure from library `matrix.lib' (*note matrix_lib::).
-
-
-File: sing.info, Node: linalg_lib, Prev: matrix_lib, Up: Linear algebra
-
-D.3.2 linalg_lib
-----------------
-
-*Library:*
- linalg.lib
-
-*Purpose:*
- Algorithmic Linear Algebra
-
-*Authors:*
- Ivor Saynisch (address@hidden)
- Mathias Schulze (address@hidden)
-
-*Procedures:*
-
-* Menu:
-
-* inverse:: matrix, the inverse of A
-* inverse_B:: list(matrix Inv,poly p),Inv*A=p*En ( using busadj(A) )
-* inverse_L:: list(matrix Inv,poly p),Inv*A=p*En ( using lift )
-* sym_gauss:: symmetric gaussian algorithm
-* orthogonalize:: Gram-Schmidt orthogonalization
-* diag_test:: test whether A can be diagonalized
-* busadj:: coefficients of Adj(E*t-A) and coefficients of det(E*t-A)
-* charpoly:: characteristic polynomial of A ( using busadj(A) )
-* adjoint:: adjoint of A ( using busadj(A) )
-* det_B:: determinant of A ( using busadj(A) )
-* gaussred:: gaussian reduction: P*A=U*S, S a row reduced form of A
-* gaussred_pivot:: gaussian reduction: P*A=U*S, uses row pivoting
-* gauss_nf:: gaussian normal form of A
-* mat_rk:: rank of constant matrix A
-* U_D_O:: P*A=U*D*O, P,D,U,O=permutation,diag,lower-,upper-triang
-* pos_def:: test symmetric matrix for positive definiteness
-* hessenberg:: Hessenberg form of M
-* evnf:: eigenvalues normal form of (e[,m])
-* eigenvals:: eigenvalues with multiplicities of M
-* minipoly:: minimal polynomial of M
-* jordan:: Jordan data of M
-* jordanbasis:: Jordan basis and weight filtration of M
-* jordanmatrix:: Jordan matrix with Jordan data (e,s,m)
-* jordannf:: Jordan normal form of M
-
-
-File: sing.info, Node: inverse, Next: inverse_B, Up: linalg_lib
-
-D.3.2.1 inverse
-...............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- inverse(A [,opt]); A a square matrix, opt integer
-
-*Return:*
-
- a matrix:
- - the inverse matrix of A, if A is invertible;
- - the 1x1 0-matrix if A is not invertible (in the polynomial
ring!).
- There are the following options:
- - opt=0 or not given: heuristically best option from below
- - opt=1 : apply std to (transpose(E,A)), ordering (C,dp).
- - opt=2 : apply interred (transpose(E,A)), ordering (C,dp).
- - opt=3 : apply lift(A,E), ordering (C,dp).
-
-*Note:*
- parameters and minpoly are allowed; opt=2 is only correct for
- matrices with entries in a field
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x,y,z),lp;
- matrix A[3][3]=
- 1,4,3,
- 1,5,7,
- 0,4,17;
- print(inverse(A));"";
- matrix B[3][3]=
- y+1, x+y, y,
- z, z+1, z,
- y+z+2,x+y+z+2,y+z+1;
- print(inverse(B));
- print(B*inverse(B));
-
-* Menu:
-
-See also:
-* inverse_B::
-* inverse_L::
-
-*See also:* *note inverse_B::; *note inverse_L::.
-
-
-File: sing.info, Node: inverse_B, Next: inverse_L, Prev: inverse, Up:
linalg_lib
-
-D.3.2.2 inverse_B
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- inverse_B(A); A = square matrix
-
-*Return:*
- list Inv with
- - Inv[1] = matrix I and
- - Inv[2] = poly p
- such that I*A = unitmat(n)*p;
-
-*Note:*
- p=1 if 1/det(A) is computable and p=det(A) if not;
- the computation uses busadj.
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x,y),lp;
- matrix A[3][3]=x,y,1,1,x2,y,x,6,0;
- print(A);
- list Inv=inverse_B(A);
- print(Inv[1]);
- print(Inv[2]);
- print(Inv[1]*A);
-
-* Menu:
-
-See also:
-* inverse::
-* inverse_L::
-
-*See also:* *note inverse::; *note inverse_L::.
-
-
-File: sing.info, Node: inverse_L, Next: sym_gauss, Prev: inverse_B, Up:
linalg_lib
-
-D.3.2.3 inverse_L
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- inverse_L(A); A = square matrix
-
-*Return:*
- list Inv representing a left inverse of A, i.e
- - Inv[1] = matrix I and
- - Inv[2] = poly p
- such that I*A = unitmat(n)*p;
-
-*Note:*
- p=1 if 1/det(A) is computable and p=det(A) if not;
- the computation computes first det(A) and then uses lift
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x,y),lp;
- matrix A[3][3]=x,y,1,1,x2,y,x,6,0;
- print(A);
- list Inv=inverse_L(A);
- print(Inv[1]);
- print(Inv[2]);
- print(Inv[1]*A);
-
-* Menu:
-
-See also:
-* inverse::
-* inverse_B::
-
-*See also:* *note inverse::; *note inverse_B::.
-
-
-File: sing.info, Node: sym_gauss, Next: orthogonalize, Prev: inverse_L,
Up: linalg_lib
-
-D.3.2.4 sym_gauss
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- sym_gauss(A); A = symmetric matrix
-
-*Return:*
- matrix, diagonalisation with symmetric gauss algorithm
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),lp;
- matrix A[2][2]=1,4,4,15;
- print(A);
- print(sym_gauss(A));
-
-
-File: sing.info, Node: orthogonalize, Next: diag_test, Prev: sym_gauss,
Up: linalg_lib
-
-D.3.2.5 orthogonalize
-.....................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- orthogonalize(A); A = constant matrix
-
-*Return:*
- matrix, orthogonal basis of the column space of A
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),lp;
- matrix A[4][4]=5,6,12,4,7,3,2,6,12,1,1,2,6,4,2,10;
- print(A);
- print(orthogonalize(A));
-
-
-File: sing.info, Node: diag_test, Next: busadj, Prev: orthogonalize, Up:
linalg_lib
-
-D.3.2.6 diag_test
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- diag_test(A); A = const square matrix
-
-*Return:*
- int, 1 if A is diagonalisable, 0 if not
- -1 no statement is possible, since A does not split.
-
-*Note:*
- The test works only for split matrices, i.e if eigenvalues of A are
- in the ground field.
- Does not work with parameters (uses factorize,gcd).
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),dp;
- matrix A[4][4]=6,0,0,0,0,0,6,0,0,6,0,0,0,0,0,6;
- print(A);
- diag_test(A);
-
-
-File: sing.info, Node: busadj, Next: charpoly, Prev: diag_test, Up:
linalg_lib
-
-D.3.2.7 busadj
-..............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- busadj(A); A = square matrix (of size nxn)
-
-*Return:*
- list L:
-
- L[1] contains the (n+1) coefficients of the characteristic
- polynomial X of A, i.e.
- X = L[1][1]+..+L[1][k]*t^(k-1)+..+(L[1][n+1])*t^n
- L[2] contains the n (nxn)-matrices Hk which are the coefficients
of
- the busadjoint bA = adjoint(E*t-A) of A, i.e.
- bA = (Hn-1)*t^(n-1)+...+Hk*t^k+...+H0, ( Hk=L[2][k+1] )
-
-*Example:*
- LIB "linalg.lib";
- ring r = 0,(t,x),lp;
- matrix A[2][2] = 1,x2,x,x2+3x;
- print(A);
- list L = busadj(A);
- poly X = L[1][1]+L[1][2]*t+L[1][3]*t2; X;
- matrix bA[2][2] = L[2][1]+L[2][2]*t;
- print(bA); //the busadjoint of A;
- print(bA*(t*unitmat(2)-A));
-
-
-File: sing.info, Node: charpoly, Next: adjoint, Prev: busadj, Up:
linalg_lib
-
-D.3.2.8 charpoly
-................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- charpoly(A[,v]); A square matrix, v string, name of a variable
-
-*Return:*
- poly, the characteristic polynomial det(E*v-A)
- (default: v=name of last variable)
-
-*Note:*
- A must be independent of the variable v. The computation uses det.
- If printlevel>0, det(E*v-A) is diplayed recursively.
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x,t),dp;
- matrix A[3][3]=1,x2,x,x2,6,4,x,4,1;
- print(A);
- charpoly(A,"t");
-
-
-File: sing.info, Node: adjoint, Next: det_B, Prev: charpoly, Up: linalg_lib
-
-D.3.2.9 adjoint
-...............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- adjoint(A); A = square matrix
-
-*Return:*
- adjoint matrix of A, i.e. Adj*A=det(A)*E
-
-*Note:*
- computation uses busadj(A)
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(t,x),lp;
- matrix A[2][2]=1,x2,x,x2+3x;
- print(A);
- matrix Adj[2][2]=adjoint(A);
- print(Adj); //Adj*A=det(A)*E
- print(Adj*A);
-
-
-File: sing.info, Node: det_B, Next: gaussred, Prev: adjoint, Up: linalg_lib
-
-D.3.2.10 det_B
-..............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- det_B(A); A any matrix
-
-*Return:*
- returns the determinant of A
-
-*Note:*
- the computation uses the busadj algorithm
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),dp;
- matrix A[10][10]=random(2,10,10)+unitmat(10)*x;
- print(A);
- det_B(A);
-
-
-File: sing.info, Node: gaussred, Next: gaussred_pivot, Prev: det_B, Up:
linalg_lib
-
-D.3.2.11 gaussred
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- gaussred(A); A any constant matrix
-
-*Return:*
- list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A)
- gives a row reduced matrix S, a permutation matrix P and a
- normalized lower triangular matrix U, with P*A=U*S
-
-*Note:*
- This procedure is designed for teaching purposes mainly. The
- straight forward implementation in the interpreted library is not
- very efficient (no standard basis computation).
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),dp;
- matrix A[5][4]=1,3,-1,4,2,5,-1,3,1,3,-1,4,0,4,-3,1,-3,1,-5,-2;
- print(A);
- list Z=gaussred(A); //construct P,U,S s.t. P*A=U*S
- print(Z[1]); //P
- print(Z[2]); //U
- print(Z[3]); //S
- print(Z[4]); //rank
- print(Z[1]*A); //P*A
- print(Z[2]*Z[3]); //U*S
-
-
-File: sing.info, Node: gaussred_pivot, Next: gauss_nf, Prev: gaussred, Up:
linalg_lib
-
-D.3.2.12 gaussred_pivot
-.......................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- gaussred_pivot(A); A any constant matrix
-
-*Return:*
- list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A)
- gives n row reduced matrix S, a permutation matrix P and a
- normalized lower triangular matrix U, with P*A=U*S
-
-*Note:*
- with row pivoting
-
-*Example:*
- LIB "linalg.lib";
- ring r=0,(x),dp;
- matrix A[5][4] = 1, 3,-1,4,
- 2, 5,-1,3,
- 1, 3,-1,4,
- 0, 4,-3,1,
- -3,1,-5,-2;
- list Z=gaussred_pivot(A); //construct P,U,S s.t. P*A=U*S
- print(Z[1]); //P
- print(Z[2]); //U
- print(Z[3]); //S
- print(Z[4]); //rank
- print(Z[1]*A); //P*A
- print(Z[2]*Z[3]); //U*S
-
-
-File: sing.info, Node: gauss_nf, Next: mat_rk, Prev: gaussred_pivot, Up:
linalg_lib
-
-D.3.2.13 gauss_nf
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- gauss_nf(A); A any constant matrix
-
-*Return:*
- matrix; gauss normal form of A (uses gaussred)
-
-*Example:*
- LIB "linalg.lib";
- ring r = 0,(x),dp;
- matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7;
- print(gauss_nf(A));
-
-
-File: sing.info, Node: mat_rk, Next: U_D_O, Prev: gauss_nf, Up: linalg_lib
-
-D.3.2.14 mat_rk
-...............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- mat_rk(A); A any constant matrix
-
-*Return:*
- int, rank of A
-
-*Example:*
- LIB "linalg.lib";
- ring r = 0,(x),dp;
- matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7;
- mat_rk(A);
-
-
-File: sing.info, Node: U_D_O, Next: pos_def, Prev: mat_rk, Up: linalg_lib
-
-D.3.2.15 U_D_O
-..............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- U_D_O(A); constant invertible matrix A
-
-*Return:*
- list Z: Z[1]=P , Z[2]=U , Z[3]=D , Z[4]=O
- gives a permutation matrix P,
- a normalized lower triangular matrix U ,
- a diagonal matrix D, and
- a normalized upper triangular matrix O
- with P*A=U*D*O
-
-*Note:*
- Z[1]=-1 means that A is not regular (proc uses gaussred)
-
-*Example:*
- LIB "linalg.lib";
- ring r = 0,(x),dp;
- matrix A[5][5] = 10, 4, 0, -9, 8,
- -3, 6, -6, -4, 9,
- 0, 3, -1, -9, -8,
- -4,-2, -6, -10,10,
- -9, 5, -1, -6, 5;
- list Z = U_D_O(A); //construct P,U,D,O s.t. P*A=U*D*O
- print(Z[1]); //P
- print(Z[2]); //U
- print(Z[3]); //D
- print(Z[4]); //O
- print(Z[1]*A); //P*A
- print(Z[2]*Z[3]*Z[4]); //U*D*O
-
-
-File: sing.info, Node: pos_def, Next: hessenberg, Prev: U_D_O, Up:
linalg_lib
-
-D.3.2.16 pos_def
-................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- pos_def(A); A = constant, symmetric square matrix
-
-*Return:*
- int:
- 1 if A is positive definit ,
- 0 if not,
- -1 if unknown
-
-*Example:*
- LIB "linalg.lib";
- ring r = 0,(x),dp;
- matrix A[5][5] = 20, 4, 0, -9, 8,
- 4, 12, -6, -4, 9,
- 0, -6, -2, -9, -8,
- -9, -4, -9, -20, 10,
- 8, 9, -8, 10, 10;
- pos_def(A);
- matrix B[3][3] = 3, 2, 0,
- 2, 12, 4,
- 0, 4, 2;
- pos_def(B);
-
-
-File: sing.info, Node: hessenberg, Next: evnf, Prev: pos_def, Up:
linalg_lib
-
-D.3.2.17 hessenberg
-...................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- hessenberg(M); matrix M
-
-*Assume:*
- M constant square matrix
-
-*Return:*
- matrix H; Hessenberg form of M
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- print(hessenberg(M));
-
-
-File: sing.info, Node: evnf, Next: eigenvals, Prev: hessenberg, Up:
linalg_lib
-
-D.3.2.18 evnf
-.............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- evnf(e[,m]); ideal e, intvec m
-
-*Assume:*
- ncols(e)==size(m)
-
-*Return:*
- order eigenvalues e with multiplicities m
-
-
-File: sing.info, Node: eigenvals, Next: minipoly, Prev: evnf, Up:
linalg_lib
-
-D.3.2.19 eigenvals
-..................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- eigenvals(M); matrix M
-
-*Assume:*
- eigenvalues of M in basefield
-
-*Return:*
-
- list l;
- ideal l[1];
- number l[1][i]; i-th eigenvalue of M
- intvec l[2];
- int l[2][i]; multiplicity of i-th eigenvalue of M
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- eigenvals(M);
-
-
-File: sing.info, Node: minipoly, Next: jordan, Prev: eigenvals, Up:
linalg_lib
-
-D.3.2.20 minipoly
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- minpoly(M); matrix M
-
-*Assume:*
- eigenvalues of M in basefield
-
-*Return:*
-
- list l; minimal polynomial of M
- ideal l[1];
- number l[1][i]; i-th root of minimal polynomial of M
- intvec l[2];
- int l[2][i]; multiplicity of i-th root of minimal polynomial of M
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- minipoly(M);
-
-
-File: sing.info, Node: jordan, Next: jordanbasis, Prev: minipoly, Up:
linalg_lib
-
-D.3.2.21 jordan
-...............
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- jordan(M); matrix M
-
-*Assume:*
- eigenvalues of M in basefield
-
-*Return:*
-
- list l; Jordan data of M
- ideal l[1];
- number l[1][i]; eigenvalue of i-th Jordan block of M
- intvec l[2];
- int l[2][i]; size of i-th Jordan block of M
- intvec l[3];
- int l[3][i]; multiplicity of i-th Jordan block of M
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- jordan(M);
-
-
-File: sing.info, Node: jordanbasis, Next: jordanmatrix, Prev: jordan, Up:
linalg_lib
-
-D.3.2.22 jordanbasis
-....................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- jordanbasis(M); matrix M
-
-*Assume:*
- eigenvalues of M in basefield
-
-*Return:*
-
- list l:
- module l[1]; inverse(l[1])*M*l[1] in Jordan normal form
- intvec l[2];
- int l[2][i]; weight filtration index of l[1][i]
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- list l=jordanbasis(M);
- print(l[1]);
- print(l[2]);
- print(inverse(l[1])*M*l[1]);
-
-
-File: sing.info, Node: jordanmatrix, Next: jordannf, Prev: jordanbasis,
Up: linalg_lib
-
-D.3.2.23 jordanmatrix
-.....................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- jordanmatrix(e,s,m); ideal e, intvec s, intvec m
-
-*Assume:*
- ncols(e)==size(s)==size(m)
-
-*Return:*
-
- matrix J; Jordan matrix with list(e,s,m)==jordan(J)
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- ideal e=ideal(2,3);
- intvec s=1,2;
- intvec m=1,1;
- print(jordanmatrix(e,s,m));
-
-
-File: sing.info, Node: jordannf, Prev: jordanmatrix, Up: linalg_lib
-
-D.3.2.24 jordannf
-.................
-
-Procedure from library `linalg.lib' (*note linalg_lib::).
-
-*Usage:*
- jordannf(M); matrix M
-
-*Assume:*
- eigenvalues of M in basefield
-
-*Return:*
- matrix J; Jordan normal form of M
-
-*Example:*
- LIB "linalg.lib";
- ring R=0,x,dp;
- matrix M[3][3]=3,2,1,0,2,1,0,0,3;
- print(M);
- print(jordannf(M));
-
-
-File: sing.info, Node: Commutative algebra, Next: Singularities, Prev:
Linear algebra, Up: SINGULAR libraries
-
-D.4 Commutative algebra
-=======================
-
-* Menu:
-
-* algebra_lib:: procedures for computing with algebras and maps
-* elim_lib:: procedures for elimination, saturation and blowing up
-* homolog_lib:: procedures for homological algebra
-* mprimdec_lib:: procedures for primary decomposition of modules
-* mregular_lib:: procedures for Castelnuovo-Mumford regularity
-* normal_lib:: procedure for normalization
-* primdec_lib:: procedures for primary decomposition
-* primitiv_lib:: procedures for finding a primitive element
-* reesclos_lib:: Rees Algebra and integral closure of an ideal
-* intprog_lib:: Integer Programming
-* toric_lib:: toric ideals
-
-
-File: sing.info, Node: algebra_lib, Next: elim_lib, Prev: Commutative
algebra, Up: Commutative algebra
-
-D.4.1 algebra_lib
------------------
-
-*Library:*
- algebra.lib
-
-*Purpose:*
- Compute with Algebras and Algebra Maps
-
-*Authors:*
- Gert-Martin Greuel, address@hidden,
- Agnes Eileen Heydtmann, address@hidden,
- Gerhard Pfister, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* algebra_containment:: query of algebra containment
-* module_containment:: query of module containment over a subalgebra
-* inSubring:: test whether poly p is in subring generated by I
-* algDependent:: computes algebraic relations between generators of I
-* alg_kernel:: computes the kernel of the ring map phi
-* is_injective:: test for injectivity of ring map phi
-* is_surjective:: test for surjectivity of ring map phi
-* is_bijective:: test for bijectivity of ring map phi
-* noetherNormal:: noether normalization of ideal id
-* mapIsFinite:: query for finiteness of map phi:R -> basering/I
-* finitenessTest:: find variables which occur as pure power in lead(i)
-
-
-File: sing.info, Node: algebra_containment, Next: module_containment, Up:
algebra_lib
-
-D.4.1.1 algebra_containment
-...........................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- algebra_containment(p,A[,k]); p poly, A ideal, k integer.
- A = A[1],...,A[m] generators of subalgebra of the basering
-
-*Return:*
-
- - k=0 (or if k is not given) an integer:
- 1 : if p is contained in the subalgebra K[A[1],...,A[m]]
- 0 : if p is not contained in K[A[1],...,A[m]]
- - k=1 : a list, say l, of size 2, l[1] integer, l[2] ring,
satisfying
- l[1]=1 if p is in the subalgebra K[A[1],...,A[m]] and then the
ring
- l[2] contains poly check = h(y(1),...,y(m)) if
p=h(A[1],...,A[m])
- l[1]=0 if p is in not the subalgebra K[A[1],...,A[m]] and then
- l[2] contains the poly check = h(x,y(1),...,y(m)) if p
satisfies
- the nonlinear relation p = h(x,A[1],...,A[m]) where
- x = x(1),...,x(n) denote the variables of the basering
-
-*Display:*
- if k=0 and printlevel >= voice+1 (default) display the poly check
-
-*Note:*
- The proc inSubring uses a different algorithm which is sometimes
- faster.
-
-*Theory:*
- The ideal of algebraic relations of the algebra generators
- A[1],..., A[m] is computed introducing new variables y(i) and the
- product order with x(i) >> y(i).
- p reduces to a polynomial only in the y(i) <=> p is contained in
- the subring generated by the polynomials A[1],...,A[m].
-
-*Example:*
- LIB "algebra.lib";
- int p = printlevel; printlevel = 1;
- ring R = 0,(x,y,z),dp;
- ideal A=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3;
- poly p1=z;
- poly p2=
- x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4;
- algebra_containment(p1,A);
- ==> // x(3)
- ==> 0
- algebra_containment(p2,A);
- ==> //
y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y\
- (5)*y(7)^2
- ==> 1
- list L = algebra_containment(p2,A,1);
- ==>
- ==> // 'algebra_containment' created a ring as 2nd element of the list.
- ==> // The ring contains the poly check which defines the algebraic
relation.
- ==> // To access to the ring and see check you must give the ring a name,
- ==> // e.g.:
- ==> def S = l[2]; setring S; check;
- ==>
- L[1];
- ==> 1
- def S = L[2]; setring S;
- check;
- ==>
y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y(5)\
- *y(7)^2
- printlevel = p;
-
-
-File: sing.info, Node: module_containment, Next: inSubring, Prev:
algebra_containment, Up: algebra_lib
-
-D.4.1.2 module_containment
-..........................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- module_containment(p,P,M[,k]); p poly, P ideal, M ideal, k int
- P = P[1],...,P[n] generators of a subalgebra of the basering,
- M = M[1],...,M[m] generators of a module over the subalgebra K[P]
-
-*Assume:*
- ncols(P) = nvars(basering), the P[i] are algebraically independent
-
-*Return:*
-
- - k=0 (or if k is not given), an integer:
- 1 : if p is contained in the module <M[1],...,M[m]> over
K[P]
- 0 : if p is not contained in <M[1],...,M[m]>
- - k=1, a list, say l, of size 2, l[1] integer, l[2] ring:
- l[1]=1 : if p is in <M[1],...,M[m]> and then the ring l[2]
contains
- the polynomial check = h(y(1),...,y(m),z(1),...,z(n)) if
- p = h(M[1],...,M[m],P[1],...,P[n])
- l[1]=0 : if p is in not in <M[1],...,M[m]>, then l[2] contains
the
- poly check = h(x,y(1),...,y(m),z(1),...,z(n)) if p satisfies
- the nonlinear relation p = h(x,M[1],...,M[m],P[1],...,P[n])
where
- x = x(1),...,x(n) denote the variables of the basering
-
-*Display:*
- the polynomial h(y(1),...,y(m),z(1),...,z(n)) if k=0, resp. a
- comment how to access the relation check if k=1, provided
- printlevel >= voice+1 (default).
-
-*Theory:*
- The ideal of algebraic relations of all the generators p1,...,pn,
- s1,...,st given by P and S is computed introducing new variables
- y(j), z(i) and the product order: x^a*y^b*z^c > x^d*y^e*z^f if x^a
- > x^d with respect to the lp ordering or else if z^c > z^f with
- respect to the dp ordering or else if y^b > y^e with respect to the
- lp ordering again. p reduces to a polynomial only in the y(j) and
- z(i), linear in the z(i) <=> p is contained in the module.
-
-*Example:*
- LIB "algebra.lib";
- int p = printlevel; printlevel = 1;
- ring R=0,(x,y,z),dp;
- ideal P = x2+y2,z2,x4+y4; //algebra generators
- ideal M = 1,x2z-1y2z,xyz,x3y-1xy3; //module generators
- poly p1=
- x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4;
- module_containment(p1,P,M);
- ==> // y(2)*z(2)*z(3)^2+z(1)^3*z(2)^2
- ==> 1
- poly p2=z;
- list l = module_containment(p2,P,M,1);
- ==>
- ==> // 'module_containment' created a ring as 2nd element of the list. The
- ==> // ring contains the poly check which defines the algebraic relation
- ==> // for p. To access to the ring and see check you must give the ring
- ==> // a name, e.g.:
- ==> def S = l[2]; setring S; check;
- ==>
- l[1];
- ==> 0
- def S = l[2]; setring S; check;
- ==> x(3)
- printlevel=p;
-
-
-File: sing.info, Node: inSubring, Next: algDependent, Prev:
module_containment, Up: algebra_lib
-
-D.4.1.3 inSubring
-.................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- inSubring(p,i); p poly, i ideal
-
-*Return:*
-
- a list l of size 2, l[1] integer, l[2] string
- l[1]=1 iff p is in the subring generated by i=i[1],...,i[k],
- and then l[2] = y(0)-h(y(1),...,y(k)) if p =
h(i[1],...,i[k])
- l[1]=0 iff p is in not the subring generated by i,
- and then l[2] = h(y(0),y(1),...,y(k) where p satisfies the
- nonlinear relation h(p,i[1],...,i[k])=0.
-
-*Note:*
- the proc algebra_containment tests the same with a different
- algorithm, which is often faster
-
-*Example:*
- LIB "algebra.lib";
- ring q=0,(x,y,z,u,v,w),dp;
- poly p=xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2;
- ideal I =x-w,u2w+1,yz-v;
- inSubring(p,I);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> y(1)*y(2)*y(3)+y(2)^2-y(0)+1
-
-
-File: sing.info, Node: algDependent, Next: alg_kernel, Prev: inSubring,
Up: algebra_lib
-
-D.4.1.4 algDependent
-....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- algDependent(f[,c]); f ideal (say, f = f1,...,fm), c integer
-
-*Return:*
-
- a list l of size 2, l[1] integer, l[2] ring:
- - l[1] = 1 if f1,...,fm are algebraic dependent, 0 if not
- - l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if
the
- basering has n variables. It contains the ideal 'ker',
depending
- only on the y(i) and generating the algebraic relations
between the
- f[i], i.e. substituting y(i) by fi yields 0. Of course, ker is
- nothing but the kernel of the ring map
- K[y(1),...,y(m)] --> basering, y(i) -> fi.
-
-*Note:*
- Three different algorithms are used depending on c = 1,2,3. If c
- is not given or c=0, a heuristically best method is chosen. The
- basering may be a quotient ring.
- To access to the ring l[2] and see ker you must give the ring a
- name, e.g. def S=l[2]; setring S; ker;
-
-*Display:*
- The above comment is displayed if printlevel >= 0 (default).
-
-*Example:*
- LIB "algebra.lib";
- int p = printlevel; printlevel = 1;
- ring R = 0,(x,y,z,u,v,w),dp;
- ideal I = xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2,
- x-w, u2w+1, yz-v;
- list l = algDependent(I);
- ==>
- ==> // The 2nd element of the list l is a ring with variables
x(1),...,x(n),
- ==> // and y(1),...,y(m) if the basering has n variables and if the ideal
- ==> // is f[1],...,f[m]. The ring contains the ideal ker which depends
only
- ==> // on the y(i) and generates the relations between the f[i].
- ==> // I.e. substituting y(i) by f[i] yields 0.
- ==> // To access to the ring and see ker you must give the ring a name,
- ==> // e.g.:
- ==> def S = l[2]; setring S; ker;
- ==>
- l[1];
- ==> 1
- def S = l[2]; setring S;
- ker;
- ==> ker[1]=y(2)*y(3)*y(4)+y(3)^2-y(1)+1
- printlevel = p;
-
-
-File: sing.info, Node: alg_kernel, Next: is_injective, Prev: algDependent,
Up: algebra_lib
-
-D.4.1.5 alg_kernel
-..................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- alg_kernel(phi,pr[,s,c]); phi map to basering, pr preimage ring, s
- string (name of kernel in pr), c integer.
-
-*Return:*
- a string, the kernel of phi as string.
- If, moreover, a string s is given, the algorithm creates, in the
- preimage ring pr the kernel of phi with name s.
- Three different algorithms are used depending on c = 1,2,3. If c
- is not given or c=0, a heuristically best method is chosen.
- (algorithm 1 uses the preimage command)
-
-*Note:*
- Since the kernel of phi lives in pr, it cannot be returned to the
- basering. If s is given, the user has access to it in pr via s.
- The basering may be a quotient ring.
-
-*Example:*
- LIB "algebra.lib";
- ring r = 0,(a,b,c),ds;
- ring s = 0,(x,y,z,u,v,w),dp;
- ideal I = x-w,u2w+1,yz-v;
- map phi = r,I; // a map from r to s:
- alg_kernel(phi,r); // a,b,c ---> x-w,u2w+1,yz-v
- ==> 0
- ring S = 0,(a,b,c),ds;
- ring R = 0,(x,y,z),dp;
- qring Q = std(x-y);
- ideal i = x, y, x2-y3;
- map phi = S,i; // a map to a quotient ring
- alg_kernel(phi,S,"ker",3); // uses algorithm 3
- ==> a-b,b^3-b^2+c
- setring S; // you have access to kernel in preimage
- ker;
- ==> ker[1]=a-b
- ==> ker[2]=c-b2+b3
-
-
-File: sing.info, Node: is_injective, Next: is_surjective, Prev: alg_kernel,
Up: algebra_lib
-
-D.4.1.6 is_injective
-....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- is_injective(phi,pr[,c,s]); phi map, pr preimage ring, c int, s
- string
-
-*Return:*
-
- - 1 (type int) if phi is injective, 0 if not (if s is not given).
- - If s is given, return a list l of size 2, l[1] int, l[2] ring:
- l[1] is 1 if phi is injective, 0 if not
- l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if
the
- basering has n variables and the map m components, it contains
the
- ideal 'ker', depending only on the y(i), the kernel of the
given map
-
-*Note:*
- Three different algorithms are used depending on c = 1,2,3. If c
- is not given or c=0, a heuristically best method is chosen. The
- basering may be a quotient ring. However, if the preimage ring is a
- quotient ring, say pr = P/I, consider phi as a map from P and then
- the algorithm returns 1 if the kernel of phi is 0 mod I. To access
- to the ring l[2] and see ker you must give the ring a name, e.g.
- def S=l[2]; setring S; ker;
-
-*Display:*
- The above comment is displayed if printlevel >= 0 (default).
-
-*Example:*
- LIB "algebra.lib";
- int p = printlevel;
- ring r = 0,(a,b,c),ds;
- ring s = 0,(x,y,z,u,v,w),dp;
- ideal I = x-w,u2w+1,yz-v;
- map phi = r,I; // a map from r to s:
- is_injective(phi,r); // a,b,c ---> x-w,u2w+1,yz-v
- ==> 1
- ring R = 0,(x,y,z),dp;
- ideal i = x, y, x2-y3;
- map phi = R,i; // a map from R to itself, z --> x2-y3
- list l = is_injective(phi,R,"");
- ==>
- ==> // The 2nd element of the list is a ring with variables x(1),...,x(n),
- ==> // y(1),...,y(m) if the basering has n variables and the map is
- ==> // F[1],...,F[m].
- ==> // It contains the ideal ker, the kernel of the given map y(i) -->
F[i].
- ==> // To access to the ring and see ker you must give the ring a name,
- ==> // e.g.:
- ==> def S = l[2]; setring S; ker;
- ==>
- l[1];
- ==> 0
- def S = l[2]; setring S;
- ker;
- ==> ker[1]=y(2)^3-y(1)^2+y(3)
-
-
-File: sing.info, Node: is_surjective, Next: is_bijective, Prev:
is_injective, Up: algebra_lib
-
-D.4.1.7 is_surjective
-.....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- is_surjective(phi); phi map to basering, or ideal defining it
-
-*Return:*
- an integer, 1 if phi is surjective, 0 if not
-
-*Note:*
- The algorithm returns 1 iff all the variables of the basering are
- contained in the polynomial subalgebra generated by the polynomials
- defining phi. Hence, if the basering has local or mixed ordering or
- if the preimage ring is a quotient ring (in which case the map may
- not be well defined) then the return value 1 means
- "surjectivity" in this sense.
-
-*Example:*
- LIB "algebra.lib";
- ring R = 0,(x,y,z),dp;
- ideal i = x, y, x2-y3;
- map phi = R,i; // a map from R to itself, z->x2-y3
- is_surjective(phi);
- ==> 0
- qring Q = std(ideal(z-x37));
- map psi = R, x,y,x2-y3; // the same map to the quotient ring
- is_surjective(psi);
- ==> 1
- ring S = 0,(a,b,c),dp;
- map psi = R,ideal(a,a+b,c-a2+b3); // a map from R to S,
- is_surjective(psi); // x->a, y->a+b, z->c-a2+b3
- ==> 1
-
-
-File: sing.info, Node: is_bijective, Next: noetherNormal, Prev:
is_surjective, Up: algebra_lib
-
-D.4.1.8 is_bijective
-....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- is_bijective(phi,pr); phi map to basering, pr preimage ring
-
-*Return:*
- an integer, 1 if phi is bijective, 0 if not
-
-*Note:*
- The algorithm checks first injectivity and then surjectivity To
- interpret this for local/mixed orderings, or for quotient rings
- type help is_surjective; and help is_injective;
-
-*Display:*
- A comment if printlevel >= voice-1 (default)
-
-*Example:*
- LIB "algebra.lib";
- int p = printlevel; printlevel = 1;
- ring R = 0,(x,y,z),dp;
- ideal i = x, y, x2-y3;
- map phi = R,i; // a map from R to itself, z->x2-y3
- is_bijective(phi,R);
- ==> // map not injective
- ==> 0
- qring Q = std(z-x2+y3);
- is_bijective(ideal(x,y,x2-y3),Q);
- ==> 1
- ring S = 0,(a,b,c,d),dp;
- map psi = R,ideal(a,a+b,c-a2+b3,0); // a map from R to S,
- is_bijective(psi,R); // x->a, y->a+b, z->c-a2+b3
- ==> // map injective, but not surjective
- ==> 0
- qring T = std(d,c-a2+b3);
- ==> // ** _ is no standardbasis
- map chi = Q,a,b,a2-b3; // amap between two quotient rings
- is_bijective(chi,Q);
- ==> 1
- printlevel = p;
-
-
-File: sing.info, Node: noetherNormal, Next: mapIsFinite, Prev:
is_bijective, Up: algebra_lib
-
-D.4.1.9 noetherNormal
-.....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- noetherNormal(id[,p]); id ideal, p integer
-
-*Return:*
-
- a list l two ideals, say I,J:
- - I is generated by a subset of the variables with size(I) =
dim(id)
- - J defines a map (coordinate change in the basering), such that:
- if we define map phi=basering,J;
- then k[var(1),...,var(n)]/phi(id) is finite over k[I].
- If p is given, 0<=p<=100, a sparse coordinate change with p
percent
- of the matrix entries being 0 (default: p=0 i.e. dense)
-
-*Note:*
- Designed for characteristic 0.It works also in char k > 0 if it
- terminates,but may result in an infinite loop in small
- characteristic
-
-*Example:*
- LIB "algebra.lib";
- ring r=0,(x,y,z),dp;
- ideal i= xy,xz;
- noetherNormal(i);
- ==> [1]:
- ==> _[1]=x
- ==> _[2]=2x+y
- ==> _[3]=3x+4y+z
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=z
-
-
-File: sing.info, Node: mapIsFinite, Next: finitenessTest, Prev:
noetherNormal, Up: algebra_lib
-
-D.4.1.10 mapIsFinite
-....................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- mapIsFinite(phi,R[,J]); R a ring, phi: R --> basering a map J an
- ideal in the basering, J = 0 if not given
-
-*Return:*
- 1 if R --> basering/J is finite and 0 else
-
-*Example:*
- LIB "algebra.lib";
- ring r = 0,(a,b,c),dp;
- ring s = 0,(x,y,z),dp;
- ideal i= xy;
- map phi= r,(xy)^3+x2+z,y2-1,z3;
- mapIsFinite(phi,r,i);
- ==> 1
-
-
-File: sing.info, Node: finitenessTest, Prev: mapIsFinite, Up: algebra_lib
-
-D.4.1.11 finitenessTest
-.......................
-
-Procedure from library `algebra.lib' (*note algebra_lib::).
-
-*Usage:*
- finitenessTest(J[,v]); J ideal, v intvec (say v1,...,vr with vi>0)
-
-*Return:*
-
- a list l with l[1] integer, l[2], l[3], l[4] ideals
- - l[1] = 1 if var(v1),...,var(vr) are in l[2] and 0 else
- - l[2] (resp. l[3]) contains those variables which occur,
- (resp. occur not) as pure power in the leading term of one of
the
- generators of J,
- - l[4] contains those J[i] for which the leading term is a pure
power
- of a variable (which is then in l[2])
- (default: v = [1,2,..,nvars(basering)])
-
-*Theory:*
- If J is a standard basis of an ideal generated by x_1 - f_1(y),...,
- x_n - f_n with y_j ordered lexicographically and y_j >> x_i, then,
- if y_i appears as pure power in the leading term of J[k]. J[k]
- defines an integral relation for y_i over the y_(i+1),... and the
- f's. Moreover, in this situation, if l[2] = y_1,...,y_r, then
- K[y_1,...y_r] is finite over K[f_1..f_n]. If J contains furthermore
- polynomials h_j(y), then K[y_1,...y_z]/<h_j> is finite over
- K[f_1..f_n].
-
-*Example:*
- LIB "algebra.lib";
- ring s = 0,(x,y,z,a,b,c),(lp(3),dp);
- ideal i= a -(xy)^3+x2-z, b -y2-1, c -z3;
- ideal j = a -(xy)^3+x2-z, b -y2-1, c -z3, xy;
- finitenessTest(std(i),1..3);
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=z
- ==> [3]:
- ==> _[1]=x
- ==> _[2]=a
- ==> _[3]=b
- ==> _[4]=c
- ==> [4]:
- ==> _[1]=z3-c
- ==> _[2]=y2-b+1
- finitenessTest(std(j),1..3);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> _[1]=x
- ==> _[2]=y
- ==> _[3]=z
- ==> [3]:
- ==> _[1]=a
- ==> _[2]=b
- ==> _[3]=c
- ==> [4]:
- ==> _[1]=z3-c
- ==> _[2]=y2-b+1
- ==> _[3]=x2-z+a
-
-
-File: sing.info, Node: elim_lib, Next: homolog_lib, Prev: algebra_lib, Up:
Commutative algebra
-
-D.4.2 elim_lib
---------------
-
-*Library:*
- elim.lib
-
-*Purpose:*
- Elimination, Saturation and Blowing up
-
-*Procedures:*
-
-* Menu:
-
-* blowup0:: create presentation of blownup ring of ideal j
-* elim:: variable n..m eliminated from id (ideal/module)
-* elim1:: p=product of vars to be eliminated from id
-* nselect:: select generators not containing n-th [..m-th] variable
-* sat:: saturated quotient of ideal/module id by ideal j
-* select:: select generators containing all variables n...m
-* select1:: select generators containing one variable n...m
-
-
-File: sing.info, Node: blowup0, Next: elim, Up: elim_lib
-
-D.4.2.1 blowup0
-...............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- blowup0(j[,s1,s2]); j ideal, s1,s2 nonempty strings
-
-*Create:*
- Create a presentation of the blowup ring of j
-
-*Return:*
- no return value
-
-*Note:*
- s1 and s2 are used to give names to the blownup ring and the
- blownup ideal (default: s1="j", s2="A")
- Assume R = char,x(1..n),ord is the basering of j, and s1="j",
- s2="A" then the procedure creates a new ring with name Bl_jR
- (equal to R[A,B,...])
- Bl_jR = char,(A,B,...,x(1..n)),(dp(k),ord)
- with k=ncols(j) new variables A,B,... and ordering wp(d1..dk) if j
- is homogeneous with deg(j[i])=di resp. dp otherwise for these vars.
- If k>26 or size(s2)>1, say s2="A()", the new vars are
- A(1),...,A(k). Let j_ be the kernel of the ring map Bl_jR -> R
- defined by A(i)->j[i], x(i)->x(i), then the quotient ring Bl_jR/j_
- is the blowup ring of j in R (being isomorphic to R+j+j^2+...).
- Moreover the procedure creates a std basis of j_ with name j_ in
- Bl_jR.
- This proc uses 'execute' or calls a procedure using 'execute'.
-
-*Display:*
- printlevel >=0: explain created objects (default)
-
-*Example:*
- LIB "elim.lib";
- ring R=0,(x,y),dp;
- poly f=y2+x3; ideal j=jacob(f);
- blowup0(j);
- ==>
- ==> // The proc created the ring Bl_jR (equal to R[A,B])
- ==> // it contains the ideal j_ , such that
- ==> // Bl_jR/j_ is the blowup ring
- ==> // show(Bl_jR); shows this ring.
- ==> // Make Bl_jR the basering and see j_ by typing:
- ==> setring Bl_jR;
- ==> j_;
- show(Bl_jR);
- ==> // ring: (0),(A,B,x,y),(wp(2,1),dp(2),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // j_ [0] ideal, 1 generator(s)
- setring Bl_jR;
- j_;"";
- ==> j_[1]=2Ay-3Bx2
- ==>
- ring r=32003,(x,y,z),ds;
- blowup0(maxideal(1),"m","T()");
- ==>
- ==> // The proc created the ring Bl_mr (equal to r[T(1..3)])
- ==> // it contains the ideal m_ , such that
- ==> // Bl_mr/m_ is the blowup ring
- ==> // show(Bl_mr); shows this ring.
- ==> // Make Bl_mr the basering and see m_ by typing:
- ==> setring Bl_mr;
- ==> m_;
- show(Bl_mr);
- ==> // ring: (32003),(T(1),T(2),T(3),x,y,z),(wp(1,1,1),ds(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // m_ [0] ideal, 3 generator(s)
- setring Bl_mr;
- m_;
- ==> m_[1]=T(1)y-T(2)x
- ==> m_[2]=T(1)z-T(3)x
- ==> m_[3]=T(2)z-T(3)y
- kill Bl_jR, Bl_mr;
-
-
-File: sing.info, Node: elim, Next: elim1, Prev: blowup0, Up: elim_lib
-
-D.4.2.2 elim
-............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- elim(id,n,m); id ideal/module, n,m integers
-
-*Returns:*
- ideal/module obtained from id by eliminating variables n..m
-
-*Note:*
- no special monomial ordering is required, result is a SB with
- respect to ordering dp (resp. ls) if the first var not to be
- eliminated belongs to a -p (resp. -s) block ordering
- This proc uses 'execute' or calls a procedure using 'execute'.
-
-*Example:*
- LIB "elim.lib";
- ring r=0,(x,y,u,v,w),dp;
- ideal i=x-u,y-u2,w-u3,v-x+y3;
- elim(i,3,4);
- ==> _[1]=y2-xw
- ==> _[2]=xy-w
- ==> _[3]=x2-y
- module m=i*gen(1)+i*gen(2);
- m=elim(m,3,4);show(m);
- ==> // module, 6 generator(s)
- ==> [y2-xw]
- ==> [0,y2-xw]
- ==> [xy-w]
- ==> [0,xy-w]
- ==> [x2-y]
- ==> [0,x2-y]
-
-* Menu:
-
-See also:
-* elim1::
-* eliminate::
-
-*See also:* *note elim1::; *note eliminate::.
-
-
-File: sing.info, Node: elim1, Next: nselect, Prev: elim, Up: elim_lib
-
-D.4.2.3 elim1
-.............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- elim1(id,p); id ideal/module, p product of vars to be eliminated
-
-*Return:*
- ideal/module obtained from id by eliminating vars occurring in poly
-
-*Note:*
- no special monomial ordering is required, result is a SB with
- respect to ordering dp (resp. ls) if the first var not to be
- eliminated belongs to a -p (resp. -s) block ordering
- This proc uses 'execute' or calls a procedure using 'execute'.
-
-*Example:*
- LIB "elim.lib";
- ring r=0,(x,y,t,s,z),dp;
- ideal i=x-t,y-t2,z-t3,s-x+y3;
- elim1(i,ts);
- ==> _[1]=y2-xz
- ==> _[2]=xy-z
- ==> _[3]=x2-y
- module m=i*gen(1)+i*gen(2);
- m=elim1(m,st); show(m);
- ==> // module, 6 generator(s)
- ==> [y2-xz]
- ==> [0,y2-xz]
- ==> [xy-z]
- ==> [0,xy-z]
- ==> [x2-y]
- ==> [0,x2-y]
-
-* Menu:
-
-See also:
-* elim::
-* eliminate::
-
-*See also:* *note elim::; *note eliminate::.
-
-
-File: sing.info, Node: nselect, Next: sat, Prev: elim1, Up: elim_lib
-
-D.4.2.4 nselect
-...............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- nselect(id,n[,m]); id a module or ideal, n, m integers
-
-*Return:*
- generators of id not containing the variable n [up to m]
-
-*Example:*
- LIB "elim.lib";
- ring r=0,(x,y,t,s,z),(c,dp);
- ideal i=x-y,y-z2,z-t3,s-x+y3;
- nselect(i,3);
- ==> _[1]=x-y
- ==> _[2]=-z2+y
- ==> _[3]=y3-x+s
- module m=i*(gen(1)+gen(2));
- show(m);
- ==> // module, 4 generator(s)
- ==> [x-y,x-y]
- ==> [-z2+y,-z2+y]
- ==> [-t3+z,-t3+z]
- ==> [y3-x+s,y3-x+s]
- show(nselect(m,3,4));
- ==> // module, 2 generator(s)
- ==> [x-y,x-y]
- ==> [-z2+y,-z2+y]
-
-* Menu:
-
-See also:
-* select::
-* select1::
-
-*See also:* *note select::; *note select1::.
-
-
-File: sing.info, Node: sat, Next: select, Prev: nselect, Up: elim_lib
-
-D.4.2.5 sat
-...........
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- sat(id,j); id=ideal/module, j=ideal
-
-*Return:*
- list of an ideal/module [1] and an integer [2]:
- [1] = saturation of id with respect to j (= union_(k=1...) of
- id:j^k) [2] = saturation exponent (= min( k | id:j^k = id:j^(k+1)
- ))
-
-*Note:*
- [1] is a standard basis in the basering
-
-*Display:*
- saturation exponent during computation if printlevel >=1
-
-*Example:*
- LIB "elim.lib";
- int p = printlevel;
- ring r = 2,(x,y,z),dp;
- poly F = x5+y5+(x-y)^2*xyz;
- ideal j = jacob(F);
- sat(j,maxideal(1));
- ==> [1]:
- ==> _[1]=x3+x2y+xy2+y3
- ==> _[2]=y4+x2yz+y3z
- ==> _[3]=x2y2+x2yz+y3z
- ==> [2]:
- ==> 4
- printlevel = 2;
- sat(j,maxideal(2));
- ==> // compute quotient 1
- ==> // compute quotient 2
- ==> // compute quotient 3
- ==> // saturation becomes stable after 2 iteration(s)
- ==>
- ==> [1]:
- ==> _[1]=x3+x2y+xy2+y3
- ==> _[2]=y4+x2yz+y3z
- ==> _[3]=x2y2+x2yz+y3z
- ==> [2]:
- ==> 2
- printlevel = p;
-
-
-File: sing.info, Node: select, Next: select1, Prev: sat, Up: elim_lib
-
-D.4.2.6 select
-..............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- select(id,n[,m]); id ideal/module, n, m integers
-
-*Return:*
- generators of id containing the variable n [all variables up to m]
-
-*Note:*
- use 'select1' for selecting generators containing at least one of
- the variables between n and m
-
-*Example:*
- LIB "elim.lib";
- ring r=0,(x,y,t,s,z),(c,dp);
- ideal i=x-y,y-z2,z-t3,s-x+y3;
- ideal j=select(i,1);
- j;
- ==> j[1]=x-y
- ==> j[2]=y3-x+s
- module m=i*(gen(1)+gen(2));
- m;
- ==> m[1]=[x-y,x-y]
- ==> m[2]=[-z2+y,-z2+y]
- ==> m[3]=[-t3+z,-t3+z]
- ==> m[4]=[y3-x+s,y3-x+s]
- select(m,1,2);
- ==> _[1]=[x-y,x-y]
- ==> _[2]=[y3-x+s,y3-x+s]
-
-* Menu:
-
-See also:
-* nselect::
-* select1::
-
-*See also:* *note nselect::; *note select1::.
-
-
-File: sing.info, Node: select1, Prev: select, Up: elim_lib
-
-D.4.2.7 select1
-...............
-
-Procedure from library `elim.lib' (*note elim_lib::).
-
-*Usage:*
- select1(id,n[,m]); id ideal/module, n, m integers
-
-*Return:*
- generators of id containing the variable n
- [at least one of the variables up to m]
-
-*Note:*
- use 'select' for selecting generators containing all the variables
- between n and m
-
-*Example:*
- LIB "elim.lib";
- ring r=0,(x,y,t,s,z),(c,dp);
- ideal i=x-y,y-z2,z-t3,s-x+y3;
- ideal j=select1(i,1);
- j;
- ==> j[1]=x-y
- ==> j[2]=y3-x+s
- module m=i*(gen(1)+gen(2));
- m;
- ==> m[1]=[x-y,x-y]
- ==> m[2]=[-z2+y,-z2+y]
- ==> m[3]=[-t3+z,-t3+z]
- ==> m[4]=[y3-x+s,y3-x+s]
- select1(m,1,2);
- ==> _[1]=[x-y,x-y]
- ==> _[2]=[-z2+y,-z2+y]
- ==> _[3]=[y3-x+s,y3-x+s]
-
-* Menu:
-
-See also:
-* nselect::
-* select::
-
-*See also:* *note nselect::; *note select::.
-
-
-File: sing.info, Node: homolog_lib, Next: mprimdec_lib, Prev: elim_lib,
Up: Commutative algebra
-
-D.4.3 homolog_lib
------------------
-
-*Library:*
- homolog.lib
-
-*Purpose:*
- Procedures for Homological Algebra
-
-*Authors:*
- Gert-Martin Greuel, address@hidden,
- Bernd Martin, address@hidden
- Christoph Lossen, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* cup:: cup: Ext^1(M',M') x Ext^1() -> Ext^2()
-* cupproduct:: cup: Ext^p(M',N') x Ext^q(N',P') -> Ext^p+q(M',P')
-* depth:: depth(I,M'), I ideal, M module, M'=coker(M)
-* Ext_R:: Ext^k(M',R), M module, R basering, M'=coker(M)
-* Ext:: Ext^k(M',N'), M,N modules, M'=coker(M), N'=coker(N)
-* fitting:: n-th Fitting ideal of M'=coker(M), M module, n int
-* flatteningStrat:: Flattening stratification of M'=coker(M), M module
-* Hom:: Hom(M',N'), M,N modules, M'=coker(M), N'=coker(N)
-* homology:: ker(B)/im(A), homology of complex R^k-A->M'-B->N'
-* isCM:: test if coker(M) is Cohen-Macaulay, M module
-* isFlat:: test if coker(M) is flat, M module
-* isLocallyFree:: test if coker(M) is locally free of constant rank r
-* isReg:: test if I is coker(M)-sequence, I ideal, M module
-* kernel:: ker(M'-A->N') M,N modules, A matrix
-* kohom:: Hom(R^k,A), A matrix over basering R
-* kontrahom:: Hom(A,R^k), A matrix over basering R
-* KoszulHomology:: n-th Koszul homology H_n(I,coker(M)), I=ideal
-* tensorMod:: Tensor product of modules M'=coker(M), N'=coker(N)
-* Tor:: Tor_k(M',N'), M,N modules, M'=coker(M), N'=coker(N)
-
-
-File: sing.info, Node: cup, Next: cupproduct, Up: homolog_lib
-
-D.4.3.1 cup
-...........
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- cup(M,[,any,any]); M=module
-
-*Compute:*
- cup-product Ext^1(M',M') x Ext^1(M',M') --> Ext^2(M',M'), where
- M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M))).
- If called with >= 2 arguments: compute symmetrized cup-product
-
-*Assume:*
- all Ext's are finite dimensional
-
-*Return:*
- - if called with 1 argument: matrix, the columns of the output
- present the coordinates of b_i&b_j with respect to a kbase of
- Ext^2, where b_1,b_2,... is a kbase of Ext^1 and & denotes cup
-product;
- - if called with 2 arguments: matrix, the columns of the output
- present the coordinates of (1/2)(b_i&b_j + b_j&b_i) with respect to
- a kbase of Ext^2;
- - if called with 3 arguments: list,
-
- L[1] = matrix see above (symmetric case, for >=2 arguments)
- L[2] = matrix of kbase of Ext^1
- L[3] = matrix of kbase of Ext^2
-
-*Note:*
- printlevel >=1; shows what is going on.
- printlevel >=2; shows result in another representation.
- For computing cupproduct of M itself, apply proc to syz(M)!
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- ring rr = 32003,(x,y,z),(dp,C);
- ideal I = x4+y3+z2;
- qring o = std(I);
- module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2];
- print(cup(M));
- ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
- ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
- print(cup(M,1));
- ==> 0,1,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,1,0,0,0,0,0,0
- // 2nd EXAMPLE (shows what is going on)
- printlevel = 3;
- ring r = 0,(x,y),(dp,C);
- ideal i = x2-y3;
- qring q = std(i);
- module M = [-x,y],[-y2,x];
- print(cup(M));
- ==> // vdim (Ext^1) = 2
- ==> // kbase of Ext^1(M,M)
- ==> // - the columns present the kbase elements in Hom(F(1),F(0))
- ==> // - F(*) a free resolution of M
- ==> -1,0,
- ==> 0, y,
- ==> 0, 1,
- ==> -1,0
- ==> // lift kbase of Ext^1:
- ==> // - the columns present liftings of kbase elements into
Hom(F(2),F(1))
- ==> // - F(*) a free resolution of M
- ==> 1,0,
- ==> 0,y,
- ==> 0,1,
- ==> 1,0
- ==> // vdim (Ext^2) = 2
- ==> // kbase of Ext^2(M,M)
- ==> // - the columns present the kbase elements in Hom(F(2),F(0))
- ==> // - F(*) is a a free resolution of M
- ==> -1,0,
- ==> 0, y,
- ==> 0, 1,
- ==> -1,0
- ==> // matrix of cup-products (in Ext^2)
- ==> 0,-1,0, 0,y,
- ==> 0,0, -y,y,0,
- ==> 0,0, -1,1,0,
- ==> 0,-1,0, 0,y
- ==> ////// end level 2 //////
- ==> // the associated matrices of the bilinear mapping 'cup'
- ==> // corresponding to the kbase elements of Ext^2(M,M) are shown,
- ==> // i.e. the rows of the final matrix are written as matrix of
- ==> // a bilinear form on Ext^1 x Ext^1
- ==> //-----component 1:
- ==> 0,1,
- ==> 0,0
- ==> //-----component 2:
- ==> 0, 0,
- ==> -1,1
- ==> ////// end level 3 //////
- ==> 0,1,0, 0,0,
- ==> 0,0,-1,1,0
- printlevel = p;
-
-
-File: sing.info, Node: cupproduct, Next: depth, Prev: cup, Up: homolog_lib
-
-D.4.3.2 cupproduct
-..................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- cupproduct(M,N,P,p,q[,any]); M,N,P modules, p,q integers
-
-*Compute:*
- cup-product Ext^p(M',N') x Ext^q(N',P') --> Ext^p+q(M',P'), where
- M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M)))
-
-*Assume:*
- all Ext's are of finite dimension
-
-*Return:*
- - if called with 5 arguments: matrix of the associated linear map
- Ext^p (tensor) Ext^q -> Ext^p+q, i.e. the columns of <matrix>
- present the coordinates of the cup products (b_i & c_j) with
- respect to a kbase of Ext^p+q (b_i resp. c_j are the choosen bases
- of Ext^p, resp. Ext^q).
- - if called with 6 arguments: list L,
-
- L[1] = matrix (see above)
- L[2] = matrix of kbase of Ext^p(M',N')
- L[3] = matrix of kbase of Ext^q(N',P')
- L[4] = matrix of kbase of Ext^p+q(N',P')
-
-*Note:*
- printlevel >=1; shows what is going on.
- printlevel >=2; shows the result in another representation.
- For computing the cupproduct of M,N itself, apply proc to syz(M),
- syz(N)!
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- ring rr = 32003,(x,y,z),(dp,C);
- ideal I = x4+y3+z2;
- qring o = std(I);
- module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2];
- print(cupproduct(M,M,M,1,3));
- ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
- ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
- printlevel = 3;
- list l = (cupproduct(M,M,M,1,3,"any"));
- ==> // vdim Ext(M,N) = 4
- ==> // kbase of Ext^p(M,N)
- ==> // - the columns present the kbase elements in Hom(F(p),G(0))
- ==> // - F(*),G(*) are free resolutions of M and N
- ==> 0, 0, 1, 0,
- ==> 0, y, 0, 0,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, y,
- ==> 0, -1,0, 0,
- ==> 0, 0, x2,0,
- ==> 0, 0, 0, -x2,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, -1,
- ==> -1,0, 0, 0,
- ==> 0, 1, 0, 0,
- ==> 0, 0, 1, 0,
- ==> -1,0, 0, 0,
- ==> 0, 0, 0, x2y,
- ==> 0, 0, x2,0,
- ==> 0, -y,0, 0
- ==> // vdim Ext(N,P) = 4
- ==> // kbase of Ext(N,P):
- ==> 0, 0, 1, 0,
- ==> 0, 0, 0, y,
- ==> 1, 0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, -1,0, 0,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, -x2,
- ==> 0, 0, -x2,0,
- ==> 0, 0, 0, -1,
- ==> 0, 0, 1, 0,
- ==> 0, 1, 0, 0,
- ==> 1, 0, 0, 0,
- ==> -1,0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, 0, x2, 0,
- ==> 0, 0, 0, -x2y
- ==> // kbase of Ext^q(N,P)
- ==> // - the columns present the kbase elements in Hom(G(q),H(0))
- ==> // - G(*),H(*) are free resolutions of N and P
- ==> 0, 0, 1, 0,
- ==> 0, 0, 0, y,
- ==> 1, 0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, -1,0, 0,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, -x2,
- ==> 0, 0, -x2,0,
- ==> 0, 0, 0, -1,
- ==> 0, 0, 1, 0,
- ==> 0, 1, 0, 0,
- ==> 1, 0, 0, 0,
- ==> -1,0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, 0, x2, 0,
- ==> 0, 0, 0, -x2y
- ==> // vdim Ext(M,P) = 4
- ==> // kbase of Ext^p+q(M,P)
- ==> // - the columns present the kbase elements in Hom(F(p+q),H(0))
- ==> // - F(*),H(*) are free resolutions of M and P
- ==> 0, 0, 1, 0,
- ==> 0, 0, 0, y,
- ==> 1, 0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, -1,0, 0,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, -x2,
- ==> 0, 0, -x2,0,
- ==> 0, 0, 0, -1,
- ==> 0, 0, 1, 0,
- ==> 0, 1, 0, 0,
- ==> 1, 0, 0, 0,
- ==> -1,0, 0, 0,
- ==> 0, -y,0, 0,
- ==> 0, 0, x2, 0,
- ==> 0, 0, 0, -x2y
- ==> // lifting of kbase of Ext^p(M,N)
- ==> // - the columns present liftings of kbase elements in
Hom(F(p+q),G(q))
- ==> 1,0, 0, 0,
- ==> 0,-y,0, 0,
- ==> 0,0, x2,0,
- ==> 0,0, 0, x2y,
- ==> 0,1, 0, 0,
- ==> 1,0, 0, 0,
- ==> 0,0, 0, -x2,
- ==> 0,0, x2,0,
- ==> 0,0, -1,0,
- ==> 0,0, 0, y,
- ==> 1,0, 0, 0,
- ==> 0,y, 0, 0,
- ==> 0,0, 0, -1,
- ==> 0,0, -1,0,
- ==> 0,-1,0, 0,
- ==> 1,0, 0, 0
- ==> // matrix of cup-products (in Ext^p+q)
- ==> 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0,
- ==> 0,0, 0, 0, y, 0, 0, y, 0, 0, -y, 0, 0, y, 0, 0, 0,
- ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
- ==> 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0,
- ==> 0,0, 1, 0, 0, -1,0, 0, 0, 0, 0, 0, x2, 0, 0, x2, 0,
- ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
- ==> 0,0, 0, 0, -x2, 0, 0, -x2, 0, 0, x2, 0, 0, -x2, 0, 0, 0,
- ==> 0,0, 0, x2, 0, 0, 0, 0, -x2y,-x2,0, 0, 0, 0, -x2y,0, 0,
- ==> 0,0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0,
- ==> 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0,
- ==> 0,0, -1,0, 0, 1, 0, 0, 0, 0, 0, 0, -x2,0, 0, -x2,0,
- ==> 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y,
- ==> 0,-1,0, 0, 0, 0, -y,0, 0, 0, 0, -x2,0, 0, 0, 0, x2y,
- ==> 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0,
- ==> 0,0, 0, -x2,0, 0, 0, 0, x2y, x2, 0, 0, 0, 0, x2y, 0, 0,
- ==> 0,0, 0, 0, -x2y,0, 0, -x2y,0, 0, x2y,0, 0, -x2y,0, 0, 0
- ==> ////// end level 2 //////
- ==> // the associated matrices of the bilinear mapping 'cup'
- ==> // corresponding to the kbase elements of Ext^p+q(M,P) are shown,
- ==> // i.e. the rows of the final matrix are written as matrix of
- ==> // a bilinear form on Ext^p x Ext^q
- ==> //----component 1:
- ==> 0,1,0,0,
- ==> 0,0,0,0,
- ==> 0,0,0,0,
- ==> 0,0,0,0
- ==> //----component 2:
- ==> 0,0,-1,0,
- ==> 0,1,0, 0,
- ==> 0,0,0, 0,
- ==> 0,0,0, 0
- ==> //----component 3:
- ==> 0,0,0,-1,
- ==> 0,0,0,0,
- ==> 0,1,0,0,
- ==> 0,0,0,0
- ==> //----component 4:
- ==> 0,0,0, 0,
- ==> 1,0,0, 1,
- ==> 0,0,-1,0,
- ==> 0,1,0, 0
- ==> ////// end level 3 //////
- show(l[1]);show(l[2]);
- ==> // matrix, 4x17
- ==> 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0,
- ==> 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0,
- ==> 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0
- ==> // matrix, 16x4
- ==> 0, 0, 1, 0,
- ==> 0, y, 0, 0,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, y,
- ==> 0, -1,0, 0,
- ==> 0, 0, x2,0,
- ==> 0, 0, 0, -x2,
- ==> 1, 0, 0, 0,
- ==> 0, 0, 0, -1,
- ==> -1,0, 0, 0,
- ==> 0, 1, 0, 0,
- ==> 0, 0, 1, 0,
- ==> -1,0, 0, 0,
- ==> 0, 0, 0, x2y,
- ==> 0, 0, x2,0,
- ==> 0, -y,0, 0
- printlevel = p;
-
-
-File: sing.info, Node: depth, Next: Ext_R, Prev: cupproduct, Up:
homolog_lib
-
-D.4.3.3 depth
-.............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- depth(M,[I]); M module, I ideal
-
-*Return:*
- int,
- - if called with 1 argument: the depth of M'=coker(M) w.r.t. the
- maxideal in the basering (which is then assumed to be local)
- - if called with 2 arguments: the depth of M'=coker(M) w.r.t. the
- ideal I.
-
-*Note:*
- procedure makes use of KoszulHomology.
-
-*Example:*
- LIB "homolog.lib";
- ring R=0,(x,y,z),dp;
- ideal I=x2,xy,yz;
- module M=0;
- depth(M,I); // depth(<x2,xy,yz>,Q[x,y,z])
- ==> 2
- ring r=0,(x,y,z),ds; // local ring
- matrix M[2][2]=x,xy,1+yz,0;
- print(M);
- ==> x, xy,
- ==> 1+yz,0
- depth(M); // depth(maxideal,coker(M))
- ==> 2
- ideal I=x;
- depth(M,I); // depth(<x>,coker(M))
- ==> 0
- I=x+z;
- depth(M,I); // depth(<x+z>,coker(M))
- ==> 1
-
-
-File: sing.info, Node: Ext_R, Next: Ext, Prev: depth, Up: homolog_lib
-
-D.4.3.4 Ext_R
-.............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- Ext_R(v,M[,p]); v int resp. intvec , M module, p int
-
-*Compute:*
- A presentation of Ext^k(M',R); for k=v[1],v[2],..., M'=coker(M).
- Let
-
- 0 <-- M' <-- F0 <-M-- F1 <-- F2 <-- ...
-
- be a free resolution of M'. If
-
- 0 --> F0* -A1-> F1* -A2-> F2* -A3-> ...
-
- is the dual sequence, Fi*=Hom(Fi,R), then Ext^k = ker(Ak+1)/im(Ak)
- is presented as in the following exact sequences:
-
- R^p --syz(Ak+1)-> Fk* ---Ak+1----> Fk+1* ,
- R^q ----Ext^k---> R^p --syz(Ak+1)-> Fk*/im(Ak).
-
- Hence, Ext^k=modulo(syz(Ak+1),Ak) presents Ext^k(M',R).
-
-*Return:*
- - module Ext, a presentation of Ext^k(M',R) if v is of type int
- - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.
- - In case of a third argument of type int return a list l:
-
- l[1] = module Ext^k resp. list of Ext^k
- l[2] = SB of Ext^k resp. list of SB of Ext^k
- l[3] = matrix resp. list of matrices, each representing a kbase of
Ext^k
- (if finite dimensional)
-
-*Display:*
- printlevel >=0: (affine) dimension of Ext^k for each k (default)
- printlevel >=1: Ak, Ak+1 and kbase of Ext^k in Fk*
-
-*Note:*
- In order to compute Ext^k(M,R) use the command Ext_R(k,syz(M)); or
- the 2 commands: list L=mres(M,2); Ext_R(k,L[2]);
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 0,(x,y,z),dp;
- ideal i = x2y,y2z,z3x;
- module E = Ext_R(1,i); //computes Ext^1(r/i,r)
- ==> // Computing Ext^1:
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
- ==> // then F1*-->F2* is given by:
- ==> x2, -yz,0,
- ==> 0, z3, -xy,
- ==> xz2,0, -y2
- ==> // and F0*-->F1* is given by:
- ==> y2z,
- ==> x2y,
- ==> xz3
- ==>
- ==> // dimension of Ext^1: -1
- ==>
- is_zero(E);
- ==> 1
- qring R = std(x2+yz);
- intvec v = 0,2;
- printlevel = 2; //shows what is going on
- ideal i = x,y,z; //computes Ext^i(r/(x,y,z),r/(x2+yz)), i=0,2
- list L = Ext_R(v,i,1); //over the qring R=r/(x2+yz), std and kbase
- ==> // Computing Ext^0:
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
- ==> // then F0*-->F1* is given by:
- ==> z,
- ==> y,
- ==> x
- ==> // and F-1*-->F0* is given by:
- ==> 0
- ==>
- ==> // dimension of Ext^0: -1
- ==>
- ==> // columns of matrix are kbase of Ext^0 in F0*:
- ==> 0
- ==>
- ==> // Computing Ext^2:
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M,
- ==> // then F2*-->F3* is given by:
- ==> x,-y,z, 0,
- ==> z,x, 0, z,
- ==> 0,0, x, y,
- ==> 0,0, -z,x
- ==> // and F1*-->F2* is given by:
- ==> y,-z,0,
- ==> x,0, -z,
- ==> 0,x, -y,
- ==> 0,z, x
- ==>
- ==> // dimension of Ext^2: 0
- ==> // vdim of Ext^2: 1
- ==>
- ==> // columns of matrix are kbase of Ext^2 in F2*:
- ==> x,
- ==> -z,
- ==> 0,
- ==> 0
- ==>
- printlevel = p;
-
Index: test/singular_manual/res_info/singular_httex/sing.info-4
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.info-4
diff -N test/singular_manual/res_info/singular_httex/sing.info-4
--- test/singular_manual/res_info/singular_httex/sing.info-4 1 Nov 2009
19:00:55 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,10384 +0,0 @@
-This is sing.info, produced by makeinfo version 4.13 from singular.texi.
-
-
-
-File: sing.info, Node: Ext, Next: fitting, Prev: Ext_R, Up: homolog_lib
-
-D.4.3.5 Ext
-...........
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- Ext(v,M,N[,any]); v int resp. intvec, M,N modules
-
-*Compute:*
- A presentation of Ext^k(M',N'); for k=v[1],v[2],... where
- M'=coker(M) and N'=coker(N). Let
-
- 0 <-- M' <-- F0 <-M-- F1 <-- F2 <--... ,
- 0 <-- N' <-- G0 <--N- G1
-
- be a free resolution of M', resp. a presentation of N'. Consider
- the commutative diagram
-
- 0 0 0
- |^ |^ |^
- --> Hom(Fk-1,N') -Ak-> Hom(Fk,N') -Ak+1-> Hom(Fk+1,N')
- |^ |^ |^
- --> Hom(Fk-1,G0) -Ak-> Hom(Fk,G0) -Ak+1-> Hom(Fk+1,G0)
- |^ |^
- |C |B
- Hom(Fk,G1) ------> Hom(Fk+1,G1)
-
- (Ak,Ak+1 induced by M and B,C induced by N).
-
- Let K=modulo(Ak+1,B), J=module(Ak)+module(C) and Ext=modulo(K,J),
- then we have exact sequences
-
- R^p --K-> Hom(Fk,G0) --Ak+1-> Hom(Fk+1,G0)/im(B),
-
- R^q -Ext-> R^p --K-> Hom(Fk,G0)/(im(Ak)+im(C)).
-
- Hence, Ext presents Ext^k(M',N').
-
-*Return:*
- - module Ext, a presentation of Ext^k(M',N') if v is of type int
- - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.
- - In case of a third argument of any type return a list l:
-
- l[1] = module Ext/list of Ext^k
- l[2] = SB of Ext/list of SB of Ext^k
- l[3] = matrix/list of matrices, each representing a kbase of
Ext^k
- (if finite dimensional)
-
-*Display:*
- printlevel >=0: dimension, vdim of Ext^k for each k (default).
- printlevel >=1: matrices Ak, Ak+1 and kbase of Ext^k in Hom(Fk,G0)
- (if finite dimensional)
-
-*Note:*
- In order to compute Ext^k(M,N) use the command
- Ext(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2);
- Ext(k,P[2],Q[2]);
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 0,(x,y),dp;
- ideal i = x2-y3;
- ideal j = x2-y5;
- list E = Ext(0..2,i,j); // Ext^k(r/i,r/j) for k=0,1,2 over r
- ==> // Computing Ext^0 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F0,G0)-->Hom(F1,G0) is given by:
- ==> y3-x2
- ==> // and Hom(F-1,G0) + Hom(F0,G1)-->Hom(F0,G0) is given by:
- ==> 0,-y5+x2
- ==>
- ==> // dimension of Ext^0: -1
- ==>
- ==> // Computing Ext^1 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F1,G0)-->Hom(F2,G0) is given by:
- ==> 0
- ==> // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by:
- ==> y3-x2,-y5+x2
- ==>
- ==> // dimension of Ext^1: 0
- ==> // vdim of Ext^1: 10
- ==>
- ==> // Computing Ext^2 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F2,G0)-->Hom(F3,G0) is given by:
- ==> 1
- ==> // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by:
- ==> 0,-y5+x2
- ==>
- ==> // dimension of Ext^2: -1
- ==>
- qring R = std(i);
- ideal j = fetch(r,j);
- module M = [-x,y],[-y2,x];
- printlevel = 2;
- module E1 = Ext(1,M,j); // Ext^1(R^2/M,R/j) over R=r/i
- ==> // Computing Ext^1 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F1,G0)-->Hom(F2,G0) is given by:
- ==> x, -y,
- ==> y2,-x
- ==> // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by:
- ==> x, -y,-y5+x2,0,
- ==> y2,-x,0, -y5+x2
- ==>
- ==> // dimension of Ext^1: -1
- ==>
- list l = Ext(4,M,M,1); // Ext^4(R^2/M,R^2/M) over R=r/i
- ==> // Computing Ext^4 (help Ext; gives an explanation):
- ==> // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M),
- ==> // and 0<--coker(N)<--G0<--G1 a presentation of coker(N),
- ==> // then Hom(F4,G0)-->Hom(F5,G0) is given by:
- ==> x, -y,0, 0,
- ==> y2,-x,0, 0,
- ==> 0, 0, x, -y,
- ==> 0, 0, y2,-x
- ==> // and Hom(F3,G0) + Hom(F4,G1)-->Hom(F4,G0) is given by:
- ==> x, -y,0, 0, -x,0, -y2,0,
- ==> y2,-x,0, 0, 0, -x,0, -y2,
- ==> 0, 0, x, -y,y, 0, x, 0,
- ==> 0, 0, y2,-x,0, y, 0, x
- ==>
- ==> // dimension of Ext^4: 0
- ==> // vdim of Ext^4: 2
- ==>
- ==> // columns of matrix are kbase of Ext^4 in Hom(F4,G0)
- ==> 1,0,
- ==> 0,y,
- ==> 0,1,
- ==> 1,0
- ==>
- ==> // element 1 of kbase of Ext^4 in Hom(F4,G0)
- ==> // as matrix: F4-->G0
- ==> 1,0,
- ==> 0,1
- ==> // element 2 of kbase of Ext^4 in Hom(F4,G0)
- ==> // as matrix: F4-->G0
- ==> 0,y,
- ==> 1,0
- ==>
- printlevel = p;
-
-
-File: sing.info, Node: fitting, Next: flatteningStrat, Prev: Ext, Up:
homolog_lib
-
-D.4.3.6 fitting
-...............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- fitting (M,n); M module, n int
-
-*Return:*
- ideal, (standard basis of) n-th Fitting ideal of M'=coker(M).
-
-*Example:*
- LIB "homolog.lib";
- ring R=0,x(0..4),dp;
- matrix M[2][4]=x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4);
- print(M);
- ==> x(0),x(1),x(2),x(3),
- ==> x(1),x(2),x(3),x(4)
- fitting(M,-1);
- ==> _[1]=0
- fitting(M,0);
- ==> _[1]=x(3)^2-x(2)*x(4)
- ==> _[2]=x(2)*x(3)-x(1)*x(4)
- ==> _[3]=x(1)*x(3)-x(0)*x(4)
- ==> _[4]=x(2)^2-x(0)*x(4)
- ==> _[5]=x(1)*x(2)-x(0)*x(3)
- ==> _[6]=x(1)^2-x(0)*x(2)
- fitting(M,1);
- ==> _[1]=x(4)
- ==> _[2]=x(3)
- ==> _[3]=x(2)
- ==> _[4]=x(1)
- ==> _[5]=x(0)
- fitting(M,2);
- ==> _[1]=1
-
-
-File: sing.info, Node: flatteningStrat, Next: Hom, Prev: fitting, Up:
homolog_lib
-
-D.4.3.7 flatteningStrat
-.......................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- flatteningStrat(M); M module
-
-*Return:*
- list of ideals.
- The list entries L[1],...,L[r] describe the flattening
- stratification of M'=coker(M): setting L[0]=0, L[r+1]=1, the
- flattening stratification is given by the open sets
- Spec(A/V(L[i-1])) \ V(L[i]), i=1,...,r+1 (A = basering).
-
-*Note:*
- for more information see the book 'A Singular Introduction to
- Commutative Algebra' (by Greuel/Pfister, Springer 2002).
-
-*Example:*
- LIB "homolog.lib";
- ring A = 0,x(0..4),dp;
- // presentation matrix:
- matrix M[2][4] = x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4);
- list L = flatteningStrat(M);
- L;
- ==> [1]:
- ==> _[1]=x(3)^2-x(2)*x(4)
- ==> _[2]=x(2)*x(3)-x(1)*x(4)
- ==> _[3]=x(1)*x(3)-x(0)*x(4)
- ==> _[4]=x(2)^2-x(0)*x(4)
- ==> _[5]=x(1)*x(2)-x(0)*x(3)
- ==> _[6]=x(1)^2-x(0)*x(2)
- ==> [2]:
- ==> _[1]=x(4)
- ==> _[2]=x(3)
- ==> _[3]=x(2)
- ==> _[4]=x(1)
- ==> _[5]=x(0)
-
-
-File: sing.info, Node: Hom, Next: homology, Prev: flatteningStrat, Up:
homolog_lib
-
-D.4.3.8 Hom
-...........
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- Hom(M,N,[any]); M,N=modules
-
-*Compute:*
- A presentation of Hom(M',N'), M'=coker(M), N'=coker(N) as follows:
- let
-
- F1 --M-> F0 -->M' --> 0, G1 --N-> G0 --> N' --> 0
-
- be presentations of M' and N'. Consider
-
- 0 0
- |^ |^
- 0 --> Hom(M',N') ----> Hom(F0,N') ----> Hom(F1,N')
- |^ |^
- (A: induced by M) Hom(F0,G0) --A-> Hom(F1,G0)
- |^ |^
- (B,C:induced by N) |C |B
- Hom(F0,G1) ----> Hom(F1,G1)
-
- Let D=modulo(A,B) and Hom=modulo(D,C), then we have exact sequences
-
- R^p --D-> Hom(F0,G0) --A-> Hom(F1,G0)/im(B),
-
- R^q -Hom-> R^p --D-> Hom(F0,G0)/im(C) --A-> Hom(F1,G0)/im(B).
-
- Hence Hom presents Hom(M',N')
-
-*Return:*
- module Hom, a presentation of Hom(M',N'), resp., in case of 3
- arguments, a list l (of size <=3):
-
- - l[1] = Hom
- - l[2] = SB of Hom
- - l[3] = kbase of coker(Hom) (if finite dimensional, not 0),
- represented by elements in Hom(F0,G0) via mapping D
-
-*Display:*
- printlevel >=0: (affine) dimension of Hom (default)
- printlevel >=1: D and C and kbase of coker(Hom) in Hom(F0,G0)
- printlevel >=2: elements of kbase of coker(Hom) as matrix :F0->G0
-
-*Note:*
- DISPLAY is as described only for a direct call of 'Hom'. Calling
- 'Hom' from another proc has the same effect as decreasing
- printlevel by 1.
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- printlevel= 1; //in 'example proc' printlevel has to be increased by 1
- ring r = 0,(x,y),dp;
- ideal i = x2-y3,xy;
- qring q = std(i);
- ideal i = fetch(r,i);
- module M = [-x,y],[-y2,x],[x3];
- module H = Hom(M,i);
- ==> // dimension of Hom: 0
- ==> // vdim of Hom: 5
- ==>
- ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
- ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
- ==> y,x, 0,
- ==> x,y2,x2
- ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
- ==> -y3+x2,0, xy,0,
- ==> 0, -y3+x2,0, xy
- ==>
- print(H);
- ==> 0, x, 0,y2,0,
- ==> y, 0, 0,-x,x2,
- ==> -1,-1,x,0, 0
- printlevel= 2;
- list L = Hom(M,i,1);"";
- ==> // dimension of Hom: 0
- ==> // vdim of Hom: 5
- ==>
- ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
- ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
- ==> y,x, 0,
- ==> x,y2,x2
- ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
- ==> -y3+x2,0, xy,0,
- ==> 0, -y3+x2,0, xy
- ==>
- ==> // element 1 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
- ==> y2,xy
- ==> // element 2 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
- ==> y,x
- ==> // element 3 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
- ==> x2,xy2
- ==> // element 4 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
- ==> x,y2
- ==> // element 5 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0:
- ==> 0,x2
- ==>
- printlevel=1;
- ring s = 3,(x,y,z),(c,dp);
- ideal i = jacob(ideal(x2+y5+z4));
- qring rq=std(i);
- matrix M[2][2]=xy,x3,5y,4z,x2;
- matrix N[3][2]=x2,x,y3,3xz,x2z,z;
- print(M);
- ==> xy,x3,
- ==> -y,z
- print(N);
- ==> x2, x,
- ==> y3, 0,
- ==> x2z,z
- list l=Hom(M,N,1);
- ==> // dimension of Hom: 0
- ==> // vdim of Hom: 16
- ==>
- ==> // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0,
- ==> // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0))
)
- ==> 0,0, 0,0, 0, 0,0, 1,
- ==> 0,0, 0,0, 0, 0,y3z2,0,
- ==> 0,0, 0,0, 0, 1,0, 0,
- ==> 0,0, 0,y3,y2z2,0,0, 0,
- ==> 0,0, 1,0, 0, 0,0, 0,
- ==> z,y3,0,0, 0, 0,0, 0
- ==> // show C = im ( Hom(F0,G1) --> Hom(F0,G0) )
- ==> x2, 0, x,0,
- ==> 0, x2, 0,x,
- ==> y3, 0, 0,0,
- ==> 0, y3, 0,0,
- ==> x2z,0, z,0,
- ==> 0, x2z,0,z
- ==>
- ==> // columns of matrix are kbase of Hom in Hom(F0,G0)
- ==> 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0,
- ==> 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,y3z2,
- ==> 0, 0, 0, 0,0,0, y2z2,yz2,z2,y2z,yz,z,y2,y,1,0,
- ==> 0, 0, 0, 0,0,y2z2,0, 0, 0, 0, 0, 0,0, 0,0,0,
- ==> 0, y3,y2,y,1,0, 0, 0, 0, 0, 0, 0,0, 0,0,0,
- ==> y3,0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0
- printlevel = p;
-
-
-File: sing.info, Node: homology, Next: isCM, Prev: Hom, Up: homolog_lib
-
-D.4.3.9 homology
-................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- homology(A,B,M,N);
-
-*Compute:*
- Let M and N be submodules of R^m and R^n presenting M'=R^m/M,
- N'=R^n/N (R=basering) and let A,B matrices inducing maps
-
- R^k --A--> R^m --B--> R^n.
-
- Compute a presentation of the module
-
- ker(B)/im(A) := ker(M'/im(A) --B--> N'/im(BM)+im(BA)).
-
- If B induces a map M'->N' (i.e BM=0) and if im(A) is contained in
- ker(B) (that is, BA=0) then ker(B)/im(A) is the homology of the
- complex
-
- R^k--A-->M'--B-->N'.
-
-*Return:*
- module H, a presentation of ker(B)/im(A).
-
-*Note:*
- homology returns a free module of rank m if ker(B)=im(A).
-
-*Example:*
- LIB "homolog.lib";
- ring r;
- ideal id=maxideal(4);
- qring qr=std(id);
- module N=maxideal(3)*freemodule(2);
- module M=maxideal(2)*freemodule(2);
- module B=[2x,0],[x,y],[z2,y];
- module A=M;
- module H=homology(A,B,M,N);
- H=std(H);
- // dimension of homology:
- dim(H);
- ==> 0
- // vector space dimension:
- vdim(H);
- ==> 19
- ring s=0,x,ds;
- qring qs=std(x4);
- module A=[x];
- module B=A;
- module M=[x3];
- module N=M;
- homology(A,B,M,N);
- ==> _[1]=gen(1)
-
-
-File: sing.info, Node: isCM, Next: isFlat, Prev: homology, Up: homolog_lib
-
-D.4.3.10 isCM
-.............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- isCM(M); M module
-
-*Return:*
- 1 if M'=coker(M) is Cohen-Macaulay;
- 0 if this is not the case.
-
-*Assume:*
- basering is local.
-
-*Example:*
- LIB "homolog.lib";
- ring R=0,(x,y,z),ds; // local ring R = Q[x,y,z]_<x,y,z>
- module M=xz,yz,z2;
- isCM(M); // test if R/<xz,yz,z2> is Cohen-Macaulay
- ==> 0
- M=x2+y2,z7; // test if R/<x2+y2,z7> is Cohen-Macaulay
- isCM(M);
- ==> 1
-
-
-File: sing.info, Node: isFlat, Next: isLocallyFree, Prev: isCM, Up:
homolog_lib
-
-D.4.3.11 isFlat
-...............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- isFlat(M); M module
-
-*Return:*
- 1 if M'=coker(M) is flat;
- 0 if this is not the case.
-
-*Example:*
- LIB "homolog.lib";
- ring A = 0,(x,y),dp;
- matrix M[3][3] = x-1,y,x,x,x+1,y,x2,xy+x+1,x2+y;
- print(M);
- ==> x-1,y, x,
- ==> x, x+1, y,
- ==> x2, xy+x+1,x2+y
- isFlat(M); // coker(M) is not flat over A=Q[x,y]
- ==> 0
- qring B = std(x2+x-y); // the ring B=Q[x,y]/<x2+x-y>
- matrix M = fetch(A,M);
- isFlat(M); // coker(M) is flat over B
- ==> 1
- setring A;
- qring C = std(x2+x+y); // the ring C=Q[x,y]/<x2+x+y>
- matrix M = fetch(A,M);
- isFlat(M); // coker(M) is not flat over C
- ==> 0
-
-
-File: sing.info, Node: isLocallyFree, Next: isReg, Prev: isFlat, Up:
homolog_lib
-
-D.4.3.12 isLocallyFree
-......................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- isLocallyFree(M,r); M module, r int
-
-*Return:*
- 1 if M'=coker(M) is locally free of constant rank r;
- 0 if this is not the case.
-
-*Example:*
- LIB "homolog.lib";
- ring R=0,(x,y,z),dp;
- matrix M[2][3]; // the presentation matrix
- M=x-1,y-1,z,y-1,x-2,x;
- ideal I=fitting(M,0); // 0-th Fitting ideal of coker(M)
- qring Q=I;
- matrix M=fetch(R,M);
- isLocallyFree(M,1); // as R/I-module, coker(M) is locally free of rk 1
- ==> 1
- isLocallyFree(M,0);
- ==> 0
-
-
-File: sing.info, Node: isReg, Next: kernel, Prev: isLocallyFree, Up:
homolog_lib
-
-D.4.3.13 isReg
-..............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- isReg(I,M); I ideal, M module
-
-*Return:*
- 1 if given (ordered) list of generators for I is coker(M)-sequence;
- 0 if this is not the case.
-
-*Example:*
- LIB "homolog.lib";
- ring R = 0,(x,y,z),dp;
- ideal I = x*(y-1),y,z*(y-1);
- isReg(I,0); // given list of generators is Q[x,y,z]-sequence
- ==> 1
- I = x*(y-1),z*(y-1),y; // change sorting of generators
- isReg(I,0);
- ==> 0
- ring r = 0,(x,y,z),ds; // local ring
- ideal I=fetch(R,I);
- isReg(I,0); // result independent of sorting of generators
- ==> 1
-
-
-File: sing.info, Node: kernel, Next: kohom, Prev: isReg, Up: homolog_lib
-
-D.4.3.14 kernel
-...............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- kernel(A,M,N);
-
-*Compute:*
- Let M and N be submodules of R^m and R^n, presenting M'=R^m/M,
- N'=R^n/N (R=basering), and let A:R^m->R^n be a matrix inducing a
- map A':M'->N'. Then kernel(A,M,N); computes a presentation K of
- ker(A') as in the commutative diagram:
-
- ker(A') ---> M' --A'--> N'
- |^ |^ |^
- | | |
- R^r ---> R^m --A--> R^n
- |^ |^ |^
- |K |M |N
- | | |
- R^s ---> R^p -----> R^q
-
-*Return:*
- module K, a presentation of ker(A':coker(M)->coker(N)).
-
-*Example:*
- LIB "homolog.lib";
- ring r;
- module N=[2x,x],[0,y];
- module M=maxideal(1)*freemodule(2);
- matrix A[2][2]=2x,0,x,y,z2,y;
- module K=kernel(A,M,N);
- // dimension of kernel:
- dim(std(K));
- ==> 0
- // vector space dimension of kernel:
- vdim(std(K));
- ==> 2
- print(K);
- ==> z,0,y,0,x,0,
- ==> 0,z,0,y,0,x
-
-
-File: sing.info, Node: kohom, Next: kontrahom, Prev: kernel, Up:
homolog_lib
-
-D.4.3.15 kohom
-..............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- kohom(A,k); A=matrix, k=integer
-
-*Return:*
- matrix Hom(R^k,A), i.e. let A be a matrix defining a map F1->F2 of
- free R-modules, then the matrix of Hom(R^k,F1)->Hom(R^k,F2) is
- computed (R=basering).
-
-*Example:*
- LIB "homolog.lib";
- ring r;
- matrix n[2][3]=x,y,5,z,77,33;
- print(kohom(n,3));
- ==> x,0,0,y, 0, 0, 5, 0, 0,
- ==> 0,x,0,0, y, 0, 0, 5, 0,
- ==> 0,0,x,0, 0, y, 0, 0, 5,
- ==> z,0,0,77,0, 0, 33,0, 0,
- ==> 0,z,0,0, 77,0, 0, 33,0,
- ==> 0,0,z,0, 0, 77,0, 0, 33
-
-
-File: sing.info, Node: kontrahom, Next: KoszulHomology, Prev: kohom, Up:
homolog_lib
-
-D.4.3.16 kontrahom
-..................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- kontrahom(A,k); A=matrix, k=integer
-
-*Return:*
- matrix Hom(A,R^k), i.e. let A be a matrix defining a map F1->F2 of
- free R-modules, then the matrix of Hom(F2,R^k)->Hom(F1,R^k) is
- computed (R=basering).
-
-*Example:*
- LIB "homolog.lib";
- ring r;
- matrix n[2][3]=x,y,5,z,77,33;
- print(kontrahom(n,3));
- ==> x,z, 0,0, 0,0,
- ==> y,77,0,0, 0,0,
- ==> 5,33,0,0, 0,0,
- ==> 0,0, x,z, 0,0,
- ==> 0,0, y,77,0,0,
- ==> 0,0, 5,33,0,0,
- ==> 0,0, 0,0, x,z,
- ==> 0,0, 0,0, y,77,
- ==> 0,0, 0,0, 5,33
-
-
-File: sing.info, Node: KoszulHomology, Next: tensorMod, Prev: kontrahom,
Up: homolog_lib
-
-D.4.3.17 KoszulHomology
-.......................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Compute:*
- A presentation of the p-th Koszul homology module
- H_p(f_1,...,f_k;M'), where M'=coker(M) and f_1,...,f_k are the
- given (ordered list of generators of the) ideal I. The computed
- presentation is minimized via prune. In particular, if
- H_p(f_1,...,f_k;M')=0 then the return value is 0.
-
-*Return:*
- module H, s.th. coker(H) = H_p(f_1,...,f_k;M').
-
-*Note:*
- size of input ideal has to be <= 20.
-
-*Example:*
- LIB "homolog.lib";
- ring R=0,x(1..3),dp;
- ideal x=maxideal(1);
- module M=0;
- KoszulHomology(x,M,0); // H_0(x,R), x=(x_1,x_2,x_3)
- ==> _[1]=x(3)*gen(1)
- ==> _[2]=x(2)*gen(1)
- ==> _[3]=x(1)*gen(1)
- KoszulHomology(x,M,1); // H_1(x,R), x=(x_1,x_2,x_3)
- ==> _[1]=0
- qring S=std(x(1)*x(2));
- module M=0;
- ideal x=maxideal(1);
- KoszulHomology(x,M,1);
- ==> _[1]=-x(3)*gen(1)
- ==> _[2]=-x(2)*gen(1)
- ==> _[3]=-x(1)*gen(1)
- KoszulHomology(x,M,2);
- ==> _[1]=0
-
-
-File: sing.info, Node: tensorMod, Next: Tor, Prev: KoszulHomology, Up:
homolog_lib
-
-D.4.3.18 tensorMod
-..................
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Usage:*
- tensorMod(M,N); M,N modules
-
-*Compute:*
- presentation matrix A of the tensor product T of the modules
- M'=coker(M), N'=coker(N): if matrix(M) defines a map M: R^r->R^s
- and matrix(N) defines a map N: R^p->R^q, then A defines a
- presentation
-
- R^(sp+rq) --A-> R^(sq) --> T --> 0 .
-
-*Return:*
- matrix A satisfying coker(A) = tensorprod(coker(M),coker(N)) .
-
-*Example:*
- LIB "homolog.lib";
- ring A=0,(x,y,z),dp;
- matrix M[3][3]=1,2,3,4,5,6,7,8,9;
- matrix N[2][2]=x,y,0,z;
- print(M);
- ==> 1,2,3,
- ==> 4,5,6,
- ==> 7,8,9
- print(N);
- ==> x,y,
- ==> 0,z
- print(tensorMod(M,N));
- ==> x,y,0,0,0,0,1,0,2,0,3,0,
- ==> 0,z,0,0,0,0,0,1,0,2,0,3,
- ==> 0,0,x,y,0,0,4,0,5,0,6,0,
- ==> 0,0,0,z,0,0,0,4,0,5,0,6,
- ==> 0,0,0,0,x,y,7,0,8,0,9,0,
- ==> 0,0,0,0,0,z,0,7,0,8,0,9
-
-
-File: sing.info, Node: Tor, Prev: tensorMod, Up: homolog_lib
-
-D.4.3.19 Tor
-............
-
-Procedure from library `homolog.lib' (*note homolog_lib::).
-
-*Compute:*
- a presentation of Tor_k(M',N'), for k=v[1],v[2],... , where
- M'=coker(M) and N'=coker(N): let
-
- 0 <-- M' <-- G0 <-M-- G1
- 0 <-- N' <-- F0 <--N- F1 <-- F2 <--...
-
- be a presentation of M', resp. a free resolution of N', and
- consider the commutative diagram
-
- 0 0 0
- |^ |^ |^
- Tensor(M',Fk+1) -Ak+1-> Tensor(M',Fk) -Ak-> Tensor(M',Fk-1)
- |^ |^ |^
- Tensor(G0,Fk+1) -Ak+1-> Tensor(G0,Fk) -Ak-> Tensor(G0,Fk-1)
- |^ |^
- |C |B
- Tensor(G1,Fk) ----> Tensor(G1,Fk-1)
-
- (Ak,Ak+1 induced by N and B,C induced by M).
-
- Let K=modulo(Ak,B), J=module(C)+module(Ak+1) and Tor=modulo(K,J),
- then we have exact sequences
-
- R^p --K-> Tensor(G0,Fk) --Ak-> Tensor(G0,Fk-1)/im(B),
-
- R^q -Tor-> R^p --K-> Tensor(G0,Fk)/(im(C)+im(Ak+1)).
-
- Hence, Tor presents Tor_k(M',N').
-
-*Return:*
- - if v is of type int: module Tor, a presentation of Tor_k(M',N');
- - if v is of type intvec: a list of Tor_k(M',N') (k=v[1],v[2],...);
- - in case of a third argument of any type: list l with
-
- l[1] = module Tor/list of Tor_k(M',N'),
- l[2] = SB of Tor/list of SB of Tor_k(M',N'),
- l[3] = matrix/list of matrices, each representing a kbase of
Tor_k(M',N')
- (if finite dimensional), or 0.
-
-*Display:*
- printlevel >=0: (affine) dimension of Tor_k for each k (default).
- printlevel >=1: matrices Ak, Ak+1 and kbase of Tor_k in
- Tensor(G0,Fk) (if finite dimensional).
-
-*Note:*
- In order to compute Tor_k(M,N) use the command
- Tor(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2);
- Tor(k,P[2],Q[2]);
-
-*Example:*
- LIB "homolog.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 0,(x,y),dp;
- ideal i = x2,y;
- ideal j = x;
- list E = Tor(0..2,i,j); // Tor_k(r/i,r/j) for k=0,1,2 over r
- ==> // dimension of Tor_0: 0
- ==> // vdim of Tor_0: 1
- ==>
- ==> // Computing Tor_1 (help Tor; gives an explanation):
- ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
- ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
- ==> // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by:
- ==> x
- ==> // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by:
- ==> 0,x2,y
- ==>
- ==> // dimension of Tor_1: 0
- ==> // vdim of Tor_1: 1
- ==>
- ==> // Computing Tor_2 (help Tor; gives an explanation):
- ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
- ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
- ==> // coker(N), then Tensor(G0,F2)-->Tensor(G0,F1) is given by:
- ==> 0
- ==> // and Tensor(G0,F3) + Tensor(G1,F2)-->Tensor(G0,F2) is given by:
- ==> 1,x2,y
- ==>
- ==> // dimension of Tor_2: -1
- ==>
- qring R = std(i);
- ideal j = fetch(r,j);
- module M = [x,0],[0,x];
- printlevel = 2;
- module E1 = Tor(1,M,j); // Tor_1(R^2/M,R/j) over R=r/i
- ==> // Computing Tor_1 (help Tor; gives an explanation):
- ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
- ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
- ==> // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by:
- ==> x,0,
- ==> 0,x
- ==> // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by:
- ==> x,0,x,0,
- ==> 0,x,0,x
- ==>
- ==> // dimension of Tor_1: 0
- ==> // vdim of Tor_1: 2
- ==>
- list l = Tor(3,M,M,1); // Tor_3(R^2/M,R^2/M) over R=r/i
- ==> // Computing Tor_3 (help Tor; gives an explanation):
- ==> // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M),
- ==> // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of
- ==> // coker(N), then Tensor(G0,F3)-->Tensor(G0,F2) is given by:
- ==> x,0,0,0,
- ==> 0,x,0,0,
- ==> 0,0,x,0,
- ==> 0,0,0,x
- ==> // and Tensor(G0,F4) + Tensor(G1,F3)-->Tensor(G0,F3) is given by:
- ==> x,0,0,0,x,0,0,0,
- ==> 0,x,0,0,0,x,0,0,
- ==> 0,0,x,0,0,0,x,0,
- ==> 0,0,0,x,0,0,0,x
- ==>
- ==> // dimension of Tor_3: 0
- ==> // vdim of Tor_3: 4
- ==>
- ==> // columns of matrix are kbase of Tor_3 in Tensor(G0,F3)
- ==> 1,0,0,0,
- ==> 0,1,0,0,
- ==> 0,0,1,0,
- ==> 0,0,0,1
- ==>
- printlevel = p;
-
-
-File: sing.info, Node: mprimdec_lib, Next: mregular_lib, Prev: homolog_lib,
Up: Commutative algebra
-
-D.4.4 mprimdec_lib
-------------------
-
-*Library:*
- mprimdec.lib
-
-*Purpose:*
- procedures for primary decomposition of modules
-
-*Authors:*
- Alexander Dreyer, address@hidden; address@hidden
-
-*Remark:*
- These procedures are implemented to be used in characteristic 0.
- They also work in positive characteristic >> 0.
- In small characteristic and for algebraic extensions, the
- procedures via Gianni, Trager, Zacharias may not terminate.
-
-*Procedures:*
-
-* Menu:
-
-* separator:: computes a list of separators of prime ideals
-* PrimdecA:: (not necessarily minimal) primary decomposition via
Shimoyama/Yokoyama (suggested by Graebe)
-* PrimdecB:: (not necessarily minimal) primary decomposition for
pseudo-primary ideals
-* modDec:: minimal primary decomposition via Shimoyama/Yokoyama (suggested by
Graebe)
-* zeroMod:: minimal zero-dimensional primary decomposition via Gianni, Trager
and Zacharias
-* GTZmod:: minimal primary decomposition via Gianni, Trager and Zacharias
-* dec1var:: primary decomposition for one variable
-* annil:: the annihilator of M/N in the basering
-* splitting:: splitting to simpler modules
-* primTest:: tests whether i is prime or homogeneous
-* preComp:: enhanced Version of splitting
-* indSet:: lists with varstrings of(in)dependent variables
-* GTZopt:: a faster version of GTZmod
-* zeroOpt:: a faster version of zeroMod
-* clrSBmod:: extracts an minimal SB from a SB
-* minSatMod:: minimal saturation of N w.r.t. I
-* specialModulesEqual:: checks for equality of standard bases of modules if N1
is contained in N2 or vice versa
-* stdModulesEqual:: checks for equality of standard bases
-* modulesEqual:: checks for equality of modules
-* getData:: extracts oldData and computes the remaining data
-
-
-File: sing.info, Node: separator, Next: PrimdecA, Up: mprimdec_lib
-
-D.4.4.1 separator
-.................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- separator(l); list l of prime ideals
-
-*Return:*
- list sepList;
- a list of separators of the prime ideals in l,
- i.e. polynomials p_ij, s.th. p_ij is in l[j],
- for all l[j] not contained in l[i]
- but p_ij is not in l[i]
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- ideal i=(x2y,xz2,y2z,z3);
- list l=minAssGTZ(i);
- list sepL=separator(l);
- sepL;
- ==> [1]:
- ==> x
- ==> [2]:
- ==> y
-
-
-File: sing.info, Node: PrimdecA, Next: PrimdecB, Prev: separator, Up:
mprimdec_lib
-
-D.4.4.2 PrimdecA
-................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- PrimdecA (N[, i]); module N, int i
-
-*Return:*
- list l
- a (not necessarily minimal) primary decomposition of N computed by
- a generalized version of
- the algorithm of Schimoyama/Yokoyama,
- if i=1 is given, the factorizing Groebner is used
- to compute the isolated primes.
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=x*gen(1)+ y*gen(2),
- x*gen(1)-x2*gen(2);
- list l=PrimdecA(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=x*gen(1)+y*gen(2)
- ==> _[2]=x*gen(2)-gen(1)
- ==> [2]:
- ==> _[1]=x2+y
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=x*gen(1)
- ==> [2]:
- ==> _[1]=x
- ==> [3]:
- ==> [1]:
- ==> _[1]=y*gen(1)
- ==> _[2]=y*gen(2)
- ==> _[3]=x*gen(1)
- ==> _[4]=x*gen(2)
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=x
-
-
-File: sing.info, Node: PrimdecB, Next: modDec, Prev: PrimdecA, Up:
mprimdec_lib
-
-D.4.4.3 PrimdecB
-................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- PrimdecB (N, p); pseudo-primary module N, isolated prime ideal p
-
-*Return:*
- list l
- a (not necessarily minimal) primary decomposition of N
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=y*gen(1),y2*gen(2),yz*gen(2),yx*gen(2);
- ideal p=y;
- list l=PrimdecB(N,p);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=y*gen(1)
- ==> _[2]=y*gen(2)
- ==> [2]:
- ==> _[1]=y
- ==> [2]:
- ==> [1]:
- ==> _[1]=y*gen(1)
- ==> _[2]=y*gen(2)
- ==> _[3]=x*gen(1)
- ==> _[4]=x*gen(2)
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=x
- ==> [3]:
- ==> [1]:
- ==> _[1]=z*gen(1)
- ==> _[2]=z*gen(2)
- ==> _[3]=y*gen(1)
- ==> _[4]=x*gen(1)
- ==> _[5]=x*gen(2)
- ==> _[6]=y2*gen(2)
- ==> [2]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
-
-
-File: sing.info, Node: modDec, Next: zeroMod, Prev: PrimdecB, Up:
mprimdec_lib
-
-D.4.4.4 modDec
-..............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- modDec (N[, i]); module N, int i
-
-*Return:*
- list l
- a minimal primary decomposition of N
- computed by an generalized version of
- the algorithm of Schimoyama/Yokoyama,
- if i=1 is given, the factorizing Groebner is used
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=x*gen(1)+ y*gen(2),
- x*gen(1)-x2*gen(2);
- list l=modDec(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=x*gen(1)+y*gen(2)
- ==> _[2]=x*gen(2)-gen(1)
- ==> [2]:
- ==> _[1]=x2+y
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=x*gen(1)
- ==> [2]:
- ==> _[1]=x
-
-
-File: sing.info, Node: zeroMod, Next: GTZmod, Prev: modDec, Up:
mprimdec_lib
-
-D.4.4.5 zeroMod
-...............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- zeroMod (N[, check]); zero-dimensional module N[, module check]
-
-*Return:*
- list l
- the minimal primary decomposition of a zero-dimensional module N,
- computed by a generalized version of the algorithm
- of Gianni, Trager and Zacharias
-
-*Note:*
- if the parameter check is given, only components
- not containing check are computed
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,z,dp;
- module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
- list l=zeroMod(N);
- ==> 2
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(3)
- ==> _[3]=z*gen(2)-gen(2)
- ==> [2]:
- ==> _[1]=z-1
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=gen(3)
- ==> _[3]=z*gen(1)
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=z*gen(3)+gen(3)
- ==> [2]:
- ==> _[1]=z+1
-
-
-File: sing.info, Node: GTZmod, Next: dec1var, Prev: zeroMod, Up:
mprimdec_lib
-
-D.4.4.6 GTZmod
-..............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- GTZmod (N[, check]); module N[, module check]
-
-*Return:*
- list l
- the minimal primary decomposition of the module N,
- computed by a generalized version of the algorithm
- of Gianny, Trager and Zacharias
-
-*Note:*
- if the parameter check is given, only components
- not containing check are computed
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=x*gen(1)+ y*gen(2),
- x*gen(1)-x2*gen(2);
- list l=GTZmod(N);
- ==> 2
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=x*gen(1)+y*gen(2)
- ==> _[2]=x*gen(2)-gen(1)
- ==> [2]:
- ==> _[1]=x2+y
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=x*gen(1)
- ==> [2]:
- ==> _[1]=x
-
-
-File: sing.info, Node: dec1var, Next: annil, Prev: GTZmod, Up: mprimdec_lib
-
-D.4.4.7 dec1var
-...............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- dec1var (N); zero-dimensional module N[, module check]
-
-*Return:*
- list l
- the minimal primary decomposition of a submodule N of R^s if
- nvars(R)=1
-
-*Note:*
- if the parameter check is given, only components
- not containing check are computed
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,z,dp;
- module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
- list l=dec1var(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(3)
- ==> _[3]=z*gen(2)-gen(2)
- ==> [2]:
- ==> _[1]=z-1
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=gen(3)
- ==> _[3]=z*gen(1)
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=z*gen(3)+gen(3)
- ==> [2]:
- ==> _[1]=z+1
-
-
-File: sing.info, Node: annil, Next: splitting, Prev: dec1var, Up:
mprimdec_lib
-
-D.4.4.8 annil
-.............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- annil(N); module N
-
-*Return:*
- ideal ann=std(quotient(N,freemodule(nrows(N))));
- the annihilator of M/N in the basering
-
-*Note:*
- ann is a std basis in the basering
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=x*gen(1), y*gen(2);
- ideal ann=annil(N);
- ann;
- ==> ann[1]=xy
-
-
-File: sing.info, Node: splitting, Next: primTest, Prev: annil, Up:
mprimdec_lib
-
-D.4.4.9 splitting
-.................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- splitting(N[,check[, ann]]); module N, module check, ideal ann
-
-*Return:*
- (l, check) list l, module check
- the elements of l consists of a triple with
- [1] of type module [2] and [3] of type ideal
- s.th. the intersection of the modules is equal to the
- zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if
- l[j][2]!=0 then the module l[j][1] is primary
- with associated prime l[j][2],
- and check=intersect(check, l[j][1]) is computed
-
-*Note:*
- if the parameter check is given, only components not containing
- check are computed; if ann is given, ann is used instead of
- annil(N)
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,z,lp;
- module N=z*gen(1), (z+1)*gen(2);
- N=std(N);
- list l; module check;
- (l, check)=splitting(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=z*gen(1)
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> _[1]=z
- ==> [4]:
- ==> _[1]=z
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=z*gen(2)+gen(2)
- ==> [2]:
- ==> _[1]=z+1
- ==> [3]:
- ==> _[1]=z+1
- ==> [4]:
- ==> _[1]=z+1
- check;
- ==> check[1]=z*gen(2)+gen(2)
- ==> check[2]=z*gen(1)
-
-
-File: sing.info, Node: primTest, Next: preComp, Prev: splitting, Up:
mprimdec_lib
-
-D.4.4.10 primTest
-.................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- primTest(i[, p]); a zero-dimensional ideal i, irreducible poly p in
- i
-
-*Return:*
- if i neither is prime nor is homogeneous then ideal(0) is returned,
- else radical(i)
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),lp;
- ideal i=x+1,y-1,z;
- i=std(i);
- ideal primId=primTest(i,z);
- primId;
- ==> primId[1]=z
- ==> primId[2]=y-1
- ==> primId[3]=x+1
- i=x,z2,yz,y2;
- i=std(i);
- primId=primTest(i);
- primId;
- ==> primId[1]=x
- ==> primId[2]=y
- ==> primId[3]=z
-
-
-File: sing.info, Node: preComp, Next: indSet, Prev: primTest, Up:
mprimdec_lib
-
-D.4.4.11 preComp
-................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- preComp(N,check[, ann]); module N, module check, ideal ann
-
-*Return:*
- (l, check) list l, module check
- the elements of l consists of a triple with
- [1] of type module [2] and [3] of type ideal
- s.th. the intersection of the modules is equal to the
- zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if
- l[j][2]!=0 then the module l[j][1] is primary
- with associated prime l[j][2],
- and check=intersect(check, l[j][1]) is computed
-
-*Note:*
- only components not containing check are computed;
- if ann is given, ann is used instead of annil(N)
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,z,lp;
- module N=z*gen(1), (z+1)*gen(2);
- N=std(N);
- list l; module check;
- (l, check)=preComp(N,freemodule(2));
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=z*gen(1)
- ==> _[2]=gen(2)
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> _[1]=z
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=z*gen(2)+gen(2)
- ==> [2]:
- ==> _[1]=z+1
- ==> [3]:
- ==> _[1]=z+1
- check;
- ==> check[1]=z*gen(1)
- ==> check[2]=z*gen(2)+gen(2)
-
-
-File: sing.info, Node: indSet, Next: GTZopt, Prev: preComp, Up:
mprimdec_lib
-
-D.4.4.12 indSet
-...............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- indSet(i); i ideal
-
-*Return:*
- list with two entrees
- both are lists of new varstrings with the dependent variables the
- independent set, the ordstring with the corresp. block ordering,
- and the integer where the independent set starts in the varstring
-
-*Note:*
- the first entry gives the strings for all maximal independent sets
- the second gives the strings for the independent sets,
- which cannot be enhanced
-
-*Example:*
- LIB "mprimdec.lib";
- ring s1=(0,x,y),(a,b,c,d,e,f,g),lp;
- ideal i=ea-fbg,fa+be,ec-fdg,fc+de;
- i=std(i);
- list l=indSet(i);
- l;
- ==> [1]:
- ==> [1]:
- ==> [1]:
- ==> e,f
- ==> [2]:
- ==> a,b,c,d,g
- ==> [3]:
- ==> (C,dp(2),dp)
- ==> [4]:
- ==> 5
- ==> [2]:
- ==> [1]:
- ==> [1]:
- ==> a,b,c,d
- ==> [2]:
- ==> e,f,g
- ==> [3]:
- ==> (C,dp(4),dp)
- ==> [4]:
- ==> 3
- ==> [2]:
- ==> [1]:
- ==> a,c,e
- ==> [2]:
- ==> b,d,f,g
- ==> [3]:
- ==> (C,dp(3),dp)
- ==> [4]:
- ==> 4
-
-
-File: sing.info, Node: GTZopt, Next: zeroOpt, Prev: indSet, Up:
mprimdec_lib
-
-D.4.4.13 GTZopt
-...............
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- GTZopt (N[, check]); module N[, module check]
-
-*Return:*
- list l
- the minimal primary decomposition of the module N,
- computed by a generalized and optimized version of
- the algorithm of Gianny, Trager and Zacharias
-
-*Note:*
- if the parameter check is given, only components
- not containing check are computed
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,(x,y,z),dp;
- module N=x*gen(1)+ y*gen(2),
- x*gen(1)-x2*gen(2);
- list l=GTZopt(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=x*gen(1)+y*gen(2)
- ==> _[2]=x*gen(2)-gen(1)
- ==> [2]:
- ==> _[1]=x2+y
- ==> [2]:
- ==> [1]:
- ==> _[1]=gen(2)
- ==> _[2]=x*gen(1)
- ==> [2]:
- ==> _[1]=x
-
-
-File: sing.info, Node: zeroOpt, Next: clrSBmod, Prev: GTZopt, Up:
mprimdec_lib
-
-D.4.4.14 zeroOpt
-................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- zeroOpt (N[, check]); zero-dimensional module N[, module check]
-
-*Return:*
- list l
- the minimal primary decomposition of a zero-dimensional module N,
- computed by a generalized and optimized version of the algorithm of
- Gianny, Trager and Zacharias
-
-*Note:*
- if the parameter check is given, only components
- not containing check are computed
-
-*Example:*
- LIB "mprimdec.lib";
- ring r=0,z,dp;
- module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3);
- list l=zeroOpt(N);
- l;
- ==> [1]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=z*gen(2)-gen(2)
- ==> _[3]=gen(3)
- ==> [2]:
- ==> _[1]=z-1
- ==> [2]:
- ==> [1]:
- ==> _[1]=z*gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=gen(3)
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> [1]:
- ==> _[1]=gen(1)
- ==> _[2]=gen(2)
- ==> _[3]=z*gen(3)+gen(3)
- ==> [2]:
- ==> _[1]=z+1
-
-
-File: sing.info, Node: clrSBmod, Next: minSatMod, Prev: zeroOpt, Up:
mprimdec_lib
-
-D.4.4.15 clrSBmod
-.................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- clrSBmod(N); N module which is SB ordered by monomial ordering
-
-*Return:*
- module = minimal SB
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = (0,a,b),(x,y,z),dp;
- module N1=ax2+y,a2x+y,bx;
- module N2=clrSBmod(N1);
- N2;
- ==> N2[1]=(a)*x2*gen(1)+y*gen(1)
- ==> N2[2]=(b)*x*gen(1)
-
-
-File: sing.info, Node: minSatMod, Next: specialModulesEqual, Prev:
clrSBmod, Up: mprimdec_lib
-
-D.4.4.16 minSatMod
-..................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- minSatMod(N, I); module N, ideal I
-
-*Return:*
- list with 2 elements:
- [1]=sat(N,product(I))[1],
- [2]=p, the polynomial of minimal degree s.th. [1]=quotient(N,p)
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = 0,(x,y,z),dp;
- module N=xy*gen(1);
- ideal h=yz,z2;
- list l=minSatMod(N,h);
- l;
- ==> [1]:
- ==> _[1]=x*gen(1)
- ==> [2]:
- ==> y
-
-
-File: sing.info, Node: specialModulesEqual, Next: stdModulesEqual, Prev:
minSatMod, Up: mprimdec_lib
-
-D.4.4.17 specialModulesEqual
-............................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- specialModulesEqual(N1, N2) N1, N2 standard bases of modules, s.th.
- N1 is contained in N2 or vice versa
-
-*Return:*
- int i
- if (N1==N2) then i=1
- else i=0
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = 0,(x,y,z),dp;
- module N1=x*freemodule(2);
- module N2=xy*freemodule(2);
- int i=specialModulesEqual(N1,N2);
- i;
- ==> 0
- N2=N1;
- i=specialModulesEqual(N1,N2);
- i;
- ==> 1
-
-
-File: sing.info, Node: stdModulesEqual, Next: modulesEqual, Prev:
specialModulesEqual, Up: mprimdec_lib
-
-D.4.4.18 stdModulesEqual
-........................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- stdModulesEqual(N1, N2) N1, N2 standard bases of modules,
-
-*Return:*
- int i
- if (N1==N2) then i=1
- else i=0
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = 0,(x,y,z),dp;
- module N1=x*freemodule(2);
- module N2=xy*freemodule(2);
- int i=stdModulesEqual(N1,N2);
- i;
- ==> 0
- N2=N1;
- i=stdModulesEqual(N1,N2);
- i;
- ==> 1
-
-
-File: sing.info, Node: modulesEqual, Next: getData, Prev: stdModulesEqual,
Up: mprimdec_lib
-
-D.4.4.19 modulesEqual
-.....................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- modulesEqual(N1, N2) N1, N2 modules,
-
-*Return:*
- int i
- if (N1==N2) then i=1
- else i=0
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = 0,(x,y,z),dp;
- module N1=x*freemodule(2);
- module N2=xy*freemodule(2);
- int i=modulesEqual(N1,N2);
- i;
- ==> 0
- N2=N1;
- i=modulesEqual(N1,N2);
- i;
- ==> 1
-
-
-File: sing.info, Node: getData, Prev: modulesEqual, Up: mprimdec_lib
-
-D.4.4.20 getData
-................
-
-Procedure from library `mprimdec.lib' (*note mprimdec_lib::).
-
-*Usage:*
- getData(N, l[, noCheck]); module N, list l[, int noCheck]
-
-*Return:*
- (ann, check, M, checked)
- ideal ann, module check, M, int checked
-
- if l[1] is contained in N [and noCheck is not given]
- then checked=1, ann=ideal(0), check=0, M=0;
- else checked=0, M=freemodule(nrows(N)); check=l[1]
- (resp. check=M if l is an empty list) and
- if size(l)>1 then ann=l[2] else ann is the annihilator of M/N.
-
-*Note:*
- ann is a std basis in the basering
-
-*Example:*
- LIB "mprimdec.lib";
- ring r = 0,(x,y,z),lp;
- module N=x*gen(1),y*gen(2);
- N=std(N);
- ideal ann; module check, M; int checked; list l;
- (ann, check, M, checked)=getData(N,l);
- ann; check; M; checked;
- ==> ann[1]=xy
- ==> check[1]=gen(1)
- ==> check[2]=gen(2)
- ==> M[1]=gen(1)
- ==> M[2]=gen(2)
- ==> 0
- l=list(check,ann);
- (ann, check, M, checked)=getData(N,l);
- ann; check; M; checked;
- ==> ann[1]=xy
- ==> check[1]=gen(1)
- ==> check[2]=gen(2)
- ==> M[1]=gen(1)
- ==> M[2]=gen(2)
- ==> 0
- l=list(N);
- (ann, check, M, checked)=getData(N,l);
- ann; check; M; checked;
- ==> ann[1]=0
- ==> check[1]=0
- ==> M[1]=0
- ==> 1
-
-
-File: sing.info, Node: mregular_lib, Next: normal_lib, Prev: mprimdec_lib,
Up: Commutative algebra
-
-D.4.5 mregular_lib
-------------------
-
-*Library:*
- mregular.lib
-
-*Purpose:*
- Castelnuovo-Mumford Regularity of CM-Schemes and Curves
-
-*Authors:*
- I.Bermejo, address@hidden
- Ph.Gimenez, address@hidden
- G.-M.Greuel, address@hidden
-
-*Overview:*
- A library for computing the Castelnuovo-Mumford regularity of a
- subscheme of the projective n-space that DOES NOT require the
- computation of a minimal graded free resolution of the saturated
- ideal defining the subscheme. The procedures are based on two
- papers by Isabel Bermejo and Philippe Gimenez: 'On
- Castelnuovo-Mumford regularity of projective curves'
- Proc.Amer.Math.Soc. 128(5) (2000), and 'Computing the
- Castelnuovo-Mumford regularity of some subschemes of Pn using
- quotients of monomial ideals', Proceedings of MEGA-2000, J. Pure
- Appl. Algebra (to appear).
- The algorithm assumes the variables to be in Noether position.
-
-*Procedures:*
-
-* Menu:
-
-* reg_CM:: regularity of arith. C-M subscheme V(id_sat) of Pn
-* reg_curve:: regularity of projective curve V(id_sat) in Pn
-* reg_moncurve:: regularity of projective monomial curve defined by li
-
-
-File: sing.info, Node: reg_CM, Next: reg_curve, Up: mregular_lib
-
-D.4.5.1 reg_CM
-..............
-
-Procedure from library `mregular.lib' (*note mregular_lib::).
-
-*Usage:*
- reg_CM (i); i ideal
-
-*Return:*
- an integer, the Castelnuovo-Mumford regularity of i-sat.
-
-*Assume:*
- i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the
- field K is infinite, and S/i-sat is Cohen-Macaulay. Assume that
- K[x(n-d),...,x(n)] is a Noether normalization of S/i-sat where
- d=dim S/i -1. If this is not the case, compute a Noether
- normalization e.g. by using the proc noetherNormal from
- algebra.lib.
-
-*Note:*
- The output is reg(X)=reg(i-sat) where X is the arithmetically
- Cohen-Macaulay subscheme of the projective n-space defined by i.
- If printlevel > 0 (default = 0) additional information is
- displayed. In particular, the value of the regularity of the
- Hilbert function of S/i-sat is given.
-
-*Example:*
- LIB "mregular.lib";
- ring s=0,x(0..5),dp;
- ideal i=x(2)^2-x(4)*x(5),x(1)*x(2)-x(0)*x(5),x(0)*x(2)-x(1)*x(4),
- x(1)^2-x(3)*x(5),x(0)*x(1)-x(2)*x(3),x(0)^2-x(3)*x(4);
- reg_CM(i);
- ==> 2
- // Additional information can be obtained as follows:
- printlevel = 1;
- reg_CM(i);
- ==> // Ideal i of S defining an arithm. Cohen-Macaulay subscheme X of P5:
- ==> // - dimension of X: 2
- ==> // - i is saturated: YES
- ==> // - regularity of the Hilbert function of S/i-sat: -1
- ==> // - time for computing reg(X): 0 sec.
- ==> // Castelnuovo-Mumford regularity of X:
- ==> 2
-
-
-File: sing.info, Node: reg_curve, Next: reg_moncurve, Prev: reg_CM, Up:
mregular_lib
-
-D.4.5.2 reg_curve
-.................
-
-Procedure from library `mregular.lib' (*note mregular_lib::).
-
-*Usage:*
- reg_curve (i[,e]); i ideal, e integer
-
-*Return:*
- an integer, the Castelnuovo-Mumford regularity of i-sat.
-
-*Assume:*
- i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the
- field K is infinite, and it defines a projective curve C in the
- projective n-space (dim(i)=2). We assume that K[x(n-1),x(n)] is a
- Noether normalization of S/i-sat.
- e=0: (default)
- Uses a random choice of an element of K when it is necessary. This
- is absolutely safe (if the element is bad, another random choice
- will be done until a good element is found).
- e=1: Substitutes the random choice of an element of K by a simple
- transcendental field extension of K.
-
-*Note:*
- The output is the integer reg(C)=reg(i-sat).
- If printlevel > 0 (default = 0) additional information is
- displayed. In particular, says if C is arithmetically
- Cohen-Macaulay or not, determines in which step of a minimal graded
- free resolution of i-sat the regularity of C is attained, and
- sometimes gives the value of the regularity of the Hilbert function
- of S/i-sat (otherwise, an upper bound is given).
-
-*Example:*
- LIB "mregular.lib";
- ring s = 0,(x,y,z,t),dp;
- // 1st example is Ex.2.5 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5):
- ideal i = x17y14-y31, x20y13, x60-y36z24-x20z20t20;
- reg_curve(i);
- ==> 72
- // 2nd example is Ex.2.9 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5):
- int k=43;
- ideal j=x17y14-y31,x20y13,x60-y36z24-x20z20t20,y41*z^k-y40*z^(k+1);
- reg_curve(j);
- ==> 93
- // Additional information can be obtained as follows:
- printlevel = 1;
- reg_curve(j);
- ==> // Ideal i of S defining a projective curve C in P3:
- ==> // - i is saturated: YES
- ==> // - C is arithm. Cohen-Macaulay: NO
- ==> // - reg(C) attained at the last step of a m.g.f.r. of i-sat: YES
- ==> // - regularity of the Hilbert function of S/i-sat: 92
- ==> // - time for computing reg(C): 0 sec.
- ==> // Castelnuovo-Mumford regularity of C:
- ==> 93
-
-
-File: sing.info, Node: reg_moncurve, Prev: reg_curve, Up: mregular_lib
-
-D.4.5.3 reg_moncurve
-....................
-
-Procedure from library `mregular.lib' (*note mregular_lib::).
-
-*Usage:*
- reg_moncurve (a0,...,an) ; ai integers with a0=0 < a1 < ... < an=:d
-
-*Return:*
- an integer, the Castelnuovo-Mumford regularity of the projective
- monomial curve C in Pn parametrically defined by:
- x(0)=t^d , x(1)=s^(a1)t^(d-a1), ... , x(n)=s^d.
-
-*Assume:*
- a0=0 < a1 < ... < an are integers and the base field is infinite.
-
-*Note:*
- The defining ideal I(C) in S is determined using elimination. The
- procedure reg_curve is improved in this case since one knows
- beforehand that the dimension is 2, that the variables are in
- Noether position, that I(C) is prime.
- If printlevel > 0 (default = 0) additional information is
- displayed. In particular, says if C is arithmetically
- Cohen-Macaulay or not, determines in which step of a minimal graded
- free resolution of I(C) the regularity is attained, and sometimes
- gives the value of the regularity of the Hilbert function of S/I(C)
- (otherwise, an upper bound is given).
-
-*Example:*
- LIB "mregular.lib";
- // The 1st example is the twisted cubic:
- reg_moncurve(0,1,2,3);
- ==> 2
- // The 2nd. example is the non arithm. Cohen-Macaulay monomial curve in P4
- // parametrized by: x(0)-s6,x(1)-s5t,x(2)-s3t3,x(3)-st5,x(4)-t6:
- reg_moncurve(0,1,3,5,6);
- ==> 3
- // Additional information can be obtained as follows:
- printlevel = 1;
- reg_moncurve(0,1,3,5,6);
- ==> // Sequence of integers defining a monomial curve C in P4:
- ==> // - time for computing ideal I(C) of S (elimination): 0 sec.
- ==> // - C is arithm. Cohen-Macaulay: NO
- ==> // - reg(C) attained at the last step of a m.g.f.r. of I(C): YES
- ==> // - reg(C) attained at the second last step of a m.g.f.r. of I(C):
YES
- ==> // - regularity of the Hilbert function of S/I(C): 2
- ==> // - time for computing reg(C): 0 sec.
- ==> // Castelnuovo-Mumford regularity of C:
- ==> 3
-
-
-File: sing.info, Node: normal_lib, Next: primdec_lib, Prev: mregular_lib,
Up: Commutative algebra
-
-D.4.6 normal_lib
-----------------
-
-*Library:*
- normal.lib
-
-*Purpose:*
- Normalization of Affine Rings
-
-*Authors:*
- G.-M. Greuel, address@hidden,
- G. Pfister, address@hidden
-
-*Main procedures:*
-
-* Menu:
-
-* normal:: computes the normalization of basering/I, resp. computes the
normalization of basering/I and the delta invariant
-* HomJJ:: presentation of End_R(J) as affine ring, L a list
-* genus:: computes genus of the projective curve defined by I
-
-*Auxiliary procedure:*
-
-* Menu:
-
-* deltaLoc:: (sum of) delta invariant(s) at conjugated singular points
-
-
-File: sing.info, Node: normal, Next: HomJJ, Up: normal_lib
-
-D.4.6.1 normal
-..............
-
-Procedure from library `normal.lib' (*note normal_lib::).
-
-*Usage:*
- normal(i [,choose]); i a radical ideal, choose empty, 1 or "wd" if
- choose=1 the normalization of the associated primes is computed
- (which is sometimes more efficient); if `choose="wd"' the delta
- invariant is computed simultaneously; this may take much more time
- in the reducible case, since the factorizing standard basis
- algorithm cannot be used.
-
-*Assume:*
- The ideal must be radical, for non-radical ideals the output may be
- wrong (i=radical(i); makes i radical)
-
-*Return:*
- a list of rings, say nor and in case of `choose="wd"' an integer at
- the end of the list. Each ring `nor[i]' contains two ideals with
- given names `norid' and `normap' such that
- - the direct sum of the rings `nor[i]/norid' is the normalization
- of basering/id;
- - `normap' gives the normalization map from basering/id to
- `nor[i]/norid' (for each i).
-
-*Note:*
- to use the i-th ring type: `def R=nor[i]; setring R;'.
- Increasing printlevel displays more comments (default:
- printlevel=0).
- Not implemented for local or mixed orderings.
- If the input ideal i is weighted homogeneous a weighted ordering
- may be used (qhweight(i); computes weights).
-
-*Example:*
- LIB "normal.lib";
- ring r=32003,(x,y,z),wp(2,1,2);
- ideal i=z3-xy4;
- list nor=normal(i);
- ==>
- ==> // 'normal' created a list of 1 ring(s).
- ==> // nor[1+1] is the delta-invariant in case of choose=wd.
- ==> // To see the rings, type (if the name of your list is nor):
- ==> show( nor);
- ==> // To access the 1-st ring and map (similar for the others), type:
- ==> def R = nor[1]; setring R; norid; normap;
- ==> // R/norid is the 1-st ring of the normalization and
- ==> // normap the map from the original basering to R/norid
- show(nor);
- ==> // list, 1 element(s):
- ==> [1]:
- ==> // ring: (32003),(T(1),T(2),T(3)),(a(2,1,1),dp(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // normap [0] ideal, 3 generator(s)
- ==> // norid [0] ideal, 1 generator(s)
- def r1=nor[1];
- setring r1;
- norid;
- ==> norid[1]=T(3)3-T(1)T(2)
- normap;
- ==> normap[1]=T(1)
- ==> normap[2]=T(2)
- ==> normap[3]=T(2)T(3)
- ring s=0,(x,y),dp;
- ideal i=(x-y^2)^2 - y*x^3;
- nor=normal(i,"wd");
- ==>
- ==> // 'normal' created a list of 1 ring(s).
- ==> // nor[1+1] is the delta-invariant in case of choose=wd.
- ==> // To see the rings, type (if the name of your list is nor):
- ==> show( nor);
- ==> // To access the 1-st ring and map (similar for the others), type:
- ==> def R = nor[1]; setring R; norid; normap;
- ==> // R/norid is the 1-st ring of the normalization and
- ==> // normap the map from the original basering to R/norid
- //the delta-invariant
- nor[size(nor)];
- ==> 3
-
-
-File: sing.info, Node: HomJJ, Next: genus, Prev: normal, Up: normal_lib
-
-D.4.6.2 HomJJ
-.............
-
-Procedure from library `normal.lib' (*note normal_lib::).
-
-*Usage:*
- HomJJ (Li); Li = list: ideal SBid, ideal id, ideal J, poly p
-
-*Assume:*
- R = P/id, P = basering, a polynomial ring, id an ideal of P,
- SBid = standard basis of id,
- J = ideal of P containing the polynomial p,
- p = nonzero divisor of R
-
-*Compute:*
- Endomorphism ring End_R(J)=Hom_R(J,J) with its ring structure as
- affine ring, together with the canonical map R -> Hom_R(J,J), where
- R is the quotient ring of P modulo the standard basis SBid.
-
-*Return:*
- a list l of two objects
-
- l[1] : a polynomial ring, containing two ideals, 'endid' and
'endphi'
- such that l[1]/endid = Hom_R(J,J) and
- endphi describes the canonical map R -> Hom_R(J,J)
- l[2] : an integer which is 1 if phi is an isomorphism, 0 if not
- l[3] : an integer, the contribution to delta
-
-*Note:*
- printlevel >=1: display comments (default: printlevel=0)
-
-*Example:*
- LIB "normal.lib";
- ring r = 0,(x,y),wp(2,3);
- ideal id = y^2-x^3;
- ideal J = x,y;
- poly p = x;
- list Li = std(id),id,J,p;
- list L = HomJJ(Li);
- def end = L[1]; // defines ring L[1], containing ideals endid, endphi
- setring end; // makes end the basering
- end;
- ==> // characteristic : 0
- ==> // number of vars : 1
- ==> // block 1 : ordering dp
- ==> // : names T(1)
- ==> // block 2 : ordering C
- endid; // end/endid is isomorphic to End(r/id) as ring
- ==> endid[1]=0
- map psi = r,endphi;// defines the canonical map r/id -> End(r/id)
- psi;
- ==> psi[1]=T(1)^2
- ==> psi[2]=T(1)^3
-
-
-File: sing.info, Node: genus, Next: deltaLoc, Prev: HomJJ, Up: normal_lib
-
-D.4.6.3 genus
-.............
-
-Procedure from library `normal.lib' (*note normal_lib::).
-
-*Usage:*
- genus(I) or genus(i,1); I a 1-dimensional ideal
-
-*Return:*
- an integer, the geometric genus p_g = p_a - delta of the projective
- curve defined by I, where p_a is the arithmetic genus.
-
-*Note:*
- delta is the sum of all local delta-invariants of the
- singularities, i.e. dim(R'/R), R' the normalization of the local
- ring R of the singularity.
- genus(i,1) uses the normalization to compute delta. Usually this is
- slow but sometimes not.
-
-*Example:*
- LIB "normal.lib";
- ring r=0,(x,y),dp;
- ideal i=y^9 - x^2*(x - 1)^9;
- genus(i);
- ==> 0
-
-
-File: sing.info, Node: deltaLoc, Prev: genus, Up: normal_lib
-
-D.4.6.4 deltaLoc
-................
-
-Procedure from library `normal.lib' (*note normal_lib::).
-
-*Usage:*
- deltaLoc(f,J); f poly, J ideal
-
-*Assume:*
- f is reduced bivariate polynomial; basering has exactly two
- variables; J is irreducible prime component of the singular locus
- of f (e.g., one entry of the output of `minAssGTZ(I);', I =
- <f,jacob(f)>).
-
-*Return:*
- list L:
-
- `L[1]'; int:
- the sum of (local) delta invariants of f at the (conjugated)
- singular points given by J.
-
- `L[2]'; int:
- the sum of (local) Tjurina numbers of f at the (conjugated)
- singular points given by J.
-
- `L[3]'; int:
- the sum of (local) number of branches of f at the (conjugated)
- singular points given by J.
-
-*Note:*
- procedure makes use of `execute'; increasing printlevel displays
- more comments (default: printlevel=0).
-
-*Example:*
- LIB "normal.lib";
- ring r=0,(x,y),dp;
- poly f=(x2+y^2-1)^3 +27x2y2;
- ideal I=f,jacob(f);
- I=std(I);
- list qr=minAssGTZ(I);
- size(qr);
- ==> 6
- // each component of the singular locus either describes a cusp or a pair
- // of conjugated nodes:
- deltaLoc(f,qr[1]);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
- deltaLoc(f,qr[2]);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
- deltaLoc(f,qr[3]);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
- deltaLoc(f,qr[4]);
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
- deltaLoc(f,qr[5]);
- ==> [1]:
- ==> 2
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 4
- deltaLoc(f,qr[6]);
- ==> [1]:
- ==> 2
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 4
-
-* Menu:
-
-See also:
-* delta::
-* tjurina::
-
-*See also:* *note delta::; *note tjurina::.
-
-
-File: sing.info, Node: primdec_lib, Next: primitiv_lib, Prev: normal_lib,
Up: Commutative algebra
-
-D.4.7 primdec_lib
------------------
-
-*Library:*
- primdec.lib
-
-*Purpose:*
- Primary Decomposition and Radical of Ideals
-
-*Authors:*
- Gerhard Pfister, address@hidden (GTZ)
- Wolfram Decker, address@hidden (SY)
- Hans Schoenemann, address@hidden (SY)
-
-*Overview:*
- Algorithms for primary decomposition based on the ideas of Gianni,
- Trager and Zacharias (implementation by Gerhard Pfister),
- respectively based on the ideas of Shimoyama and Yokoyama
- (implementation by Wolfram Decker and Hans Schoenemann).
- The procedures are implemented to be used in characteristic 0.
- They also work in positive characteristic >> 0.
- In small characteristic and for algebraic extensions, primdecGTZ
- may not terminate.
- Algorithms for the computation of the radical based on the ideas of
- Krick, Logar and Kemper (implementation by Gerhard Pfister).
-
-*Procedures:*
-
-* Menu:
-
-* Ann:: annihilator of R^n/M, R=basering, M in R^n
-* primdecGTZ:: complete primary decomposition via Gianni,Trager,Zacharias
-* primdecSY:: complete primary decomposition via Shimoyama-Yokoyama
-* minAssGTZ:: the minimal associated primes via Gianni,Trager,Zacharias
-* minAssChar:: the minimal associated primes using characteristic sets
-* testPrimary:: tests the result of the primary decomposition
-* radical:: computes the radical of I via Krick/Logar and Kemper
-* radicalEHV:: computes the radical of I via Eisenbud,Huneke,Vasconcelos
-* equiRadical:: the radical of the equidimensional part of the ideal I
-* prepareAss:: list of radicals of the equidimensional components of I
-* equidim:: weak equidimensional decomposition of I
-* equidimMax:: equidimensional locus of I
-* equidimMaxEHV:: equidimensional locus of I via Eisenbud,Huneke,Vasconcelos
-* zerodec:: zerodimensional decomposition via Monico
-
-
-File: sing.info, Node: Ann, Next: primdecGTZ, Up: primdec_lib
-
-D.4.7.1 Ann
-...........
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-
-File: sing.info, Node: primdecGTZ, Next: primdecSY, Prev: Ann, Up:
primdec_lib
-
-D.4.7.2 primdecGTZ
-..................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- primdecGTZ(i); i ideal
-
-*Return:*
- a list pr of primary ideals and their associated primes:
-
- pr[i][1] the i-th primary component,
- pr[i][2] the i-th prime component.
-
-*Note:*
- Algorithm of Gianni/Trager/Zacharias.
- Designed for characteristic 0, works also in char k > 0, if it
- terminates (may result in an infinite loop in small
- characteristic!)
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),lp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- list pr = primdecGTZ(i);
- pr;
- ==> [1]:
- ==> [1]:
- ==> _[1]=z6+4z3+4
- ==> _[2]=y-z2
- ==> [2]:
- ==> _[1]=z3+2
- ==> _[2]=y-z2
- ==> [2]:
- ==> [1]:
- ==> _[1]=z2+1
- ==> _[2]=y-z2
- ==> [2]:
- ==> _[1]=z2+1
- ==> _[2]=y-z2
-
-
-File: sing.info, Node: primdecSY, Next: minAssGTZ, Prev: primdecGTZ, Up:
primdec_lib
-
-D.4.7.3 primdecSY
-.................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- primdecSY(i); i ideal, c int
-
-*Return:*
- a list pr of primary ideals and their associated primes:
-
- pr[i][1] the i-th primary component,
- pr[i][2] the i-th prime component.
-
-*Note:*
- Algorithm of Shimoyama/Yokoyama.
-
- if c=0, the given ordering of the variables is used,
- if c=1, minAssChar tries to use an optimal ordering,
- if c=2, minAssGTZ is used,
- if c=3, minAssGTZ and facstd are used.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),lp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- list pr = primdecSY(i);
- pr;
- ==> [1]:
- ==> [1]:
- ==> _[1]=z6+4z3+4
- ==> _[2]=y-z2
- ==> [2]:
- ==> _[1]=z3+2
- ==> _[2]=y-z2
- ==> [2]:
- ==> [1]:
- ==> _[1]=z2+1
- ==> _[2]=y+1
- ==> [2]:
- ==> _[1]=z2+1
- ==> _[2]=y+1
-
-
-File: sing.info, Node: minAssGTZ, Next: minAssChar, Prev: primdecSY, Up:
primdec_lib
-
-D.4.7.4 minAssGTZ
-.................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- minAssGTZ(i); i ideal
- minAssGTZ(i,1); i ideal does not use the factorizing Groebner
-
-*Return:*
- a list, the minimal associated prime ideals of i.
-
-*Note:*
- Designed for characteristic 0, works also in char k > 0 based on an
- algorithm of Yokoyama
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- list pr = minAssGTZ(i);
- pr;
- ==> [1]:
- ==> _[1]=z2+1
- ==> _[2]=-z2+y
- ==> [2]:
- ==> _[1]=z3+2
- ==> _[2]=-z2+y
-
-
-File: sing.info, Node: minAssChar, Next: testPrimary, Prev: minAssGTZ, Up:
primdec_lib
-
-D.4.7.5 minAssChar
-..................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- minAssChar(i[,c]); i ideal, c int.
-
-*Return:*
- list, the minimal associated prime ideals of i.
-
-*Note:*
- If c=0, the given ordering of the variables is used.
- Otherwise, the system tries to find an optimal ordering, which in
- some cases may considerably speed up the algorithm.
- Due to a bug in the factorization, the result may be not completely
- decomposed in small characteristic.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- list pr = minAssChar(i);
- pr;
- ==> [1]:
- ==> _[1]=y+1
- ==> _[2]=z2+1
- ==> [2]:
- ==> _[1]=z2-y
- ==> _[2]=yz+2
- ==> _[3]=y2+2z
-
-
-File: sing.info, Node: testPrimary, Next: radical, Prev: minAssChar, Up:
primdec_lib
-
-D.4.7.6 testPrimary
-...................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- testPrimary(pr,k); pr a list, k an ideal.
-
-*Assume:*
- pr is the result of primdecGTZ(k) or primdecSY(k).
-
-*Return:*
- int, 1 if the intersection of the ideals in pr is k, 0 if not
-
-*Example:*
- LIB "primdec.lib";
- ring r = 32003,(x,y,z),dp;
- poly p = z2+1;
- poly q = z4+2;
- ideal i = p^2*q^3,(y-z3)^3,(x-yz+z4)^4;
- list pr = primdecGTZ(i);
- testPrimary(pr,i);
- ==> 1
-
-
-File: sing.info, Node: radical, Next: radicalEHV, Prev: testPrimary, Up:
primdec_lib
-
-D.4.7.7 radical
-...............
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- radical(i); i ideal.
-
-*Return:*
- ideal, the radical of i.
-
-*Note:*
- A combination of the algorithms of Krick/Logar and Kemper is used.
- Works also in positive characteristic (Kempers algorithm).
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- ideal pr= radical(i);
- pr;
- ==> pr[1]=z2-y
- ==> pr[2]=y2z+yz+2y+2
-
-
-File: sing.info, Node: radicalEHV, Next: equiRadical, Prev: radical, Up:
primdec_lib
-
-D.4.7.8 radicalEHV
-..................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- radicalEHV(i); i ideal.
-
-*Return:*
- ideal, the radical of i.
-
-*Note:*
- Uses the algorithm of Eisenbud/Huneke/Vasconcelos, which reduces
- the computation to the complete intersection case, by taking, in
- the general case, a generic linear combination of the input.
- Works only in characteristic 0 or p large.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- ideal pr= radicalEHV(i);
- pr;
- ==> pr[1]=z2-y
- ==> pr[2]=y2z+yz+2y+2
- ==> pr[3]=y3+y2+2yz+2z
-
-
-File: sing.info, Node: equiRadical, Next: prepareAss, Prev: radicalEHV,
Up: primdec_lib
-
-D.4.7.9 equiRadical
-...................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- equiRadical(i); i ideal
-
-*Return:*
- ideal, intersection of associated primes of i of maximal dimension.
-
-*Note:*
- A combination of the algorithms of Krick/Logar and Kemper is used.
- Works also in positive characteristic (Kempers algorithm).
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- ideal pr= equiRadical(i);
- pr;
- ==> pr[1]=z2-y
- ==> pr[2]=y2z+yz+2y+2
-
-
-File: sing.info, Node: prepareAss, Next: equidim, Prev: equiRadical, Up:
primdec_lib
-
-D.4.7.10 prepareAss
-...................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- prepareAss(i); i ideal
-
-*Return:*
- list, the radicals of the maximal dimensional components of i.
-
-*Note:*
- Uses algorithm of Eisenbud/Huneke/Vasconcelos.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- poly p = z2+1;
- poly q = z3+2;
- ideal i = p*q^2,y-z2;
- list pr = prepareAss(i);
- pr;
- ==> [1]:
- ==> _[1]=z2-y
- ==> _[2]=y2z+yz+2y+2
-
-
-File: sing.info, Node: equidim, Next: equidimMax, Prev: prepareAss, Up:
primdec_lib
-
-D.4.7.11 equidim
-................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- equidim(i) or equidim(i,1) ; i ideal
-
-*Return:*
- list of equidimensional ideals a[1],...,a[s] with:
- - a[s] the equidimensional locus of i, i.e. the intersection of the
- primary ideals of dimension of i
- - a[1],...,a[s-1] the lower dimensional equidimensional loci.
-
-*Note:*
- An embedded component q (primary ideal) of i can be replaced in the
- decomposition by a primary ideal q1 with the same radical as q.
- `equidim(i,1)' uses the algorithm of Eisenbud/Huneke/Vasconcelos.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 32003,(x,y,z),dp;
- ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
- equidim(i);
- ==> [1]:
- ==> _[1]=z4
- ==> _[2]=y5
- ==> _[3]=x5
- ==> _[4]=x3z3
- ==> _[5]=x4y4
- ==> [2]:
- ==> _[1]=yz
- ==> _[2]=xz
- ==> _[3]=x2
- ==> [3]:
- ==> _[1]=z
-
-
-File: sing.info, Node: equidimMax, Next: equidimMaxEHV, Prev: equidim, Up:
primdec_lib
-
-D.4.7.12 equidimMax
-...................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- equidimMax(i); i ideal
-
-*Return:*
- ideal of equidimensional locus (of maximal dimension) of i.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 32003,(x,y,z),dp;
- ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
- equidimMax(i);
- ==> _[1]=z
-
-
-File: sing.info, Node: equidimMaxEHV, Next: zerodec, Prev: equidimMax, Up:
primdec_lib
-
-D.4.7.13 equidimMaxEHV
-......................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- equidimMaxEHV(i); i ideal
-
-*Return:*
- ideal, the equidimensional component (of maximal dimension) of i.
-
-*Note:*
- Uses algorithm of Eisenbud, Huneke and Vasconcelos.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y,z),dp;
- ideal i=intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
- equidimMaxEHV(i);
- ==> _[1]=z
-
-
-File: sing.info, Node: zerodec, Prev: equidimMaxEHV, Up: primdec_lib
-
-D.4.7.14 zerodec
-................
-
-Procedure from library `primdec.lib' (*note primdec_lib::).
-
-*Usage:*
- zerodec(I); I ideal
-
-*Assume:*
- I is zero-dimensional, the characteristic of the ground field is 0
-
-*Return:*
- list of primary ideals, the zero-dimensional decomposition of I
-
-*Note:*
- The algorithm (of Monico), works well only for a small total number
- of solutions (`vdim(std(I))' should be < 100) and without
- parameters. In practice, it works also in large characteristic p>0
- but may fail for small p.
- If printlevel > 0 (default = 0) additional information is
- displayed.
-
-*Example:*
- LIB "primdec.lib";
- ring r = 0,(x,y),dp;
- ideal i = x2-2,y2-2;
- list pr = zerodec(i);
- pr;
- ==> [1]:
- ==> _[1]=y2-2
- ==> _[2]=xy-2
- ==> _[3]=x2-2
- ==> [2]:
- ==> _[1]=y2-2
- ==> _[2]=xy+2
- ==> _[3]=x2-2
-
-
-File: sing.info, Node: primitiv_lib, Next: reesclos_lib, Prev: primdec_lib,
Up: Commutative algebra
-
-D.4.8 primitiv_lib
-------------------
-
-*Library:*
- primitiv.lib
-
-*Purpose:*
- Computing a Primitive Element
-
-*Author:*
- Martin Lamm, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* primitive:: find minimal polynomial for a primitive element
-* primitive_extra:: find primitive element for two generators
-* splitring:: define ring extension with name R and switch to it
-
-
-File: sing.info, Node: primitive, Next: primitive_extra, Up: primitiv_lib
-
-D.4.8.1 primitive
-.................
-
-Procedure from library `primitiv.lib' (*note primitiv_lib::).
-
-*Usage:*
- primitive(i); i ideal
-
-*Assume:*
- i is given by generators m[1],...,m[n] such that for j=1,...,n
- - m[j] is a polynomial in k[x(1),...,x(j)]
- - m[j](a[1],...,a[j-1],x(j)) is the minimal polynomial for a[j]
- over k(a[1],...,a[j-1])
- (k the ground field of the current basering and x(1),...,x(n) the
- ring variables).
-
-*Return:*
- ideal j in k[x(n)] with
- - j[1] a minimal polynomial for a primitive element b of
- k(a[1],...,a[n]) over k,
- - j[2],...,j[n+1] polynomials in k[x(n)] such that j[i+1](b)=a[i]
- for i=1,...,n.
-
-*Note:*
- the number of variables in the basering has to be exactly n, the
- number of given generators (i.e., minimal polynomials).
- If the ground field k has only a few elements it may happen that no
- linear combination of a[1],...,a[n] is a primitive element. In this
- case `primitive(i)' returns the zero ideal, and one should use
- `primitive_extra(i)' instead.
-
-*Example:*
- LIB "primitiv.lib";
- ring exring=0,(x,y),dp;
- ideal i=x2+1,y2-x; // compute Q(i,i^(1/2))=:L
- ideal j=primitive(i);
- j[1]; // L=Q(a) with a=(-1)^(1/4)
- ==> y4+1
- j[2]; // i=a^2
- ==> y2
- j[3]; // i^(1/2)=a
- ==> y
- // the 2nd element was already primitive!
- j=primitive(ideal(x2-2,y2-3)); // compute Q(sqrt(2),sqrt(3))
- j[1];
- ==> y4-10y2+1
- j[2];
- ==> 1/2y3-9/2y
- j[3];
- ==> -1/2y3+11/2y
- // no element was primitive -- the calculation of primitive elements
- // is based on a random choice.
-
-* Menu:
-
-See also:
-* primitive_extra::
-
-*See also:* *note primitive_extra::.
-
-
-File: sing.info, Node: primitive_extra, Next: splitring, Prev: primitive,
Up: primitiv_lib
-
-D.4.8.2 primitive_extra
-.......................
-
-Procedure from library `primitiv.lib' (*note primitiv_lib::).
-
-*Usage:*
- primitive_extra(i); i ideal
-
-*Assume:*
- The ground field of the basering is k=Q or k=Z/pZ and the ideal i
- is given by 2 generators f,g with the following properties:
-
- f is the minimal polynomial of a in k[x],
- g is a polynomial in k[x,y] s.th. g(a,y) is the minpoly of b in
k(a)[y].
-
- Here, x is the name of the first ring variable, y the name of the
- second.
-
-*Return:*
- ideal j in k[y] such that
-
- j[1] is the minimal polynomial for a primitive element c of k(a,b)
over k,
- j[2] is a polynomial s.th. j[2](c)=a.
-
-*Note:*
- While `primitive(i)' may fail for finite fields,
- `primitive_extra(i)' tries all elements of k(a,b) and, hence,
- always finds a primitive element.
- In order to do this (try all elements), field extensions like
- Z/pZ(a) are not allowed for the ground field k.
- `primitive_extra(i)' assumes that the second generator, g, is monic
- as polynomial in (k[x])[y].
-
-*Example:*
- LIB "primitiv.lib";
- ring exring=3,(x,y),dp;
- ideal i=x2+1,y3+y2-1;
- primitive_extra(i);
- ==> _[1]=y6-y5+y4-y3-y-1
- ==> _[2]=y5+y4+y2+y+1
- ring extension=(3,y),x,dp;
- minpoly=y6-y5+y4-y3-y-1;
- number a=y5+y4+y2+y+1;
- a^2;
- ==> -1
- factorize(x2+1);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x+(-y5-y4-y2-y-1)
- ==> _[3]=x+(y5+y4+y2+y+1)
- ==> [2]:
- ==> 1,1,1
- factorize(x3+x2-1);
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=x+(-y5-y4-y3-y2-y-1)
- ==> _[3]=x+(y5+y4+y2+1)
- ==> _[4]=x+(y3+y+1)
- ==> [2]:
- ==> 1,1,1,1
-
-
-File: sing.info, Node: splitring, Prev: primitive_extra, Up: primitiv_lib
-
-D.4.8.3 splitring
-.................
-
-Procedure from library `primitiv.lib' (*note primitiv_lib::).
-
-*Usage:*
- splitring(f,R[,L]); f poly, R string, L list of polys and/or ideals
- (optional)
-
-*Assume:*
- f is univariate and irreducible over the active basering.
- The active ring must allow an algebraic extension (e.g., it cannot
- be a transcendent ring extension of Q or Z/p).
-
-*Create:*
- a ring with name R, in which f is reducible, and CHANGE to it.
-
-*Return:*
- list L mapped into the new ring R, if L is given; else nothing
-
-*Note:*
- If the old ring has no parameter, the name `a' is chosen for the
- parameter of R (if `a' is no ring variable; if it is, `b' is
- chosen, etc.; if `a,b,c,o' are ring variables, `splitring(f,R[,L])'
- produces an error message), otherwise the name of the parameter is
- kept and only the minimal polynomial is changed.
- The names of the ring variables and the orderings are not affected.
-
- It is also allowed to call `splitring' with R="". Then the old
- basering will be REPLACED by the new ring (with the same name as
- the old ring).
-
-*Example:*
- LIB "primitiv.lib";
- ring r=0,(x,y),dp;
- splitring(x2-2,"r1"); // change to Q(sqrt(2))
- // change to Q(sqrt(2),sqrt(sqrt(2)))=Q(a) and return the transformed
- // old parameter:
- splitring(x2-a,"r2",a);
- ==> // new minimal polynomial: a4-2
- ==> [1]:
- ==> (a2)
- // the result is (a)^2 = (sqrt(sqrt(2)))^2
- nameof(basering);
- ==> r2
- r2;
- ==> // characteristic : 0
- ==> // 1 parameter : a
- ==> // minpoly : (a4-2)
- ==> // number of vars : 2
- ==> // block 1 : ordering dp
- ==> // : names x y
- ==> // block 2 : ordering C
- kill r1; kill r2;
-
-
-File: sing.info, Node: reesclos_lib, Next: intprog_lib, Prev: primitiv_lib,
Up: Commutative algebra
-
-D.4.9 reesclos_lib
-------------------
-
-*Library:*
- reesclos.lib
-
-*Purpose:*
- procedures to compute the int. closure of an ideal
-
-*Author:*
- Tobias Hirsch, email: address@hidden
-
-*Overview:*
- A library to compute the integral closure of an ideal I in a
- polynomial ring R=K[x(1),...,x(n)] using the Rees Algebra R[It] of
- I. It computes the integral closure of R[It] (in the same manner as
- done in the library 'normal.lib'), which is a graded subalgebra of
- R[t]. The degree-k-component is the integral closure of the k-th
- power of I.
- These procedures can also be used to compute the integral closure
- R^ of an integral domain R=k[x(1),...,x(n)]/ker, ker a prime ideal,
- in its quotient field K=Q(R), as an affine ring
- R^=k[T(1),...,T(s)]]/J and to get representations of elements of R^
- as fractions of elements of R.
-
-*Procedures:*
-
-* Menu:
-
-* ReesAlgebra:: computes the Rees Algebra of an ideal I
-* normalI:: computes the integral closure of an ideal I using R[It]
-* primeClosure:: computes the integral closure of the int. domain R
-* closureRingtower:: defines the rings in the list L as global objects R(i)
-* closureFrac:: computes fractions representing elements of R^=L[n]
-
-
-File: sing.info, Node: ReesAlgebra, Next: normalI, Up: reesclos_lib
-
-D.4.9.1 ReesAlgebra
-...................
-
-Procedure from library `reesclos.lib' (*note reesclos_lib::).
-
-*Usage:*
- ReesAlgebra (I); I = ideal
-
-*Return:*
- The Rees algebra R[It] as an affine ring, where I is an ideal in R.
- The procedure returns a list containing two rings:
- [1]: a ring, say RR; in the ring an ideal ker such that
- R[It]=RR/ker
-
- [2]: a ring, say Kxt; the basering with additional variable t
- containing an ideal mapI that defines the map RR->Kxt
-
-*Example:*
- LIB "reesclos.lib";
- ring R = 0,(x,y),dp;
- ideal I = x2,xy4,y5;
- list L = ReesAlgebra(I);
- def Rees = L[1]; // defines the ring Rees, containing the ideal ker
- setring Rees; // passes to the ring Rees
- Rees;
- ==> // characteristic : 0
- ==> // number of vars : 5
- ==> // block 1 : ordering dp
- ==> // : names x y U(1) U(2) U(3)
- ==> // block 2 : ordering C
- ker; // R[It] is isomorphic to Rees/ker
- ==> ker[1]=y*U(2)-x*U(3)
- ==> ker[2]=y^3*U(1)*U(3)-U(2)^2
- ==> ker[3]=y^4*U(1)-x*U(2)
- ==> ker[4]=x*y^2*U(1)*U(3)^2-U(2)^3
- ==> ker[5]=x^2*y*U(1)*U(3)^3-U(2)^4
- ==> ker[6]=x^3*U(1)*U(3)^4-U(2)^5
-
-
-File: sing.info, Node: normalI, Next: primeClosure, Prev: ReesAlgebra, Up:
reesclos_lib
-
-D.4.9.2 normalI
-...............
-
-Procedure from library `reesclos.lib' (*note reesclos_lib::).
-
-*Usage:*
- normalI(I [,p[,c]]); I an ideal, p and c optional integers
-
-*Return:*
- the integral closure of I,...,I^p. If p is not given, or p==0,
- compute the closure of all powers up to the maximum degree in t
- occurring in the generators of the closure of R[It] (so this is the
- last one that is not just the sum/product of the above ones). c is
- transferred to the procedure primeClosure and toggles its behavior
- in computing the integral closure of R[It].
- The result is a list containing the closure of the desired powers
- of I as ideals of the basering.
-
-*Example:*
- LIB "reesclos.lib";
- ring R=0,(x,y),dp;
- ideal I = x2,xy4,y5;
- list J = normalI(I);
- I;
- ==> I[1]=x2
- ==> I[2]=xy4
- ==> I[3]=y5
- J; // J[1] is the integral closure of I
- ==> [1]:
- ==> _[1]=x2
- ==> _[2]=y5
- ==> _[3]=-xy3
-
-
-File: sing.info, Node: primeClosure, Next: closureRingtower, Prev: normalI,
Up: reesclos_lib
-
-D.4.9.3 primeClosure
-....................
-
-Procedure from library `reesclos.lib' (*note reesclos_lib::).
-
-*Usage:*
- primeClosure(L [,c]); L a list of a ring containing a prime ideal
- ker, c an optional integer
-
-*Return:*
- a list L consisting of rings L[1],...,L[n] such that
- - L[1] is a copy of (not a reference to!) the input ring L[1] - all
- rings L[i] contain ideals ker, L[2],...,L[n] contain ideals phi
- such that
- L[1]/ker -> ... -> L[n]/ker
- are injections given by the corresponding ideals phi, and L[n]/ker
- is the integral closure of L[1]/ker in its quotient field. - all
- rings L[i] contain a polynomial nzd such that elements of L[i]/ker
- are quotients of elements of L[i-1]/ker with denominator nzd via
- the injection phi.
-
-*Note:*
- - L is constructed by recursive calls of primeClosure itself. - c
- determines the choice of nzd:
- - c not given or equal to 0: first generator of the ideal SL, the
- singular locus of Spec(L[i]/ker)
- - c<>0: the generator of SL with least number of monomials.
-
-*Example:*
- LIB "reesclos.lib";
- ring R=0,(x,y),dp;
- ideal I=x4,y4;
- def K=ReesAlgebra(I)[1]; // K contains ker such that K/ker=R[It]
- list L=primeClosure(K);
- def R(1)=L[1]; // L[4] contains ker, L[4]/ker is the
- def R(4)=L[4]; // integral closure of L[1]/ker
- setring R(1);
- R(1);
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names x y U(1) U(2)
- ==> // block 2 : ordering C
- ker;
- ==> ker[1]=y^4*U(1)-x^4*U(2)
- setring R(4);
- R(4);
- ==> // characteristic : 0
- ==> // number of vars : 7
- ==> // block 1 : ordering a
- ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
- ==> // : weights 1 1 1 1 1 1 1
- ==> // block 2 : ordering dp
- ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
- ==> // block 3 : ordering C
- ker;
- ==> ker[1]=T(2)*T(5)-T(1)*T(7)
- ==> ker[2]=T(1)*T(5)-T(2)*T(6)
- ==> ker[3]=T(5)*T(6)-T(3)*T(7)
- ==> ker[4]=T(4)*T(6)-T(5)*T(7)
- ==> ker[5]=T(5)^2-T(6)*T(7)
- ==> ker[6]=T(4)*T(5)-T(7)^2
- ==> ker[7]=T(3)*T(5)-T(6)^2
- ==> ker[8]=T(2)^2*T(6)-T(1)^2*T(7)
- ==> ker[9]=T(3)*T(4)-T(6)*T(7)
- ==> ker[10]=T(1)*T(4)-T(2)*T(7)
- ==> ker[11]=T(2)*T(3)-T(1)*T(6)
- ==> ker[12]=T(2)^2*T(6)^2-T(1)^2*T(6)*T(7)
-
-
-File: sing.info, Node: closureRingtower, Next: closureFrac, Prev:
primeClosure, Up: reesclos_lib
-
-D.4.9.4 closureRingtower
-........................
-
-Procedure from library `reesclos.lib' (*note reesclos_lib::).
-
-*Usage:*
- closureRingtower(list L); L a list of rings
-
-*Create:*
- rings R(1),...,R(n) such that R(i)=L[i] for all i
-
-*Example:*
- LIB "reesclos.lib";
- ring R=0,(x,y),dp;
- ideal I=x4,y4;
- list L=primeClosure(ReesAlgebra(I)[1]);
- closureRingtower(L);
- R(1);
- ==> // characteristic : 0
- ==> // number of vars : 4
- ==> // block 1 : ordering dp
- ==> // : names x y U(1) U(2)
- ==> // block 2 : ordering C
- R(4);
- ==> // characteristic : 0
- ==> // number of vars : 7
- ==> // block 1 : ordering a
- ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
- ==> // : weights 1 1 1 1 1 1 1
- ==> // block 2 : ordering dp
- ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
- ==> // block 3 : ordering C
-
-
-File: sing.info, Node: closureFrac, Prev: closureRingtower, Up: reesclos_lib
-
-D.4.9.5 closureFrac
-...................
-
-Procedure from library `reesclos.lib' (*note reesclos_lib::).
-
-*Create:*
- a list fraction of two elements of L[1], such that
- f=fraction[1]/fraction[2] via the injections phi L[i]->L[i+1].
-
-*Example:*
- LIB "reesclos.lib";
- ring R=0,(x,y),dp;
- ideal ker=x2+y2;
- export R;
- ==> // ** `R` is already global
- list L=primeClosure(R); // We normalize R/ker
- closureRingtower(L); // Now R/ker=R(1) with normalization R(2)
- setring R(2);
- kill(R);
- phi; // The map R(1)-->R(2)
- ==> phi[1]=T(1)*T(2)
- ==> phi[2]=T(1)
- poly f=T(1)*T(2); // We will get a representation of f
- export R(2);
- ==> // ** `R(2)` is already global
- closureFrac(L);
- setring R(1);
- kill (R(2));
- fraction; // f=fraction[1]/fraction[2] via phi
- ==> [1]:
- ==> xy
- ==> [2]:
- ==> y
-
-
-File: sing.info, Node: intprog_lib, Next: toric_lib, Prev: reesclos_lib,
Up: Commutative algebra
-
-D.4.10 intprog_lib
-------------------
-
-*Library:*
- intprog.lib
-
-*Purpose:*
- Integer Programming with Groebner Basis Methods
-
-*Author:*
- Christine Theis, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* solve_IP:: procedures for solving Integer Programming problems
-
-
-File: sing.info, Node: solve_IP, Up: intprog_lib
-
-D.4.10.1 solve_IP
-.................
-
-Procedure from library `intprog.lib' (*note intprog_lib::).
-
-*Usage:*
- solve_IP(A,bx,c,alg); A intmat, bx intvec, c intvec, alg string.
- solve_IP(A,bx,c,alg); A intmat, bx list of intvec, c intvec, alg
- string.
- solve_IP(A,bx,c,alg,prsv); A intmat, bx intvec, c intvec, alg
- string, prsv intvec.
- solve_IP(A,bx,c,alg,prsv); A intmat, bx list of intvec, c intvec,
- alg string, prsv intvec.
-
-*Return:*
- same type as bx: solution of the associated integer programming
- problem(s) as explained in
-
- *note Toric ideals and integer programming::.
-
-*Note:*
- This procedure returns the solution(s) of the given IP-problem(s)
- or the message `not solvable'.
- One may call the procedure with several different algorithms:
- - the algorithm of Conti/Traverso (ct),
- - the positive variant of the algorithm of Conti/Traverso (pct),
- - the algorithm of Conti/Traverso using elimination (ect),
- - the algorithm of Pottier (pt),
- - an algorithm of Bigatti/La Scala/Robbiano (blr),
- - the algorithm of Hosten/Sturmfels (hs),
- - the algorithm of DiBiase/Urbanke (du). The argument `alg' should
- be the abbreviation for an algorithm as above: ct, pct, ect, pt,
- blr, hs or du.
-
- `ct' allows computation of an optimal solution of the IP-problem
- directly from the right-hand vector b.
- The same is true for its `positive' variant `pct' which may only be
- applied if A and b have nonnegative entries.
- All other algorithms need initial solutions of the IP-problem.
-
- If `alg' is chosen to be `ct' or `pct', bx is read as the right
- hand vector b of the system Ax=b. b should then be an intvec of
- size m where m is the number of rows of A.
- Furthermore, bx and A should be nonnegative if `pct' is used. If
- `alg' is chosen to be `ect',`pt',`blr',`hs' or `du', bx is read as
- an initial solution x of the system Ax=b. bx should then be a
- nonnegative intvec of size n where n is the number of columns of A.
-
- If `alg' is chosen to be `blr' or `hs', the algorithm needs a
- vector with positive coefficients in the row space of A.
- If no row of A contains only positive entries, one has to use the
- versions of solve_IP which take such a vector prsv as an argument.
-
- solve_IP may also be called with a list bx of intvecs instead of a
- single intvec.
-
-*Example:*
- LIB "intprog.lib";
- // 1. call with single right-hand vector
- intmat A[2][3]=1,1,0,0,1,1;
- intvec b1=1,1;
- intvec c=2,2,1;
- intvec solution_vector=solve_IP(A,b1,c,"pct");
- solution_vector;"";
- ==> 0,1,0
- ==>
- // 2. call with list of right-hand vectors
- intvec b2=-1,1;
- list l=b1,b2;
- l;
- ==> [1]:
- ==> 1,1
- ==> [2]:
- ==> -1,1
- list solution_list=solve_IP(A,l,c,"ct");
- solution_list;"";
- ==> [1]:
- ==> 0,1,0
- ==> [2]:
- ==> not solvable
- ==>
- // 3. call with single initial solution vector
- A=2,1,-1,-1,1,2;
- b1=3,4,5;
- solve_IP(A,b1,c,"du");"";
- ==> 0,7,2
- ==>
- // 4. call with single initial solution vector
- // and algorithm needing a positive row space vector
- solution_vector=solve_IP(A,b1,c,"hs");"";
- ==> ERROR: The chosen algorithm needs a positive vector in the row space
of t\
- he matrix.
- ==> 0
- ==>
- // 5. call with single initial solution vector
- // and positive row space vector
- intvec prsv=1,2,1;
- solution_vector=solve_IP(A,b1,c,"hs",prsv);
- solution_vector;"";
- ==> 0,7,2
- ==>
- // 6. call with list of initial solution vectors
- // and positive row space vector
- b2=7,8,0;
- l=b1,b2;
- l;
- ==> [1]:
- ==> 3,4,5
- ==> [2]:
- ==> 7,8,0
- solution_list=solve_IP(A,l,c,"blr",prsv);
- solution_list;
- ==> [1]:
- ==> 0,7,2
- ==> [2]:
- ==> 7,8,0
-
-* Menu:
-
-See also:
-* Integer programming::
-* intprog_lib::
-* toric_lib::
-
-*See also:* *note Integer programming::; *note intprog_lib::; *note
-toric_lib::.
-
-
-File: sing.info, Node: toric_lib, Prev: intprog_lib, Up: Commutative algebra
-
-D.4.11 toric_lib
-----------------
-
-*Library:*
- toric.lib
-
-*Purpose:*
- Standard Basis of Toric Ideals
-
-*Author:*
- Christine Theis, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* toric_ideal:: computes the toric ideal of A
-* toric_std:: standard basis of I by a specialized Buchberger algorithm
-
-
-File: sing.info, Node: toric_ideal, Next: toric_std, Up: toric_lib
-
-D.4.11.1 toric_ideal
-....................
-
-Procedure from library `toric.lib' (*note toric_lib::).
-
-*Usage:*
- toric_ideal(A,alg); A intmat, alg string
- toric_ideal(A,alg,prsv); A intmat, alg string, prsv intvec
-
-*Return:*
- ideal: standard basis of the toric ideal of A
-
-*Note:*
- These procedures return the standard basis of the toric ideal of A
- with respect to the term ordering in the current basering. Not all
- term orderings are supported: The usual global term orderings may
- be used, but no block orderings combining them.
- One may call the procedure with several different algorithms:
- - the algorithm of Conti/Traverso using elimination (ect),
- - the algorithm of Pottier (pt),
- - an algorithm of Bigatti/La Scala/Robbiano (blr),
- - the algorithm of Hosten/Sturmfels (hs),
- - the algorithm of DiBiase/Urbanke (du).
- The argument `alg' should be the abbreviation for an algorithm as
- above: ect, pt, blr, hs or du.
-
- If `alg' is chosen to be `blr' or `hs', the algorithm needs a
- vector with positive coefficients in the row space of A.
- If no row of A contains only positive entries, one has to use the
- second version of toric_ideal which takes such a vector as its
- third argument.
- For the mathematical background, see
-
- *note Toric ideals and integer programming::.
-
-*Example:*
- LIB "toric.lib";
- ring r=0,(x,y,z),dp;
- // call with two arguments
- intmat A[2][3]=1,1,0,0,1,1;
- A;
- ==> 1,1,0,
- ==> 0,1,1
- ideal I=toric_ideal(A,"du");
- I;
- ==> I[1]=xz-y
- I=toric_ideal(A,"blr");
- ==> ERROR: The chosen algorithm needs a positive vector in the row space
of t\
- he matrix.
- I;
- ==> I[1]=0
- // call with three arguments
- intvec prsv=1,2,1;
- I=toric_ideal(A,"blr",prsv);
- I;
- ==> I[1]=xz-y
-
-* Menu:
-
-See also:
-* Toric ideals::
-* intprog_lib::
-* toric_lib::
-* toric_std::
-
-*See also:* *note Toric ideals::; *note intprog_lib::; *note
-toric_lib::; *note toric_std::.
-
-
-File: sing.info, Node: toric_std, Prev: toric_ideal, Up: toric_lib
-
-D.4.11.2 toric_std
-..................
-
-Procedure from library `toric.lib' (*note toric_lib::).
-
-*Usage:*
- toric_std(I); I ideal
-
-*Return:*
- ideal: standard basis of I
-
-*Note:*
- This procedure computes the standard basis of I using a specialized
- Buchberger algorithm. The generating system by which I is given has
- to consist of binomials of the form x^u-x^v. There is no real check
- if I is toric. If I is generated by binomials of the above form,
- but not toric, toric_std computes an ideal `between' I and its
- saturation with respect to all variables.
- For the mathematical background, see
-
- *note Toric ideals and integer programming::.
-
-*Example:*
- LIB "toric.lib";
- ring r=0,(x,y,z),wp(3,2,1);
- // call with toric ideal (of the matrix A=(1,1,1))
- ideal I=x-y,x-z;
- ideal J=toric_std(I);
- J;
- ==> J[1]=y-z
- ==> J[2]=x-z
- // call with the same ideal, but badly chosen generators:
- // 1) not only binomials
- I=x-y,2x-y-z;
- J=toric_std(I);
- ==> ERROR: Generator 2 of the input ideal is no difference of monomials.
- // 2) binomials whose monomials are not relatively prime
- I=x-y,xy-yz,y-z;
- J=toric_std(I);
- ==> Warning: The monomials of generator 2 of the input ideal are not
relative\
- ly prime.
- J;
- ==> J[1]=y-z
- ==> J[2]=x-z
- // call with a non-toric ideal that seems to be toric
- I=x-yz,xy-z;
- J=toric_std(I);
- J;
- ==> J[1]=y2-1
- ==> J[2]=x-yz
- // comparison with real standard basis and saturation
- ideal H=std(I);
- H;
- ==> H[1]=x-yz
- ==> H[2]=y2z-z
- LIB "elim.lib";
- sat(H,xyz);
- ==> [1]:
- ==> _[1]=x-yz
- ==> _[2]=y2-1
- ==> [2]:
- ==> 1
-
-* Menu:
-
-See also:
-* Toric ideals::
-* intprog_lib::
-* toric_ideal::
-* toric_lib::
-
-*See also:* *note Toric ideals::; *note intprog_lib::; *note
-toric_ideal::; *note toric_lib::.
-
-
-File: sing.info, Node: Singularities, Next: Invariant theory, Prev:
Commutative algebra, Up: SINGULAR libraries
-
-D.5 Singularities
-=================
-
-* Menu:
-
-* classify_lib:: procedures for the Arnold-classifier of singularities
-* deform_lib:: procedures for computing miniversal deformation
-* equising_lib:: procedures for equisingularity strata
-* gaussman_lib:: procedures for gauss-manin connection of a singularity
-* hnoether_lib:: procedures for the Hamburger-Noether (Puiseux) development
-* mondromy_lib:: procedures to compute the monodromy of a singularity
-* qhmoduli_lib:: procedures for moduli spaces of sqh-singularities
-* sing_lib:: procedures for computing invariants of singularities
-* spcurve_lib:: procedures for cm codimension 2 singularities
-* spectrum_lib:: procedures for computing singularity spectra
-
-
-File: sing.info, Node: classify_lib, Next: deform_lib, Prev: Singularities,
Up: Singularities
-
-D.5.1 classify_lib
-------------------
-
-*Library:*
- classify.lib
-
-*Purpose:*
- Arnold Classifier of Singularities
-
-*Authors:*
- Kai Krueger, address@hidden
- Corina Baciu, address@hidden
-
-*Overview:*
- A library for classifying isolated hypersurface singularities
- w.r.t. right equivalence, based on the determinator of
- singularities by V.I. Arnold.
-
-*Procedures:*
-
-* Menu:
-
-* basicinvariants:: computes Milnor number, determinacy-bound and corank of
-* classify:: normal form of poly f determined with Arnold's method
-* corank:: computes the corank of f (i.e. of the Hessian of f)
-* Hcode:: coding of intvec v according to the number repetitions
-* init_debug:: print trace and debugging information depending on int n
-* internalfunctions:: display names of internal procedures of this library
-* milnorcode:: Hilbert poly of [e-th] Milnor algebra coded with Hcode
-* morsesplit:: residual part of f after applying the splitting lemma
-* quickclass:: normal form of f determined by invariants (milnorcode)
-* singularity:: normal form of singularity given by its name s and index
-* swap:: returns b,a
-* A_L:: shortcut for quickclass(f) or normalform(s)
-* normalform:: normal form of singularity given by its name s
-* debug_log:: print trace and debugging information w.r.t level>@DeBug
-
-
-File: sing.info, Node: basicinvariants, Next: classify, Up: classify_lib
-
-D.5.1.1 basicinvariants
-.......................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- basicinvariants(f); f = poly
-
-*Compute:*
- Compute basic invariants of f: an upper bound d for the
- determinacy, the milnor number mu and the corank c of f
-
-*Return:*
- intvec: d, mu, c
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- basicinvariants((x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3);
- ==> 5,4,2
-
-
-File: sing.info, Node: classify, Next: corank, Prev: basicinvariants, Up:
classify_lib
-
-D.5.1.2 classify
-................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- classify(f); f=poly
-
-*Compute:*
- normal form and singularity type of f with respect to right
- equivalence, as given in the book "Singularities of differentiable
- maps, Volume I" by V.I. Arnold, S.M. Gusein-Zade, A.N. Varchenko
-
-*Return:*
- normal form of f, of type poly
-
-*Remark:*
- This version of classify is only beta. Please send bugs and
- comments to: "Kai Krueger" <address@hidden>
- Be sure to have at least Singular version 1.0.1. Updates can be
- found at:
- URL=http://www.mathematik.uni-kl.de/~krueger/Singular/
-
-*Note:*
- type init_debug(n); (0 <= n <= 10) in order to get intermediate
- information, higher values of n give more information.
- The proc creates several global objects with names all starting
- with @, hence there should be no name conflicts
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
- classify(f);
- ==> About the singularity :
- ==> Milnor number(f) = 4
- ==> Corank(f) = 2
- ==> Determinacy <= 5
- ==> Guessing type via Milnorcode: D[k]=D[4]
- ==>
- ==> Computing normal form ...
- ==> I have to apply the splitting lemma. This will take some time....:-)
- ==> Arnold step number 4
- ==> The singularity
- ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
- ==> is R-equivalent to D[4].
- ==> Milnor number = 4
- ==> modality = 0
- ==> 2z2+x2y+y3
- init_debug(3);
- ==> Debugging level change from 0 to 3
- classify(f);
- ==> Computing Basicinvariants of f ...
- ==> About the singularity :
- ==> Milnor number(f) = 4
- ==> Corank(f) = 2
- ==> Determinacy <= 5
- ==> Hcode: 1,2,1,0,0
- ==> Milnor code : 1,1,1
- ==> Debug:(2): entering HKclass3_teil_1 1,1,1
- ==> Debug:(2): finishing HKclass3_teil_1
- ==> Guessing type via Milnorcode: D[k]=D[4]
- ==>
- ==> Computing normal form ...
- ==> I have to apply the splitting lemma. This will take some time....:-)
- ==> Debug:(3): Split the polynomial below using determinacy: 5
- ==> Debug:(3): 9y2-12yz+4z2-x3+6x2y-4x2z+xyz+x4+3x2y3
- ==> Debug:(2): Permutations: 3,2,1
- ==> Debug:(2): Permutations: 3,2,1
- ==> Debug:(2): rank determined with Morse rg= 1
- ==> Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
- ==> Step 3
- ==> Arnold step number 4
- ==> The singularity
- ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
- ==> is R-equivalent to D[4].
- ==> Milnor number = 4
- ==> modality = 0
- ==> Debug:(2): Decode:
- ==> Debug:(2): S_in= D[4] s_in= D[4]
- ==> Debug:(2): Looking for Normalform of D[k] with (k,r,s) = ( 4 , 0 ,
0 )
- ==> Debug:(2): Opening Singalarity-database:
- ==> DBM: NFlist
- ==> Debug:(2): DBMread( D[k] )= x2y+y^(k-1) .
- ==> Debug:(2): S= f = x2y+y^(k-1); Tp= x2y+y^(k-1) Key= I_D[k]
- ==> Polynom f= x2y+y3 crk= 2 Mu= 4 MlnCd= 1,1,1
- ==> Debug:(2): Info= x2y+y3
- ==> Debug:(2): Normal form NF(f)= 2*x(3)^2+x(1)^2*x(2)+x(2)^3
- ==> 2z2+x2y+y3
-
-
-File: sing.info, Node: corank, Next: Hcode, Prev: classify, Up:
classify_lib
-
-D.5.1.3 corank
-..............
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- corank(f); f=poly
-
-*Return:*
- the corank of the Hessian matrix of f, of type int
-
-*Remark:*
- corank(f) is the number of variables occurring in the residual
- singularity after applying 'morsesplit' to f
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
- corank(f);
- ==> 2
-
-
-File: sing.info, Node: Hcode, Next: init_debug, Prev: corank, Up:
classify_lib
-
-D.5.1.4 Hcode
-.............
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- Hcode(v); v=intvec
-
-*Return:*
- intvec, coding v according to the number of successive repetitions
- of an entry
-
-*Example:*
- LIB "classify.lib";
- intvec v1 = 1,3,5,5,2;
- Hcode(v1);
- ==> 1,0,1,0,2,0,0,1,0
- intvec v2 = 1,2,3,4,4,4,4,4,4,4,3,2,1;
- Hcode(v2);
- ==> 1,1,1,7,1,1,1
-
-
-File: sing.info, Node: init_debug, Next: internalfunctions, Prev: Hcode,
Up: classify_lib
-
-D.5.1.5 init_debug
-..................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- init_debug([level]); level=int
-
-*Compute:*
- Set the global variable @DeBug to level. The variable @DeBug is
- used by the function debug_log(level, list of strings) to know when
- to print the list of strings. init_debug() reports only changes of
- @DeBug.
-
-*Note:*
- The procedure init_debug(n); is useful as trace-mode. n may range
- from 0 to 10, higher values of n give more information.
-
-*Example:*
- LIB "classify.lib";
- init_debug();
- debug_log(1,"no trace information printed");
- init_debug(1);
- ==> Debugging level change from 0 to 1
- debug_log(1,"some trace information");
- ==> some trace information
- init_debug(2);
- ==> Debugging level change from 1 to 2
- debug_log(2,"nice for debugging scripts");
- ==> Debug:(2): nice for debugging scripts
- init_debug(0);
- ==> Debugging switched off.
-
-
-File: sing.info, Node: internalfunctions, Next: milnorcode, Prev:
init_debug, Up: classify_lib
-
-D.5.1.6 internalfunctions
-.........................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- internalfunctions();
-
-*Return:*
- nothing, display names of internal procedures of classify.lib
-
-*Example:*
- LIB "classify.lib";
- internalfunctions();
- ==> Internal functions for the classification using Arnold's method,
- ==> the function numbers correspond to numbers in Arnold's classifier:
- ==> Klassifiziere(poly f); //determine the type of the singularity f
- ==> Funktion1bis (poly f, list cstn)
- ==> Funktion3 (poly f, list cstn)
- ==> Funktion6 (poly f, list cstn)
- ==> Funktion13 (poly f, list cstn)
- ==> Funktion17 (poly f, list cstn)
- ==> Funktion25 (poly f, list cstn)
- ==> Funktion40 (poly f, list cstn, int k)
- ==> Funktion47 (poly f, list cstn)
- ==> Funktion50 (poly f, list cstn)
- ==> Funktion58 (poly fin, list cstn)
- ==> Funktion59 (poly f, list cstn)
- ==> Funktion66 (poly f, list cstn)
- ==> Funktion82 (poly f, list cstn)
- ==> Funktion83 (poly f, list cstn)
- ==> Funktion91 (poly f, list cstn, int k)
- ==> Funktion92 (poly f, list cstn, int k)
- ==> Funktion93 (poly f, list cstn, int k)
- ==> Funktion94 (poly f, list cstn, int k)
- ==> Funktion95 (poly f, list cstn, int k)
- ==> Funktion96 (poly f, list cstn, int k)
- ==> Funktion97 (poly f, list cstn)
- ==> Isomorphie_s82_x (poly f, poly fk, int k)
- ==> Isomorphie_s82_z (poly f, poly fk, int k)
- ==> Isomorphie_s17 (poly f, poly fk, int k, int ct)
- ==> printresult (string f,string typ,int Mu,int m,int corank,int K)
- ==>
- ==> Internal functions for the classifcation by invariants:
- ==> Cubic (poly f)
- ==> parity (int e) //return the parity of e
- ==> HKclass (intvec i)
- ==> HKclass3( intvec i, string SG_Typ, int cnt)
- ==> HKclass3_teil_1 (intvec i, string SG_Typ, int cnt)
- ==> HKclass5 (intvec i, string SG_Typ, int cnt)
- ==> HKclass5_teil_1 (intvec i, string SG_Typ, int cnt)
- ==> HKclass5_teil_2 (intvec i, string SG_Typ, int cnt)
- ==> HKclass7 (intvec i, string SG_Typ, int cnt)
- ==> HKclass7_teil_1 (intvec i, string SG_Typ, int cnt)
- ==>
- ==> Internal functions for the Morse-splitting lemma:
- ==> Morse(poly fi, int K, int corank) //splitting lemma itself
- ==> Coeffs (list #)
- ==> Coeff
- ==>
- ==> Internal functions providing tools:
- ==> ReOrder(poly f)
- ==> Singularitaet(string typ,int k,int r,int s,poly a,poly b,poly
c,poly d)
- ==> RandomPolyK
- ==> Faktorisiere(poly f, poly g, int p, int k) compute g = (ax+by^k)^p
- ==> Teile(poly f, poly g); //divides f by g
- ==> GetRf(poly f, int n);
- ==> Show(poly f);
- ==> checkring();
- ==> DecodeNormalFormString(string s);
- ==> Setring(int n, string ringname);
- ==>
-
-
-File: sing.info, Node: milnorcode, Next: morsesplit, Prev:
internalfunctions, Up: classify_lib
-
-D.5.1.7 milnorcode
-..................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- milnorcode(f[,e]); f=poly, e=int
-
-*Return:*
- intvec, coding the Hilbert function of the e-th Milnor algebra of
- f, i.e. of basering/(jacob(f)^e) (default e=1), according to proc
- Hcode
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- poly f=x2y+y3+z2;
- milnorcode(f);
- ==> 1,1,1
- milnorcode(f,2); // a big second argument may result in memory overflow
- ==> 1,0,1,0,2,0,0,1,0
-
-
-File: sing.info, Node: morsesplit, Next: quickclass, Prev: milnorcode, Up:
classify_lib
-
-D.5.1.8 morsesplit
-..................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- morsesplit(f); f=poly
-
-*Return:*
- Normal form of f in M^3 after application of the splitting lemma
-
-*Compute:*
- apply the splitting lemma (generalized Morse lemma) to f
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- export r;
- ==> // ** `r` is already global
- init_debug(1);
- ==> Debugging level is set to 1
- poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
- poly g=morsesplit(f);
- ==> Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
- g;
- ==> -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3
-
-
-File: sing.info, Node: quickclass, Next: singularity, Prev: morsesplit,
Up: classify_lib
-
-D.5.1.9 quickclass
-..................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- quickclass(f); f=poly
-
-*Return:*
- Normal form of f in Arnold's list
-
-*Remark:*
- try to determine the normal form of f by invariants, mainly by
- computing the Hilbert function of the Milnor algebra, no coordinate
- change is needed (see also proc 'milnorcode').
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),ds;
- poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3;
- quickclass(f);
- ==> Singularity R-equivalent to : D[k]=D[4]
- ==> normal form : z2+x2y+y3
- ==> z2+x2y+y3
-
-
-File: sing.info, Node: singularity, Next: swap, Prev: quickclass, Up:
classify_lib
-
-D.5.1.10 singularity
-....................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- singularity(t, l); t=string (name of singularity),
- l=list of integers/polynomials (indices/parameters of singularity)
-
-*Compute:*
- get the singularity named by type t from the database. list l is
- as follows:
- l= k [,r [,s [,a [,b [,c [,d]..]: k,r,s=int a,b,c,d=poly.
- The name of the dbm-database file is: NFlist.[dir,pag]. The file
- is found in the current directory. If it does not exist, please run
- the script MakeDBM first.
-
-*Return:*
- Normal form and corank of the singularity named by type t and its
- index (indices) l.
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(x,y,z),(c,ds);
- init_debug(0);
- singularity("E[6k]",6);
- ==> [1]:
- ==> x3+xy13+y19
- ==> [2]:
- ==> 2
- singularity("T[k,r,s]", 3, 7, 5);
- ==> [1]:
- ==> x3+xyz+z5+y7
- ==> [2]:
- ==> 3
- poly f=y;
- singularity("J[k,r]", 4, 0, 0, f);
- ==> [1]:
- ==> x3+x2y4+y13
- ==> [2]:
- ==> 2
-
-
-File: sing.info, Node: swap, Next: A_L, Prev: singularity, Up: classify_lib
-
-D.5.1.11 swap
-.............
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- swap(a,b);
-
-*Return:*
- b,a if b,a is the input (any type)
-
-*Example:*
- LIB "classify.lib";
- swap("variable1","variable2");
- ==> variable2 variable1
-
-
-File: sing.info, Node: A_L, Next: normalform, Prev: swap, Up: classify_lib
-
-D.5.1.12 A_L
-............
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- A_L(f); f poly
- A_L(s); s string, the name of the singularity
-
-*Compute:*
- the normal form of f in Arnold's list of singularities in case 1,
- in case 2 nothing has to be computed.
-
-*Return:*
- A_L(f): compute via 'milnorcode' the class of f and return the
- normal form of f found in the database.
- A_L("name"): get the normal form from the database for the
- singularity given by its name.
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(a,b,c),ds;
- poly f=A_L("E[13]");
- f;
- ==> c2+a3+ab5+b8
- A_L(f);
- ==> Singularity R-equivalent to : E[6k+1]=E[13]
- ==> normal form : c2+a3+ab5+b8
- ==> c2+a3+ab5+b8
-
-
-File: sing.info, Node: normalform, Next: debug_log, Prev: A_L, Up:
classify_lib
-
-D.5.1.13 normalform
-...................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- normalform(s); s=string
-
-*Return:*
- Arnold's normal form of singularity with name s
-
-*Example:*
- LIB "classify.lib";
- ring r=0,(a,b,c),ds;
- normalform("E[13]");
- ==> c2+a3+ab5+b8
-
-
-File: sing.info, Node: debug_log, Prev: normalform, Up: classify_lib
-
-D.5.1.14 debug_log
-..................
-
-Procedure from library `classify.lib' (*note classify_lib::).
-
-*Usage:*
- debug_log(level,li); level=int, li=comma separated "message" list
-
-*Compute:*
- print "messages" if level>address@hidden
- useful for user-defined trace messages.
-
-*Example:*
- LIB "classify.lib";
- example init_debug;
- ==> // proc init_debug from lib classify.lib
- ==> EXAMPLE:
- ==> init_debug();
- ==> debug_log(1,"no trace information printed");
- ==> init_debug(1);
- ==> Debugging level change from 0 to 1
- ==> debug_log(1,"some trace information");
- ==> some trace information
- ==> init_debug(2);
- ==> Debugging level change from 1 to 2
- ==> debug_log(2,"nice for debugging scripts");
- ==> Debug:(2): nice for debugging scripts
- ==> init_debug(0);
- ==> Debugging switched off.
- ==>
-
-* Menu:
-
-See also:
-* init_debug::
-
-*See also:* *note init_debug::.
-
-
-File: sing.info, Node: deform_lib, Next: equising_lib, Prev: classify_lib,
Up: Singularities
-
-D.5.2 deform_lib
-----------------
-
-*Library:*
- deform.lib
-
-*Purpose:*
- Miniversal Deformation of Singularities and Modules
-
-*Author:*
- Bernd Martin, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* versal:: miniversal deformation of isolated singularity Fo
-* mod_versal:: miniversal deformation of module Mo modulo ideal I
-* lift_kbase:: lifting N into standard kbase of M
-* lift_rel_kb:: relative lifting N into a kbase of M
-* kill_rings:: kills the exported rings from above
-
-
-File: sing.info, Node: versal, Next: mod_versal, Up: deform_lib
-
-D.5.2.1 versal
-..............
-
-Procedure from library `deform.lib' (*note deform_lib::).
-
-*Usage:*
- versal(Fo[,d,any]); Fo=ideal, d=int, any=list
-
-*Compute:*
- miniversal deformation of Fo up to degree d (default d=100),
-
-*Create:*
- Rings (exported):
- 'my'Px = extending the basering Po by new variables given by
- "A,B,.." (deformation parameters), returns as basering; the new
- variables precede the old ones, the ordering is the product between
- "ls" and "ord(Po)"
- 'my'Qx = Px/Fo extending Qo=Po/Fo,
- 'my'So = the embedding-ring of the versal base space,
- 'my'Ox = Px/Js extending So/Js. (default my="")
-
- Matrices (in Px, exported):
- Js = giving the versal base space (obstructions),
- Fs = giving the versal family of Fo,
- Rs = giving the lifting of Ro=syz(Fo).
-
- If d is defined (!=0), it computes up to degree d.
- If 'any' is defined and any[1] is no string, interactive version.
- Otherwise 'any' gives predefined strings:
- "my","param","order","out" ("my" prefix-string, "param" is a letter
- (e.g. "A") for the name of first parameter or (e.g. "A(") for index
- parameter variables, "order" ordering string for ring extension),
- "out" name of output-file).
-
-*Note:*
- printlevel < 0 no output at all,
- printlevel >=0,1,2,.. informs you, what is going on;
- this proc uses 'execute'.
-
-*Example:*
- LIB "deform.lib";
- int p = printlevel;
- printlevel = 0;
- ring r1 = 0,(x,y,z,u,v),ds;
- matrix m[2][4] = x,y,z,u,y,z,u,v;
- ideal Fo = minor(m,2);
- // cone over rational normal curve of degree 4
- versal(Fo);
- ==> // ready: T_1 and T_2
- ==> // start computation in degree 2.
- ==>
- ==> // Result belongs to ring Px.
- ==> // Equations of total space of miniversal deformation are
- ==> // given by Fs, equations of miniversal base space by Js.
- ==> // Make Px the basering and list objects defined in Px by typing:
- ==> setring Px; show(Px);
- ==> listvar(matrix);
- ==> // NOTE: rings Qx, Px, So are alive!
- ==> // (use 'kill_rings("");' to remove)
- setring Px;
- // ___ Equations of miniversal base space ___:
- Js;"";
- ==> Js[1,1]=BD
- ==> Js[1,2]=-AD+D2
- ==> Js[1,3]=-CD
- ==>
- // ___ Equations of miniversal total space ___:
- Fs;"";
- ==> Fs[1,1]=-u2+zv+Bu+Dv
- ==> Fs[1,2]=-zu+yv-Au+Du
- ==> Fs[1,3]=-yu+xv+Cu+Dz
- ==> Fs[1,4]=z2-yu+Az+By
- ==> Fs[1,5]=yz-xu+Bx-Cz
- ==> Fs[1,6]=-y2+xz+Ax+Cy
- ==>
-
-
-File: sing.info, Node: mod_versal, Next: lift_kbase, Prev: versal, Up:
deform_lib
-
-D.5.2.2 mod_versal
-..................
-
-Procedure from library `deform.lib' (*note deform_lib::).
-
-*Usage:*
- mod_versal(Mo,I[,d,any]); I=ideal, M=module, d=int, any =list
-
-*Compute:*
- miniversal deformation of coker(Mo) over Qo=Po/Io, Po=basering;
-
-*Create:*
- Ringsr (exported):
- 'my'Px = extending the basering by new variables (deformation
- parameters), the new variables precede the old ones,
- the ordering is the product between "my_ord"
- and "ord(Po)"
- 'my'Qx = Px/Io extending Qo (returns as basering),
- 'my'Ox = Px/(Io+Js) ring of the versal deformation of coker(Ms),
- 'my'So = embedding-ring of the versal base space. (default 'my'="")
-
- Matrices (in Qx, exported):
- Js = giving the versal base space (obstructions),
- Ms = giving the versal family of Mo,
- Ls = giving the lifting of syzygies Lo=syz(Mo),
-
- If d is defined (!=0), it computes up to degree d.
- If 'any' is defined and any[1] is no string, interactive version.
- Otherwise 'any' gives predefined strings:"my","param","order","out"
- ("my" prefix-string, "param" is a letter (e.g. "A") for the name of
- first parameter or (e.g. "A(") for index parameter variables, "ord"
- ordering string for ring extension), "out" name of output-file).
-
-*Note:*
- printlevel < 0 no output at all,
- printlevel >=0,1,2,.. informs you, what is going on,
- this proc uses 'execute'.
-
-*Example:*
- LIB "deform.lib";
- int p = printlevel;
- printlevel = 1;
- ring Ro = 0,(x,y),wp(3,4);
- ideal Io = x4+y3;
- matrix Mo[2][2] = x2,y,-y2,x2;
- mod_versal(Mo,Io);
- ==> // vdim (Ext^2) = 4
- ==> // vdim (Ext^1) = 4
- ==> // ready: Ext1 and Ext2
- ==> // Ext1 is quasi-homogeneous represented: 3,6,1,4
- ==> // infinitesimal extension
- ==> x2-Ax-B, y+Cx+D,
- ==> -y2+Cxy+Dy,x2+Ax+B
- ==> // start deg = 2
- ==> // start deg = 3
- ==> // start deg = 4
- ==> // start deg = 5
- ==> // finished in degree
- ==> 5
- ==> // quasi-homogeneous weights of miniversal base
- ==> 3,6,1,4
- ==> // Result belongs to qring Qx
- ==> // Equations of total space of miniversal deformation are in Js
- ==> -2AB+A3+3CD2-BC3-3AC2D+A2C3,
- ==> -B2+A2B+D3-3BC2D+ABC3
- ==> // Matrix of the deformed module is Ms and lifted syzygies are Ls.
- ==> // Make Qx the basering and list objects defined in Qx by typing:
- ==> listvar(ring);setring Qx; show(Qx);listvar(ideal);listvar(matrix);
- ==> // NOTE: rings Qx, Ox, So are still alive!
- ==> // (use: 'kill_rings();' to remove them)
- printlevel = p;
- if(system("with","Namespaces")) {
- if(nameof(Current) == "Ring" ) {
- kill Top::Px,Top::Qx,Top::So;
- } else {
- kill Ring::Px,Ring::So;
- }
- }
- kill Px,Qx,So;
-
-
-File: sing.info, Node: lift_kbase, Next: lift_rel_kb, Prev: mod_versal,
Up: deform_lib
-
-D.5.2.3 lift_kbase
-..................
-
-Procedure from library `deform.lib' (*note deform_lib::).
-
-*Usage:*
- lift_kbase(N,M); N,M=poly/ideal/vector/module
-
-*Return:*
- matrix A, coefficient matrix expressing N as linear combination of
- k-basis of M. Let the k-basis have k elements and size(N)=c
- columns. Then A satisfies:
- matrix(reduce(N,std(M)),k,c) = matrix(kbase(std(M)))*A
-
-*Assume:*
- dim(M)=0 and the monomial ordering is a well ordering or the last
- block of the ordering is c or C
-
-*Example:*
- LIB "deform.lib";
- ring R=0,(x,y),ds;
- module M=[x2,xy],[y2,xy],[0,xx],[0,yy];
- module N=[x3+xy,x],[x,x+y2];
- print(M);
- ==> x2,y2,0, 0,
- ==> xy,xy,x2,y2
- module kb=kbase(std(M));
- print(kb);
- ==> y2,xy,y,x,1,0,0,0,
- ==> 0, 0, 0,0,0,y,x,1
- print(N);
- ==> xy+x3,x,
- ==> x, x+y2
- matrix A=lift_kbase(N,M);
- print(A);
- ==> 0,0,
- ==> 1,0,
- ==> 0,0,
- ==> 0,1,
- ==> 0,0,
- ==> 0,0,
- ==> 1,1,
- ==> 0,0
- matrix(reduce(N,std(M)),nrows(kb),ncols(A)) - matrix(kbase(std(M)))*A;
- ==> _[1,1]=0
- ==> _[1,2]=0
- ==> _[2,1]=0
- ==> _[2,2]=0
-
-
-File: sing.info, Node: lift_rel_kb, Next: kill_rings, Prev: lift_kbase,
Up: deform_lib
-
-D.5.2.4 lift_rel_kb
-...................
-
-Procedure from library `deform.lib' (*note deform_lib::).
-
-*Usage:*
- lift_rel_kb(N,M[,kbaseM,p]);
-
-*Assume:*
- [p a monomial ] or the product of all variables
- N, M modules of same rank, M depending only on variables not in p
- and vdim(M) is finite in this ring,
- [ kbaseM the kbase of M in the subring given by variables not in p
- ]
- warning: these assumptions are not checked by the procedure
-
-*Return:*
- matrix A, whose j-th columns present the coeff's of N[j] in kbaseM,
- i.e. kbaseM*A = reduce(N,std(M))
-
-*Example:*
- LIB "deform.lib";
- ring r=0,(A,B,x,y),dp;
- module M = [x2,xy],[xy,y3],[y2],[0,x];
- module kbaseM = [1],[x],[xy],[y],[0,1],[0,y],[0,y2];
- poly f=xy;
- module N = [AB,BBy],[A3xy+x4,AB*(1+y2)];
- matrix A = lift_rel_kb(N,M,kbaseM,f);
- print(A);
- ==> AB,0,
- ==> 0, 0,
- ==> 0, A3,
- ==> 0, 0,
- ==> 0, AB,
- ==> B2,0,
- ==> 0, AB
- "TEST:";
- ==> TEST:
- print(matrix(kbaseM)*A-matrix(reduce(N,std(M))));
- ==> 0,0,
- ==> 0,0
-
-
-File: sing.info, Node: kill_rings, Prev: lift_rel_kb, Up: deform_lib
-
-D.5.2.5 kill_rings
-..................
-
-Procedure from library `deform.lib' (*note deform_lib::).
-
-*Usage:*
- kill_rings([string]);
-
-*Return:*
- nothing, but kills exported rings generated by procedures 'versal'
- and 'mod_versal' with optional prefix 'string'
-
-
-File: sing.info, Node: equising_lib, Next: gaussman_lib, Prev: deform_lib,
Up: Singularities
-
-D.5.3 equising_lib
-------------------
-
-*Library:*
- equising.lib
-
-*Purpose:*
- Equisingularity Stratum of a Family of Plane Curves
-
-*Author:*
- Christoph Lossen, address@hidden
- Andrea Mindnich, address@hidden
-
-*Main procedures:*
-
-* Menu:
-
-* tau_es:: codim of mu-const stratum in semi-universal def. base
-* esIdeal:: (Wahl's) equisingularity ideal of f
-* esStratum:: equisingularity stratum of a family F
-* isEquising:: tests if a given deformation is equisingular
-
-*Auxiliary procedure:*
-
-* Menu:
-
-* control_Matrix:: computes list of blowing-up data
-
-
-File: sing.info, Node: tau_es, Next: esIdeal, Up: equising_lib
-
-D.5.3.1 tau_es
-..............
-
-Procedure from library `equising.lib' (*note equising_lib::).
-
-*Usage:*
- tau_es(f); f poly
-
-*Assume:*
- f is a reduced bivariate polynomial, the basering has precisely two
- variables, is local and no qring.
-
-*Return:*
- int, the codimension of the mu-const stratum in the semi-universal
- deformation base.
-
-*Note:*
- printlevel>=1 displays additional information.
- When called with any additional parameter, the computation of the
- Milnor number is avoided (no check for NND).
-
-*Example:*
- LIB "equising.lib";
- ring r=32003,(x,y),ds;
- poly f=(x4-y4)^2-x10;
- tau_es(f);
- ==> 42
-
-* Menu:
-
-See also:
-* esIdeal::
-* invariants::
-* tjurina::
-
-*See also:* *note esIdeal::; *note invariants::; *note tjurina::.
-
-
-File: sing.info, Node: esIdeal, Next: esStratum, Prev: tau_es, Up:
equising_lib
-
-D.5.3.2 esIdeal
-...............
-
-Procedure from library `equising.lib' (*note equising_lib::).
-
-*Usage:*
- esIdeal(f); f poly
-
-*Assume:*
- f is a reduced bivariate polynomial, the basering has precisely two
- variables, is local and no qring, and the characteristic of the
- ground field does not divide mult(f).
-
-*Return:*
- list of two ideals:
-
- _[1]: equisingularity ideal of f (in sense of Wahl)
- _[2]: equisingularity ideal of f with fixed section
-
-*Note:*
- if some of the above condition is not satisfied then return value
- is list(0,0).
-
-*Example:*
- LIB "equising.lib";
- ring r=0,(x,y),ds;
- poly f=x7+y7+(x-y)^2*x2y2;
- list K=esIdeal(f);
- ==> polynomial is Newton degenerated !
- ==>
- ==> //
- ==> // versal deformation with triv. section
- ==> // =====================================
- ==> //
- ==> //
- ==> // Compute equisingular Stratum over Spec(C[t]/t^2)
- ==> // ================================================
- ==> //
- ==> // finished
- ==> //
- option(redSB);
- // Wahl's equisingularity ideal:
- std(K[1]);
- ==> _[1]=4x4y-10x2y3+6xy4+21x6+14y6
- ==> _[2]=4x3y2-6x2y3+2xy4+7x6
- ==> _[3]=x2y4-xy5
- ==> _[4]=x7
- ==> _[5]=xy6
- ==> _[6]=y7
- ring rr=0,(x,y),ds;
- poly f=x4+4x3y+6x2y2+4xy3+y4+2x2y15+4xy16+2y17+xy23+y24+y30+y31;
- list K=esIdeal(f);
- ==> polynomial is Newton degenerated !
- ==>
- ==> //
- ==> // versal deformation with triv. section
- ==> // =====================================
- ==> //
- ==> //
- ==> // Compute equisingular Stratum over Spec(C[t]/t^2)
- ==> // ================================================
- ==> //
- ==> // finished
- ==> //
- vdim(std(K[1]));
- ==> 68
- // the latter should be equal to:
- tau_es(f);
- ==> 68
-
-* Menu:
-
-See also:
-* esStratum::
-* tau_es::
-
-*See also:* *note esStratum::; *note tau_es::.
-
-
-File: sing.info, Node: esStratum, Next: isEquising, Prev: esIdeal, Up:
equising_lib
-
-D.5.3.3 esStratum
-.................
-
-Procedure from library `equising.lib' (*note equising_lib::).
-
-*Usage:*
- esStratum(F[,m,L]); F poly, m int, L list
-
-*Assume:*
- F defines a deformation of a reduced bivariate polynomial f and the
- characteristic of the basering does not divide mult(f).
- If nv is the number of variables of the basering, then the first
- nv-2 variables are the deformation parameters.
- If the basering is a qring, ideal(basering) must only depend on the
- deformation parameters.
-
-*Compute:*
- equations for the stratum of equisingular deformations with fixed
- (trivial) section.
-
-*Return:*
- list l: either consisting of an ideal and an integer, where
-
- l[1]=ideal defining the equisingular stratum
- l[2]=1 if some error has occured, l[2]=0 otherwise;
-
- or consisting of a ring and an integer, where
-
- l[1]=ESSring is a ring extension of basering containing the ideal ES
- (describing the ES-stratum) and the poly p_F=F,
- l[2]=1 if some error has occured, l[2]=0 otherwise.
-
-*Note:*
- L is supposed to be the output of reddevelop (with the given
- ordering of the variables appearing in f).
- If m is given, the ES Stratum over A/maxideal(m) is computed.
- This procedure uses `execute' or calls a procedure using `execute'.
- printlevel>=2 displays additional information.
-
-*Example:*
- LIB "equising.lib";
- int p=printlevel;
- printlevel=1;
- ring r = 0,(a,b,c,d,e,f,g,x,y),ds;
- poly F = (x2+2xy+y2+x5)+ax+by+cx2+dxy+ey2+fx3+gx4;
- list M = esStratum(F);
- M[1];
- ==> _[1]=g
- ==> _[2]=f
- ==> _[3]=b
- ==> _[4]=a
- ==> _[5]=-4c+4d-4e+d2-4ce
- printlevel=3; // displays additional information
- esStratum(F,2); // es stratum over Q[a,b,c,d,e,f,g] / <a,b,c,d,e,f,g>^2
- ==> //
- ==> // Compute HN development
- ==> // ----------------------
- ==> // finished
- ==> //
- ==> // Blowup Step 1 completed
- ==> // Blowup Step 2 completed
- ==> // Blowup Step 3 completed
- ==> // 1 branch finished
- ==> //
- ==> // Elimination starts:
- ==> // -------------------
- ==> // finished
- ==> //
- ==> // output of 'esStratum' is list consisting of:
- ==> // _[1] = ideal defining equisingular stratum
- ==> // _[2] = 0
- ==> [1]:
- ==> _[1]=b
- ==> _[2]=a
- ==> _[3]=c-d+e
- ==> _[4]=g
- ==> _[5]=f
- ==> [2]:
- ==> 0
- ideal I = f-fa,e+b;
- qring q = std(I);
- poly F = imap(r,F);
- esStratum(F);
- ==> //
- ==> // Compute HN development
- ==> // ----------------------
- ==> // finished
- ==> //
- ==> // Blowup Step 1 completed
- ==> // Blowup Step 2 completed
- ==> // Blowup Step 3 completed
- ==> // 1 branch finished
- ==> //
- ==> // Elimination starts:
- ==> // -------------------
- ==> // finished
- ==> //
- ==> // output of 'esStratum' is list consisting of:
- ==> // _[1] = ideal defining equisingular stratum
- ==> // _[2] = 0
- ==> [1]:
- ==> _[1]=e
- ==> _[2]=a
- ==> _[3]=-4c+4d+d2
- ==> _[4]=g
- ==> [2]:
- ==> 0
- printlevel=p;
-
-* Menu:
-
-See also:
-* esIdeal::
-* isEquising::
-
-*See also:* *note esIdeal::; *note isEquising::.
-
-
-File: sing.info, Node: isEquising, Next: control_Matrix, Prev: esStratum,
Up: equising_lib
-
-D.5.3.4 isEquising
-..................
-
-Procedure from library `equising.lib' (*note equising_lib::).
-
-*Usage:*
- isEquising(F[,m,L]); F poly, m int, L list
-
-*Assume:*
- F defines a deformation of a reduced bivariate polynomial f and the
- characteristic of the basering does not divide mult(f).
- If nv is the number of variables of the basering, then the first
- nv-2 variables are the deformation parameters.
- If the basering is a qring, ideal(basering) must only depend on the
- deformation parameters.
-
-*Compute:*
- tests if the given family is equisingular along the trivial
- section.
-
-*Return:*
- int: 1 if the family is equisingular, 0 otherwise.
-
-*Note:*
- L is supposed to be the output of reddevelop (with the given
- ordering of the variables appearing in f).
- If m is given, the family is considered over A/maxideal(m).
- This procedure uses `execute' or calls a procedure using `execute'.
- printlevel>=2 displays additional information.
-
-*Example:*
- LIB "equising.lib";
- ring r = 0,(a,b,x,y),ds;
- poly F = (x2+2xy+y2+x5)+ay3+bx5;
- isEquising(F);
- ==> 0
- ideal I = ideal(a);
- qring q = std(I);
- poly F = imap(r,F);
- isEquising(F);
- ==> 1
- ring rr=0,(A,B,C,x,y),ls;
- poly f=x7+y7+(x-y)^2*x2y2;
- poly F=f+A*y*diff(f,x)+B*x*diff(f,x);
- isEquising(F);
- ==> 0
- isEquising(F,2); // computation over Q[a,b] / <a,b>^2
- ==> 1
-
-
-File: sing.info, Node: control_Matrix, Prev: isEquising, Up: equising_lib
-
-D.5.3.5 control_Matrix
-......................
-
-Procedure from library `equising.lib' (*note equising_lib::).
-
-*Assume:*
- L is the output of multsequence(reddevelop(f)).
-
-*Return:*
- list M of 4 intmat's:
-
- M[1] contains the multiplicities at the respective infinitely near
points
- p[i,j] (i=step of blowup+1, j=branch) - if branches j=k,...,k+m
pass
- through the same p[i,j] then the multiplicity is stored in
M[1][k,j],
- while M[1][k+1]=...=M[1][k+m]=0.
- M[2] contains the number of branches meeting at p[i,j] (again, the
information
- is stored according to the above rule)
- M[3] contains the information about the splitting of M[1][i,j] with
respect to
- different tangents of branches at p[i,j] (information is stored
only for
- minimal j>=k corresponding to a new tangent direction).
- The entries are the sum of multiplicities of all branches with the
- respective tangent.
- M[4] contains the maximal sum of higher multiplicities for a branch
passing
- through p[i,j] ( = degree Bound for blowing up)
-
-*Note:*
- the branches are ordered in such a way that only consecutive
- branches can meet at an infinitely near point.
- the final rows of the matrices M[1],...,M[3] is (1,1,1,...,1), and
- correspond to infinitely near points such that the strict
- transforms of the branches are smooth and intersect the exceptional
- divisor transversally.
-
-* Menu:
-
-See also:
-* multsequence::
-
-*See also:* *note multsequence::.
-
-
-File: sing.info, Node: gaussman_lib, Next: hnoether_lib, Prev:
equising_lib, Up: Singularities
-
-D.5.4 gaussman_lib
-------------------
-
-*Library:*
- gaussman.lib
-
-*Purpose:*
- Algorithmic Gauss-Manin Connection
-
-*Author:*
- Mathias Schulze, email: address@hidden
-
-*Overview:*
- A library to compute Hodge-theoretic invariants
- of isolated hypersurface singularities
-
-*Procedures:*
-
-* Menu:
-
-* gmsring:: Gauss-Manin system of t with variable s
-* gmsnf:: Gauss-Manin normal form of p
-* gmscoeffs:: Gauss-Manin basis representation of p
-* bernstein:: roots of the Bernstein polynomial of t
-* monodromy:: Jordan data of complex monodromy of t
-* spectrum:: singularity spectrum of t
-* sppairs:: spectral pairs of t
-* spnf:: spectrum normal form of (a,m,V)
-* sppnf:: spectral pairs normal form of (a,w,m,V)
-* vfilt:: V-filtration of t on Brieskorn lattice
-* vwfilt:: weighted V-filtration of t on Brieskorn lattice
-* tmatrix:: C[[s]]-matrix of t on Brieskorn lattice
-* endvfilt:: endomorphism V-filtration on Jacobian algebra
-* spprint:: print spectrum sp
-* sppprint:: print spectral pairs spp
-* spadd:: sum of spectra sp1 and sp2
-* spsub:: difference of spectra sp1 and sp2
-* spmul:: linear combination of spectra sp
-* spissemicont:: semicontinuity test of spectrum sp
-* spsemicont:: semicontinuous combinations of spectra sp0 in sp
-* spmilnor:: Milnor number of spectrum sp
-* spgeomgenus:: geometrical genus of spectrum sp
-* spgamma:: gamma invariant of spectrum sp
-
-* Menu:
-
-See also:
-* mondromy_lib::
-* spectrum_lib::
-
-*See also:* *note mondromy_lib::; *note spectrum_lib::.
-
-
-File: sing.info, Node: gmsring, Next: gmsnf, Up: gaussman_lib
-
-D.5.4.1 gmsring
-...............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- gmsring(t,s); poly t, string s
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- ring G; Gauss-Manin system of t with variable s
- poly gmspoly=t;
- ideal gmsjacob; Jacobian ideal of t
- ideal gmsstd; standard basis of Jacobian ideal
- matrix gmsmatrix; matrix(gmsjacob)*gmsmatrix==matrix(gmsstd)
- ideal gmsbasis; monomial vector space basis of Jacobian algebra
- int gmsmaxdeg; maximal weight of variables
-
-*Note:*
- gmsbasis is a C[[s]]-basis of H" and [t,s]=s^2
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- def G=gmsring(t,"s");
- setring(G);
- gmspoly;
- ==> x2y2+x5+y5
- print(gmsjacob);
- ==> 2xy2+5x4,
- ==> 2x2y+5y4
- print(gmsstd);
- ==> 2x2y+5y4,
- ==> 2xy2+5x4,
- ==> 5x5-5y5,
- ==> 10y6+25x3y4
- print(gmsmatrix);
- ==> 0,1,x, -2xy,
- ==> 1,0,-y,2y2+5x3
- print(gmsbasis);
- ==> y5,
- ==> y4,
- ==> y3,
- ==> y2,
- ==> xy,
- ==> y,
- ==> x4,
- ==> x3,
- ==> x2,
- ==> x,
- ==> 1
- gmsmaxdeg;
- ==> 1
-
-
-File: sing.info, Node: gmsnf, Next: gmscoeffs, Prev: gmsring, Up:
gaussman_lib
-
-D.5.4.2 gmsnf
-.............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- gmsnf(p,K); poly p, int K
-
-*Assume:*
- basering returned by gmsring
-
-*Return:*
-
- list nf;
- ideal nf[1]; projection of p to <gmsbasis>C[[s]] mod s^(K+1)
- ideal nf[2]; p==nf[1]+nf[2]
-
-*Note:*
- computation can be continued by setting p=nf[2]
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- def G=gmsring(t,"s");
- setring(G);
- list l0=gmsnf(gmspoly,0);
- print(l0[1]);
- ==> -1/2y5
- list l1=gmsnf(gmspoly,1);
- print(l1[1]);
- ==> -1/2y5+1/2s
- list l=gmsnf(l0[2],1);
- print(l[1]);
- ==> 1/2s
-
-
-File: sing.info, Node: gmscoeffs, Next: bernstein, Prev: gmsnf, Up:
gaussman_lib
-
-D.5.4.3 gmscoeffs
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- gmscoeffs(p,K); poly p, int K
-
-*Assume:*
- basering constructed by gmsring
-
-*Return:*
-
- list l;
- matrix l[1]; C[[s]]-basis representation of p mod s^(K+1)
- ideal l[2]; p==matrix(gmsbasis)*l[1]+l[2]
-
-*Note:*
- computation can be continued by setting p=l[2]
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- def G=gmsring(t,"s");
- setring(G);
- list l0=gmscoeffs(gmspoly,0);
- print(l0[1]);
- ==> -1/2,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0
- list l1=gmscoeffs(gmspoly,1);
- print(l1[1]);
- ==> -1/2,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 1/2s
- list l=gmscoeffs(l0[2],1);
- print(l[1]);
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 0,
- ==> 1/2s
-
-
-File: sing.info, Node: bernstein, Next: monodromy, Prev: gmscoeffs, Up:
gaussman_lib
-
-D.5.4.4 bernstein
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- bernstein(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
- ideal r; roots of the Bernstein polynomial b excluding the root -1
-
-*Note:*
- the roots of b are negative rational numbers and -1 is a root of b
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- bernstein(t);
- ==> [1]:
- ==> _[1]=-1/2
- ==> _[2]=-7/10
- ==> _[3]=-9/10
- ==> _[4]=-1
- ==> _[5]=-11/10
- ==> _[6]=-13/10
- ==> [2]:
- ==> 2,1,1,2,1,1
-
-
-File: sing.info, Node: monodromy, Next: spectrum, Prev: bernstein, Up:
gaussman_lib
-
-D.5.4.5 monodromy
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- monodromy(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list l; Jordan data jordan(M) of monodromy matrix exp(-2*pi*i*M)
- ideal l[1];
- number l[1][i]; eigenvalue of i-th Jordan block of M
- intvec l[2];
- int l[2][i]; size of i-th Jordan block of M
- intvec l[3];
- int l[3][i]; multiplicity of i-th Jordan block of M
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- monodromy(t);
- ==> [1]:
- ==> _[1]=1/2
- ==> _[2]=7/10
- ==> _[3]=9/10
- ==> _[4]=1
- ==> _[5]=11/10
- ==> _[6]=13/10
- ==> [2]:
- ==> 2,1,1,1,1,1
- ==> [3]:
- ==> 1,2,2,1,2,2
-
-* Menu:
-
-See also:
-* linalg_lib::
-* mondromy_lib::
-
-*See also:* *note linalg_lib::; *note mondromy_lib::.
-
-
-File: sing.info, Node: spectrum, Next: sppairs, Prev: monodromy, Up:
gaussman_lib
-
-D.5.4.6 spectrum
-................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spectrum(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list sp; singularity spectrum of t
- ideal sp[1];
- number sp[1][i]; i-th spectral number
- intvec sp[2];
- int sp[2][i]; multiplicity of i-th spectral number
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- spprint(spectrum(t));
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
-
-* Menu:
-
-See also:
-* spectrum_lib::
-
-*See also:* *note spectrum_lib::.
-
-
-File: sing.info, Node: sppairs, Next: spnf, Prev: spectrum, Up:
gaussman_lib
-
-D.5.4.7 sppairs
-...............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- sppairs(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list spp; spectral pairs of t
- ideal spp[1];
- number spp[1][i]; V-filtration index of i-th spectral pair
- intvec spp[2];
- int spp[2][i]; weight filtration index of i-th spectral pair
- intvec spp[3];
- int spp[3][i]; multiplicity of i-th spectral pair
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- sppprint(sppairs(t));
- ==>
((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\
- ,2),((1/2,0),1)
-
-* Menu:
-
-See also:
-* spectrum_lib::
-
-*See also:* *note spectrum_lib::.
-
-
-File: sing.info, Node: spnf, Next: sppnf, Prev: sppairs, Up: gaussman_lib
-
-D.5.4.8 spnf
-............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Assume:*
- ncols(a)==size(m)==size(V); typeof(V[i])=="int"
-
-*Return:*
- order (a[i][,V[i]]) with multiplicity m[i] lexicographically
-
-
-File: sing.info, Node: sppnf, Next: vfilt, Prev: spnf, Up: gaussman_lib
-
-D.5.4.9 sppnf
-.............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Assume:*
- ncols(e)=size(w)=size(m)=size(V); typeof(V[i])=="module"
-
-*Return:*
- order (a[i][,w[i]][,V[i]]) with multiplicity m[i] lexicographically
-
-
-File: sing.info, Node: vfilt, Next: vwfilt, Prev: sppnf, Up: gaussman_lib
-
-D.5.4.10 vfilt
-..............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- vfilt(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list v; V-filtration on H"/s*H"
- ideal v[1];
- number v[1][i]; V-filtration index of i-th spectral number
- intvec v[2];
- int v[2][i]; multiplicity of i-th spectral number
- list v[3];
- module v[3][i]; vector space of i-th graded part in terms of v[4]
- ideal v[4]; monomial vector space basis of H"/s*H"
- ideal v[5]; standard basis of Jacobian ideal
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- vfilt(t);
- ==> [1]:
- ==> _[1]=-1/2
- ==> _[2]=-3/10
- ==> _[3]=-1/10
- ==> _[4]=0
- ==> _[5]=1/10
- ==> _[6]=3/10
- ==> _[7]=1/2
- ==> [2]:
- ==> 1,2,2,1,2,2,1
- ==> [3]:
- ==> [1]:
- ==> _[1]=gen(11)
- ==> [2]:
- ==> _[1]=gen(10)
- ==> _[2]=gen(6)
- ==> [3]:
- ==> _[1]=gen(9)
- ==> _[2]=gen(4)
- ==> [4]:
- ==> _[1]=gen(5)
- ==> [5]:
- ==> _[1]=gen(3)
- ==> _[2]=gen(8)
- ==> [6]:
- ==> _[1]=gen(2)
- ==> _[2]=gen(7)
- ==> [7]:
- ==> _[1]=gen(1)
- ==> [4]:
- ==> _[1]=y5
- ==> _[2]=y4
- ==> _[3]=y3
- ==> _[4]=y2
- ==> _[5]=xy
- ==> _[6]=y
- ==> _[7]=x4
- ==> _[8]=x3
- ==> _[9]=x2
- ==> _[10]=x
- ==> _[11]=1
- ==> [5]:
- ==> _[1]=2x2y+5y4
- ==> _[2]=2xy2+5x4
- ==> _[3]=5x5-5y5
- ==> _[4]=10y6+25x3y4
-
-* Menu:
-
-See also:
-* spectrum_lib::
-
-*See also:* *note spectrum_lib::.
-
-
-File: sing.info, Node: vwfilt, Next: tmatrix, Prev: vfilt, Up: gaussman_lib
-
-D.5.4.11 vwfilt
-...............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- vwfilt(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list vw; weighted V-filtration on H"/s*H"
- ideal vw[1];
- number vw[1][i]; V-filtration index of i-th spectral pair
- intvec vw[2];
- int vw[2][i]; weight filtration index of i-th spectral pair
- intvec vw[3];
- int vw[3][i]; multiplicity of i-th spectral pair
- list vw[4];
- module vw[4][i]; vector space of i-th graded part in terms of vw[5]
- ideal vw[5]; monomial vector space basis of H"/s*H"
- ideal vw[6]; standard basis of Jacobian ideal
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- vwfilt(t);
- ==> [1]:
- ==> _[1]=-1/2
- ==> _[2]=-3/10
- ==> _[3]=-1/10
- ==> _[4]=0
- ==> _[5]=1/10
- ==> _[6]=3/10
- ==> _[7]=1/2
- ==> [2]:
- ==> 2,1,1,1,1,1,0
- ==> [3]:
- ==> 1,2,2,1,2,2,1
- ==> [4]:
- ==> [1]:
- ==> _[1]=gen(11)
- ==> [2]:
- ==> _[1]=gen(10)
- ==> _[2]=gen(6)
- ==> [3]:
- ==> _[1]=gen(9)
- ==> _[2]=gen(4)
- ==> [4]:
- ==> _[1]=gen(5)
- ==> [5]:
- ==> _[1]=gen(3)
- ==> _[2]=gen(8)
- ==> [6]:
- ==> _[1]=gen(2)
- ==> _[2]=gen(7)
- ==> [7]:
- ==> _[1]=gen(1)
- ==> [5]:
- ==> _[1]=y5
- ==> _[2]=y4
- ==> _[3]=y3
- ==> _[4]=y2
- ==> _[5]=xy
- ==> _[6]=y
- ==> _[7]=x4
- ==> _[8]=x3
- ==> _[9]=x2
- ==> _[10]=x
- ==> _[11]=1
- ==> [6]:
- ==> _[1]=2x2y+5y4
- ==> _[2]=2xy2+5x4
- ==> _[3]=5x5-5y5
- ==> _[4]=10y6+25x3y4
-
-* Menu:
-
-See also:
-* spectrum_lib::
-
-*See also:* *note spectrum_lib::.
-
-
-File: sing.info, Node: tmatrix, Next: endvfilt, Prev: vwfilt, Up:
gaussman_lib
-
-D.5.4.12 tmatrix
-................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- tmatrix(t); poly t
-
-*Assume:*
- characteristic 0; local degree ordering;
- isolated critical point 0 of t
-
-*Return:*
-
- list l=A0,A1,T,M;
- matrix A0,A1; t=A0+s*A1+s^2*(d/ds) on H" w.r.t. C[[s]]-basis M*T
- module T; C-basis of C^mu
- ideal M; monomial C-basis of H"/sH"
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- list A=tmatrix(t);
- print(A[1]);
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 0,0,0,0,0,0,0,0,0,0,0,
- ==> 1,0,0,0,0,0,0,0,0,0,0
- print(A[2]);
- ==> 1/2,0, 0, 0, 0, 0,0, 0, 0, 0, 0,
- ==> 0, 7/10,0, 0, 0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 7/10,0, 0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0, 9/10,0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0, 0, 9/10,0,0, 0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 1,0, 0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0,11/10,0, 0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0,0, 11/10,0, 0, 0,
- ==> 0, 0, 0, 0, 0, 0,0, 0, 13/10,0, 0,
- ==> 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10,0,
- ==> 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 3/2
- print(A[3]);
- ==> -1445/64,0, 0, 0,0,85/8,0,0,0,0,1/2,
- ==> 0, 125,0, 0,0,0, 0,0,1,0,0,
- ==> 0, 0, 0, 5,0,0, 1,0,0,0,0,
- ==> 0, 0, 0, 0,4,0, 0,0,0,0,0,
- ==> 2, 0, 0, 0,0,1, 0,0,0,0,0,
- ==> 0, 0, 16, 0,0,0, 0,0,0,0,0,
- ==> 0, 0, 125,0,0,0, 0,0,0,1,0,
- ==> 0, 0, 0, 0,5,0, 0,1,0,0,0,
- ==> 0, 0, 0, 4,0,0, 0,0,0,0,0,
- ==> 0, 16, 0, 0,0,0, 0,0,0,0,0,
- ==> -1, 0, 0, 0,0,0, 0,0,0,0,0
- print(A[4]);
- ==> y5,
- ==> y4,
- ==> y3,
- ==> y2,
- ==> xy,
- ==> y,
- ==> x4,
- ==> x3,
- ==> x2,
- ==> x,
- ==> 1
-
-
-File: sing.info, Node: endvfilt, Next: spprint, Prev: tmatrix, Up:
gaussman_lib
-
-D.5.4.13 endvfilt
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- endvfilt(v); list v
-
-*Assume:*
- v returned by vfilt
-
-*Return:*
-
- list ev; V-filtration on Jacobian algebra
- ideal ev[1];
- number ev[1][i]; i-th V-filtration index
- intvec ev[2];
- int ev[2][i]; i-th multiplicity
- list ev[3];
- module ev[3][i]; vector space of i-th graded part in terms of ev[4]
- ideal ev[4]; monomial vector space basis of Jacobian algebra
- ideal ev[5]; standard basis of Jacobian ideal
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- poly t=x5+x2y2+y5;
- endvfilt(vfilt(t));
- ==> [1]:
- ==> _[1]=0
- ==> _[2]=1/5
- ==> _[3]=2/5
- ==> _[4]=1/2
- ==> _[5]=3/5
- ==> _[6]=4/5
- ==> _[7]=1
- ==> [2]:
- ==> 1,2,2,1,2,2,1
- ==> [3]:
- ==> [1]:
- ==> _[1]=gen(11)
- ==> [2]:
- ==> _[1]=gen(10)
- ==> _[2]=gen(6)
- ==> [3]:
- ==> _[1]=gen(9)
- ==> _[2]=gen(4)
- ==> [4]:
- ==> _[1]=gen(5)
- ==> [5]:
- ==> _[1]=gen(8)
- ==> _[2]=gen(3)
- ==> [6]:
- ==> _[1]=gen(7)
- ==> _[2]=gen(2)
- ==> [7]:
- ==> _[1]=gen(1)
- ==> [4]:
- ==> _[1]=y5
- ==> _[2]=y4
- ==> _[3]=y3
- ==> _[4]=y2
- ==> _[5]=xy
- ==> _[6]=y
- ==> _[7]=x4
- ==> _[8]=x3
- ==> _[9]=x2
- ==> _[10]=x
- ==> _[11]=1
- ==> [5]:
- ==> _[1]=2x2y+5y4
- ==> _[2]=2xy2+5x4
- ==> _[3]=5x5-5y5
- ==> _[4]=10y6+25x3y4
-
-
-File: sing.info, Node: spprint, Next: sppprint, Prev: endvfilt, Up:
gaussman_lib
-
-D.5.4.14 spprint
-................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spprint(sp); list sp
-
-*Return:*
- string s; spectrum sp
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
-
-
-File: sing.info, Node: sppprint, Next: spadd, Prev: spprint, Up:
gaussman_lib
-
-D.5.4.15 sppprint
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- sppprint(spp); list spp
-
-*Return:*
- string s; spectral pairs spp
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
spp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(2,1,1,1,1,1,0),intvec(1,2,2,1,2,2,1));
- sppprint(spp);
- ==>
((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\
- ,2),((1/2,0),1)
-
-
-File: sing.info, Node: spadd, Next: spsub, Prev: sppprint, Up: gaussman_lib
-
-D.5.4.16 spadd
-..............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spadd(sp1,sp2); list sp1, list sp2
-
-*Return:*
- list sp; sum of spectra sp1 and sp2
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp1);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- list sp2=list(ideal(-1/6,1/6),intvec(1,1));
- spprint(sp2);
- ==> (-1/6,1),(1/6,1)
- spprint(spadd(sp1,sp2));
- ==>
(-1/2,1),(-3/10,2),(-1/6,1),(-1/10,2),(0,1),(1/10,2),(1/6,1),(3/10,2),(1/\
- 2,1)
-
-
-File: sing.info, Node: spsub, Next: spmul, Prev: spadd, Up: gaussman_lib
-
-D.5.4.17 spsub
-..............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spsub(sp1,sp2); list sp1, list sp2
-
-*Return:*
- list sp; difference of spectra sp1 and sp2
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp1);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- list sp2=list(ideal(-1/6,1/6),intvec(1,1));
- spprint(sp2);
- ==> (-1/6,1),(1/6,1)
- spprint(spsub(sp1,sp2));
- ==>
(-1/2,1),(-3/10,2),(-1/6,-1),(-1/10,2),(0,1),(1/10,2),(1/6,-1),(3/10,2),(\
- 1/2,1)
-
-
-File: sing.info, Node: spmul, Next: spissemicont, Prev: spsub, Up:
gaussman_lib
-
-D.5.4.18 spmul
-..............
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spmul(sp0,k); list sp0, int[vec] k
-
-*Return:*
- list sp; linear combination of spectra sp0 with coefficients k
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- spprint(spmul(sp,2));
- ==> (-1/2,2),(-3/10,4),(-1/10,4),(0,2),(1/10,4),(3/10,4),(1/2,2)
- list sp1=list(ideal(-1/6,1/6),intvec(1,1));
- spprint(sp1);
- ==> (-1/6,1),(1/6,1)
- list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
- spprint(sp2);
- ==> (-1/3,1),(0,2),(1/3,1)
- spprint(spmul(list(sp1,sp2),intvec(1,2)));
- ==> (-1/3,2),(-1/6,1),(0,4),(1/6,1),(1/3,2)
-
-
-File: sing.info, Node: spissemicont, Next: spsemicont, Prev: spmul, Up:
gaussman_lib
-
-D.5.4.19 spissemicont
-.....................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spissemicont(sp[,1]); list sp, int opt
-
-*Return:*
-
- int k=
- 1; if sum of sp is positive on all intervals [a,a+1) [and (a,a+1)]
- 0; if sum of sp is negative on some interval [a,a+1) [or (a,a+1)]
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp1);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- list sp2=list(ideal(-1/6,1/6),intvec(1,1));
- spprint(sp2);
- ==> (-1/6,1),(1/6,1)
- spissemicont(spsub(sp1,spmul(sp2,3)));
- ==> 1
- spissemicont(spsub(sp1,spmul(sp2,4)));
- ==> 0
-
-
-File: sing.info, Node: spsemicont, Next: spmilnor, Prev: spissemicont, Up:
gaussman_lib
-
-D.5.4.20 spsemicont
-...................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spsemicont(sp0,sp,k[,1]); list sp0, list sp
-
-*Return:*
-
- list l;
- intvec l[i]; if the spectra sp0 occur with multiplicities k
- in a deformation of a [quasihomogeneous] singularity
- with spectrum sp then k<=l[i]
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp0=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp0);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- list sp1=list(ideal(-1/6,1/6),intvec(1,1));
- spprint(sp1);
- ==> (-1/6,1),(1/6,1)
- list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
- spprint(sp2);
- ==> (-1/3,1),(0,2),(1/3,1)
- list sp=sp1,sp2;
- list l=spsemicont(sp0,sp);
- l;
- ==> [1]:
- ==> 3
- ==> [2]:
- ==> 2,1
- spissemicont(spsub(sp0,spmul(sp,l[1])));
- ==> 1
- spissemicont(spsub(sp0,spmul(sp,l[1]-1)));
- ==> 1
- spissemicont(spsub(sp0,spmul(sp,l[1]+1)));
- ==> 0
-
-
-File: sing.info, Node: spmilnor, Next: spgeomgenus, Prev: spsemicont, Up:
gaussman_lib
-
-D.5.4.21 spmilnor
-.................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spmilnor(sp); list sp
-
-*Return:*
- int mu; Milnor number of spectrum sp
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- spmilnor(sp);
- ==> 11
-
-
-File: sing.info, Node: spgeomgenus, Next: spgamma, Prev: spmilnor, Up:
gaussman_lib
-
-D.5.4.22 spgeomgenus
-....................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spgeomgenus(sp); list sp
-
-*Return:*
- int g; geometrical genus of spectrum sp
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- spgeomgenus(sp);
- ==> 6
-
-
-File: sing.info, Node: spgamma, Prev: spgeomgenus, Up: gaussman_lib
-
-D.5.4.23 spgamma
-................
-
-Procedure from library `gaussman.lib' (*note gaussman_lib::).
-
-*Usage:*
- spgamma(sp); list sp
-
-*Return:*
- number gamma; gamma invariant of spectrum sp
-
-*Example:*
- LIB "gaussman.lib";
- ring R=0,(x,y),ds;
- list
sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
- spprint(sp);
- ==> (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1)
- spgamma(sp);
- ==> 1/240
-
-
-File: sing.info, Node: hnoether_lib, Next: mondromy_lib, Prev:
gaussman_lib, Up: Singularities
-
-D.5.5 hnoether_lib
-------------------
-
-*Library:*
- hnoether.lib
-
-*Purpose:*
- Hamburger-Noether (Puiseux) Development
-
-*Author:*
- Martin Lamm, address@hidden
-
-*Overview:*
- A library for computing the Hamburger-Noether, resp. Puiseux,
- development of a plane curve singularity following [Campillo, A.:
- Algebroid curves in positive characteristic, Springer LNM 813
- (1980)].
- The library contains also procedures for computing the
- (topological) numerical invariants of plane curve singularities.
-
-*Main procedures:*
-
-* Menu:
-
-* hnexpansion:: Hamburger-Noether (H-N) development of f
-* sethnering:: changes to the hnering created by hnexpansion
-* develop:: H-N development of irreducible curves
-* extdevelop:: extension of the H-N development hne of f
-* parametrisation:: a parametrization of f
-* displayHNE:: display H-N development as an ideal
-* invariants:: invariants of f, e.g. the characteristic exponents
-* displayInvariants:: display invariants of f
-* multsequence:: sequence of multiplicities
-* displayMultsequence:: display sequence of multiplicities
-* intersection:: intersection multiplicity of two curves
-* stripHNE:: reduce amount of memory consumed by hne
-* is_irred:: test if f is irreducible
-* delta:: delta invariant of f
-* newtonpoly:: (local) Newton polygon of f
-* is_NND:: test if f is Newton non-degenerate
-
-*Auxiliary procedures:*
-
-* Menu:
-
-* puiseux2generators:: convert Puiseux pairs to generators of semigroup
-* separateHNE:: number of quadratic transf. needed for separation
-* squarefree:: a squarefree divisor of the poly f
-* allsquarefree:: the maximal squarefree divisor of the poly f
-* further_hn_proc:: show further procedures useful for interactive use
-
-
-File: sing.info, Node: hnexpansion, Next: sethnering, Up: hnoether_lib
-
-D.5.5.1 hnexpansion
-...................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- hnexpansion(f); or hnexpansion(f,"ess"); f poly
-
-*Usage:*
- hnexpansion(f); f poly
-
-*Assume:*
- f is a bivariate polynomial (in the first 2 ring variables)
-
-*Create:*
- ring with variables `x,y' and ordering `ls' over a field extension
- of the current basering's ground field, since the Hamburger-Noether
- development usually does not exist in the originally given
- basering. The field extension is chosen minimally.
- Moreover, in the ring a list `hne' of lists `hne[i]' is created
- (corresponding to the output of `develop(f[i])', f[i] a branch of
- f, but the last entry being omitted).
-
- `hne[i][1]'; matrix:
- Each row contains the coefficients of the corresponding line
- of the Hamburger-Noether expansion (HNE) for f[i].
- The end of the line is marked in the matrix by the
- first ring variable (usually x).
-
- `hne[i][2]'; intvec:
- indicating the length of lines of the HNE
-
- `hne[i][3]'; int:
- 0 if the 1st ring variable was transversal (with respect to
- f[i]),
- 1 if the variables were changed at the beginning of the
- computation,
- -1 if an error has occurred.
-
- `hne[i][4]'; poly:
- the transformed polynomial of f[i] to make it possible to
- extend the Hamburger-Noether development a posteriori
- without having to do all the previous calculation
- once again (0 if not needed)
-
-*Return:*
- a list, say `hn', containing the created ring
-
-*Note:*
- to use the ring type: `def HNEring=hn[i]; setring HNEring;'.
- If f is known to be irreducible as a power series, `develop(f)'
- could be chosen instead to avoid the change of basering.
- Increasing `printlevel' leads to more and more comments.
-
-*Usage:*
- hnexpansion(f,"ess"); f poly
-
-*Assume:*
- f is a bivariate polynomial (in the first 2 ring variables)
-
-*Create:*
- ring with variables `x,y' and ordering `ls' over a field extension
- of the current basering's ground field, since the Hamburger-Noether
- development usually does not exist in the originally given
- basering. The field extension is chosen minimally.
- Moreover, in the ring a list `hne' of lists `hne[i]' is created
- (corresponding to the output of `develop(f[i])', f[i] an
- "essential" branch of f, but the last entry being omitted). See
- `hnexpansion' above for more details.
-
-*Return:*
- a list, say `hn', containing the created ring
-
-*Note:*
- to use the ring type: `def hnering=hn[i]; setring hnering;'.
- Alternatively you may use the procedure sethnering and type:
- `sethnering(hn);'
- If the HNE needs a field extension, some of the branches will be
- conjugate. In this case `hnexpansion(f,"ess")' reduces the
- computation to one representative for each group of conjugate
-branches.
- Note that the degree of each branch is in general less than the
- degree of the field extension in which all HNEs can be put.
- Use `hnexpansion(f)' to compute a complete HNE, i.e., a HNE for all
-branches.
- Increasing `printlevel' leads to more and more comments.
-
-*Example:*
- LIB "hnoether.lib";
- ring r=0,(x,y),ls;
- list hn=hnexpansion(x4-y6);
- show(hn);
- ==> // list, 1 element(s):
- ==> [1]:
- ==> // ring: (0),(x,y),(ls(2),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // hne [0] list, size: 2
- def hnering=hn[1];
- setring hnering;
- size(hne); // number of branches
- ==> 2
- print(hne[1][1]); // HN-matrix of 1st branch
- ==> 0,x,0,
- ==> 0,1,x
- parametrisation(hne); // parametrization of the two branches
- ==> [1]:
- ==> _[1]=x3
- ==> _[2]=x2
- ==> [2]:
- ==> _[1]=-x3
- ==> _[2]=-x2
- /////////////////////////////////////////////////////////
- ring s=2,(x,y),ls;
- poly f=(x4+x2y+y2)*(x3+xy2+y3);
- // --------- compute all branches: ---------
- hn=hnexpansion(f);
- ==> // new minimal polynomial: a6+a5+a3+a2+1
- hnering=hn[1];
- setring hnering;
- displayHNE(hne[1]); // HN-matrix of 1st branch
- ==> HNE[1]=y+(a^4+a+1)*z(0)
- ==> HNE[2]=x+z(0)
- displayHNE(hne[4]); // HN-matrix of 4th branch
- ==> HNE[1]=y+(a^4+a^2+a+1)*z(0)^2
- ==> HNE[2]=x+z(0)
- setring s;
- // --- compute only one of conjugate branches: ---
- hn=hnexpansion(f,"ess");
- ==> // new minimal polynomial: a6+a5+a3+a2+1
- hnering=hn[1];
- setring hnering;
- displayHNE(hne);
- ==> // Hamburger-Noether development of branch nr.1:
- ==> HNE[1]=y+(a^4+a^2)*z(0)
- ==> HNE[2]=x+z(0)
- ==>
- ==> // Hamburger-Noether development of branch nr.2:
- ==> HNE[1]=y+(a^4+a^2+a)*z(0)^2
- ==> HNE[2]=x+z(0)
- ==>
- // no. 1 of hnexpansion(f,"ess") represents no. 1 - 3 of hnexpansion(f)
and
- // no. 2 of hnexpansion(f,"ess") represents no. 4 + 5 of hnexpansion(f)
-
-* Menu:
-
-See also:
-* develop::
-* displayHNE::
-* extdevelop::
-* parametrisation::
-
-*See also:* *note develop::; *note displayHNE::; *note extdevelop::;
-*note parametrisation::.
-
-
-File: sing.info, Node: sethnering, Next: develop, Prev: hnexpansion, Up:
hnoether_lib
-
-D.5.5.2 sethnering
-..................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- sethnering(L[,s]); L list, s string (optional)
-
-*Assume:*
- L is a list containing a ring (e.g. the output of `hnexpansion').
-
-*Create:*
- The procedure creates a ring with name given by the optional
- parameter s resp. with name hnering, if no optional parameter is
- given, and changes your ring to this ring. The new ring will be the
- ring given as the first entry in the list L.
-
-*Return:*
- nothing.
-
-*Example:*
- LIB "hnoether.lib";
- // -------- prepare for example ---------
- if (defined(hnering))
- {
- def address@hidden;
- if (nameof(basering)=="hnering")
- {
- int wechsel=1;
- }
- else
- {
- int wechsel;
- }
- kill hnering;
- }
- // ------ the example starts here -------
- ring r=0,(x,y),ls;
- nameof(basering);
- ==> r
- sethnering(hnexpansion(x4-y6)); // Creates hnering and changes to it!
- nameof(basering);
- ==> hnering
- // --- restore HNEring if previously defined ---
- kill hnering;
- if (defined(address@hidden)) {
- def address@hidden;
- export hnering;
- if (wechsel==1)
- {
- setring hnering;
- }
- }
-
-* Menu:
-
-See also:
-* hnexpansion::
-
-*See also:* *note hnexpansion::.
-
-
-File: sing.info, Node: develop, Next: extdevelop, Prev: sethnering, Up:
hnoether_lib
-
-D.5.5.3 develop
-...............
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- develop(f [,n]); f poly, n int
-
-*Assume:*
- f is a bivariate polynomial (in the first 2 ring variables) and
- irreducible as power series (for reducible f use `hnexpansion').
-
-*Return:*
- list `L' with:
-
- `L[1]'; matrix:
- Each row contains the coefficients of the corresponding line
- of the Hamburger-Noether expansion (HNE). The end of
- the line is marked in the matrix by the first ring
- variable (usually x).
-
- `L[2]'; intvec:
- indicating the length of lines of the HNE
-
- `L[3]'; int:
- 0 if the 1st ring variable was transversal (with respect to
- f),
- 1 if the variables were changed at the beginning of the
- computation,
- -1 if an error has occurred.
-
- `L[4]'; poly:
- the transformed polynomial of f to make it possible to extend
- the Hamburger-Noether development a posteriori
- without having to do all the previous calculation
- once again (0 if not needed)
-
- `L[5]'; int:
- 1 if the curve has exactly one branch (i.e., is irreducible),
-
- 0 else (i.e., the curve has more than one HNE, or f is not
- valid).
-
-*Display:*
- The (non zero) elements of the HNE (if not called by another proc).
-
-*Note:*
- The optional parameter `n' affects only the computation of the LAST
- line of the HNE. If it is given, the HN-matrix `L[1]' will have at
- least `n' columns.
- Otherwise, the number of columns will be chosen minimal such that
- the matrix contains all necessary information (i.e., all lines of
- the HNE but the last (which is in general infinite) have place).
- If `n' is negative, the algorithm is stopped as soon as the
- computed information is sufficient for `invariants(L)', but the
- HN-matrix `L[1]' may still contain undetermined elements, which are
- marked with the 2nd variable (of the basering).
- For time critical computations it is recommended to use `ring
- ...,(x,y),ls' as basering - it increases the algorithm's speed.
- If `printlevel>=0' comments are displayed (default is
- `printlevel=0').
-
-*Example:*
- LIB "hnoether.lib";
- ring exring = 7,(x,y),ds;
- list hne=develop(4x98+2x49y7+x11y14+2y14);
- print(hne[1]);
- ==> 0,0, 0,0,0,0,3,x,
- ==> 0,x, 0,0,0,0,0,0,
- ==> 0,0, 0,x,0,0,0,0,
- ==> 0,x, 0,0,0,0,0,0,
- ==> 0,-1,0,0,0,0,0,0
- // therefore the HNE is:
- // z(-1)= 3*z(0)^7 + z(0)^7*z(1),
- // z(0) = z(1)*z(2), (there is 1 zero in the 2nd row before x)
- // z(1) = z(2)^3*z(3), (there are 3 zeroes in the 3rd row)
- // z(2) = z(3)*z(4),
- // z(3) = -z(4)^2 + 0*z(4)^3 +...+ 0*z(4)^8 + ?*z(4)^9 + ...
- // (the missing x in the last line indicates that it is not complete.)
- hne[2];
- ==> 7,1,3,1,-1
- parametrisation(hne);
- ==> [1]:
- ==> _[1]=-x14
- ==> _[2]=-3x98-x109
- // parametrization: x(t)= -t^14+O(t^21), y(t)= -3t^98+O(t^105)
- // (the term -t^109 in y may have a wrong coefficient)
- displayHNE(hne);
- ==> HNE[1]=-y+3*z(0)^7+z(0)^7*z(1)
- ==> HNE[2]=-x+z(1)*z(2)
- ==> HNE[3]=z(2)^3*z(3)
- ==> HNE[4]=z(3)*z(4)
- ==> HNE[5]=-z(4)^2
-
-* Menu:
-
-See also:
-* displayHNE::
-* extdevelop::
-* hnexpansion::
-
-*See also:* *note displayHNE::; *note extdevelop::; *note hnexpansion::.
-
-
-File: sing.info, Node: extdevelop, Next: parametrisation, Prev: develop,
Up: hnoether_lib
-
-D.5.5.4 extdevelop
-..................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- extdevelop(L,N); list L, int N
-
-*Assume:*
- L is the output of `develop(f)', or of `extdevelop(l,n)', or one
- entry in the list `hne' in the ring created by
- `hnexpansion(f[,"ess"])'.
-
-*Return:*
- an extension of the Hamburger-Noether development of f as a list in
- the same format as L has (up to the last entry in the output of
-`develop(f)').
- Type `help develop;', resp. `help hnexpansion;' for more details.
-
-*Note:*
- The new HN-matrix will have at least N columns (if the HNE is not
- finite). In particular, if f is irreducible then (in most cases)
- `extdevelop(develop(f),N)' will produce the same result as
-`develop(f,N)'.
- If the matrix M of L has n columns then, compared with
- `parametrisation(L)', `paramametrize(extdevelop(L,N))' will
- increase the exactness by at least (N-n) more significant
- monomials.
-
-*Example:*
- LIB "hnoether.lib";
- if (defined(HNEring))
- {
- def save_r_i_n_g=HNEring;
- kill HNEring;
- }
- // ------ the example starts here -------
- ring exring=0,(x,y),dp;
- list hn=hnexpansion(x14-3y2x11-y3x10-y2x9+3y4x8+y5x7+3y4x6+x5*(-y6+y5)
- -3y6x3-y7x2+y8);
- def HNEring=hn[1];
- setring HNEring;
- export(HNEring);
- ==> // ** `HNEring` is already global
- print(hne[1][1]); // HNE of 1st branch is finite
- ==> 0,x,0,
- ==> 0,1,x
- print(extdevelop(hne[1],5)[1]);
- ==> No extension is possible
- ==> 0,x,0,
- ==> 0,1,x
- print(hne[2][1]); // HNE of 2nd branch can be extended
- ==> 0,x,0,
- ==> 0,1,x,
- ==> 0,1,-1
- list ehne=extdevelop(hne[2],5);
- print(ehne[1]); // new HN-matrix has 5 columns
- ==> 0,x,0, 0,0,
- ==> 0,1,x, 0,0,
- ==> 0,1,-1,1,-1
- parametrisation(hne[2]);
- ==> [1]:
- ==> _[1]=x4-x5-x6+x7
- ==> _[2]=x6-2x7+2x9-x10
- parametrisation(ehne);
- ==> [1]:
- ==> _[1]=x4-x5+x6-x7-x8+x9-x10+x11
- ==> _[2]=x6-2x7+3x8-4x9+2x10-2x12+4x13-3x14+2x15-x16
- if (defined(save_r_i_n_g))
- {
- kill HNEring;
- def HNEring=save_r_i_n_g;
- }
-
-* Menu:
-
-See also:
-* develop::
-* hnexpansion::
-* parametrisation::
-
-*See also:* *note develop::; *note hnexpansion::; *note
-parametrisation::.
-
-
-File: sing.info, Node: parametrisation, Next: displayHNE, Prev: extdevelop,
Up: hnoether_lib
-
-D.5.5.5 parametrisation
-.......................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- parametrisation(INPUT [,x]); INPUT list or poly, x int (optional)
-
-*Assume:*
- INPUT is either a bivariate polynomial f defining a plane curve
- singularity, or it is the output of `hnexpansion(f[,"ess"])', or of
- `develop(f)', or of `extdevelop(develop(f),n)', or the list @{hne}
- in the ring created by `hnexpansion(f)' respectively one entry
- thereof.
-
-*Return:*
- a list L containing a parametrization L[i] for each branch f[i] of
- f in the following format:
- - if only the list INPUT is given, L[i] is an ideal of two
- polynomials p[1],p[2]: if the HNE of was finite then
- f[i](p[1],p[2])=0; if not, the "real" parametrization will be two
- power series and p[1],p[2] are truncations of these series.
- - if the optional parameter x is given, L[i] is itself a list:
- L[i][1] is the parametrization ideal as above and L[i][2] is an
- intvec with two entries indicating the highest degree up to which
- the coefficients of the monomials in L[i][1] are exact (entry -1
- means that the corresponding parametrization is exact).
-
-*Note:*
- If the basering has only 2 variables, the first variable is chosen
- as indefinite. Otherwise, the 3rd variable is chosen.
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=0,(x,y,t),ds;
- // 1st Example: input is a polynomial
- poly g=(x2-y3)*(x3-y5);
- parametrisation(g);
- ==> [1]:
- ==> _[1]=t3
- ==> _[2]=t2
- ==> [2]:
- ==> _[1]=t5
- ==> _[2]=t3
- // 2nd Example: input is the ring of a Hamburger-Noether expansion
- poly h=x2-y2-y3;
- list hn=hnexpansion(h);
- parametrisation(h,1);
- ==> [1]:
- ==> [1]:
- ==> _[1]=t
- ==> _[2]=t-1/2t2
- ==> [2]:
- ==> -1,2
- ==> [2]:
- ==> [1]:
- ==> _[1]=t
- ==> _[2]=-t-1/2t2
- ==> [2]:
- ==> -1,2
- // 3rd Example: input is a Hamburger-Noether expansion
- poly f=x3+2xy2+y2;
- list hne=develop(f);
- list hne_extended=extdevelop(hne,10);
- // compare the matrices ...
- print(hne[1]);
- ==> 0,x,
- ==> 0,-1
- print(hne_extended[1]);
- ==> 0,x, 0,0,0,0, 0,0,0,0,
- ==> 0,-1,0,2,0,-4,0,8,0,-16
- // ... and the resulting parametrizations:
- parametrisation(hne);
- ==> [1]:
- ==> _[1]=-t2
- ==> _[2]=-t3
- parametrisation(hne_extended);
- ==> [1]:
- ==> _[1]=-t2+2t4-4t6+8t8-16t10
- ==> _[2]=-t3+2t5-4t7+8t9-16t11
- parametrisation(hne_extended,0);
- ==> [1]:
- ==> [1]:
- ==> _[1]=-t2+2t4-4t6+8t8-16t10
- ==> _[2]=-t3+2t5-4t7+8t9-16t11
- ==> [2]:
- ==> 10,11
-
-* Menu:
-
-See also:
-* develop::
-* extdevelop::
-
-*See also:* *note develop::; *note extdevelop::.
-
-
-File: sing.info, Node: displayHNE, Next: invariants, Prev: parametrisation,
Up: hnoether_lib
-
-D.5.5.6 displayHNE
-..................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- displayHNE(L[,n]); L list, n int
-
-*Assume:*
- L is the output of `develop(f)', or of `exdevelop(f,n)', or of
- `hnexpansion(f[,"ess"])', or (one entry in) the list `hne' in the
- ring created by `hnexpansion(f[,"ess"])'.
-
-*Return:*
- - if only one argument is given, no return value, but display an
- ideal HNE of the following form:
-
- HNE[1]=-y+[]*z(0)^1+[]*z(0)^2+...+z(0)^<>*z(1)
- HNE[2]=-x+ []*z(1)^2+...+z(1)^<>*z(2)
- HNE[3]= []*z(2)^2+...+z(2)^<>*z(3)
- ....... ..........................
- HNE[r+1]= []*z(r)^2+[]*z(r)^3+......
-
- where `x',`y' are the first 2 variables of the basering. The
- values of `[]' are the coefficients of the Hamburger-Noether
- matrix, the values of `<>' are represented by `x' in the HN-matrix.
- - if a second argument is given, create and export a new ring with
- name `displayring' containing an ideal `HNE' as described above.
- - if L corresponds to the output of `hnexpansion(f[,"ess"])' or to
- the list `hne' in the ring created by `hnexpansion(f[,"ess"])',
- `displayHNE(L[,n])' shows the HNE's of all branches of f in the
- form described above. The optional parameter is then ignored.
-
-*Note:*
- The 1st line of the above ideal (i.e., `HNE[1]') means that
- `y=[]*z(0)^1+...', the 2nd line (`HNE[2]') means that
- `x=[]*z(1)^2+...', so you can see which indeterminate corresponds
- to which line (it's also possible that `x' corresponds to the 1st
- line and `y' to the 2nd).
-
-*Example:*
- LIB "hnoether.lib";
- ring r=0,(x,y),dp;
- poly f=x3+2xy2+y2;
- list hn=develop(f);
- displayHNE(hn);
- ==> HNE[1]=-y+z(0)*z(1)
- ==> HNE[2]=-x-z(1)^2
-
-* Menu:
-
-See also:
-* develop::
-* hnexpansion::
-
-*See also:* *note develop::; *note hnexpansion::.
-
-
-File: sing.info, Node: invariants, Next: displayInvariants, Prev:
displayHNE, Up: hnoether_lib
-
-D.5.5.7 invariants
-..................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- invariants(INPUT); INPUT list or poly
-
-*Assume:*
- INPUT is the output of `develop(f)', or of
- `extdevelop(develop(f),n)', or one entry in the list `hne' of the
- HNEring created by `hnexpansion'.
-
-*Return:*
- list, if INPUT contains a valid HNE:
-
- invariants(INPUT)[1]: intvec (characteristic exponents)
- invariants(INPUT)[2]: intvec (generators of the semigroup)
- invariants(INPUT)[3]: intvec (Puiseux pairs, 1st components)
- invariants(INPUT)[4]: intvec (Puiseux pairs, 2nd components)
- invariants(INPUT)[5]: int (degree of the conductor)
- invariants(INPUT)[6]: intvec (sequence of multiplicities)
-
- an empty list, if INPUT contains no valid HNE.
-
-*Assume:*
- INPUT is bivariate polynomial f or the output of
- `hnexpansion(f[,"ess"])', or the list `hne' in the HNEring created
- by `hnexpansion'.
-
-*Return:*
- list INV, such that INV[i] is the output of
- `invariants(develop(f[i]))' as above, where f[i] is the ith branch
- of the curve f, and the last entry contains further invariants of f
- in the format:
-
- INV[i][1] : intvec (characteristic exponents)
- INV[i][2] : intvec (generators of the semigroup)
- INV[i][3] : intvec (Puiseux pairs, 1st components)
- INV[i][4] : intvec (Puiseux pairs, 2nd components)
- INV[i][5] : int (degree of the conductor)
- INV[i][6] : intvec (sequence of multiplicities)
- INV[last][1] : intmat (contact matrix of the branches)
- INV[last][2] : intmat (intersection multiplicities of the branches)
- INV[last][3] : int (delta invariant of f)
-
-*Note:*
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=0,(x,y),dp;
- list hne=develop(y4+2x3y2+x6+x5y);
- list INV=invariants(hne);
- INV[1]; // the characteristic exponents
- ==> 4,6,7
- INV[2]; // the generators of the semigroup of values
- ==> 4,6,13
- INV[3],INV[4]; // the Puiseux pairs in packed form
- ==> 3,7 2,2
- INV[5] / 2; // the delta-invariant
- ==> 8
- INV[6]; // the sequence of multiplicities
- ==> 4,2,2,1,1
- // To display the invariants more 'nicely':
- displayInvariants(hne);
- ==> characteristic exponents : 4,6,7
- ==> generators of semigroup : 4,6,13
- ==> Puiseux pairs : (3,2)(7,2)
- ==> degree of the conductor : 16
- ==> delta invariant : 8
- ==> sequence of multiplicities: 4,2,2,1,1
- /////////////////////////////
- INV=invariants((x2-y3)*(x3-y5));
- INV[1][1]; // the characteristic exponents of the first
branch
- ==> 2,3
- INV[2][6]; // the sequence of multiplicities of the second
branch
- ==> 3,2,1,1
- print(INV[size(INV)][1]); // the contact matrix of the branches
- ==> 0 3
- ==> 3 0
- print(INV[size(INV)][2]); // the intersection numbers of the
branches
- ==> 0 9
- ==> 9 0
- INV[size(INV)][3]; // the delta invariant of the curve
- ==> 14
-
-* Menu:
-
-See also:
-* develop::
-* displayInvariants::
-* intersection::
-* multsequence::
-
-*See also:* *note develop::; *note displayInvariants::; *note
-intersection::; *note multsequence::.
-
-
-File: sing.info, Node: displayInvariants, Next: multsequence, Prev:
invariants, Up: hnoether_lib
-
-D.5.5.8 displayInvariants
-.........................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- displayInvariants(INPUT); INPUT list or poly
-
-*Assume:*
- INPUT is a bivariate polynomial, or the output of `develop(f)', or
- of `extdevelop(develop(f),n)', or (one entry of) the list `hne' in
- the ring created by `hnexpansion(f[,"ess"])'.
-
-*Return:*
- none
-
-*Display:*
- invariants of the corresponding branch, resp. of all branches, in a
- better readable form.
-
-*Note:*
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=0,(x,y),dp;
- list hne=develop(y4+2x3y2+x6+x5y);
- displayInvariants(hne);
- ==> characteristic exponents : 4,6,7
- ==> generators of semigroup : 4,6,13
- ==> Puiseux pairs : (3,2)(7,2)
- ==> degree of the conductor : 16
- ==> delta invariant : 8
- ==> sequence of multiplicities: 4,2,2,1,1
-
-* Menu:
-
-See also:
-* develop::
-* hnexpansion::
-* intersection::
-* invariants::
-
-*See also:* *note develop::; *note hnexpansion::; *note intersection::;
-*note invariants::.
-
-
-File: sing.info, Node: multsequence, Next: displayMultsequence, Prev:
displayInvariants, Up: hnoether_lib
-
-D.5.5.9 multsequence
-....................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- multsequence(INPUT); INPUT list or poly
-
-*Assume:*
- INPUT is the output of `develop(f)', or of
- `extdevelop(develop(f),n)', or one entry in the list `hne' of the
- ring created by `hnexpansion(f)'.
-
-*Return:*
- intvec corresponding to the multiplicity sequence of (a branch) of
- the curve (the same as `invariants(INPUT)[6]').
-
-*Assume:*
- INPUT is a bivariate polynomial, or the output of `hnexpansion(f)',
- or the list `hne' in the ring created by `hnexpansion(f)'.
-
-*Return:*
- list of two integer matrices:
-
- `multsequence(INPUT)[1][i,*]'
- contains the multiplicities of the branches at their
- infinitely near point of 0 in its (i-1) order neighbourhood
- (i.e., i=1: multiplicity of the branches themselves, i=2:
- multiplicity of their 1st quadratic transformed, etc.,
- Hence, `multsequence(INPUT)[1][*,j]' is the multiplicity
- sequence of branch j.
-
- `multsequence(INPUT)[2][i,*]':
- contains the information which of these infinitely near points
- coincide.
-
-*Note:*
- The order of elements of the list `hne' obtained from
- `hnexpansion(f[,"ess")' must not be changed (because then the
- coincident infinitely near points couldn't be grouped together, cf.
- meaning of 2nd intmat in example). Hence, it is not wise to
- compute the HNE of several polynomials separately, put them into a
- list INPUT and call `multsequence(INPUT)'.
- Use `displayMultsequence' to produce a better readable output for
- reducible curves on the screen.
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- // -------- prepare for example ---------
- if (nameof(basering)=="HNEring") {
- def rettering=HNEring;
- kill HNEring;
- }
- // ------ the example starts here -------
- ring r=0,(x,y),dp;
- list hn=hnexpansion((x6-y10)*(x+y2-y3)*(x+y2+y3)); // 4 branches
- def HNEring=hn[1];
- setring HNEring;
- multsequence(hne[1])," | ",multsequence(hne[2])," | ",
- multsequence(hne[3])," | ",multsequence(hne[4]);
- ==> 3,2,1,1 | 3,2,1,1 | 1 | 1
- multsequence(hne);
- ==> [1]:
- ==> 3,3,1,1,
- ==> 2,2,1,1,
- ==> 1,1,1,1,
- ==> 1,1,1,1,
- ==> 1,1,1,1
- ==> [2]:
- ==> 4,0,0,0,
- ==> 4,0,0,0,
- ==> 2,2,0,0,
- ==> 2,1,1,0,
- ==> 1,1,1,1
- // The meaning of the entries of the 2nd matrix is as follows:
- displayMultsequence(hne);
- ==> [(3,3,1,1)],
- ==> [(2,2,1,1)],
- ==> [(1,1),(1,1)],
- ==> [(1,1),(1),(1)],
- ==> [(1),(1),(1),(1)]
- // --- restore HNEring if previously defined ---
- kill HNEring,r;
- if (defined(rettering)) {
- setring rettering;
- def HNEring=rettering;
- export HNEring;
- }
-
-* Menu:
-
-See also:
-* develop::
-* displayMultsequence::
-* hnexpansion::
-* separateHNE::
-
-*See also:* *note develop::; *note displayMultsequence::; *note
-hnexpansion::; *note separateHNE::.
-
-
-File: sing.info, Node: displayMultsequence, Next: intersection, Prev:
multsequence, Up: hnoether_lib
-
-D.5.5.10 displayMultsequence
-............................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- displayMultsequence(INPUT); INPUT list or poly
-
-*Assume:*
- INPUT is a bivariate polynomial, or the output of `develop(f)', or
- of `extdevelop(develop(f),n)', or of of `hnexpansion(f[,"ess"])',
- or (one entry in) the list `hne' of the ring created by
- `hnexpansion(f[,"ess "])'.
-
-*Return:*
- nothing
-
-*Display:*
- the sequence of multiplicities:
-
- - if `INPUT=develop(f)' or `INPUT=extdevelop(develop(f),n)' or
`INPUT=hne[i]':
- `a , b , c , ....... , 1'
- - if `INPUT=f' or `INPUT=hnexpansion(f[,"ess"])' or `INPUT=hne':
- `[(a_1, .... , b_1 , .... , c_1)],'
- `[(a_2, ... ), ... , (... , c_2)],'
- ` ........................................ ,'
- `[(a_n),(b_n), ....., (c_n)]'
- with:
- `a_1 , ... , a_n' the sequence of multiplicities of the 1st branch,
- `[...]' the multiplicities of the j-th transformed of all branches,
- `(...)' indicating branches meeting in an infinitely near point.
-
-*Note:*
- The same restrictions for INPUT as in `multsequence' apply.
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- // ------ the example starts here -------
- ring r=0,(x,y),dp;
- //// Example 1: Input = output of develop
- displayMultsequence(develop(x3-y5));
- ==> The sequence of multiplicities is 3,2,1,1
- //// Example 2: Input = bivariate polynomial
- displayMultsequence((x6-y10)*(x+y2-y3)*(x+y2+y3));
- ==> [(3,3,1,1)],
- ==> [(2,2,1,1)],
- ==> [(1,1),(1,1)],
- ==> [(1,1),(1),(1)],
- ==> [(1),(1),(1),(1)]
-
-* Menu:
-
-See also:
-* develop::
-* hnexpansion::
-* multsequence::
-* separateHNE::
-
-*See also:* *note develop::; *note hnexpansion::; *note multsequence::;
-*note separateHNE::.
-
-
-File: sing.info, Node: intersection, Next: stripHNE, Prev:
displayMultsequence, Up: hnoether_lib
-
-D.5.5.11 intersection
-.....................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- intersection(hne1,hne2); hne1, hne2 lists
-
-*Assume:*
- hne1, hne2 represent a HNE (i.e., are the output of `develop(f)',
- or of `extdevelop(develop(f),n)', or one entry of the list `hne' in
- the ring created by `hnexpansion(f[,"ess"])').
-
-*Return:*
- int, the intersection multiplicity of the branches corresponding to
- hne1 and hne2.
-
-*Example:*
- LIB "hnoether.lib";
- // ------ the example starts here -------
- ring r=0,(x,y),dp;
- list hn=hnexpansion((x2-y3)*(x2+y3));
- def HNEring=hn[1];
- setring HNEring;
- intersection(hne[1],hne[2]);
- ==> 6
-
-* Menu:
-
-See also:
-* displayInvariants::
-* hnexpansion::
-
-*See also:* *note displayInvariants::; *note hnexpansion::.
-
-
-File: sing.info, Node: stripHNE, Next: is_irred, Prev: intersection, Up:
hnoether_lib
-
-D.5.5.12 stripHNE
-.................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- stripHNE(L); L list
-
-*Assume:*
- L is the output of `develop(f)', or of `extdevelop(develop(f),n)',
- or (one entry of) the list `hne' in the ring created by
- `hnexpansion(f[,"ess"])'.
-
-*Return:*
- list in the same format as L, but all polynomials L[4], resp.
- L[i][4], are set to zero.
-
-*Note:*
- The purpose of this procedure is to remove huge amounts of data no
- longer needed. It is useful, if one or more of the polynomials in L
- consume much memory. It is still possible to compute invariants,
- parametrizations etc. with the stripped HNE(s), but it is not
- possible to use `extdevelop' with them.
-
-*Example:*
- LIB "hnoether.lib";
- ring r=0,(x,y),dp;
- list hne=develop(x2+y3+y4);
- hne;
- ==> [1]:
- ==> _[1,1]=0
- ==> _[1,2]=x
- ==> _[2,1]=0
- ==> _[2,2]=-1
- ==> [2]:
- ==> 1,-1
- ==> [3]:
- ==> 1
- ==> [4]:
- ==> x4-2x2y+y2+y
- ==> [5]:
- ==> 1
- stripHNE(hne);
- ==> [1]:
- ==> _[1,1]=0
- ==> _[1,2]=x
- ==> _[2,1]=0
- ==> _[2,2]=-1
- ==> [2]:
- ==> 1,-1
- ==> [3]:
- ==> 1
- ==> [4]:
- ==> 0
- ==> [5]:
- ==> 1
-
-* Menu:
-
-See also:
-* develop::
-* extdevelop::
-* hnexpansion::
-
-*See also:* *note develop::; *note extdevelop::; *note hnexpansion::.
-
-
-File: sing.info, Node: is_irred, Next: delta, Prev: stripHNE, Up:
hnoether_lib
-
-D.5.5.13 is_irred
-.................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- is_irred(f); f poly
-
-*Assume:*
- f is a squarefree bivariate polynomial (in the first 2 ring
- variables).
-
-*Return:*
- int (0 or 1):
- - `is_irred(f)=1' if f is irreducible as a formal power series over
- the algebraic closure of its coefficient field (f defines an
- analytically irreducible curve at zero),
- - `is_irred(f)=0' otherwise.
-
-*Note:*
- 0 and units in the ring of formal power series are considered to be
- not irreducible.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=0,(x,y),ls;
- is_irred(x2+y3);
- ==> 1
- is_irred(x2+y2);
- ==> 0
- is_irred(x2+y3+1);
- ==> 0
-
-
-File: sing.info, Node: delta, Next: newtonpoly, Prev: is_irred, Up:
hnoether_lib
-
-D.5.5.14 delta
-..............
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- delta(INPUT); INPUT a polynomial defining an isolated plane curve
- singularity at 0, or the Hamburger-Noether expansion thereof, i.e.
- the output of `develop(f)', or the output of
- `hnexpansion(f[,"ess"])', or (one of the entries of) the list `hne'
- in the ring created by `hnexpansion(f[,"ess"])'.
-
-*Return:*
- the delta invariant of the singularity at 0, the vector space
- dimension of R~/R, where R~ is the normalization of the singularity
- R=basering/f
-
-*Note:*
- In case the Hamburger-Noether expansion of the curve f is needed
- for other purposes as well it is better to calculate this first
- with the aid of `hnexpansion' and use it as input instead of the
- polynomial itself.
-
-*Example:*
- LIB "hnoether.lib";
- ring r = 32003,(x,y),ds;
- poly f = x25+x24-4x23-1x22y+4x22+8x21y-2x21-12x20y-4x19y2+4x20+10x19y
- +12x18y2-24x18y-20x17y2-4x16y3+x18+60x16y2+20x15y3-9x16y
- -80x14y3-10x13y4+36x14y2+60x12y4+2x11y5-84x12y3-24x10y5
- +126x10y4+4x8y6-126x8y5+84x6y6-36x4y7+9x2y8-1y9;
- delta(f);
- ==> 96
-
-* Menu:
-
-See also:
-* deltaLoc::
-* invariants::
-
-*See also:* *note deltaLoc::; *note invariants::.
-
-
-File: sing.info, Node: newtonpoly, Next: is_NND, Prev: delta, Up:
hnoether_lib
-
-D.5.5.15 newtonpoly
-...................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- newtonpoly(f); f poly
-
-*Assume:*
- basering has exactly two variables;
- f is convenient, that is, f(x,0) != 0 != f(0,y).
-
-*Return:*
- list of intvecs (= coordinates x,y of the Newton polygon of f).
-
-*Note:*
- Procedure uses `execute'; this can be avoided by calling
- `newtonpoly(f,1)' if the ordering of the basering is `ls'.
-
-*Example:*
- LIB "hnoether.lib";
- ring r=0,(x,y),ls;
- poly f=x5+2x3y-x2y2+3xy5+y6-y7;
- newtonpoly(f);
- ==> [1]:
- ==> 0,6
- ==> [2]:
- ==> 2,2
- ==> [3]:
- ==> 3,1
- ==> [4]:
- ==> 5,0
-
-
-File: sing.info, Node: is_NND, Next: puiseux2generators, Prev: newtonpoly,
Up: hnoether_lib
-
-D.5.5.16 is_NND
-...............
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- is_NND(f[,mu,NP]); f poly, mu int, NP list of intvecs
-
-*Assume:*
- f is convenient, that is, f(x,0) != 0 != f(0,y);
- mu (optional) is Milnor number of f.
- NP (optional) is output of `newtonpoly(f)'.
-
-*Return:*
- int: 1 if f in Newton non-degenerate, 0 otherwise.
-
-*Example:*
- LIB "hnoether.lib";
- ring r=0,(x,y),ls;
- poly f=x5+y3;
- is_NND(f);
- ==> 1
- poly g=(x-y)^5+3xy5+y6-y7;
- is_NND(g);
- ==> 0
- // if already computed, one should give the Minor number and Newton
polygon
- // as second and third input:
- int mu=milnor(g);
- list NP=newtonpoly(g);
- is_NND(g,mu,NP);
- ==> 0
-
-* Menu:
-
-See also:
-* newtonpoly::
-
-*See also:* *note newtonpoly::.
-
-
-File: sing.info, Node: puiseux2generators, Next: separateHNE, Prev: is_NND,
Up: hnoether_lib
-
-D.5.5.17 puiseux2generators
-...........................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- puiseux2generators(m,n); m,n intvec
-
-*Assume:*
- m, resp. n, represent the 1st, resp. 2nd, components of Puiseux
- pairs (e.g., `m=invariants(L)[3]', `n=invariants(L)[4]').
-
-*Return:*
- intvec of the generators of the semigroup of values.
-
-*Example:*
- LIB "hnoether.lib";
- // take (3,2),(7,2),(15,2),(31,2),(63,2),(127,2) as Puiseux pairs:
- puiseux2generators(intvec(3,7,15,31,63,127),intvec(2,2,2,2,2,2));
- ==> 64,96,208,424,852,1706,3413
-
-* Menu:
-
-See also:
-* invariants::
-
-*See also:* *note invariants::.
-
-
-File: sing.info, Node: separateHNE, Next: squarefree, Prev:
puiseux2generators, Up: hnoether_lib
-
-D.5.5.18 separateHNE
-....................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- separateHNE(hne1,hne2); hne1, hne2 lists
-
-*Assume:*
- hne1, hne2 are HNEs (=output of `develop(f)',
- `extdevelop(develop(f),n)', or one entry in the list `hne' in the
- ring created by `hnexpansion(f[,"ess"])'.
-
-*Return:*
- number of quadratic transformations needed to separate both curves
- (branches).
-
-*Example:*
- LIB "hnoether.lib";
- int p=printlevel; printlevel=-1;
- ring r=0,(x,y),dp;
- list hne1=develop(x);
- list hne2=develop(x+y);
- list hne3=develop(x+y2);
- separateHNE(hne1,hne2); // two transversal lines
- ==> 1
- separateHNE(hne1,hne3); // one quadratic transform. gives 1st example
- ==> 2
- printlevel=p;
-
-* Menu:
-
-See also:
-* develop::
-* displayMultsequence::
-* hnexpansion::
-* multsequence::
-
-*See also:* *note develop::; *note displayMultsequence::; *note
-hnexpansion::; *note multsequence::.
-
-
-File: sing.info, Node: squarefree, Next: allsquarefree, Prev: separateHNE,
Up: hnoether_lib
-
-D.5.5.19 squarefree
-...................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- squarefree(f); f poly
-
-*Assume:*
- f is a bivariate polynomial (in the first 2 ring variables).
-
-*Return:*
- poly, a squarefree divisor of f.
-
-*Note:*
- Usually, the return value is the greatest squarefree divisor, but
- there is one exception: factors with a p-th root, p the
- characteristic of the basering, are lost.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=3,(x,y),dp;
- squarefree((x3+y)^2);
- ==> x3+y
- squarefree((x+y)^3*(x-y)^2); // Warning: (x+y)^3 is lost
- ==> x-y
- squarefree((x+y)^4*(x-y)^2); // result is (x+y)*(x-y)
- ==> x2-y2
-
-* Menu:
-
-See also:
-* allsquarefree::
-
-*See also:* *note allsquarefree::.
-
-
-File: sing.info, Node: allsquarefree, Next: further_hn_proc, Prev:
squarefree, Up: hnoether_lib
-
-D.5.5.20 allsquarefree
-......................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage :*
- allsquarefree(f,g); f,g poly
-
-*Assume:*
- g is the output of `squarefree(f)'.
-
-*Return:*
- the greatest squarefree divisor of f.
-
-*Note :*
- This proc uses factorize to get the missing factors of f not in g
- and, therefore, may be slow.
-
-*Example:*
- LIB "hnoether.lib";
- ring exring=7,(x,y),dp;
- poly f=(x+y)^7*(x-y)^8;
- poly g=squarefree(f);
- g; // factor x+y lost, since characteristic=7
- ==> x-y
- allsquarefree(f,g); // all factors (x+y)*(x-y) found
- ==> x2-y2
-
-* Menu:
-
-See also:
-* squarefree::
-
-*See also:* *note squarefree::.
-
-
-File: sing.info, Node: further_hn_proc, Prev: allsquarefree, Up:
hnoether_lib
-
-D.5.5.21 further_hn_proc
-........................
-
-Procedure from library `hnoether.lib' (*note hnoether_lib::).
-
-*Usage:*
- further_hn_proc();
-
-*Note:*
- The library `hnoether.lib' contains some more procedures which are
- not shown when typing `help hnoether.lib;'. They may be useful for
- interactive use (e.g. if you want to do the calculation of an HN
- development "by hand" to see the intermediate results), and they
- can be enumerated by calling `further_hn_proc()'.
- Use `help <procedure>;' for detailed information about each of
- them.
-
-*Example:*
- LIB "hnoether.lib";
- further_hn_proc();
- ==>
- ==> The following procedures are also part of `hnoether.lib':
- ==>
- ==> getnm(f); intersection pts. of Newton polygon with axes
- ==> T_Transform(f,Q,N); returns f(y,xy^Q)/y^NQ (f: poly, Q,N: int)
- ==> T1_Transform(f,d,M); returns f(x,y+d*x^M) (f: poly,d:number,M:int)
- ==> T2_Transform(f,d,M,N,ref); a composition of T1 & T
- ==> koeff(f,I,J); gets coefficient of indicated monomial of poly f
- ==> redleit(f,S,E); restriction of monomials of f to line (S-E)
- ==> leit(f,n,m); special case of redleit (for irred. polynomials)
- ==> testreducible(f,n,m); tests whether f is reducible
- ==> charPoly(f,M,N); characteristic polynomial of f
- ==> find_in_list(L,p); find int p in list L
- ==> get_last_divisor(M,N); last divisor in Euclid's algorithm
- ==> factorfirst(f,M,N); try to factor f without `factorize'
- ==> factorlist(L); factorize a list L of polynomials
- ==> referencepoly(D); a polynomial f s.t. D is the Newton diagram of f
-
-
-File: sing.info, Node: mondromy_lib, Next: qhmoduli_lib, Prev:
hnoether_lib, Up: Singularities
-
-D.5.6 mondromy_lib
-------------------
-
-*Library:*
- mondromy.lib
-
-*Purpose:*
- Monodromy of an Isolated Hypersurface Singularity
-
-*Author:*
- Mathias Schulze, email: address@hidden
-
-*Overview:*
- A library to compute the monodromy of an isolated hypersurface
- singularity. It uses an algorithm by Brieskorn (manuscripta math.
- 2 (1970), 103-161) to compute a connection matrix of the
- meromorphic Gauss-Manin connection up to arbitrarily high order,
- and an algorithm of Gerard and Levelt (Ann. Inst. Fourier,
- Grenoble 23,1 (1973), pp. 157-195) to transform it to a simple
- pole.
-
-*Procedures:*
-
-* Menu:
-
-* detadj:: determinant and adjoint matrix of square matrix U
-* invunit:: series inverse of polynomial u up to order n
-* jacoblift:: lifts f^kappa in jacob(f) with minimal kappa
-* monodromyB:: monodromy of isolated hypersurface singularity f
-* H2basis:: basis of Brieskorn lattice H"
-
-* Menu:
-
-See also:
-* gaussman_lib::
-
-*See also:* *note gaussman_lib::.
-
-
-File: sing.info, Node: detadj, Next: invunit, Up: mondromy_lib
-
-D.5.6.1 detadj
-..............
-
-Procedure from library `mondromy.lib' (*note mondromy_lib::).
-
-*Usage:*
- detadj(U); U matrix
-
-*Assume:*
- U is a square matrix with non zero determinant.
-
-*Return:*
- The procedure returns a list with at most 2 entries.
- If U is not a square matrix, the list is empty.
- If U is a square matrix, then the first entry is the determinant of
- U. If U is a square matrix and the determinant of U not zero, then
- the second entry is the adjoint matrix of U.
-
-*Display:*
- The procedure displays comments if printlevel>=1.
-
-*Example:*
- LIB "mondromy.lib";
- ring R=0,x,dp;
- matrix U[2][2]=1,1+x,1+x2,1+x3;
- list daU=detadj(U);
- daU[1];
- ==> -x2-x
- print(daU[2]);
- ==> x3+1, -x-1,
- ==> -x2-1,1
-
-
-File: sing.info, Node: invunit, Next: jacoblift, Prev: detadj, Up:
mondromy_lib
-
-D.5.6.2 invunit
-...............
-
-Procedure from library `mondromy.lib' (*note mondromy_lib::).
-
-*Usage:*
- invunit(u,n); u poly, n int
-
-*Assume:*
- The polynomial u is a series unit.
-
-*Return:*
- The procedure returns the series inverse of u up to order n or a
- zero polynomial if u is no series unit.
-
-*Display:*
- The procedure displays comments if printlevel>=1.
-
-*Example:*
- LIB "mondromy.lib";
- ring R=0,(x,y),dp;
- invunit(2+x3+xy4,10);
- ==> 1/8x2y8-1/16x9+1/4x4y4+1/8x6-1/4xy4-1/4x3+1/2
-
-
-File: sing.info, Node: jacoblift, Next: monodromyB, Prev: invunit, Up:
mondromy_lib
-
-D.5.6.3 jacoblift
-.................
-
-Procedure from library `mondromy.lib' (*note mondromy_lib::).
-
-*Usage:*
- jacoblift(f); f poly
-
-*Assume:*
- The polynomial f in a series ring (local ordering) defines an
- isolated hypersurface singularity.
-
-*Return:*
- The procedure returns a list with entries kappa, xi, u of type int,
- vector, poly such that kappa is minimal with f^kappa in jacob(f), u
- is a unit, and u*f^kappa=(matrix(jacob(f))*xi)[1,1].
-
-*Display:*
- The procedure displays comments if printlevel>=1.
-
-*Example:*
- LIB "mondromy.lib";
- ring R=0,(x,y),ds;
- poly f=x2y2+x6+y6;
- jacoblift(f);
- ==> [1]:
- ==> 2
- ==> [2]:
- ==>
1/2x2y3*gen(2)+1/6x7*gen(1)+5/6x6y*gen(2)-2/3xy6*gen(1)+1/6y7*gen(2)-4\
-
x4y5*gen(2)-3/2x9y2*gen(1)-15/2x8y3*gen(2)+9/2x3y8*gen(1)-3/2x2y9*gen(2)
- ==> [3]:
- ==> 1-9x2y2
-
-
-File: sing.info, Node: monodromyB, Next: H2basis, Prev: jacoblift, Up:
mondromy_lib
-
-D.5.6.4 monodromyB
-..................
-
-Procedure from library `mondromy.lib' (*note mondromy_lib::).
-
-*Usage:*
- monodromyB(f[,opt]); f poly, opt int
-
-*Assume:*
- The polynomial f in a series ring (local ordering) defines an
- isolated hypersurface singularity.
-
-*Return:*
- The procedure returns a residue matrix M of the meromorphic
- Gauss-Manin connection of the singularity defined by f or an empty
- matrix if the assumptions are not fulfilled. If opt=0 (default),
- exp(-2*pi*i*M) is a monodromy matrix of f, else, only the
- characteristic polynomial of exp(-2*pi*i*M) coincides with the
- characteristic polynomial of the monodromy of f.
-
-*Display:*
- The procedure displays more comments for higher printlevel.
-
-*Example:*
- LIB "mondromy.lib";
- ring R=0,(x,y),ds;
- poly f=x2y2+x6+y6;
- matrix M=monodromyB(f);
- print(M);
- ==> 7/6,0, 0,0, 0, 0,0, 0,-1/2,0, 0, 0, 0,
- ==> 0, 7/6,0,0, 0, 0,-1/2,0,0, 0, 0, 0, 0,
- ==> 0, 0, 1,0, 0, 0,0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0,4/3,0, 0,0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 4/3,0,0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 0, 1,0, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 0, 0,5/6, 0,0, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 0, 0,0, 1,0, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 0, 0,0, 0,5/6, 0, 0, 0, 0,
- ==> 0, 0, 0,0, 0, 0,0, 0,0, 2/3,0, 0, 0,
- ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 2/3,0, 0,
- ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 47/44,-625/396,
- ==> 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 9/44, -3/44
-
-
-File: sing.info, Node: H2basis, Prev: monodromyB, Up: mondromy_lib
-
-D.5.6.5 H2basis
-...............
-
-Procedure from library `mondromy.lib' (*note mondromy_lib::).
-
-*Usage:*
- H2basis(f); f poly
-
-*Assume:*
- The polynomial f in a series ring (local ordering) defines an
- isolated hypersurface singularity.
-
-*Return:*
- The procedure returns a list of representatives of a C{f}-basis of
- the Brieskorn lattice H"=Omega^(n+1)/df^dOmega^(n-1).
-
-*Theory:*
- H" is a free C{f}-module of rank milnor(f).
-
-*Display:*
- The procedure displays more comments for higher printlevel.
-
-*Example:*
- LIB "mondromy.lib";
- ring R=0,(x,y),ds;
- poly f=x2y2+x6+y6;
- H2basis(f);
- ==> [1]:
- ==> x4
- ==> [2]:
- ==> x2y2
- ==> [3]:
- ==> y4
- ==> [4]:
- ==> x3
- ==> [5]:
- ==> x2y
- ==> [6]:
- ==> xy2
- ==> [7]:
- ==> y3
- ==> [8]:
- ==> x2
- ==> [9]:
- ==> xy
- ==> [10]:
- ==> y2
- ==> [11]:
- ==> x
- ==> [12]:
- ==> y
- ==> [13]:
- ==> 1
-
-
-File: sing.info, Node: qhmoduli_lib, Next: sing_lib, Prev: mondromy_lib,
Up: Singularities
-
-D.5.7 qhmoduli_lib
-------------------
-
-*Library:*
- qhmoduli.lib
-
-*Purpose:*
- Moduli Spaces of Semi-Quasihomogeneous Singularities
-
-*Author:*
- Thomas Bayer, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* ArnoldAction:: Induced action of G_f on T_.
-* ModEqn:: Equations of the moduli space for principal part f
-* QuotientEquations:: Equations of Variety(I)/G w.r.t. action 'A'
-* StabEqn:: Equations of the stabilizer of f.
-* StabEqnId:: Equations of the stabilizer of the qhom. ideal I.
-* StabOrder:: Order of the stabilizer of f.
-* UpperMonomials:: Upper basis of the Milnor algebra of f.
-* Max:: maximal integer contained in 'data'
-* Min:: minimal integer contained in 'data'
-* Table:: list, i-th entry is cmd(i), lb <= i <= ub
-
-
-File: sing.info, Node: ArnoldAction, Next: ModEqn, Up: qhmoduli_lib
-
-D.5.7.1 ArnoldAction
-....................
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- ArnoldAction(f, [Gf, B]); poly f; list Gf, B;
- 'Gf' is a list of two rings (coming from 'StabEqn')
-
-*Purpose:*
- compute the induced action of the stabilizer G of f on T_, where T_
- is given by the upper monomials B of the Milnor algebra of f.
-
-*Assume:*
- f is quasihomogeneous
-
-*Return:*
- polynomial ring over the same ground field, containing the ideals
- 'actionid' and 'stabid'.
- - 'actionid' is the ideal defining the induced action of Gf on T_
- - 'stabid' is the ideal of the stabilizer Gf in the new ring
-
-*Example:*
- LIB "qhmoduli.lib";
- ring B = 0,(x,y,z), ls;
- poly f = -z5+y5+x2z+x2y;
- def R = ArnoldAction(f);
- setring R;
- actionid;
- ==> actionid[1]=-s(2)*t(1)+s(3)*t(1)
- ==> actionid[2]=-s(2)^2*t(2)+2*s(2)^2*t(3)^2+s(3)^2*t(2)
- ==> actionid[3]=s(2)*t(3)+s(3)*t(3)
- stabid;
- ==> stabid[1]=s(2)*s(3)
- ==> stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1
- ==> stabid[3]=s(1)^2*s(3)^2-s(3)
- ==> stabid[4]=s(1)^2+s(2)^4-s(3)^4
- ==> stabid[5]=s(1)^4+s(2)^3-s(3)^3
- ==> stabid[6]=-s(1)^2*s(3)+s(3)^5
-
-
-File: sing.info, Node: ModEqn, Next: QuotientEquations, Prev: ArnoldAction,
Up: qhmoduli_lib
-
-D.5.7.2 ModEqn
-..............
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- ModEqn(f [, opt]); poly f; int opt;
-
-*Purpose:*
- compute equations of the moduli space of semiquasihomogeneous
- hypersurface singularity with principal part f w.r.t. right
- equivalence
-
-*Assume:*
- f quasihomogeneous polynomial with an isolated singularity at 0
-
-*Return:*
- polynomial ring, possibly a simple extension of the ground field of
- the basering, containing the ideal 'modid'
- - 'modid' is the ideal of the moduli space if opt is even (> 0).
- otherwise it contains generators of the coordinate ring R of the
- moduli space (note : Spec(R) is the moduli space)
-
-*Options:*
- 1 compute equations of the mod. space,
- 2 use a primary decomposition
- 4 compute E_f0, i.e., the image of G_f0
- To combine options, add their value, default: opt =7
-
-*Example:*
- LIB "qhmoduli.lib";
- ring B = 0,(x,y), ls;
- poly f = -x4 + xy5;
- def R = ModEqn(f);
- setring R;
- modid;
- ==> modid[1]=Y(5)^2-Y(4)*Y(6)
- ==> modid[2]=Y(4)*Y(5)-Y(3)*Y(6)
- ==> modid[3]=Y(3)*Y(5)-Y(2)*Y(6)
- ==> modid[4]=Y(2)*Y(5)-Y(1)*Y(6)
- ==> modid[5]=Y(4)^2-Y(2)*Y(6)
- ==> modid[6]=Y(3)*Y(4)-Y(1)*Y(6)
- ==> modid[7]=Y(2)*Y(4)-Y(1)*Y(5)
- ==> modid[8]=Y(3)^2-Y(1)*Y(5)
- ==> modid[9]=Y(2)*Y(3)-Y(1)*Y(4)
- ==> modid[10]=Y(2)^2-Y(1)*Y(3)
-
-
-File: sing.info, Node: QuotientEquations, Next: StabEqn, Prev: ModEqn, Up:
qhmoduli_lib
-
-D.5.7.3 QuotientEquations
-.........................
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- QuotientEquations(G,action,emb [, opt]); ideal G,action,emb;int opt
-
-*Purpose:*
- compute the quotient of the variety given by the parameterization
- 'emb' by the linear action 'action' of the algebraic group G.
-
-*Assume:*
- 'action' is linear, G must be finite if the Reynolds operator is
- needed (i.e., NullCone(G,action) returns some non-invariant polys)
-
-*Return:*
- polynomial ring over a simple extension of the ground field of the
- basering, containing the ideals 'id' and 'embedid'.
- - 'id' contains the equations of the quotient, if opt = 1; if opt =
- 0, 2, 'id' contains generators of the coordinate ring R of the
- quotient (Spec(R) is the quotient)
- - 'embedid' = 0, if opt = 1;
- if opt = 0, 2, it is the ideal defining the equivariant embedding
-
-*Options:*
- 1 compute equations of the quotient,
- 2 use a primary decomposition when computing the Reynolds operator
- To combine options, add their value, default: opt =3.
-
-
-File: sing.info, Node: StabEqn, Next: StabEqnId, Prev: QuotientEquations,
Up: qhmoduli_lib
-
-D.5.7.4 StabEqn
-...............
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- StabEqn(f); f polynomial
-
-*Purpose:*
- compute the equations of the isometry group of f.
-
-*Assume:*
- f semiquasihomogeneous polynomial with an isolated singularity at 0
-
-*Return:*
- list of two ring 'S1', 'S2'
- - 'S1' contains the equations of the stabilizer (ideal 'stabid')
- - 'S2' contains the action of the stabilizer (ideal 'actionid')
-
-*Global:*
- varSubsList, contains the index j s.t. x(i) -> x(i)t(j) ...
-
-*Example:*
- LIB "qhmoduli.lib";
- ring B = 0,(x,y,z), ls;
- poly f = -z5+y5+x2z+x2y;
- list stab = StabEqn(f);
- def S1 = stab[1]; setring S1; stabid;
- ==> stabid[1]=s(2)*s(3)
- ==> stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1
- ==> stabid[3]=s(1)^2*s(3)^2-s(3)
- ==> stabid[4]=s(2)^4-s(3)^4+s(1)^2
- ==> stabid[5]=s(1)^4+s(2)^3-s(3)^3
- ==> stabid[6]=s(3)^5-s(1)^2*s(3)
- def S2 = stab[2]; setring S2; actionid;
- ==> actionid[1]=s(1)*x
- ==> actionid[2]=s(3)*y+s(2)*z
- ==> actionid[3]=s(2)*y+s(3)*z
-
-
-File: sing.info, Node: StabEqnId, Next: StabOrder, Prev: StabEqn, Up:
qhmoduli_lib
-
-D.5.7.5 StabEqnId
-.................
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- StabEqn(I, w); I ideal, w intvec
-
-*Purpose:*
- compute the equations of the isometry group of the ideal I each
- generator of I is fixed by the stabilizer.
-
-*Assume:*
- I semiquasihomogeneous ideal wrt 'w' with an isolated singularity
- at 0
-
-*Return:*
- list of two ring 'S1', 'S2'
- - 'S1' contains the equations of the stabilizer (ideal 'stabid')
- - 'S2' contains the action of the stabilizer (ideal 'actionid')
-
-*Global:*
- varSubsList, contains the index j s.t. t(i) -> t(i)t(j) ...
-
-*Example:*
- LIB "qhmoduli.lib";
- ring B = 0,(x,y,z), ls;
- ideal I = x2,y3,z6;
- intvec w = 3,2,1;
- list stab = StabEqnId(I, w);
- ==> // ** redefining d **
- ==> // ** redefining newcoMx **
- ==> // ** redefining coMx **
- ==> // ** redefining d **
- ==> // ** redefining newcoMx **
- ==> // ** redefining coMx **
- def S1 = stab[1]; setring S1; stabid;
- ==> stabid[1]=s(1)^2-1
- ==> stabid[2]=s(2)^3-1
- ==> stabid[3]=s(3)^6-1
- def S2 = stab[2]; setring S2; actionid;
- ==> actionid[1]=s(1)*x
- ==> actionid[2]=s(2)*y
- ==> actionid[3]=s(3)*z
-
-
-File: sing.info, Node: StabOrder, Next: UpperMonomials, Prev: StabEqnId,
Up: qhmoduli_lib
-
-D.5.7.6 StabOrder
-.................
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- StabOrder(f); poly f;
-
-*Purpose:*
- compute the order of the stabilizer group of f.
-
-*Assume:*
- f quasihomogeneous polynomial with an isolated singularity at 0
-
-*Return:*
- int
-
-*Global:*
- varSubsList
-
-
-File: sing.info, Node: UpperMonomials, Next: Max, Prev: StabOrder, Up:
qhmoduli_lib
-
-D.5.7.7 UpperMonomials
-......................
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- UpperMonomials(poly f, [intvec w])
-
-*Purpose:*
- compute the upper monomials of the milnor algebra of f.
-
-*Assume:*
- f is quasihomogeneous (w.r.t. w)
-
-*Return:*
- ideal
-
-*Example:*
- LIB "qhmoduli.lib";
- ring B = 0,(x,y,z), ls;
- poly f = -z5+y5+x2z+x2y;
- UpperMonomials(f);
- ==> _[1]=y3z3
- ==> _[2]=x2y3
- ==> _[3]=x2y2
-
-
-File: sing.info, Node: Max, Next: Min, Prev: UpperMonomials, Up:
qhmoduli_lib
-
-D.5.7.8 Max
-...........
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- Max(data); intvec/list of integers data
-
-*Purpose:*
- find the maximal integer contained in 'data'
-
-*Return:*
- list
-
-*Assume:*
- 'data' contains only integers and is not empty
-
-
-File: sing.info, Node: Min, Next: Table, Prev: Max, Up: qhmoduli_lib
-
-D.5.7.9 Min
-...........
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- Min(data); intvec/list of integers data
-
-*Purpose:*
- find the minimal integer contained in 'data'
-
-*Return:*
- list
-
-*Assume:*
- 'data' contains only integers and is not empty
-
-
-File: sing.info, Node: Table, Prev: Min, Up: qhmoduli_lib
-
-D.5.7.10 Table
-..............
-
-Procedure from library `qhmoduli.lib' (*note qhmoduli_lib::).
-
-*Usage:*
- Table(cmd,i, lb, ub); string cmd, i; int lb, ub
-
-*Purpose:*
- generate a list of size ub - lb + 1 s.t. _[i] = cmd(i)
-
-*Return:*
- list
-
-
-File: sing.info, Node: sing_lib, Next: spcurve_lib, Prev: qhmoduli_lib,
Up: Singularities
-
-D.5.8 sing_lib
---------------
-
-*Library:*
- sing.lib
-
-*Purpose:*
- Invariants of Singularities
-
-*Authors:*
- Gert-Martin Greuel, email: address@hidden
- Bernd Martin, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* deform:: infinitesimal deformations of ideal i
-* dim_slocus:: dimension of singular locus of ideal i
-* is_active:: is poly f an active element mod id? (id ideal/module)
-* is_ci:: is ideal i a complete intersection?
-* is_is:: is ideal i an isolated singularity?
-* is_reg:: is poly f a regular element mod id? (id ideal/module)
-* is_regs:: are gen's of ideal i regular sequence modulo id?
-* locstd:: SB for local degree ordering without cancelling units
-* milnor:: milnor number of ideal i; (assume i is ICIS in nf)
-* nf_icis:: generic combinations of generators; get ICIS in nf
-* slocus:: ideal of singular locus of ideal i
-* qhspectrum:: spectrum numbers of w-homogeneous polynomial f
-* Tjurina:: SB of Tjurina module of ideal i (assume i is ICIS)
-* tjurina:: Tjurina number of ideal i (assume i is ICIS)
-* T_1:: T^1-module of ideal i
-* T_2:: T^2-module of ideal i
-* T_12:: T^1- and T^2-module of ideal i
-* tangentcone:: compute tangent cone of id
-
-
-File: sing.info, Node: deform, Next: dim_slocus, Up: sing_lib
-
-D.5.8.1 deform
-..............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- deform(id); id=ideal or poly
-
-*Return:*
- matrix, columns are kbase of infinitesimal deformations
-
-*Example:*
- LIB "sing.lib";
- ring r = 32003,(x,y,z),ds;
- ideal i = xy,xz,yz;
- matrix T = deform(i);
- print(T);
- ==> x,0,0,
- ==> 0,0,z,
- ==> 0,y,0
- print(deform(x3+y5+z2));
- ==> xy3,y3,xy2,y2,xy,y,x,1
-
-
-File: sing.info, Node: dim_slocus, Next: is_active, Prev: deform, Up:
sing_lib
-
-D.5.8.2 dim_slocus
-..................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- dim_slocus(i); i ideal or poly
-
-*Return:*
- dimension of singular locus of i
-
-*Example:*
- LIB "sing.lib";
- ring r = 32003,(x,y,z),ds;
- ideal i = x5+y6+z6,x2+2y2+3z2;
- dim_slocus(i);
- ==> 0
-
-
-File: sing.info, Node: is_active, Next: is_ci, Prev: dim_slocus, Up:
sing_lib
-
-D.5.8.3 is_active
-.................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- is_active(f,id); f poly, id ideal or module
-
-*Return:*
- 1 if f is an active element modulo id (i.e.
- dim(id)=dim(id+f*R^n)+1, if id is a submodule of R^n) resp. 0 if f
- is not active. The basering may be a quotient ring
-
-*Note:*
- regular parameters are active but not vice versa (id may have
- embedded components). proc is_reg tests whether f is a regular
- parameter
-
-*Example:*
- LIB "sing.lib";
- ring r =32003,(x,y,z),ds;
- ideal i = yx3+y,yz3+y3z;
- poly f = x;
- is_active(f,i);
- ==> 1
- qring q = std(x4y5);
- poly f = x;
- module m = [yx3+x,yx3+y3x];
- is_active(f,m);
- ==> 0
-
-
-File: sing.info, Node: is_ci, Next: is_is, Prev: is_active, Up: sing_lib
-
-D.5.8.4 is_ci
-.............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- is_ci(i); i ideal
-
-*Return:*
- intvec = sequence of dimensions of ideals (j[1],...,j[k]), for
- k=1,...,size(j), where j is minimal base of i. i is a complete
- intersection if last number equals nvars-size(i)
-
-*Note:*
- dim(0-ideal) = -1. You may first apply simplify(i,10); in order to
- delete zeroes and multiples from set of generators
- printlevel >=0: display comments (default)
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1; // display comments
- ring r = 32003,(x,y,z),ds;
- ideal i = x4+y5+z6,xyz,yx2+xz2+zy7;
- is_ci(i);
- ==> // complete intersection of dim 0
- ==> // dim-sequence:
- ==> 2,1,0
- i = xy,yz;
- is_ci(i);
- ==> // no complete intersection
- ==> // dim-sequence:
- ==> 2,2
- printlevel = p;
-
-
-File: sing.info, Node: is_is, Next: is_reg, Prev: is_ci, Up: sing_lib
-
-D.5.8.5 is_is
-.............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- is_is(id); id ideal or poly
-
-*Return:*
- intvec = sequence of dimensions of singular loci of ideals
- generated by id[1]..id[i], k = 1..size(id);
- dim(0-ideal) = -1;
- id defines an isolated singularity if last number is 0
-
-*Note:*
- printlevel >=0: display comments (default)
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 32003,(x,y,z),ds;
- ideal i = x2y,x4+y5+z6,yx2+xz2+zy7;
- is_is(i);
- ==> // dim of singular locus = 0
- ==> // isolated singularity if last number is 0 in dim-sequence:
- ==> 2,1,0
- poly f = xy+yz;
- is_is(f);
- ==> // dim of singular locus = 1
- ==> // isolated singularity if last number is 0 in dim-sequence:
- ==> 1
- printlevel = p;
-
-
-File: sing.info, Node: is_reg, Next: is_regs, Prev: is_is, Up: sing_lib
-
-D.5.8.6 is_reg
-..............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- is_reg(f,id); f poly, id ideal or module
-
-*Return:*
- 1 if multiplication with f is injective modulo id, 0 otherwise
-
-*Note:*
- let R be the basering and id a submodule of R^n. The procedure
- checks injectivity of multiplication with f on R^n/id. The basering
- may be a quotient ring
-
-*Example:*
- LIB "sing.lib";
- ring r = 32003,(x,y),ds;
- ideal i = x8,y8;
- ideal j = (x+y)^4;
- i = intersect(i,j);
- poly f = xy;
- is_reg(f,i);
- ==> 0
-
-
-File: sing.info, Node: is_regs, Next: locstd, Prev: is_reg, Up: sing_lib
-
-D.5.8.7 is_regs
-...............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- is_regs(i[,id]); i poly, id ideal or module (default: id=0)
-
-*Return:*
- 1 if generators of i are a regular sequence modulo id, 0 otherwise
-
-*Note:*
- let R be the basering and id a submodule of R^n. The procedure
- checks injectivity of multiplication with i[k] on R^n/id+i[1..k-1].
- The basering may be a quotient ring
- printlevel >=0: display comments (default)
- printlevel >=1: display comments during computation
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r1 = 32003,(x,y,z),ds;
- ideal i = x8,y8,(x+y)^4;
- is_regs(i);
- ==> // checking whether element 1 is regular mod 1 .. 0
- ==> // checking whether element 2 is regular mod 1 .. 1
- ==> // checking whether element 3 is regular mod 1 .. 2
- ==> // elements 1..2 are regular, 3 is not regular mod 1..2
- ==> 0
- module m = [x,0,y];
- i = x8,(x+z)^4;;
- is_regs(i,m);
- ==> // checking whether element 1 is regular mod 1 .. 0
- ==> // checking whether element 2 is regular mod 1 .. 1
- ==> // elements are a regular sequence of length 2
- ==> 1
- printlevel = p;
-
-
-File: sing.info, Node: locstd, Next: milnor, Prev: is_regs, Up: sing_lib
-
-D.5.8.8 locstd
-..............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- locstd (id); id = ideal
-
-*Return:*
- a standard basis for a local degree ordering
-
-*Note:*
- the procedure homogenizes id w.r.t. a new 1st variable @t@,
- computes a SB wrt (dp(1),dp) and substitutes @t@ by 1.
- Hence the result is a SB with respect to an ordering which sorts
- first w.r.t. the order and then refines it with dp. This is a local
- degree ordering.
- This is done in order to avoid cancellation of units and thus be
- able to use option(contentSB);
-
-*Example:*
- LIB "sing.lib";
- ring R = 0,(x,y,z),ds;
- ideal i = xyz+z5,2x2+y3+z7,3z5+y5;
- locstd(i);
- ==> _[1]=y5+3z5
- ==> _[2]=3x4y3z8-4x3y3z9+6x2y4z9+3y5z10
- ==> _[3]=3x4z13-4x3z14+6x2yz14+3y2z15
- ==> _[4]=3x4yz12-4x3yz13+6x2y2z13+3y3z14
- ==> _[5]=2x2z9+x2y2z8+y3z9
- ==> _[6]=2x2y4z5+y7z5-3x2yz9
- ==> _[7]=6y2z10-3x2y3z8+4xy3z9-3y4z9
- ==> _[8]=3x2y2z8+3y3z9+2xy4z8
- ==> _[9]=18z14-4xy6z8+3y7z8-9x2yz12
- ==> _[10]=xyz+z5
- ==> _[11]=3xz6-y4z5
- ==> _[12]=3y3z6+2xy4z5-3xyz9
- ==> _[13]=y4z5-2xz9-xy2z8
- ==> _[14]=3z10+2xyz9+xy3z8
- ==> _[15]=2x2z5+y3z5-xyz8
- ==> _[16]=y4z-2xz5+yz8
- ==> _[17]=3z6+2xyz5-y2z8
- ==> _[18]=2x2+y3+z7
-
-
-File: sing.info, Node: milnor, Next: nf_icis, Prev: locstd, Up: sing_lib
-
-D.5.8.9 milnor
-..............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- milnor(i); i ideal or poly
-
-*Return:*
- Milnor number of i, if i is ICIS (isolated complete intersection
- singularity) in generic form, resp. -1 if not
-
-*Note:*
- use proc nf_icis to put generators in generic form
- printlevel >=0: display comments (default)
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 32003,(x,y,z),ds;
- ideal j = x5+y6+z6,x2+2y2+3z2,xyz+yx;
- milnor(j);
- ==> //sequence of discriminant numbers: 100,149,70
- ==> 21
- poly f = x7+y7+(x-y)^2*x2y2+z2;
- milnor(f);
- ==> 28
- printlevel = p;
-
-
-File: sing.info, Node: nf_icis, Next: slocus, Prev: milnor, Up: sing_lib
-
-D.5.8.10 nf_icis
-................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- nf_icis(i); i ideal
-
-*Return:*
- ideal = generic linear combination of generators of i if i is an
- ICIS (isolated complete intersection singularity), return i if not
-
-*Note:*
- this proc is useful in connection with proc milnor
- printlevel >=0: display comments (default)
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 32003,(x,y,z),ds;
- ideal i = x3+y4,z4+yx;
- nf_icis(i);
- ==> // complete intersection of dim 1
- ==> // dim-sequence:
- ==> // dim of singular locus = 0
- ==> // isolated singularity if last number is 0 in dim-sequence:
- ==> // dim of singular locus = 0
- ==> // isolated singularity if last number is 0 in dim-sequence:
- ==> // ICIS in generic form after 1 genericity loop(s)
- ==> _[1]=2xy+x3+y4+2z4
- ==> _[2]=xy+z4
- ideal j = x3+y4,xy,yz;
- nf_icis(j);
- ==> // no complete intersection
- ==> // dim-sequence:
- ==> // no complete intersection
- ==> _[1]=x3+y4
- ==> _[2]=xy
- ==> _[3]=yz
- printlevel = p;
-
-
-File: sing.info, Node: slocus, Next: qhspectrum, Prev: nf_icis, Up:
sing_lib
-
-D.5.8.11 slocus
-...............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- slocus(i); i ideal
-
-*Return:*
- ideal of singular locus of i
-
-*Example:*
- LIB "sing.lib";
- ring r = 0,(u,v,w,x,y,z),dp;
- ideal i = wx,wy,wz,vx,vy,vz,ux,uy,uz,y3-x2;;
- slocus(i);
- ==> _[1]=x
- ==> _[2]=w
- ==> _[3]=v
- ==> _[4]=u
- ==> _[5]=y2
-
-
-File: sing.info, Node: qhspectrum, Next: Tjurina, Prev: slocus, Up:
sing_lib
-
-D.5.8.12 qhspectrum
-...................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- qhspectrum(f,w); f=poly, w=intvec;
-
-*Assume:*
- f is a weighted homogeneous isolated singularity w.r.t. the weights
- given by w; w must consist of as many positive integers as there
- are variables of the basering
-
-*Compute:*
- the spectral numbers of the w-homogeneous polynomial f, computed in
- a ring of characteristic 0
-
-*Return:*
- intvec d,s1,...,su where:
- d = w-degree(f) and si/d = i-th spectral-number(f)
- No return value if basering has parameters or if f is no isolated
- singularity, displays a warning in this case
-
-*Example:*
- LIB "sing.lib";
- ring r;
- poly f=x3+y5+z2;
- intvec w=10,6,15;
- qhspectrum(f,w);
- ==> 30,1,7,11,13,17,19,23,29
- // the spectrum numbers are:
- // 1/30,7/30,11/30,13/30,17/30,19/30,23/30,29/30
-
-
-File: sing.info, Node: Tjurina, Next: tjurina, Prev: qhspectrum, Up:
sing_lib
-
-D.5.8.13 Tjurina
-................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- Tjurina(id[,<any>]); id=ideal or poly
-
-*Assume:*
- id=ICIS (isolated complete intersection singularity)
-
-*Return:*
- standard basis of Tjurina-module of id,
- of type module if id=ideal, resp. of type ideal if id=poly. If a
- second argument is present (of any type) return a list:
- [1] = Tjurina number,
- [2] = k-basis of miniversal deformation,
- [3] = SB of Tjurina module,
- [4] = Tjurina module
-
-*Display:*
- Tjurina number if printlevel >= 0 (default)
-
-*Note:*
- Tjurina number = -1 implies that id is not an ICIS
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 0,(x,y,z),ds;
- poly f = x5+y6+z7+xyz; // singularity T[5,6,7]
- list T = Tjurina(f,"");
- ==> // Tjurina number = 16
- show(T[1]); // Tjurina number, should be 16
- ==> // int, size 1
- ==> 16
- show(T[2]); // basis of miniversal deformation
- ==> // ideal, 16 generator(s)
- ==> z6,
- ==> z5,
- ==> z4,
- ==> z3,
- ==> z2,
- ==> z,
- ==> y5,
- ==> y4,
- ==> y3,
- ==> y2,
- ==> y,
- ==> x4,
- ==> x3,
- ==> x2,
- ==> x,
- ==> 1
- show(T[3]); // SB of Tjurina ideal
- ==> // ideal, 6 generator(s)
- ==> xy+7z6,
- ==> xz+6y5,
- ==> yz+5x4,
- ==> 5x5-6y6,
- ==> 6y6,
- ==> z7
- show(T[4]); ""; // Tjurina ideal
- ==> // ideal, 4 generator(s)
- ==> yz+5x4,
- ==> xz+6y5,
- ==> xy+7z6,
- ==> xyz+x5+y6+z7
- ==>
- ideal j = x2+y2+z2,x2+2y2+3z2;
- show(kbase(Tjurina(j))); // basis of miniversal deformation
- ==> // Tjurina number = 5
- ==> // module, 5 generator(s)
- ==> [z]
- ==> [y]
- ==> [x]
- ==> [1]
- ==> [0,1]
- hilb(Tjurina(j)); // Hilbert series of Tjurina module
- ==> // Tjurina number = 5
- ==> // 2 t^0
- ==> // -3 t^1
- ==> // -3 t^2
- ==> // 7 t^3
- ==> // -3 t^4
- ==>
- ==> // 2 t^0
- ==> // 3 t^1
- ==> // dimension (local) = 0
- ==> // multiplicity = 5
- printlevel = p;
-
-
-File: sing.info, Node: tjurina, Next: T_1, Prev: Tjurina, Up: sing_lib
-
-D.5.8.14 tjurina
-................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- tjurina(id); id=ideal or poly
-
-*Assume:*
- id=ICIS (isolated complete intersection singularity)
-
-*Return:*
- int = Tjurina number of id
-
-*Note:*
- Tjurina number = -1 implies that id is not an ICIS
-
-*Example:*
- LIB "sing.lib";
- ring r=32003,(x,y,z),(c,ds);
- ideal j=x2+y2+z2,x2+2y2+3z2;
- tjurina(j);
- ==> 5
-
-
-File: sing.info, Node: T_1, Next: T_2, Prev: tjurina, Up: sing_lib
-
-D.5.8.15 T_1
-............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- T_1(id[,<any>]); id = ideal or poly
-
-*Return:*
- T_1(id): of type module/ideal if id is of type ideal/poly. We call
- T_1(id) the T_1-module of id. It is a std basis of the presentation
- of 1st order deformations of P/id, if P is the basering. If a
- second argument is present (of any type) return a list of 3
- modules:
- [1]= T_1(id)
- [2]= generators of normal bundle of id, lifted to P
- [3]= module of relations of [2], lifted to P
- (note: transpose[3]*[2]=0 mod id)
- The list contains all non-easy objects which must be computed to
- get T_1(id).
-
-*Display:*
- k-dimension of T_1(id) if printlevel >= 0 (default)
-
-*Note:*
- T_1(id) itself is usually of minor importance. Nevertheless, from
- it all relevant information can be obtained. The most important are
- probably vdim(T_1(id)); (which computes the Tjurina number),
- hilb(T_1(id)); and kbase(T_1(id));
- If T_1 is called with two argument, then matrix([2])*(kbase([1]))
- represents a basis of 1st order semiuniversal deformation of id
- (use proc 'deform', to get this in a direct way).
- For a complete intersection the proc Tjurina is faster
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 32003,(x,y,z),(c,ds);
- ideal i = xy,xz,yz;
- module T = T_1(i);
- ==> // dim T_1 = 3
- vdim(T); // Tjurina number = dim_K(T_1), should be 3
- ==> 3
- list L=T_1(i,"");
- ==> // dim T_1 = 3
- module kB = kbase(L[1]);
- print(L[2]*kB); // basis of 1st order miniversal deformation
- ==> 0,0,0,
- ==> z,0,0,
- ==> 0,y,z
- show(L[2]); // presentation of normal bundle
- ==> // module, 6 generator(s)
- ==> [x]
- ==> [y,z]
- ==> [0,x,y]
- ==> [0,z]
- ==> [0,0,y]
- ==> [0,0,z]
- print(L[3]); // relations of i
- ==> z, 0,
- ==> -y,y,
- ==> 0, -x
- print(transpose(L[3])*L[2]); // should be 0 (mod i)
- ==> xz,0, -xy,-yz,0, 0,
- ==> 0, yz,0, yz, -xy,-xz
- printlevel = p;
-
-
-File: sing.info, Node: T_2, Next: T_12, Prev: T_1, Up: sing_lib
-
-D.5.8.16 T_2
-............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- T_2(id[,<any>]); id = ideal
-
-*Return:*
- T_2(id): T_2-module of id . This is a std basis of a presentation
- of the module of obstructions of R=P/id, if P is the basering. If
- a second argument is present (of any type) return a list of 4
- modules and 1 ideal:
- [1]= T_2(id)
- [2]= standard basis of id (ideal)
- [3]= module of relations of id (=1st syzygy module of id)
- [4]= presentation of syz/kos
- [5]= relations of Hom_P([3]/kos,R), lifted to P
- The list contains all non-easy objects which must be computed to
- get T_2(id).
-
-*Display:*
- k-dimension of T_2(id) if printlevel >= 0 (default)
-
-*Note:*
- The most important information is probably vdim(T_2(id)). Use proc
- miniversal to get equations of miniversal deformation.
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 32003,(x,y),(c,dp);
- ideal j = x6-y4,x6y6,x2y4-x5y2;
- module T = T_2(j);
- ==> // dim T_2 = 6
- vdim(T);
- ==> 6
- hilb(T);"";
- ==> // 1 t^0
- ==> // -1 t^2
- ==> // -1 t^3
- ==> // 1 t^5
- ==>
- ==> // 1 t^0
- ==> // 2 t^1
- ==> // 2 t^2
- ==> // 1 t^3
- ==> // dimension (affine) = 0
- ==> // degree = 6
- ==>
- ring r1 = 0,(x,y,z),dp;
- ideal id = xy,xz,yz;
- list L = T_2(id,"");
- ==> // dim T_2 = 0
- vdim(L[1]); // vdim of T_2
- ==> 0
- print(L[3]); // syzygy module of id
- ==> -z,-z,
- ==> y, 0,
- ==> 0, x
- printlevel = p;
-
-
-File: sing.info, Node: T_12, Next: tangentcone, Prev: T_2, Up: sing_lib
-
-D.5.8.17 T_12
-.............
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- T_12(i[,any]); i = ideal
-
-*Return:*
- T_12(i): list of 2 modules:
- * standard basis of T_1-module =T_1(i), 1st order deformations
- * standard basis of T_2-module =T_2(i), obstructions of R=P/i
- If a second argument is present (of any type) return a list of 9
- modules, matrices, integers:
- [1]= standard basis of T_1-module
- [2]= standard basis of T_2-module
- [3]= vdim of T_1
- [4]= vdim of T_2
- [5]= matrix, whose cols present infinitesimal deformations
- [6]= matrix, whose cols are generators of relations of i(=syz(i))
- [7]= matrix, presenting Hom_P(syz/kos,R), lifted to P
- [8]= presentation of T_1-module, no std basis
- [9]= presentation of T_2-module, no std basis
-
-*Display:*
- k-dimension of T_1 and T_2 if printlevel >= 0 (default)
-
-*Note:*
- Use proc miniversal from deform.lib to get miniversal deformation
- of i, the list contains all objects used by proc miniversal
-
-*Example:*
- LIB "sing.lib";
- int p = printlevel;
- printlevel = 1;
- ring r = 200,(x,y,z,u,v),(c,ws(4,3,2,3,4));
- ideal i = xz-y2,yz2-xu,xv-yzu,yu-z3,z2u-yv,zv-u2;
- //a cyclic quotient singularity
- list L = T_12(i,1);
- ==> // dim T_1 = 5
- ==> // dim T_2 = 3
- print(L[5]); //matrix of infin. deformations
- ==> 0, 0, 0, 0, 0,
- ==> yz, y, z2, 0, 0,
- ==> -z3,-z2,-zu,yz, yu,
- ==> -z2,-z, -u, 0, 0,
- ==> zu, u, v, -z2,-zu,
- ==> 0, 0, 0, u, v
- printlevel = p;
-
-
-File: sing.info, Node: tangentcone, Prev: T_12, Up: sing_lib
-
-D.5.8.18 tangentcone
-....................
-
-Procedure from library `sing.lib' (*note sing_lib::).
-
-*Usage:*
- tangentcone(id [,n]); id = ideal, n = int
-
-*Return:*
- the tangent cone of id
-
-*Note:*
- the procedure works for any monomial ordering.
- If n=0 use std w.r.t. local ordering ds, if n=1 use locstd
-
-*Example:*
- LIB "sing.lib";
- ring R = 0,(x,y,z),ds;
- ideal i = 7xyz+z5,x2+y3+z7,5z5+y5;
- tangentcone(i);
- ==> _[1]=x2
- ==> _[2]=7xyz
- ==> _[3]=y5+5z5
- ==> _[4]=7y4z
- ==> _[5]=35z6
-
-
-File: sing.info, Node: spcurve_lib, Next: spectrum_lib, Prev: sing_lib,
Up: Singularities
-
-D.5.9 spcurve_lib
------------------
-
-*Library:*
- spcurve.lib
-
-*Purpose:*
- Deformations and Invariants of CM-codim 2 Singularities
-
-*Author:*
- Anne Fruehbis-Krueger, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* isCMcod2:: presentation matrix of the ideal i, if i is CM
-* CMtype:: Cohen-Macaulay type of the ideal i
-* matrixT1:: 1st order deformation T1 in matrix description
-* semiCMcod2:: semiuniversal deformation of maximal minors of M
-* discr:: discriminant of semiuniversal deformation
-* qhmatrix:: weights if M is quasihomogeneous
-* relweight:: relative matrix weight of N w.r.t. weights (W,a)
-* posweight:: deformation of coker(M) of non-negative weight
-* KSpencerKernel:: kernel of the Kodaira-Spencer map
-
-
-File: sing.info, Node: isCMcod2, Next: CMtype, Up: spcurve_lib
-
-D.5.9.1 isCMcod2
-................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- isCMcod2(i); i an ideal
-
-*Return:*
- presentation matrix of i, if i is Cohen-Macaulay of codimension 2
- a zero matrix otherwise
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x,y,z),ds;
- ideal i=xz,yz,x^3-y^4;
- print(isCMcod2(i));
- ==> -y,-x2,
- ==> x, y3,
- ==> 0, z
-
-
-File: sing.info, Node: CMtype, Next: matrixT1, Prev: isCMcod2, Up:
spcurve_lib
-
-D.5.9.2 CMtype
-..............
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- CMtype(i); i an ideal, CM of codimension 2
-
-*Return:*
- Cohen-Macaulay type of i (integer)
- (-1, if i is not Cohen-Macaulay of codimension 2)
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x,y,z),ds;
- ideal i=xy,xz,yz;
- CMtype(i);
- ==> 2
-
-
-File: sing.info, Node: matrixT1, Next: semiCMcod2, Prev: CMtype, Up:
spcurve_lib
-
-D.5.9.3 matrixT1
-................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- matrixT1(M,n); M matrix, n integer
-
-*Assume:*
- M is a presentation matrix of an ideal i, CM of codimension 2;
- consider i as a family of ideals in a ring in the first n variables
- where the remaining variables are considered as parameters
-
-*Return:*
- list consisting of the k x (k+1) matrix M and a module K_M such
- that T1=Mat(k,k+1;R)/K_M is the space of first order deformations
- of i
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x(1),x(2),x(3)),ds;
- ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
- matrix M=isCMcod2(curve);
- matrixT1(M,3);
- ==> [1]:
- ==> _[1,1]=0
- ==> _[1,2]=-x(3)
- ==> _[2,1]=-x(2)
- ==> _[2,2]=x(2)
- ==> _[3,1]=x(1)
- ==> _[3,2]=0
- ==> [2]:
- ==> _[1]=gen(5)
- ==> _[2]=gen(4)-gen(3)
- ==> _[3]=-gen(2)
- ==> _[4]=x(1)*gen(5)-x(2)*gen(3)
- ==> _[5]=x(1)*gen(6)-x(2)*gen(4)
- ==> _[6]=x(2)*gen(3)-x(3)*gen(1)
- ==> _[7]=x(2)*gen(4)-x(3)*gen(2)
- ==> _[8]=-x(3)*gen(2)
- ==> _[9]=x(2)*gen(2)-x(2)*gen(1)
- ==> _[10]=x(1)*gen(1)
- ==> _[11]=-x(3)*gen(4)
- ==> _[12]=x(2)*gen(4)-x(2)*gen(3)
- ==> _[13]=x(1)*gen(3)
- ==> _[14]=-x(3)*gen(6)
- ==> _[15]=x(2)*gen(6)-x(2)*gen(5)
- ==> _[16]=x(1)*gen(5)
-
-
-File: sing.info, Node: semiCMcod2, Next: discr, Prev: matrixT1, Up:
spcurve_lib
-
-D.5.9.4 semiCMcod2
-..................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- semiCMcod2(M,t1); M matrix, t1 module
-
-*Assume:*
- M is a presentation matrix of an ideal i, CM of codimension 2, and
- t1 is a presentation of the space of first order deformations of i
- ((M,t1) as returned by the procedure matrixT1)
-
-*Create:*
- new basering with name rneu
-
-*Return:*
- ideal in rneu describing the semiuniversal deformation of i
-
-*Note:*
- The current basering should not contain any variables named A(j)
- where j is some integer!
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x(1),x(2),x(3)),ds;
- ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
- matrix M=isCMcod2(curve);
- list l=matrixT1(M,3);
- semiCMcod2(l[1],std(l[2]));
- ==> _[1]=A(2)*A(3)-x(2)*A(3)-x(1)*x(2)
- ==> _[2]=A(1)*A(3)+x(1)*x(3)
- ==> _[3]=-x(2)*A(1)-x(3)*A(2)+x(2)*x(3)
-
-
-File: sing.info, Node: discr, Next: qhmatrix, Prev: semiCMcod2, Up:
spcurve_lib
-
-D.5.9.5 discr
-.............
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- discr(sem,n); sem ideal, n integer
-
-*Assume:*
- sem is the versal deformation of an ideal of codimension 2.
- the first n variables of the ring are treated as variables all the
- others as parameters
-
-*Return:*
- ideal describing the discriminant
-
-*Note:*
- This is not a powerful algorithm!
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x(1),x(2),x(3)),ds;
- ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
- matrix M=isCMcod2(curve);
- list l=matrixT1(M,3);
- def sem=semiCMcod2(l[1],std(l[2]));
- basering;
- ==> // characteristic : 32003
- ==> // number of vars : 6
- ==> // block 1 : ordering ds
- ==> // : names x(1) x(2) x(3)
- ==> // block 2 : ordering dp
- ==> // : names A(1) A(2) A(3)
- ==> // block 3 : ordering C
- discr(sem,3);
- ==> _[1]=A(1)*A(2)*A(3)
-
-
-File: sing.info, Node: qhmatrix, Next: relweight, Prev: discr, Up:
spcurve_lib
-
-D.5.9.6 qhmatrix
-................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- qhmatrix(M); M a k x (k+1) matrix
-
-*Return:*
- list, consisting of an integer vector containing the weights of the
- variables of the basering and an integer matrix giving the weights
- of the entries of M, if M is quasihomogeneous; zero integer vector
- and zero integer matrix, if M is not quasihomogeneous, i.e. does
- not allow row and column weights
-
-*Example:*
- LIB "spcurve.lib";
- ring r=0,(x,y,z),ds;
- matrix M[3][2]=z,0,y,x,x^3,y;
- qhmatrix(M);
- ==> [1]:
- ==> 1,2,1
- ==> [2]:
- ==> 1,0,
- ==> 2,1,
- ==> 3,2
- pmat(M);
- ==> z, 0,
- ==> y, x,
- ==> x3, y
-
-
-File: sing.info, Node: relweight, Next: posweight, Prev: qhmatrix, Up:
spcurve_lib
-
-D.5.9.7 relweight
-.................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Assume:*
- N is a non-zero matrix
- W is an integer matrix of the same size as N
- a is an integer vector giving the weights of the variables
-
-*Return:*
- integer, max(a-weighted order(N_ij) - W_ij | all entries ij)
- string "ERROR" if sizes do not match
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x,y,z),ds;
- matrix N[2][3]=z,0,y,x,x^3,y;
- intmat W[2][3]=1,1,1,1,1,1;
- intvec a=1,1,1;
- relweight(N,W,a);
- ==> 2
-
-
-File: sing.info, Node: posweight, Next: KSpencerKernel, Prev: relweight,
Up: spcurve_lib
-
-D.5.9.8 posweight
-.................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- posweight(M,t1,n[,s]); M matrix, t1 module, n int, s string
- n=0 : all deformations of non-negative weight
- n=1 : only non-constant deformations of non-negative weight
- n=2 : all deformations of positive weight
- As an optional parameter the name of a new ring may be specified.
-
-*Assume:*
- M is a presentation matrix of a Cohen-Macaulay codimension 2 ideal
- and t1 is its T1 space in matrix notation
-
-*Create:*
- new basering (default name: rneu); a different name for this ring
- may be given as a 4th parameter
-
-*Return:*
- list, consisting of a presentation matrix describing the
- deformation given by the generators of T1 of non-negative/positive
- weight and the weight vector for the new variables
-
-*Note:*
- The current basering should not contain any variables named T(i)
- where i is some integer!
-
-*Example:*
- LIB "spcurve.lib";
- ring r=32003,(x(1),x(2),x(3)),ds;
- ideal curve=(x(3)-x(1)^2)*x(3),(x(3)-x(1)^2)*x(2),x(2)^2-x(1)^7*x(3);
- matrix M=isCMcod2(curve);
- list l=matrixT1(M,3);
- list li=posweight(l[1],std(l[2]),0);
- pmat(li[1]);
- ==> T(2)+x(1)*T(1), -x(3)+x(1)^2,
- ==> -x(3), x(2),
- ==> x(2), -x(1)^7
- li[2];
- ==> 3,1
-
-
-File: sing.info, Node: KSpencerKernel, Prev: posweight, Up: spcurve_lib
-
-D.5.9.9 KSpencerKernel
-......................
-
-Procedure from library `spcurve.lib' (*note spcurve_lib::).
-
-*Usage:*
- KSpencerKernel(M[,s][,v]); M matrix, s string, v intvec
- optional parameters (please specify in this order, if both are
- present):
- * s = first of the names of the new rings
- e.g. "R" leads to ring names R and R1
- * v of size n(n+1) leads to the following module ordering
- gen(v[1]) > gen(v[2]) > ... > gen(v[n(n+1)]) where the matrix entry
- ij corresponds to gen((i-1)*n+j)
-
-*Assume:*
- M is a quasihomogeneous n x (n+1) matrix where the n minors define
- an isolated space curve singularity
-
-*Create:*
- 2 new rings (default names: rneu and reneu)
- different ring names may be specified as a 2nd parameter
-
-*Return:*
- coefficient matrix representing the kernel of the Kodaira- Spencer
- map of the family of non-negative deformations having the given
- singularity as special fibre
-
-*Note:*
- * the initial basering should not contain variables with name e(i)
- or T(i), since those variable names will internally be used by the
- script
- * setting an intvec with 5 entries and name watchProgress shows the
- progress of the computations:
- watchProgress[1]>0 => option(prot) in groebner commands
- watchProgress[2]>0 => trace output for highcorner
- watchProgress[3]>0 => output of deformed matrix
- watchProgress[4]>0 => result of elimination step
- watchProgress[4]>1 => trace output of multiplications with xyz and
- subsequent reductions
- watchProgress[5]>0 => matrix representing the kernel using print
-
-*Example:*
- LIB "spcurve.lib";
- ring r=0,(x,y,z),ds;
- matrix M[3][2]=z-x^7,0,y^2,z,x^9,y;
- def KS=KSpencerKernel(M,"ar");
- print(KS);
- ==> T(7), 0, 0, 0, 0, 0, 0, 0,
- ==> KS[2,1],6*T(3), 3*T(7), 0, 0, 0, 0, 0,
- ==> KS[3,1],KS[3,2],KS[3,3],6*T(3),3*T(7),0, 0, 0,
- ==> 10*T(4),8*T(1), 7*T(5), 5*T(2),4*T(6),2*T(8),2*T(3),T(7)
- nameof(basering);
- ==> ar
- basering;
- ==> // characteristic : 0
- ==> // number of vars : 17
- ==> // block 1 : ordering Ws
- ==> // : names e(1) e(2) e(3) e(4) e(5) e(6) x y z
- ==> // : weights -21 -10 -32 -21 -27 -16 3 16 21
- ==> // block 2 : ordering wp
- ==> // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7)
T(8)
- ==> // : weights 8 5 2 10 7 4 1
2
- ==> // block 3 : ordering C
-
-
-File: sing.info, Node: spectrum_lib, Prev: spcurve_lib, Up: Singularities
-
-D.5.10 spectrum_lib
--------------------
-
-*Library:*
- spectrum.lib
-
-*Purpose:*
- Singularity Spectrum for Nondegenerate Singularities
-
-*Author:*
- S. Endrass
-
-*Procedures:*
-
-* Menu:
-
-* spectrumnd:: spectrum of nondegenerate isolated singularity f
-
-
-File: sing.info, Node: spectrumnd, Up: spectrum_lib
-
-D.5.10.1 spectrumnd
-...................
-
-Procedure from library `spectrum.lib' (*note spectrum_lib::).
-
-*Usage:*
- spectrumnd(f[,1]); poly f
-
-*Assume:*
- basering has characteristic 0 and local ordering,
- f has isolated singularity at 0 and nondegenerate principal part
-
-*Return:*
-
- list S:
- ideal S[1]: spectral numbers in increasing order
- intvec S[2]:
- int S[2][i]: multiplicity of spectral number S[1][i]
-
-*Note:*
- if a second argument 1 is given,
- no test for a degenerate principal part will be done
- SEE_ALSO: gaussman_lib
-
-*Example:*
- LIB "spectrum.lib";
- ring R=0,(x,y),ds;
- poly f=x^31+x^6*y^7+x^2*y^12+x^13*y^2+y^29;
- spectrumnd(f);
- ==> [1]:
- ==> _[1]=-67/79
- ==> _[2]=-62/79
- ==> _[3]=-45/58
- ==> _[4]=-57/79
- ==> _[5]=-41/58
- ==> _[6]=-55/79
- ==> _[7]=-52/79
- ==> _[8]=-37/58
- ==> _[9]=-50/79
- ==> _[10]=-18/29
- ==> _[11]=-47/79
- ==> _[12]=-45/79
- ==> _[13]=-33/58
- ==> _[14]=-16/29
- ==> _[15]=-43/79
- ==> _[16]=-42/79
- ==> _[17]=-40/79
- ==> _[18]=-1/2
- ==> _[19]=-15/31
- ==> _[20]=-14/29
- ==> _[21]=-38/79
- ==> _[22]=-27/58
- ==> _[23]=-14/31
- ==> _[24]=-35/79
- ==> _[25]=-25/58
- ==> _[26]=-13/31
- ==> _[27]=-33/79
- ==> _[28]=-12/29
- ==> _[29]=-23/58
- ==> _[30]=-31/79
- ==> _[31]=-12/31
- ==> _[32]=-30/79
- ==> _[33]=-21/58
- ==> _[34]=-11/31
- ==> _[35]=-28/79
- ==> _[36]=-10/29
- ==> _[37]=-26/79
- ==> _[38]=-19/58
- ==> _[39]=-10/31
- ==> _[40]=-25/79
- ==> _[41]=-9/29
- ==> _[42]=-17/58
- ==> _[43]=-23/79
- ==> _[44]=-9/31
- ==> _[45]=-8/29
- ==> _[46]=-21/79
- ==> _[47]=-15/58
- ==> _[48]=-8/31
- ==> _[49]=-20/79
- ==> _[50]=-7/29
- ==> _[51]=-19/79
- ==> _[52]=-18/79
- ==> _[53]=-7/31
- ==> _[54]=-13/58
- ==> _[55]=-6/29
- ==> _[56]=-16/79
- ==> _[57]=-6/31
- ==> _[58]=-15/79
- ==> _[59]=-11/58
- ==> _[60]=-14/79
- ==> _[61]=-5/29
- ==> _[62]=-13/79
- ==> _[63]=-5/31
- ==> _[64]=-9/58
- ==> _[65]=-11/79
- ==> _[66]=-4/29
- ==> _[67]=-4/31
- ==> _[68]=-10/79
- ==> _[69]=-7/58
- ==> _[70]=-9/79
- ==> _[71]=-3/29
- ==> _[72]=-8/79
- ==> _[73]=-3/31
- ==> _[74]=-7/79
- ==> _[75]=-5/58
- ==> _[76]=-6/79
- ==> _[77]=-2/29
- ==> _[78]=-2/31
- ==> _[79]=-5/79
- ==> _[80]=-3/58
- ==> _[81]=-4/79
- ==> _[82]=-3/79
- ==> _[83]=-1/29
- ==> _[84]=-1/31
- ==> _[85]=-2/79
- ==> _[86]=-1/58
- ==> _[87]=-1/79
- ==> _[88]=0
- ==> _[89]=1/79
- ==> _[90]=1/58
- ==> _[91]=2/79
- ==> _[92]=1/31
- ==> _[93]=1/29
- ==> _[94]=3/79
- ==> _[95]=4/79
- ==> _[96]=3/58
- ==> _[97]=5/79
- ==> _[98]=2/31
- ==> _[99]=2/29
- ==> _[100]=6/79
- ==> _[101]=5/58
- ==> _[102]=7/79
- ==> _[103]=3/31
- ==> _[104]=8/79
- ==> _[105]=3/29
- ==> _[106]=9/79
- ==> _[107]=7/58
- ==> _[108]=10/79
- ==> _[109]=4/31
- ==> _[110]=4/29
- ==> _[111]=11/79
- ==> _[112]=9/58
- ==> _[113]=5/31
- ==> _[114]=13/79
- ==> _[115]=5/29
- ==> _[116]=14/79
- ==> _[117]=11/58
- ==> _[118]=15/79
- ==> _[119]=6/31
- ==> _[120]=16/79
- ==> _[121]=6/29
- ==> _[122]=13/58
- ==> _[123]=7/31
- ==> _[124]=18/79
- ==> _[125]=19/79
- ==> _[126]=7/29
- ==> _[127]=20/79
- ==> _[128]=8/31
- ==> _[129]=15/58
- ==> _[130]=21/79
- ==> _[131]=8/29
- ==> _[132]=9/31
- ==> _[133]=23/79
- ==> _[134]=17/58
- ==> _[135]=9/29
- ==> _[136]=25/79
- ==> _[137]=10/31
- ==> _[138]=19/58
- ==> _[139]=26/79
- ==> _[140]=10/29
- ==> _[141]=28/79
- ==> _[142]=11/31
- ==> _[143]=21/58
- ==> _[144]=30/79
- ==> _[145]=12/31
- ==> _[146]=31/79
- ==> _[147]=23/58
- ==> _[148]=12/29
- ==> _[149]=33/79
- ==> _[150]=13/31
- ==> _[151]=25/58
- ==> _[152]=35/79
- ==> _[153]=14/31
- ==> _[154]=27/58
- ==> _[155]=38/79
- ==> _[156]=14/29
- ==> _[157]=15/31
- ==> _[158]=1/2
- ==> _[159]=40/79
- ==> _[160]=42/79
- ==> _[161]=43/79
- ==> _[162]=16/29
- ==> _[163]=33/58
- ==> _[164]=45/79
- ==> _[165]=47/79
- ==> _[166]=18/29
- ==> _[167]=50/79
- ==> _[168]=37/58
- ==> _[169]=52/79
- ==> _[170]=55/79
- ==> _[171]=41/58
- ==> _[172]=57/79
- ==> _[173]=45/58
- ==> _[174]=62/79
- ==> _[175]=67/79
- ==> [2]:
- ==>
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,\
-
1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1\
-
,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,4,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,\
-
1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1\
- ,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
-
-
-File: sing.info, Node: Invariant theory, Next: Symbolic-numerical solving,
Prev: Singularities, Up: SINGULAR libraries
-
-D.6 Invariant theory
-====================
-
-* Menu:
-
-* finvar_lib:: procedures to compute invariant rings of finite groups
-* ainvar_lib:: procedures to compute invariants rings of the additive group
-* rinvar_lib:: procedures to compute invariants ring of reductive groups
-* stratify_lib:: algorithmic stratification by the Greuel-Pfister algorithm
-
-
-File: sing.info, Node: finvar_lib, Next: ainvar_lib, Prev: Invariant
theory, Up: Invariant theory
-
-D.6.1 finvar_lib
-----------------
-
-*Library:*
- finvar.lib
-
-*Purpose:*
- Invariant Rings of Finite Groups
-
-*Author:*
- Agnes E. Heydtmann, email: address@hidden
-
-*Overview:*
- A library for computing polynomial invariants of finite matrix
- groups and generators of related varieties. The algorithms are
- based on B. Sturmfels, G. Kemper and W. Decker et al..
-
-*Main procedures:*
-
-* Menu:
-
-* invariant_ring:: generators of the invariant ring (i.r.)
-* invariant_ring_random:: generators of the i.r., randomized alg.
-* primary_invariants:: primary invariants (p.i.)
-* primary_invariants_random:: primary invariants, randomized alg.
-
-*Auxiliary procedures:*
-
-* Menu:
-
-* cyclotomic:: cyclotomic polynomial
-* group_reynolds:: finite group and Reynolds operator (R.o.)
-* molien:: Molien series (M.s.)
-* reynolds_molien:: Reynolds operator and Molien series
-* partial_molien:: partial expansion of Molien series
-* evaluate_reynolds:: image under the Reynolds operator
-* invariant_basis:: basis of homogeneous invariants of a degree
-* invariant_basis_reynolds:: as invariant_basis(), with R.o.
-* primary_char0:: primary invariants in char 0
-* primary_charp:: primary invariant in char p
-* primary_char0_no_molien:: p.i., char 0, without Molien series
-* primary_charp_no_molien:: p.i., char p, without Molien series
-* primary_charp_without:: p.i., char p, without R.o. or Molien series
-* primary_char0_random:: primary invariants in char 0, randomized
-* primary_charp_random:: primary invariants in char p, randomized
-* primary_char0_no_molien_random:: p.i., char 0, without M.s., randomized
-* primary_charp_no_molien_random:: p.i., char p, without M.s., randomized
-* primary_charp_without_random:: p.i., char p, without R.o. or M.s., random.
-* power_products:: exponents for power products
-* secondary_char0:: secondary (s.i.) invariants in char 0
-* secondary_charp:: secondary invariants in char p
-* secondary_no_molien:: secondary invariants, without Molien series
-* secondary_and_irreducibles_no_molien:: s.i. & irreducible s.i., without M.s.
-* secondary_not_cohen_macaulay:: s.i. when invariant ring not Cohen-Macaulay
-* orbit_variety:: ideal of the orbit variety
-* relative_orbit_variety:: ideal of a relative orbit variety
-* image_of_variety:: ideal of the image of a variety
-
-
-File: sing.info, Node: invariant_ring, Next: invariant_ring_random, Up:
finvar_lib
-
-D.6.1.1 invariant_ring
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- invariant_ring(G1,G2,...[,flags]);
- G1,G2,...: <matrices> generating a finite matrix group, flags: an
- optional <intvec> with three entries: if the first one equals 0,
- the program attempts to compute the Molien series and Reynolds
- operator, if it equals 1, the program is told that the Molien
- series should not be computed, if it equals -1 characteristic 0 is
- simulated, i.e. the Molien series is computed as if the base field
- were characteristic 0 (the user must choose a field of large prime
- characteristic, e.g. 32003) and if the first one is anything else,
- it means that the characteristic of the base field divides the
- group order (i.e. it will not even be attempted to compute the
- Reynolds operator or Molien series), the second component should
- give the size of intervals between canceling common factors in the
- expansion of Molien series, 0 (the default) means only once after
- generating all terms, in prime characteristic also a negative
- number can be given to indicate that common factors should always
- be canceled when the expansion is simple (the root of the extension
- field occurs not among the coefficients)
-
-*Return:*
- primary and secondary invariants (both of type <matrix>) generating
- the invariant ring with respect to the matrix group generated by
- the matrices in the input and irreducible secondary invariants
- (type <matrix>) if the Molien series was available
-
-*Display:*
- information about the various stages of the program if the third
- flag does not equal 0
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)). In the
- non-modular case secondary invariants are calculated by finding a
- basis (in terms of monomials) of the basering modulo the primary
- invariants, mapping to invariants with the Reynolds operator and
- using those or their power products such that they are linearly
- independent modulo the primary invariants (see "Some Algorithms in
- Invariant Theory of Finite Groups" by Kemper and Steel (1997)). In
- the modular case they are generated according to "Generating
- Invariant Rings of Finite Groups over Arbitrary Fields" by Kemper
- (1996).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix P,S,IS=invariant_ring(A);
- print(P);
- ==> z2,x2+y2,x2y2
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(IS);
- ==> xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: invariant_ring_random, Next: primary_invariants,
Prev: invariant_ring, Up: finvar_lib
-
-D.6.1.2 invariant_ring_random
-.............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- invariant_ring_random(G1,G2,...,r[,flags]);
- G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
- where -|r| to |r| is the range of coefficients of random
- combinations of bases elements that serve as primary invariants,
- flags: an optional <intvec> with three entries: if the first equals
- 0, the program attempts to compute the Molien series and Reynolds
- operator, if it equals 1, the program is told that the Molien
- series should not be computed, if it equals -1 characteristic 0 is
- simulated, i.e. the Molien series is computed as if the base field
- were characteristic 0 (the user must choose a field of large prime
- characteristic, e.g. 32003) and if the first one is anything else,
- then the characteristic of the base field divides the group order
- (i.e. we will not even attempt to compute the Reynolds operator or
- Molien series), the second component should give the size of
- intervals between canceling common factors in the expansion of the
- Molien series, 0 (the default) means only once after generating all
- terms, in prime characteristic also a negative number can be given
- to indicate that common factors should always be canceled when the
- expansion is simple (the root of the extension field does not occur
- among the coefficients)
-
-*Return:*
- primary and secondary invariants (both of type <matrix>) generating
- invariant ring with respect to the matrix group generated by the
- matrices in the input and irreducible secondary invariants (type
- <matrix>) if the Molien series was available
-
-*Display:*
- information about the various stages of the program if the third
- flag does not equal 0
-
-*Theory:*
- is the same as for invariant_ring except that random combinations
- of basis elements are chosen as candidates for primary invariants
- and hopefully they lower the dimension of the previously found
- primary invariants by the right amount.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix P,S,IS=invariant_ring_random(A,1);
- print(P);
- ==> z2,x2+y2,x4+y4-z4
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(IS);
- ==> xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: primary_invariants, Next: primary_invariants_random,
Prev: invariant_ring_random, Up: finvar_lib
-
-D.6.1.3 primary_invariants
-..........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_invariants(G1,G2,...[,flags]);
- G1,G2,...: <matrices> generating a finite matrix group, flags: an
- optional <intvec> with three entries, if the first one equals 0
- (also the default), the program attempts to compute the Molien
- series and Reynolds operator, if it equals 1, the program is told
- that the Molien series should not be computed, if it equals -1
- characteristic 0 is simulated, i.e. the Molien series is computed
- as if the base field were characteristic 0 (the user must choose a
- field of large prime characteristic, e.g. 32003) and if the first
- one is anything else, it means that the characteristic of the base
- field divides the group order, the second component should give the
- size of intervals between canceling common factors in the expansion
- of the Molien series, 0 (the default) means only once after
- generating all terms, in prime characteristic also a negative
- number can be given to indicate that common factors should always
- be canceled when the expansion is simple (the root of the extension
- field occurs not among the coefficients)
-
-*Display:*
- information about the various stages of the program if the third
- flag does not equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and if
- computable Reynolds operator (type <matrix>) and Molien series
- (type <matrix>) or ring name (type string) where the Molien series
- can be found in the char p case; if the first flag is 1 and we are
- in the non-modular case then an <intvec> is returned giving some of
- the degrees where no non-trivial homogeneous invariants can be
- found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A);
- print(L[1]);
- ==> z2,x2+y2,x2y2
-
-
-File: sing.info, Node: primary_invariants_random, Next: cyclotomic, Prev:
primary_invariants, Up: finvar_lib
-
-D.6.1.4 primary_invariants_random
-.................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_invariants_random(G1,G2,...,r[,flags]);
- G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
- where -|r| to |r| is the range of coefficients of the random
- combinations of bases elements, flags: an optional <intvec> with
- three entries, if the first one equals 0 (also the default), the
- program attempts to compute the Molien series and Reynolds
- operator, if it equals 1, the program is told that the Molien
- series should not be computed, if it equals -1 characteristic 0 is
- simulated, i.e. the Molien series is computed as if the base field
- were characteristic 0 (the user must choose a field of large prime
- characteristic, e.g. 32003) and if the first one is anything else,
- it means that the characteristic of the base field divides the
- group order, the second component should give the size of intervals
- between canceling common factors in the expansion of the Molien
- series, 0 (the default) means only once after generating all terms,
- in prime characteristic also a negative number can be given to
- indicate that common factors should always be canceled when the
- expansion is simple (the root of the extension field does not occur
- among the coefficients)
-
-*Display:*
- information about the various stages of the program if the third
- flag does not equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and if
- computable Reynolds operator (type <matrix>) and Molien series
- (type <matrix>), if the first flag is 1 and we are in the
- non-modular case then an <intvec> is returned giving some of the
- degrees where no non-trivial homogeneous invariants can be found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants_random(A,1);
- print(L[1]);
- ==> z2,x2+y2,x4+y4-z4
-
-
-File: sing.info, Node: cyclotomic, Next: group_reynolds, Prev:
primary_invariants_random, Up: finvar_lib
-
-D.6.1.5 cyclotomic
-..................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- cyclotomic(i); i integer > 0
-
-*Returns:*
- the i-th cyclotomic polynomial (type <poly>) as one in the first
- ring variable
-
-*Theory:*
- x^i-1 is divided by the j-th cyclotomic polynomial where j takes on
- the value of proper divisors of i
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- print(cyclotomic(25));
- ==> x20+x15+x10+x5+1
-
-
-File: sing.info, Node: group_reynolds, Next: molien, Prev: cyclotomic, Up:
finvar_lib
-
-D.6.1.6 group_reynolds
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- group_reynolds(G1,G2,...[,v]);
- G1,G2,...: nxn <matrices> generating a finite matrix group, v: an
- optional <int>
-
-*Assume:*
- n is the number of variables of the basering, g the number of group
- elements
-
-*Return:*
- a <list>, the first list element will be a gxn <matrix>
- representing the Reynolds operator if we are in the non-modular
- case; if the characteristic is >0, minpoly==0 and the finite group
- non-cyclic the second list element is an <int> giving the lowest
- common multiple of the matrix group elements' order (used in
- molien); in general all other list elements are nxn <matrices>
- listing all elements of the finite group
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- The entire matrix group is generated by getting all left products
- of generators with the new elements from the last run through the
- loop (or the generators themselves during the first run). All the
- ones that have been generated before are thrown out and the program
- terminates when no new elements found in one run. Additionally each
- time a new group element is found the corresponding ring mapping of
- which the Reynolds operator is made up is generated. They are
- stored in the rows of the first return value.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- print(L[1]);
- ==> y, -x,-z,
- ==> -x,-y,z,
- ==> -y,x, -z,
- ==> x, y, z
- print(L[2..size(L)]);
- ==> 0, 1,0,
- ==> -1,0,0,
- ==> 0, 0,-1
- ==> -1,0, 0,
- ==> 0, -1,0,
- ==> 0, 0, 1
- ==> 0,-1,0,
- ==> 1,0, 0,
- ==> 0,0, -1
- ==> 1,0,0,
- ==> 0,1,0,
- ==> 0,0,1
-
-
-File: sing.info, Node: molien, Next: reynolds_molien, Prev: group_reynolds,
Up: finvar_lib
-
-D.6.1.7 molien
-..............
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- molien(G1,G2,...[,ringname,lcm,flags]);
- G1,G2,...: nxn <matrices>, all elements of a finite matrix group,
- ringname: a <string> giving a name for a new ring of characteristic
- 0 for the Molien series in case of prime characteristic, lcm: an
- <int> giving the lowest common multiple of the elements' orders in
- case of prime characteristic, minpoly==0 and a non-cyclic group,
- flags: an optional <intvec> with three components: if the first
- element is not equal to 0 characteristic 0 is simulated, i.e. the
- Molien series is computed as if the base field were characteristic
- 0 (the user must choose a field of large prime characteristic, e.g.
- 32003), the second component should give the size of intervals
- between canceling common factors in the expansion of the Molien
- series, 0 (the default) means only once after generating all terms,
- in prime characteristic also a negative number can be given to
- indicate that common factors should always be canceled when the
- expansion is simple (the root of the extension field does not occur
- among the coefficients)
-
-*Assume:*
- n is the number of variables of the basering, G1,G2... are the
- group elements generated by group_reynolds(), lcm is the second
- return value of group_reynolds()
-
-*Return:*
- in case of characteristic 0 a 1x2 <matrix> giving enumerator and
- denominator of Molien series; in case of prime characteristic a
- ring with the name `ringname` of characteristic 0 is created where
- the same Molien series (named M) is stored
-
-*Display:*
- information if the third component of flags does not equal 0
-
-*Theory:*
- In characteristic 0 the terms 1/det(1-xE) for all group elements of
- the Molien series are computed in a straight forward way. In prime
- characteristic a Brauer lift is involved. The returned matrix gives
- enumerator and denominator of the expanded version where common
- factors have been canceled.
-
-*Example:*
- LIB "finvar.lib";
- " note the case of prime characteristic";
- ==> note the case of prime characteristic
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- matrix M=molien(L[2..size(L)]);
- print(M);
- ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
- ring S=3,(x,y,z),dp;
- string newring="alksdfjlaskdjf";
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- molien(L[2..size(L)],newring);
- setring alksdfjlaskdjf;
- print(M);
- ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
- setring S;
- kill alksdfjlaskdjf;
-
-
-File: sing.info, Node: reynolds_molien, Next: partial_molien, Prev: molien,
Up: finvar_lib
-
-D.6.1.8 reynolds_molien
-.......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- reynolds_molien(G1,G2,...[,ringname,flags]);
- G1,G2,...: nxn <matrices> generating a finite matrix group,
- ringname: a <string> giving a name for a new ring of characteristic
- 0 for the Molien series in case of prime characteristic, flags: an
- optional <intvec> with three components: if the first element is
- not equal to 0 characteristic 0 is simulated, i.e. the Molien
- series is computed as if the base field were characteristic 0 (the
- user must choose a field of large prime characteristic, e.g. 32003)
- the second component should give the size of intervals between
- canceling common factors in the expansion of the Molien series, 0
- (the default) means only once after generating all terms, in prime
- characteristic also a negative number can be given to indicate that
- common factors should always be canceled when the expansion is
- simple (the root of the extension field does not occur among the
- coefficients)
-
-*Assume:*
- n is the number of variables of the basering, G1,G2... are the
- group elements generated by group_reynolds(), g is the size of the
- group
-
-*Return:*
- a gxn <matrix> representing the Reynolds operator is the first
- return value and in case of characteristic 0 a 1x2 <matrix> giving
- enumerator and denominator of Molien series is the second one; in
- case of prime characteristic a ring with the name `ringname` of
- characteristic 0 is created where the same Molien series (named M)
- is stored
-
-*Display:*
- information if the third component of flags does not equal 0
-
-*Theory:*
- The entire matrix group is generated by getting all left products
- of the generators with new elements from the last run through the
- loop (or the generators themselves during the first run). All the
- ones that have been generated before are thrown out and the program
- terminates when are no new elements found in one run. Additionally
- each time a new group element is found the corresponding ring
- mapping of which the Reynolds operator is made up is generated.
- They are stored in the rows of the first return value. In
- characteristic 0 the terms 1/det(1-xE) is computed whenever a new
- element E is found. In prime characteristic a Brauer lift is
- involved and the terms are only computed after the entire matrix
- group is generated (to avoid the modular case). The returned matrix
- gives enumerator and denominator of the expanded version where
- common factors have been canceled.
-
-*Example:*
- LIB "finvar.lib";
- " note the case of prime characteristic";
- ==> note the case of prime characteristic
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix REY,M=reynolds_molien(A);
- print(REY);
- ==> y, -x,-z,
- ==> -x,-y,z,
- ==> -y,x, -z,
- ==> x, y, z
- print(M);
- ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
- ring S=3,(x,y,z),dp;
- string newring="Qadjoint";
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix REY=reynolds_molien(A,newring);
- print(REY);
- ==> y, -x,-z,
- ==> -x,-y,z,
- ==> -y,x, -z,
- ==> x, y, z
- setring Qadjoint;
- print(M);
- ==> x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1
- setring S;
- kill Qadjoint;
-
-
-File: sing.info, Node: partial_molien, Next: evaluate_reynolds, Prev:
reynolds_molien, Up: finvar_lib
-
-D.6.1.9 partial_molien
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- partial_molien(M,n[,p]);
- M: a 1x2 <matrix>, n: an <int> indicating number of terms in the
- expansion, p: an optional <poly>
-
-*Assume:*
- M is the return value of molien or the second return value of
- reynolds_molien, p ought to be the second return value of a
- previous run of partial_molien and avoids recalculating known terms
-
-*Return:*
- n terms (type <poly>) of the partial expansion of the Molien series
- (first n if there is no third parameter given, otherwise the next n
- terms depending on a previous calculation) and an intermediate
- result (type <poly>) of the calculation to be used as third
- parameter in a next run of partial_molien
-
-*Theory:*
- The following calculation is implemented:
-
- (1+a1x+a2x^2+...+anx^n)/(1+b1x+b2x^2+...+bmx^m)=(1+(a1-b1)x+...
- (1+b1x+b2x^2+...+bmx^m)
- ---------------
- (a1-b1)x+(a2-b2)x^2+...
- (a1-b1)x+b1(a1-b1)x^2+...
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix REY,M=reynolds_molien(A);
- poly p(1..2);
- p(1..2)=partial_molien(M,5);
- p(1);
- ==> 4x5+5x4+2x3+2x2+1
- p(1..2)=partial_molien(M,5,p(2));
- p(1);
- ==> 18x10+12x9+13x8+8x7+8x6
-
-
-File: sing.info, Node: evaluate_reynolds, Next: invariant_basis, Prev:
partial_molien, Up: finvar_lib
-
-D.6.1.10 evaluate_reynolds
-..........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- evaluate_reynolds(REY,I);
- REY: a <matrix> representing the Reynolds operator, I: an arbitrary
- <ideal>
-
-*Assume:*
- REY is the first return value of group_reynolds() or
- reynolds_molien()
-
-*Returns:*
- image of the polynomials defining I under the Reynolds operator
- (type <ideal>)
-
-*Note:*
- the characteristic of the coefficient field of the polynomial ring
- should not divide the order of the finite matrix group
-
-*Theory:*
- REY has been constructed in such a way that each row serves as a
- ring mapping of which the Reynolds operator is made up.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- ideal I=x2,y2,z2;
- print(evaluate_reynolds(L[1],I));
- ==> 1/2x2+1/2y2,
- ==> 1/2x2+1/2y2,
- ==> z2
-
-
-File: sing.info, Node: invariant_basis, Next: invariant_basis_reynolds,
Prev: evaluate_reynolds, Up: finvar_lib
-
-D.6.1.11 invariant_basis
-........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- invariant_basis(g,G1,G2,...);
- g: an <int> indicating of which degree (>0) the homogeneous basis
- should be, G1,G2,...: <matrices> generating a finite matrix group
-
-*Returns:*
- the basis (type <ideal>) of the space of invariants of degree g
-
-*Theory:*
- A general polynomial of degree g is generated and the generators of
- the matrix group applied. The difference ought to be 0 and this way
- a system of linear equations is created. It is solved by computing
- syzygies.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- print(invariant_basis(2,A));
- ==> x2+y2,
- ==> z2
-
-
-File: sing.info, Node: invariant_basis_reynolds, Next: primary_char0, Prev:
invariant_basis, Up: finvar_lib
-
-D.6.1.12 invariant_basis_reynolds
-.................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- invariant_basis_reynolds(REY,d[,flags]);
- REY: a <matrix> representing the Reynolds operator, d: an <int>
- indicating of which degree (>0) the homogeneous basis should be,
- flags: an optional <intvec> with two entries: its first component
- gives the dimension of the space (default <0 meaning unknown) and
- its second component is used as the number of polynomials that
- should be mapped to invariants during one call of evaluate_reynolds
- if the dimension of the space is unknown or the number such that
- number x dimension polynomials are mapped to invariants during one
- call of evaluate_reynolds
-
-*Assume:*
- REY is the first return value of group_reynolds() or
- reynolds_molien() and flags[1] given by partial_molien
-
-*Return:*
- the basis (type <ideal>) of the space of invariants of degree d
-
-*Theory:*
- Monomials of degree d are mapped to invariants with the Reynolds
- operator. A linearly independent set is generated with the help of
- minbase.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- intvec flags=0,1,0;
- matrix REY,M=reynolds_molien(A,flags);
- flags=8,6;
- print(invariant_basis_reynolds(REY,6,flags));
- ==> z6,
- ==> x2z4+y2z4,
- ==> x2y2z2,
- ==> x3yz2-xy3z2,
- ==> x4z2+y4z2,
- ==> x4y2+x2y4,
- ==> x5y-xy5,
- ==> x6+y6
-
-
-File: sing.info, Node: primary_char0, Next: primary_charp, Prev:
invariant_basis_reynolds, Up: finvar_lib
-
-D.6.1.13 primary_char0
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_char0(REY,M[,v]);
- REY: a <matrix> representing the Reynolds operator, M: a 1x2
- <matrix> representing the Molien series, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
- and M the one of molien or the second one of reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix REY,M=reynolds_molien(A);
- matrix P=primary_char0(REY,M);
- print(P);
- ==> z2,x2+y2,x2y2
-
-
-File: sing.info, Node: primary_charp, Next: primary_char0_no_molien, Prev:
primary_char0, Up: finvar_lib
-
-D.6.1.14 primary_charp
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp(REY,ringname[,v]);
- REY: a <matrix> representing the Reynolds operator, ringname: a
- <string> giving the name of a ring where the Molien series is
- stored, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
- and ringname gives the name of a ring of characteristic 0 that has
- been created by molien or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=3,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- string newring="alskdfj";
- molien(L[2..size(L)],newring);
- matrix P=primary_charp(L[1],newring);
- if(system("with","Namespaces")) { kill Top::`newring`; }
- kill `newring`;
- print(P);
- ==> z2,x2+y2,x2y2
-
-
-File: sing.info, Node: primary_char0_no_molien, Next:
primary_charp_no_molien, Prev: primary_charp, Up: finvar_lib
-
-D.6.1.15 primary_char0_no_molien
-................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_char0_no_molien(REY[,v]);
- REY: a <matrix> representing the Reynolds operator, v: an optional
- <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and an
- <intvec> listing some of the degrees where no non-trivial
- homogeneous invariants are to be found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- list l=primary_char0_no_molien(L[1]);
- print(l[1]);
- ==> z2,x2+y2,x2y2
-
-
-File: sing.info, Node: primary_charp_no_molien, Next: primary_charp_without,
Prev: primary_char0_no_molien, Up: finvar_lib
-
-D.6.1.16 primary_charp_no_molien
-................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp_no_molien(REY[,v]);
- REY: a <matrix> representing the Reynolds operator, v: an optional
- <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and an
- <intvec> listing some of the degrees where no non-trivial
- homogeneous invariants are to be found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=3,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- list l=primary_charp_no_molien(L[1]);
- print(l[1]);
- ==> z2,x2+y2,x2y2
-
-
-File: sing.info, Node: primary_charp_without, Next: primary_char0_random,
Prev: primary_charp_no_molien, Up: finvar_lib
-
-D.6.1.17 primary_charp_without
-..............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp_without(G1,G2,...[,v]);
- G1,G2,...: <matrices> generating a finite matrix group, v: an
- optional <int>
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- those are chosen as primary invariants that lower the dimension of
- the ideal generated by the previously found invariants (see paper
- "Generating a Noetherian Normalization of the Invariant Ring of a
- Finite Group" by Decker, Heydtmann, Schreyer (1998)). No Reynolds
- operator or Molien series is used.
-
-*Example:*
- LIB "finvar.lib";
- ring R=2,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix P=primary_charp_without(A);
- print(P);
- ==> x+y,z,xy
-
-
-File: sing.info, Node: primary_char0_random, Next: primary_charp_random,
Prev: primary_charp_without, Up: finvar_lib
-
-D.6.1.18 primary_char0_random
-.............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_char0_random(REY,M,r[,v]);
- REY: a <matrix> representing the Reynolds operator, M: a 1x2
- <matrix> representing the Molien series, r: an <int> where -|r| to
- |r| is the range of coefficients of the random combinations of
- bases elements, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
- and M the one of molien or the second one of reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix REY,M=reynolds_molien(A);
- matrix P=primary_char0_random(REY,M,1);
- print(P);
- ==> z2,x2+y2,x4+y4-z4
-
-
-File: sing.info, Node: primary_charp_random, Next:
primary_char0_no_molien_random, Prev: primary_char0_random, Up: finvar_lib
-
-D.6.1.19 primary_charp_random
-.............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp_random(REY,ringname,r[,v]);
- REY: a <matrix> representing the Reynolds operator, ringname: a
- <string> giving the name of a ring where the Molien series is
- stored, r: an <int> where -|r| to |r| is the range of coefficients
- of the random combinations of bases elements, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
- and ringname gives the name of a ring of characteristic 0 that has
- been created by molien or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=3,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- string newring="alskdfj";
- molien(L[2..size(L)],newring);
- matrix P=primary_charp_random(L[1],newring,1);
- if(system("with","Namespaces")) { kill Top::`newring`; }
- kill `newring`;
- print(P);
- ==> z2,x2+y2,x4+y4-z4
-
-
-File: sing.info, Node: primary_char0_no_molien_random, Next:
primary_charp_no_molien_random, Prev: primary_charp_random, Up: finvar_lib
-
-D.6.1.20 primary_char0_no_molien_random
-.......................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_char0_no_molien_random(REY,r[,v]);
- REY: a <matrix> representing the Reynolds operator, r: an <int>
- where -|r| to |r| is the range of coefficients of the random
- combinations of bases elements, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and an
- <intvec> listing some of the degrees where no non-trivial
- homogeneous invariants are to be found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- list l=primary_char0_no_molien_random(L[1],1);
- print(l[1]);
- ==> z2,x2+y2,x4+y4-z4
-
-
-File: sing.info, Node: primary_charp_no_molien_random, Next:
primary_charp_without_random, Prev: primary_char0_no_molien_random, Up:
finvar_lib
-
-D.6.1.21 primary_charp_no_molien_random
-.......................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp_no_molien_random(REY,r[,v]);
- REY: a <matrix> representing the Reynolds operator, r: an <int>
- where -|r| to |r| is the range of coefficients of the random
- combinations of bases elements, v: an optional <int>
-
-*Assume:*
- REY is the first return value of group_reynolds or reynolds_molien
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring and an
- <intvec> listing some of the degrees where no non-trivial
- homogeneous invariants are to be found
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=3,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=group_reynolds(A);
- list l=primary_charp_no_molien_random(L[1],1);
- print(l[1]);
- ==> z2,x2+y2,x4+y4-z4
-
-
-File: sing.info, Node: primary_charp_without_random, Next: power_products,
Prev: primary_charp_no_molien_random, Up: finvar_lib
-
-D.6.1.22 primary_charp_without_random
-.....................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- primary_charp_without_random(G1,G2,...,r[,v]);
- G1,G2,...: <matrices> generating a finite matrix group, r: an <int>
- where -|r| to |r| is the range of coefficients of the random
- combinations of bases elements, v: an optional <int>
-
-*Display:*
- information about the various stages of the program if v does not
- equal 0
-
-*Return:*
- primary invariants (type <matrix>) of the invariant ring
-
-*Theory:*
- Bases of homogeneous invariants are generated successively and
- random linear combinations are chosen as primary invariants that
- lower the dimension of the ideal generated by the previously found
- invariants (see "Generating a Noetherian Normalization of the
- Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer
- (1998)). No Reynolds operator or Molien series is used.
-
-*Example:*
- LIB "finvar.lib";
- ring R=2,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- matrix P=primary_charp_without_random(A,1);
- print(P);
- ==> x+y,z,xy
-
-
-File: sing.info, Node: power_products, Next: secondary_char0, Prev:
primary_charp_without_random, Up: finvar_lib
-
-D.6.1.23 power_products
-.......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- power_products(dv,d);
- dv: an <intvec> giving the degrees of homogeneous polynomials, d:
- the degree of the desired power products
-
-*Return:*
- a size(dv)*m <intmat> where each column ought to be interpreted as
- containing the exponents of the corresponding polynomials. The
- product of the powers is then homogeneous of degree d.
-
-*Example:*
- LIB "finvar.lib";
- intvec dv=5,5,5,10,10;
- print(power_products(dv,10));
- ==> 2 1 1 0 0 0 0 0
- ==> 0 1 0 2 1 0 0 0
- ==> 0 0 1 0 1 2 0 0
- ==> 0 0 0 0 0 0 1 0
- ==> 0 0 0 0 0 0 0 1
- print(power_products(dv,7));
- ==> 0
- ==> 0
- ==> 0
- ==> 0
- ==> 0
-
Index: test/singular_manual/res_info/singular_httex/sing.info-5
===================================================================
RCS file: test/singular_manual/res_info/singular_httex/sing.info-5
diff -N test/singular_manual/res_info/singular_httex/sing.info-5
--- test/singular_manual/res_info/singular_httex/sing.info-5 1 Nov 2009
19:00:55 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,8774 +0,0 @@
-This is sing.info, produced by makeinfo version 4.13 from singular.texi.
-
-
-
-File: sing.info, Node: secondary_char0, Next: secondary_charp, Prev:
power_products, Up: finvar_lib
-
-D.6.1.24 secondary_char0
-........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- secondary_char0(P,REY,M[,v]);
- P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
- representing the Reynolds operator, M: a 1x2 <matrix> giving
- numerator and denominator of the Molien series, v: an optional
- <int>
-
-*Assume:*
- n is the number of variables of the basering, g the size of the
- group, REY is the 1st return value of group_reynolds(),
- reynolds_molien() or the second one of primary_invariants(), M the
- return value of molien() or the second one of reynolds_molien() or
- the third one of primary_invariants()
-
-*Return:*
- secondary invariants of the invariant ring (type <matrix>) and
- irreducible secondary invariants (type <matrix>)
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- The secondary invariants are calculated by finding a basis (in
- terms of monomials) of the basering modulo the primary invariants,
- mapping those to invariants with the Reynolds operator and using
- these images or their power products such that they are linearly
- independent modulo the primary invariants (see paper "Some
- Algorithms in Invariant Theory of Finite Groups" by Kemper and
- Steel (1997)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A);
- matrix S,IS=secondary_char0(L[1..3]);
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(IS);
- ==> xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: secondary_charp, Next: secondary_no_molien, Prev:
secondary_char0, Up: finvar_lib
-
-D.6.1.25 secondary_charp
-........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- secondary_charp(P,REY,ringname[,v]);
- P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
- representing the Reynolds operator, ringname: a <string> giving the
- name of a ring of characteristic 0 where the Molien series is
- stored, v: an optional <int>
-
-*Assume:*
- n is the number of variables of the basering, g the size of the
- group, REY is the 1st return value of group_reynolds(),
- reynolds_molien() or the second one of primary_invariants(),
- `ringname` is a ring of char 0 that has been created by molien() or
- reynolds_molien() or primary_invariants()
-
-*Return:*
- secondary invariants of the invariant ring (type <matrix>) and
- irreducible secondary invariants (type <matrix>)
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- Secondary invariants are calculated by finding a basis (in terms of
- monomials) of the basering modulo primary invariants, mapping those
- to invariants with the Reynolds operator and using these images or
- their power products such that they are linearly independent modulo
- the primary invariants (see paper "Some Algorithms in Invariant
- Theory of Finite Groups" by Kemper and Steel (1997)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=3,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A);
- matrix S,IS=secondary_charp(L[1..size(L)]);
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(IS);
- ==> xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: secondary_no_molien, Next:
secondary_and_irreducibles_no_molien, Prev: secondary_charp, Up: finvar_lib
-
-D.6.1.26 secondary_no_molien
-............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- secondary_no_molien(P,REY[,deg_vec,v]);
- P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
- representing the Reynolds operator, deg_vec: an optional <intvec>
- listing some degrees where no non-trivial homogeneous invariants
- can be found, v: an optional <int>
-
-*Assume:*
- n is the number of variables of the basering, g the size of the
- group, REY is the 1st return value of group_reynolds(),
- reynolds_molien() or the second one of primary_invariants(),
- deg_vec is the second return value of primary_char0_no_molien(),
- primary_charp_no_molien(), primary_char0_no_molien_random() or
- primary_charp_no_molien_random()
-
-*Return:*
- secondary invariants of the invariant ring (type <matrix>)
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- Secondary invariants are calculated by finding a basis (in terms of
- monomials) of the basering modulo primary invariants, mapping those
- to invariants with the Reynolds operator and using these images as
- candidates for secondary invariants.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A,intvec(1,1,0));
- matrix S=secondary_no_molien(L[1..3]);
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: secondary_and_irreducibles_no_molien, Next:
secondary_not_cohen_macaulay, Prev: secondary_no_molien, Up: finvar_lib
-
-D.6.1.27 secondary_and_irreducibles_no_molien
-.............................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- secondary_and_irreducibles_no_molien(P,REY[,v]);
- P: a 1xn <matrix> with primary invariants, REY: a gxn <matrix>
- representing the Reynolds operator, v: an optional <int>
-
-*Assume:*
- n is the number of variables of the basering, g the size of the
- group, REY is the 1st return value of group_reynolds(),
- reynolds_molien() or the second one of primary_invariants()
-
-*Return:*
- secondary invariants of the invariant ring (type <matrix>) and
- irreducible secondary invariants (type <matrix>)
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- Secondary invariants are calculated by finding a basis (in terms of
- monomials) of the basering modulo primary invariants, mapping those
- to invariants with the Reynolds operator and using these images or
- their power products such that they are linearly independent modulo
- the primary invariants (see paper "Some Algorithms in Invariant
- Theory of Finite Groups" by Kemper and Steel (1997)).
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A,intvec(1,1,0));
- matrix S,IS=secondary_and_irreducibles_no_molien(L[1..2]);
- print(S);
- ==> 1,xyz,x2z-y2z,x3y-xy3
- print(IS);
- ==> xyz,x2z-y2z,x3y-xy3
-
-
-File: sing.info, Node: secondary_not_cohen_macaulay, Next: orbit_variety,
Prev: secondary_and_irreducibles_no_molien, Up: finvar_lib
-
-D.6.1.28 secondary_not_cohen_macaulay
-.....................................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- secondary_not_cohen_macaulay(P,G1,G2,...[,v]);
- P: a 1xn <matrix> with primary invariants, G1,G2,...: nxn
- <matrices> generating a finite matrix group, v: an optional <int>
-
-*Assume:*
- n is the number of variables of the basering
-
-*Return:*
- secondary invariants of the invariant ring (type <matrix>)
-
-*Display:*
- information if v does not equal 0
-
-*Theory:*
- Secondary invariants are generated following "Generating Invariant
- Rings of Finite Groups over Arbitrary Fields" by Kemper (1996).
-
-*Example:*
- LIB "finvar.lib";
- ring R=2,(x,y,z),dp;
- matrix A[3][3]=0,1,0,-1,0,0,0,0,-1;
- list L=primary_invariants(A);
- matrix S=secondary_not_cohen_macaulay(L[1],A);
- print(S);
- ==> 1
-
-
-File: sing.info, Node: orbit_variety, Next: relative_orbit_variety, Prev:
secondary_not_cohen_macaulay, Up: finvar_lib
-
-D.6.1.29 orbit_variety
-......................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- orbit_variety(F,s);
- F: a 1xm <matrix> defining an invariant ring, s: a <string> giving
- the name for a new ring
-
-*Return:*
- a Groebner basis (type <ideal>, named G) for the ideal defining the
- orbit variety (i.e. the syzygy ideal) in the new ring (named `s`)
-
-*Theory:*
- The ideal of algebraic relations of the invariant ring generators
- is calculated, then the variables of the original ring are
- eliminated and the polynomials that are left over define the orbit
- variety
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix F[1][7]=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3;
- string newring="E";
- orbit_variety(F,newring);
- print(G);
- ==> y(4)-1,
- ==> y(5)*y(6)-y(2)*y(7),
- ==> y(2)*y(3)-y(5)^2-2*y(6)^2,
- ==> y(1)^2*y(6)-2*y(3)*y(6)+y(5)*y(7),
- ==> y(1)^2*y(5)-y(3)*y(5)-2*y(6)*y(7),
- ==> y(1)^2*y(2)-y(2)*y(3)-2*y(6)^2,
- ==> y(1)^4-3*y(1)^2*y(3)+2*y(3)^2+2*y(7)^2
- basering;
- ==> // characteristic : 0
- ==> // number of vars : 7
- ==> // block 1 : ordering dp
- ==> // : names y(1) y(2) y(3) y(4) y(5) y(6) y(7)
- ==> // block 2 : ordering C
-
-
-File: sing.info, Node: relative_orbit_variety, Next: image_of_variety,
Prev: orbit_variety, Up: finvar_lib
-
-D.6.1.30 relative_orbit_variety
-...............................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- relative_orbit_variety(I,F,s);
- I: an <ideal> invariant under the action of a group, F: a 1xm
- <matrix> defining the invariant ring of this group, s: a <string>
- giving a name for a new ring
-
-*Return:*
- a Groebner basis (type <ideal>, named G) for the ideal defining the
- relative orbit variety with respect to I in the new ring (named s)
-
-*Theory:*
- A Groebner basis of the ideal of algebraic relations of the
- invariant ring generators is calculated, then one of the basis
- elements plus the ideal generators. The variables of the original
- ring are eliminated and the polynomials that are left define the
- relative orbit variety with respect to I.
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix F[1][3]=x+y+z,xy+xz+yz,xyz;
- ideal I=x2+y2+z2-1,x2y+y2z+z2x-2x-2y-2z,xy2+yz2+zx2-2x-2y-2z;
- string newring="E";
- relative_orbit_variety(I,F,newring);
- print(G);
- ==> 27*y(3)^6-513*y(3)^4+33849*y(3)^2-784,
- ==> 1475*y(2)+9*y(3)^4-264*y(3)^2+736,
- ==> 8260*y(1)+9*y(3)^5-87*y(3)^3+5515*y(3)
- basering;
- ==> // characteristic : 0
- ==> // number of vars : 3
- ==> // block 1 : ordering lp
- ==> // : names y(1) y(2) y(3)
- ==> // block 2 : ordering C
-
-
-File: sing.info, Node: image_of_variety, Prev: relative_orbit_variety, Up:
finvar_lib
-
-D.6.1.31 image_of_variety
-.........................
-
-Procedure from library `finvar.lib' (*note finvar_lib::).
-
-*Usage:*
- image_of_variety(I,F);
- I: an arbitrary <ideal>, F: a 1xm <matrix> defining an invariant
- ring of a some matrix group
-
-*Return:*
- the <ideal> defining the image under that group of the variety
- defined by I
-
-*Theory:*
- relative_orbit_variety(I,F,s) is called and the newly introduced
- variables in the output are replaced by the generators of the
- invariant ring. This ideal in the original variables defines the
- image of the variety defined by I
-
-*Example:*
- LIB "finvar.lib";
- ring R=0,(x,y,z),dp;
- matrix F[1][3]=x+y+z,xy+xz+yz,xyz;
- ideal I=xy;
- print(image_of_variety(I,F));
- ==> xyz
-
-
-File: sing.info, Node: ainvar_lib, Next: rinvar_lib, Prev: finvar_lib, Up:
Invariant theory
-
-D.6.2 ainvar_lib
-----------------
-
-*Library:*
- ainvar.lib
-
-*Purpose:*
- Invariant Rings of the Additive Group
-
-*Authors:*
- Gerhard Pfister (email: address@hidden), Gert-Martin
- Greuel (email: address@hidden)
-
-*Procedures:*
-
-* Menu:
-
-* invariantRing:: compute ring of invariants of (K,+)-action given by m
-* derivate:: derivation of f with respect to the vector field m
-* actionIsProper:: tests whether action defined by m is proper
-* reduction:: SAGBI reduction of p in the subring generated by I
-* completeReduction:: complete SAGBI reduction
-* localInvar:: invariant polynomial under m computed from p,...
-* furtherInvar:: compute further invariants of m from the given ones
-* sortier:: sorts generators of id by increasing leading terms
-
-
-File: sing.info, Node: invariantRing, Next: derivate, Up: ainvar_lib
-
-D.6.2.1 invariantRing
-.....................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- invariantRing(m,p,q,b[,r,pa]); m matrix, p,q poly, b,r int, pa
- string
-
-*Assume:*
- p,q variables with m(p)=q and q invariant under m
- i.e. if p=x(i) and q=x(j) then m[j,1]=0 and m[i,1]=x(j)
-
-*Return:*
- ideal, containing generators of the ring of invariants of the
- additive group (K,+) given by the vector field
-
- m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n).
-
- If b>0 the computation stops after all invariants of degree <= b
- (and at least one of higher degree) are found or when all
- invariants are computed.
- If b<=0, the computation continues until all generators of the ring
- of invariants are computed (should be used only if the ring of
- invariants is known to be finitely generated otherwise the
- algorithm might not stop).
- If r=1 a different reduction is used which is sometimes faster
- (default r=0).
-
-*Display:*
- if pa is given (any string as 5th or 6th argument), the computation
- pauses whenever new invariants are found and displays them
-
-*Theory:*
- The algorithm to compute the ring of invariants works in char 0 or
- big enough characteristic. (K,+) acts as the exponential of the
- vector field defined by the matrix m. For background see G.-M.
- Greuel, G. Pfister, Geometric quotients of unipotent group actions,
- Proc. London Math. Soc. (3) 67, 75-105 (1993).
-
-*Example:*
- LIB "ainvar.lib";
- //Winkelmann: free action but Spec(k[x(1),...,x(5)]) --> Spec(invariant
ring)
- //is not surjective
- ring rw=0,(x(1..5)),dp;
- matrix m[5][1];
- m[3,1]=x(1);
- m[4,1]=x(2);
- m[5,1]=1+x(1)*x(4)+x(2)*x(3);
- ideal in=invariantRing(m,x(3),x(1),0); //compute full invarint ring
- in;
- ==> in[1]=x(1)
- ==> in[2]=x(2)
- ==> in[3]=x(2)*x(3)*x(4)-x(2)*x(5)+x(4)
- ==> in[4]=x(1)*x(3)*x(4)-x(1)*x(5)+x(3)
- //Deveney/Finston: The ring of invariants is not finitely generated
- ring rf=0,(x(1..7)),dp;
- matrix m[7][1];
- m[4,1]=x(1)^3;
- m[5,1]=x(2)^3;
- m[6,1]=x(3)^3;
- m[7,1]=(x(1)*x(2)*x(3))^2;
- ideal in=invariantRing(m,x(4),x(1),6); //all invariants up to degree
6
- in;
- ==> in[1]=x(1)
- ==> in[2]=x(3)
- ==> in[3]=x(2)
- ==> in[4]=x(3)^3*x(4)-x(1)^3*x(6)
- ==> in[5]=x(2)^3*x(4)-x(1)^3*x(5)
- ==> in[6]=x(2)^2*x(3)^2*x(4)-x(1)*x(7)
- ==> in[7]=x(1)^2*x(2)^2*x(6)-x(3)*x(7)
- ==> in[8]=x(1)^2*x(3)^2*x(5)-x(2)*x(7)
- ==>
in[9]=x(1)^2*x(2)*x(3)^4*x(4)*x(5)+x(1)^2*x(2)^4*x(3)*x(4)*x(6)-x(1)^5*x(\
- 2)*x(3)*x(5)*x(6)-2*x(2)^2*x(3)^2*x(4)*x(7)+x(1)*x(7)^2
-
-
-File: sing.info, Node: derivate, Next: actionIsProper, Prev: invariantRing,
Up: ainvar_lib
-
-D.6.2.2 derivate
-................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- derivate(m,id); m matrix, id poly/vector/ideal
-
-*Assume:*
- m is a nx1 matrix, where n = number of variables of the basering
-
-*Return:*
- poly/vector/ideal (same type as input), result of applying the
- vector field by the matrix m componentwise to id;
-
-*Note:*
- the vector field is m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n)
-
-*Example:*
- LIB "ainvar.lib";
- ring q=0,(x,y,z,u,v,w),dp;
- poly f=2xz-y2;
- matrix m[6][1] =x,y,0,u,v;
- derivate(m,f);
- ==> -2y2+2xz
- vector v = [2xz-y2,u6-3];
- derivate(m,v);
- ==> 6u6*gen(2)-2y2*gen(1)+2xz*gen(1)
- derivate(m,ideal(2xz-y2,u6-3));
- ==> _[1]=-2y2+2xz
- ==> _[2]=6u6
-
-
-File: sing.info, Node: actionIsProper, Next: reduction, Prev: derivate,
Up: ainvar_lib
-
-D.6.2.3 actionIsProper
-......................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- actionIsProper(m); m matrix
-
-*Assume:*
- m is a nx1 matrix, where n = number of variables of the basering
-
-*Return:*
- int = 1, if the action defined by m is proper, 0 if not
-
-*Note:*
- m defines a group action which is the exponential of the vector
- field m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n)
-
-*Example:*
- LIB "ainvar.lib";
- ring rf=0,x(1..7),dp;
- matrix m[7][1];
- m[4,1]=x(1)^3;
- m[5,1]=x(2)^3;
- m[6,1]=x(3)^3;
- m[7,1]=(x(1)*x(2)*x(3))^2;
- actionIsProper(m);
- ==> 0
- ring rd=0,x(1..5),dp;
- matrix m[5][1];
- m[3,1]=x(1);
- m[4,1]=x(2);
- m[5,1]=1+x(1)*x(4)^2;
- actionIsProper(m);
- ==> 1
-
-
-File: sing.info, Node: reduction, Next: completeReduction, Prev:
actionIsProper, Up: ainvar_lib
-
-D.6.2.4 reduction
-.................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- reduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int
- (optional)]
-
-*Return:*
- a polynomial equal to p-H(f1,...,fr), in case the leading term
- LT(p) of p is of the form H(LT(f1),...,LT(fr)) for some polynomial
- H in r variables over the base field, I=f1,...,fr; if q is given, a
- maximal power a is computed such that q^a divides p-H(f1,...,fr),
- and then (p-H(f1,...,fr))/q^a is returned; return p if no H is
- found
- if n=1, a different algorithm is chosen which is sometimes faster
- (default: n=0; q and n can be given (or not) in any order)
-
-*Note:*
- this is a kind of SAGBI reduction in the subalgebra K[f1,...,fr] of
- the basering
-
-*Example:*
- LIB "ainvar.lib";
- ring q=0,(x,y,z,u,v,w),dp;
- poly p=x2yz-x2v;
- ideal dom =x-w,u2w+1,yz-v;
- reduction(p,dom);
- ==> 2xyzw-yzw2-2xvw+vw2
- reduction(p,dom,w);
- ==> 2xyz-yzw-2xv+vw
-
-
-File: sing.info, Node: completeReduction, Next: localInvar, Prev:
reduction, Up: ainvar_lib
-
-D.6.2.5 completeReduction
-.........................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- completeReduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int]
-
-*Return:*
- a polynomial, the SAGBI reduction of the polynomial p with I via
- the procedure 'reduction' as long as possible
- if n=1, a different algorithm is chosen which is sometimes faster
- (default: n=0; q and n can be given (or not) in any order)
-
-*Note:*
- help reduction; shows an explanation of SAGBI reduction
-
-*Example:*
- LIB "ainvar.lib";
- ring q=0,(x,y,z,u,v,w),dp;
- poly p=x2yz-x2v;
- ideal dom =x-w,u2w+1,yz-v;
- completeReduction(p,dom);
- ==> 2xyzw-yzw2-2xvw+vw2
- completeReduction(p,dom,w);
- ==> 0
-
-
-File: sing.info, Node: localInvar, Next: furtherInvar, Prev:
completeReduction, Up: ainvar_lib
-
-D.6.2.6 localInvar
-..................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- localInvar(m,p,q,h); m matrix, p,q,h polynomials
-
-*Assume:*
- m(q) and h are invariant under the vector field m, i.e.
- m(m(q))=m(h)=0 h must be a ring variable
-
-*Return:*
- a polynomial, the invariant polynomial of the vector field
-
- m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n)
-
- with respect to p,q,h. It is defined as follows: set inv = p if p
- is invariant, and else as
- inv = m(q)^N * sum_i=1..N-1{ (-1)^i*(1/i!)*m^i(p)*(q/m(q))^i }
- where m^N(p) = 0, m^(N-1)(p) != 0;
- the result is inv divided by h as much as possible
-
-*Example:*
- LIB "ainvar.lib";
- ring q=0,(x,y,z),dp;
- matrix m[3][1];
- m[2,1]=x;
- m[3,1]=y;
- poly in=localInvar(m,z,y,x);
- in;
- ==> -1/2y2+xz
-
-
-File: sing.info, Node: furtherInvar, Next: sortier, Prev: localInvar, Up:
ainvar_lib
-
-D.6.2.7 furtherInvar
-....................
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- furtherInvar(m,id,karl,q); m matrix, id,karl ideals, q poly, n int
-
-*Assume:*
- karl,id,q are invariant under the vector field m,
- moreover, q must be a variable
-
-*Return:*
- list of two ideals, the first ideal contains further invariants of
- the vector field
-
- m = sum m[i,1]*d/dx(i) with respect to id,p,q,
-
- i.e. we compute elements in the (invariant) subring generated by id
- which are divisible by q and divide them by q as much as possible
- the second ideal contains all invariants given before if n=1, a
- different algorithm is chosen which is sometimes faster (default:
- n=0)
-
-*Example:*
- LIB "ainvar.lib";
- ring r=0,(x,y,z,u),dp;
- matrix m[4][1];
- m[2,1]=x;
- m[3,1]=y;
- m[4,1]=z;
- ideal id=localInvar(m,z,y,x),localInvar(m,u,y,x);
- ideal karl=id,x;
- list in=furtherInvar(m,id,karl,x);
- in;
- ==> [1]:
- ==> _[1]=y2z2-8/3xz3-2y3u+6xyzu-3x2u2
- ==> [2]:
- ==> _[1]=-1/2y2+xz
- ==> _[2]=1/3y3-xyz+x2u
- ==> _[3]=x
-
-
-File: sing.info, Node: sortier, Prev: furtherInvar, Up: ainvar_lib
-
-D.6.2.8 sortier
-...............
-
-Procedure from library `ainvar.lib' (*note ainvar_lib::).
-
-*Usage:*
- sortier(id); id ideal/module
-
-*Return:*
- the same ideal/module but with generators ordered by there leading
- term, starting with the smallest
-
-*Example:*
- LIB "ainvar.lib";
- ring q=0,(x,y,z,u,v,w),dp;
- ideal i=w,x,z,y,v;
- sortier(i);
- ==> _[1]=w
- ==> _[2]=v
- ==> _[3]=z
- ==> _[4]=y
- ==> _[5]=x
-
-
-File: sing.info, Node: rinvar_lib, Next: stratify_lib, Prev: ainvar_lib,
Up: Invariant theory
-
-D.6.3 rinvar_lib
-----------------
-
-*Library:*
- rinvar.lib
-
-*Purpose:*
- Invariant Rings of Reductive Groups
-
-*Author:*
- Thomas Bayer, address@hidden
- http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current
- Adress: Institut fuer Informatik, TU Muenchen
-
-*Overview:*
- Implementation based on Derksen's algorithm. Written in the frame
- of the diploma thesis (advisor: Prof. Gert-Martin Greuel)
- 'Computations of moduli spaces of semiquasihomogeneous
- singularities and an implementation in Singular'
-
-*Procedures:*
-
-* Menu:
-
-* HilbertSeries:: Hilbert series of the ideal I w.r.t. weight w
-* HilbertWeights:: weighted degrees of the generators of I
-* ImageVariety:: ideal of the image variety F(variety(I))
-* ImageGroup:: ideal of G w.r.t. the induced representation
-* InvariantRing:: generators of the invariant ring of G
-* InvariantQ:: decide if f is invariant w.r.t. G
-* LinearizeAction:: linearization of the action 'Gaction' of G
-* LinearActionQ:: decide if action is linear in var(s..nvars)
-* LinearCombinationQ:: decide if f is in the linear hull of 'base'
-* MinimalDecomposition:: minimal decomposition of f (like coef)
-* NullCone:: ideal of the null cone of the action 'act' of G
-* ReynoldsImage:: image of f under the Reynolds operator 'RO'
-* ReynoldsOperator:: Reynolds operator of the group G
-* SimplifyIdeal:: simplify the ideal I (try to reduce variables)
-* TransferIdeal:: transfer the ideal 'name' from R to basering
-
-* Menu:
-
-See also:
-* qhmoduli_lib::
-* zeroset_lib::
-
-*See also:* *note qhmoduli_lib::; *note zeroset_lib::.
-
-
-File: sing.info, Node: HilbertSeries, Next: HilbertWeights, Up: rinvar_lib
-
-D.6.3.1 HilbertSeries
-.....................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- HilbertSeries(I, w); ideal I, intvec wt
-
-*Purpose:*
- compute the polynomial p of the Hilbert Series,represented by p/q,
- of the ring K[t_1,...,t_m,y_1,...,y_r]/I1 where 'w' are the weights
- of the variables, computed, e.g., by 'HilbertWeights', 'I1' is of
- the form I[1] - y_1,...,I[r] - y_r and is quasihomogeneous w.r.t.
- 'w'
-
-*Return:*
- intvec
-
-*Note:*
- the leading 0 of the result does not belong to p, but is needed in
- the hilbert-driven 'std'.
-
-
-File: sing.info, Node: HilbertWeights, Next: ImageVariety, Prev:
HilbertSeries, Up: rinvar_lib
-
-D.6.3.2 HilbertWeights
-......................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Purpose:*
- compute the weights of the "slack" variables needed for the
- computation of the algebraic relations of the generators of 'I'
- s.t. the Hilbert driven 'std' can be used.
-
-*Return:*
- intvec
-
-*Assume:*
- basering = K[t_1,...,t_m,...], 'I' is quasihomogeneous w.r.t. 'w'
- and contains only polynomials in t_1,...,t_m
-
-
-File: sing.info, Node: ImageVariety, Next: ImageGroup, Prev:
HilbertWeights, Up: rinvar_lib
-
-D.6.3.3 ImageVariety
-....................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- ImageVariety(ideal I, F [, w]);ideal I; F is a list/ideal, intvec
- w.
-
-*Purpose:*
- compute the Zariski closure of the image of the variety of I under
- the morphism F.
-
-*Note:*
- if 'I' and 'F' are quasihomogeneous w.r.t. 'w' then the
- Hilbert-driven 'std' is used.
-
-*Return:*
- polynomial ring over the same ground field, containing the ideal
- 'imageid'. The variables are Y(1),...,Y(k) where k = size(F) -
- 'imageid' is the ideal of the Zariski closure of F(X) where X is
- the variety of I.
-
-*Example:*
- LIB "rinvar.lib";
- ring B = 0,(x,y),dp;
- ideal I = x4 - y4;
- ideal F = x2, y2, x*y;
- def R = ImageVariety(I, F);
- setring R;
- imageid;
- ==> imageid[1]=Y(1)*Y(2)-Y(3)^2
- ==> imageid[2]=Y(1)^2-Y(2)^2
- ==> imageid[3]=Y(2)^3-Y(1)*Y(3)^2
-
-
-File: sing.info, Node: ImageGroup, Next: InvariantRing, Prev: ImageVariety,
Up: rinvar_lib
-
-D.6.3.4 ImageGroup
-..................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- ImageGroup(G, action); ideal G, action;
-
-*Purpose:*
- compute the ideal of the image of G in GL(m,K) induced by the
- linear action 'action', where G is an algebraic group and 'action'
- defines an action of G on K^m (size(action) = m).
-
-*Return:*
- ring, a polynomial ring over the same ground field as the basering,
- containing the ideals 'groupid' and 'actionid'.
- - 'groupid' is the ideal of the image of G (order <= order of G) -
- 'actionid' defines the linear action of 'groupid' on K^m.
-
-*Note:*
- 'action' and 'actionid' have the same orbits
- all variables which give only rise to 0's in the m x m matrices of
- G have been omitted.
-
-*Assume:*
- basering K[s(1..r),t(1..m)] has r + m variables, G is the ideal of
- an algebraic group and F is an action of G on K^m. G contains only
- the variables s(1)...s(r). The action 'action' is given by
- polynomials f_1,...,f_m in basering, s.t. on the ring level we have
- K[t_1,...,t_m] -> K[s_1,...,s_r,t_1,...,t_m]/G
- t_i -> f_i(s_1,...,s_r,t_1,...,t_m)
-
-*Example:*
- LIB "rinvar.lib";
- ring B = 0,(s(1..2), t(1..2)),dp;
- ideal G = s(1)^3-1, s(2)^10-1;
- ideal action = s(1)*s(2)^8*t(1), s(1)*s(2)^7*t(2);
- def R = ImageGroup(G, action);
- setring R;
- groupid;
- ==> groupid[1]=-s(1)+s(2)^4
- ==> groupid[2]=s(1)^8-s(2)^2
- ==> groupid[3]=s(1)^7*s(2)^2-1
- actionid;
- ==> actionid[1]=s(1)*t(1)
- ==> actionid[2]=s(2)*t(2)
-
-
-File: sing.info, Node: InvariantRing, Next: InvariantQ, Prev: ImageGroup,
Up: rinvar_lib
-
-D.6.3.5 InvariantRing
-.....................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- InvariantRing(G, Gact [, opt]); ideal G, Gact; int opt
-
-*Purpose:*
- compute generators of the invariant ring of G w.r.t. the action
- 'Gact'
-
-*Assume:*
- G is a finite group and 'Gact' is a linear action.
-
-*Return:*
- polynomial ring over a simple extension of the ground field of the
- basering (the extension might be trivial), containing the ideals
- 'invars' and 'groupid' and the poly 'newA'
- - 'invars' contains the algebra-generators of the invariant ring -
- 'groupid' is the ideal of G in the new ring
- - 'newA' if the minpoly changes this is the new representation of
- the algebraic number, otherwise it is set to 'a'.
-
-*Note:*
- the delivered ring might have a different minimal polynomial
-
-*Example:*
- LIB "rinvar.lib";
- ring B = 0, (s(1..2), t(1..2)), dp;
- ideal G = -s(1)+s(2)^3, s(1)^4-1;
- ideal action = s(1)*t(1), s(2)*t(2);
- def R = InvariantRing(std(G), action);
- setring R;
- invars;
- ==> invars[1]=t(1)^4
- ==> invars[2]=t(1)^3*t(2)^3
- ==> invars[3]=t(1)^2*t(2)^6
- ==> invars[4]=t(1)*t(2)^9
- ==> invars[5]=t(2)^12
-
-
-File: sing.info, Node: InvariantQ, Next: LinearizeAction, Prev:
InvariantRing, Up: rinvar_lib
-
-D.6.3.6 InvariantQ
-..................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- InvariantQ(f, G, action); poly f; ideal G, action
-
-*Purpose:*
- check if the polynomial f is invariant w.r.t. G where G acts via
- 'action' on K^m.
-
-*Assume:*
- basering = K[s_1,...,s_m,t_1,...,t_m] where K = Q of K = Q(a) and
- minpoly != 0, f contains only t_1,...,t_m, G is the ideal of an
- algebraic group and a standard basis.
-
-*Return:*
- int;
- 0 if f is not invariant,
- 1 if f is invariant
-
-*Note:*
- G need not be finite
-
-
-File: sing.info, Node: LinearizeAction, Next: LinearActionQ, Prev:
InvariantQ, Up: rinvar_lib
-
-D.6.3.7 LinearizeAction
-.......................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- LinearizeAction(G,action,r); ideal G, action; int r
-
-*Purpose:*
- linearize the group action 'action' and find an equivariant
- embedding of K^m where m = size(action).
-
-*Assume:*
- G contains only variables var(1..r) (r = nrs)
- basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0.
-
-*Return:*
- polynomial ring containing the ideals 'actionid', 'embedid',
- 'groupid' - 'actionid' is the ideal defining the linearized action
- of G - 'embedid' is a parameterization of an equivariant embedding
- (closed) - 'groupid' is the ideal of G in the new ring
-
-*Note:*
- set printlevel > 0 to see a trace
-
-*Example:*
- LIB "rinvar.lib";
- ring B = 0,(s(1..5), t(1..3)),dp;
- ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1,
s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3,
s(5)^5-s(1)^2*s(5);
- ideal action = -s(4)*t(1)+s(5)*t(1),
-s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
- LinearActionQ(action, 5);
- ==> 0
- def R = LinearizeAction(G, action, 5);
- setring R;
- R;
- ==> // characteristic : 0
- ==> // number of vars : 9
- ==> // block 1 : ordering dp
- ==> // : names s(1) s(2) s(3) s(4) s(5) t(1) t(2)
t(3) t(\
- 4)
- ==> // block 2 : ordering C
- actionid;
- ==> actionid[1]=-s(4)*t(1)+s(5)*t(1)
- ==> actionid[2]=-s(4)^2*t(2)+s(5)^2*t(2)+2*s(4)^2*t(4)
- ==> actionid[3]=s(4)*t(3)+s(5)*t(3)
- ==> actionid[4]=s(4)^2*t(4)+s(5)^2*t(4)
- embedid;
- ==> embedid[1]=t(1)
- ==> embedid[2]=t(2)
- ==> embedid[3]=t(3)
- ==> embedid[4]=t(3)^2
- groupid;
- ==> groupid[1]=s(3)-s(4)
- ==> groupid[2]=s(2)-s(5)
- ==> groupid[3]=s(4)*s(5)
- ==> groupid[4]=s(1)^2*s(4)+s(1)^2*s(5)-1
- ==> groupid[5]=s(1)^2*s(5)^2-s(5)
- ==> groupid[6]=s(4)^4-s(5)^4+s(1)^2
- ==> groupid[7]=s(1)^4+s(4)^3-s(5)^3
- ==> groupid[8]=s(5)^5-s(1)^2*s(5)
- LinearActionQ(actionid, 5);
- ==> 1
-
-
-File: sing.info, Node: LinearActionQ, Next: LinearCombinationQ, Prev:
LinearizeAction, Up: rinvar_lib
-
-D.6.3.8 LinearActionQ
-.....................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- LinearActionQ(action,nrs,nrt); ideal action, int nrs
-
-*Purpose:*
- check if the action defined by 'action' is linear w.r.t. the
- variables var(nrs + 1...nvars(basering)).
-
-*Return:*
- 0 action not linear
- 1 action is linear
-
-*Example:*
- LIB "rinvar.lib";
- ring R = 0,(s(1..5), t(1..3)),dp;
- ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1,
s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3,
s(5)^5-s(1)^2*s(5);
- ideal Gaction = -s(4)*t(1)+s(5)*t(1),
-s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
- LinearActionQ(Gaction, 5, 3);
- ==> // ** too many arguments for LinearActionQ
- ==> 0
-
-
-File: sing.info, Node: LinearCombinationQ, Next: MinimalDecomposition,
Prev: LinearActionQ, Up: rinvar_lib
-
-D.6.3.9 LinearCombinationQ
-..........................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- LinearCombination(I, f); ideal I, poly f
-
-*Purpose:*
- test if f can be written as a linear combination of the generators
- of I.
-
-*Return:*
- 0 f is not a linear combination
- 1 f is a linear combination
-
-
-File: sing.info, Node: MinimalDecomposition, Next: NullCone, Prev:
LinearCombinationQ, Up: rinvar_lib
-
-D.6.3.10 MinimalDecomposition
-.............................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- MinimalDecomposition(f,a,b); poly f; int a, b.
-
-*Purpose:*
- decompose f as a sum M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] where
- M[1,i] contains only s(1..a), M[2,i] contains only t(1...b) s.t. r
- is minimal
-
-*Assume:*
- f polynomial in K[s(1..a),t(1..b)], K = Q or K = Q(a) and minpoly
- != 0
-
-*Return:*
- 2 x r matrix M s.t. f = M[1,1]*M[2,1] + ... + M[1,r]*M[2,r]
-
-*Example:*
- LIB "rinvar.lib";
- ring R = 0, (s(1..2), t(1..2)), dp;
- poly h = s(1)*(t(1) + t(1)^2) + (t(2) + t(2)^2)*(s(1)^2 + s(2));
- matrix M = MinimalDecomposition(h, 2, 2);
- M;
- ==> M[1,1]=s(1)^2+s(2)
- ==> M[1,2]=s(1)
- ==> M[2,1]=t(2)^2+t(2)
- ==> M[2,2]=t(1)^2+t(1)
- M[1,1]*M[2,1] + M[1,2]*M[2,2] - h;
- ==> 0
-
-
-File: sing.info, Node: NullCone, Next: ReynoldsImage, Prev:
MinimalDecomposition, Up: rinvar_lib
-
-D.6.3.11 NullCone
-.................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- NullCone(G, action); ideal G, action
-
-*Purpose:*
- compute the ideal of the null cone of the linear action of G on
- K^n, given by 'action', by means of Derksen's algorithm
-
-*Assume:*
- basering = K[s(1..r),t(1..n)], K = Q or K = Q(a) and minpoly != 0,
- G is an ideal of a reductive algebraic group in K[s(1..r)],
- 'action' is a linear group action of G on K^n (n = ncols(action))
-
-*Return:*
- ideal of the null cone of G.
-
-*Note:*
- the generators of the null cone are homogeneous, but i.g. not
- invariant
-
-*Example:*
- LIB "rinvar.lib";
- ring R = 0, (s(1..2), x, y), dp;
- ideal G = -s(1)+s(2)^3, s(1)^4-1;
- ideal action = s(1)*x, s(2)*y;
- ideal inv = NullCone(G, action);
- inv;
- ==> inv[1]=x^4
- ==> inv[2]=x^3*y^3
- ==> inv[3]=x^2*y^6
- ==> inv[4]=x*y^9
- ==> inv[5]=y^12
-
-
-File: sing.info, Node: ReynoldsImage, Next: ReynoldsOperator, Prev:
NullCone, Up: rinvar_lib
-
-D.6.3.12 ReynoldsImage
-......................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- ReynoldsImage(RO, f); list RO, poly f
-
-*Purpose:*
- compute the Reynolds image of the polynomial f where RO represents
- the Reynolds operator
-
-*Return:*
- poly
-
-
-File: sing.info, Node: ReynoldsOperator, Next: SimplifyIdeal, Prev:
ReynoldsImage, Up: rinvar_lib
-
-D.6.3.13 ReynoldsOperator
-.........................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Usage:*
- ReynoldsOperator(G, action [, opt); ideal G, action; int opt
-
-*Purpose:*
- compute the Reynolds operator of the group G which act via 'action'
-
-*Return:*
- polynomial ring R over a simple extension of the ground field of
- the basering (the extension might be trivial), containing a list
- 'ROelements', the ideals 'id', 'actionid' and the polynomial
- 'newA'. R = K(a)[s(1..r),t(1..n)].
- - 'ROelements' is a list of ideal, each ideal represents a
- substitution map F : R -> R according to the zero-set of G - 'id'
- is the ideal of G in the new ring
- - 'newA' is the new representation of a' in terms of a. If the
- basering does not contain a parameter then 'newA' = 'a'.
-
-*Assume:*
- basering = K[s(1..r),t(1..n)], K = Q or K = Q(a') and minpoly != 0,
- G is the ideal of a finite group in K[s(1..r)], 'action' is a
- linear group action of G
-
-
-File: sing.info, Node: SimplifyIdeal, Next: TransferIdeal, Prev:
ReynoldsOperator, Up: rinvar_lib
-
-D.6.3.14 SimplifyIdeal
-......................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-*Purpose:*
- simplify ideal I to the ideal I', do not change the names of the
- first m variables, new ideal I' might contain less variables. I'
- contains variables var(1..m)
-
-*Return:*
- list
- _[1] ideal I'
- _[2] ideal representing a map phi to a ring with probably less
- vars. s.t. phi(I) = I'
- _[3] list of variables
- _[4] list from 'elimpart'
-
-
-File: sing.info, Node: TransferIdeal, Prev: SimplifyIdeal, Up: rinvar_lib
-
-D.6.3.15 TransferIdeal
-......................
-
-Procedure from library `rinvar.lib' (*note rinvar_lib::).
-
-
-File: sing.info, Node: stratify_lib, Prev: rinvar_lib, Up: Invariant theory
-
-D.6.4 stratify_lib
-------------------
-
-*Library:*
- stratify.lib
-
-*Purpose:*
- Algorithmic Stratification for Unipotent Group-Actions
-
-*Author:*
- Anne Fruehbis-Krueger, address@hidden
-
-*Overview:*
- This library provides an implementation of the algorithm of Greuel
- and Pfister introduced in the article <Geometric quotients of
- unipotent group actions>.
-
-*Procedures:*
-
-* Menu:
-
-* prepMat:: list of submatrices corresp. to given filtration
-* stratify:: algorithmic stratification (main procedure)
-
-
-File: sing.info, Node: prepMat, Next: stratify, Up: stratify_lib
-
-D.6.4.1 prepMat
-...............
-
-Procedure from library `stratify.lib' (*note stratify_lib::).
-
-*Usage:*
- prepMat(M,wr,ws,step);
- where M is a matrix, wr is an intvec of size ncols(M), ws an intvec
- of size nrows(M) and step is an integer
-
-*Return:*
- 2 lists of submatrices corresponding to the filtrations specified
- by wr and ws
- the first list corresponds to the list for the filtration of AdA,
- i.e. the ranks of these matrices will be the r_i, the second one to
- the list for the filtration of L, i.e. the ranks of these matrices
- will be the s_i
-
-*Note:*
- * the entries of the matrix M are M_ij=delta_i(x_j),
- * wr is used to determine what subset of the set of all dx_i is
- generating AdF^l(A):
- if (k-1)*step <= wr[i] < k*step, then dx_i is in the set of
- generators of AdF^l(A) for all l>=k and the i-th column of M
- appears in each submatrix starting from the k-th
- * ws is used to determine what subset of the set of all delta_i is
- generating Z_l(L):
- if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of
- generators of Z_l(A) for l < k and the i-th row of M appears in
- each submatrix up to the (k-1)th
- * the entries of wr and ws as well as step should be positive
- integers
-
-*Example:*
- LIB "stratify.lib";
- ring r=0,(t(1..3)),dp;
- matrix M[2][3]=0,t(1),3*t(2),0,0,t(1);
- print(M);
- ==> 0,t(1),3*t(2),
- ==> 0,0, t(1)
- intvec wr=1,3,5;
- intvec ws=2,4;
- int step=2;
- prepMat(M,wr,ws,step);
- ==> [1]:
- ==> [1]:
- ==> _[1,1]=0
- ==> _[2,1]=0
- ==> [2]:
- ==> _[1,1]=0
- ==> _[1,2]=t(1)
- ==> _[2,1]=0
- ==> _[2,2]=0
- ==> [3]:
- ==> _[1,1]=0
- ==> _[1,2]=t(1)
- ==> _[1,3]=3*t(2)
- ==> _[2,1]=0
- ==> _[2,2]=0
- ==> _[2,3]=t(1)
- ==> [2]:
- ==> [1]:
- ==> _[1,1]=0
- ==> _[1,2]=t(1)
- ==> _[1,3]=3*t(2)
- ==> _[2,1]=0
- ==> _[2,2]=0
- ==> _[2,3]=t(1)
- ==> [2]:
- ==> _[1,1]=0
- ==> _[1,2]=0
- ==> _[1,3]=t(1)
-
-
-File: sing.info, Node: stratify, Prev: prepMat, Up: stratify_lib
-
-D.6.4.2 stratify
-................
-
-Procedure from library `stratify.lib' (*note stratify_lib::).
-
-*Usage:*
- stratify(M,wr,ws,step);
- where M is a matrix, wr is an intvec of size ncols(M), ws an intvec
- of size nrows(M) and step is an integer
-
-*Return:*
- list of lists, each entry of the big list corresponds to one
- locally closed set and has the following entries:
- 1) intvec giving the corresponding rs-vector
- 2) ideal determining the closed set
- 3) list d of polynomials determining the open set D(d[1]) empty
- list if there is more than one open set
- 4-n) lists of polynomials determining open sets which all lead to
- the same rs-vector
-
-*Note:*
- * ring ordering should be global, i.e. the ring should be a
- polynomial ring
- * the entries of the matrix M are M_ij=delta_i(x_j),
- * wr is used to determine what subset of the set of all dx_i is
- generating AdF^l(A):
- if (k-1)*step < wr[i] <= k*step, then dx_i is in the set of
- generators of AdF^l(A) for all l>=k
- * ws is used to determine what subset of the set of all delta_i is
- generating Z_l(L):
- if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of
- generators of Z_l(A) for l < k
- * the entries of wr and ws as well as step should be positive
- integers
- * the filtrations have to be known, no sanity checks concerning the
- filtrations are performed !!!
-
-*Example:*
- LIB "stratify.lib";
- ring r=0,(t(1..3)),dp;
- matrix M[2][3]=0,t(1),3*t(2),0,0,t(1);
- intvec wr=1,3,5;
- intvec ws=2,4;
- int step=2;
- stratify(M,wr,ws,step);
- ==> [1]:
- ==> [1]:
- ==> 0,0,0,0
- ==> [2]:
- ==> _[1]=t(2)
- ==> _[2]=t(1)
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> [1]:
- ==> 0,1,0,1
- ==> [2]:
- ==> _[1]=t(1)
- ==> [3]:
- ==> [1]:
- ==> t(2)
- ==> [2]:
- ==> t(2)
- ==> [3]:
- ==> [1]:
- ==> 1,2,1,2
- ==> [2]:
- ==> _[1]=0
- ==> [3]:
- ==> [1]:
- ==> t(1)
- ==> [2]:
- ==> t(1)
-
-
-File: sing.info, Node: Symbolic-numerical solving, Next: Visualization,
Prev: Invariant theory, Up: SINGULAR libraries
-
-D.7 Symbolic-numerical solving
-==============================
-
-* Menu:
-
-* presolve_lib:: procedures for pre-solving polynomial equations
-* solve_lib:: procedures to solve polynomial systems
-* triang_lib:: procedures for decomposing zero-dimensional ideals
-* ntsolve_lib:: one real solution of polynomial systems (Newton iteration)
-* zeroset_lib:: procedures for roots and factorization
-
-
-File: sing.info, Node: presolve_lib, Next: solve_lib, Prev:
Symbolic-numerical solving, Up: Symbolic-numerical solving
-
-D.7.1 presolve_lib
-------------------
-
-*Library:*
- presolve.lib
-
-*Purpose:*
- Pre-Solving of Polynomial Equations
-
-*Author:*
- Gert-Martin Greuel, email: address@hidden,
-
-*Procedures:*
-
-* Menu:
-
-* degreepart:: elements of id of total degree >= d1 and <= d2
-* elimlinearpart:: linear part eliminated from id
-* elimpart:: partial elimination of vars [among first n vars]
-* elimpartanyr:: factors of p partially eliminated from i in any ring
-* fastelim:: fast elimination of factors of p from i [options]
-* findvars:: ideal of variables occurring in id [more information]
-* hilbvec:: intvec of Hilbert-series of id [in char c and ord o]
-* linearpart:: elements of id of total degree <=1
-* tolessvars:: maps id to new basering having only vars occurring in id
-* solvelinearpart:: reduced std-basis of linear part of id
-* sortandmap:: map to new basering with vars sorted w.r.t. complexity
-* sortvars:: sort vars w.r.t. complexity in id [different blocks]
-* shortid:: generators of id having <= n terms
-* valvars:: valuation of vars w.r.t. to their complexity in id
-* idealSimplify:: eliminates variables which are linear in id
-* idealSplit:: intersection of the ideals has the same radical as id
-
-
-File: sing.info, Node: degreepart, Next: elimlinearpart, Up: presolve_lib
-
-D.7.1.1 degreepart
-..................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- degreepart(id,d1,d2[,v]); id=ideal/module, d1,d1=integers, v=intvec
-
-*Return:*
- generators of id of [v-weighted] total degree >= d1 and <= d2
- (default: v = 1,...,1)
-
-*Example:*
- LIB "presolve.lib";
- ring r=0,(x,y,z),dp;
- ideal i=1+x+x2+x3+x4,3,xz+y3+z8;
- degreepart(i,0,4);
- ==> _[1]=x4+x3+x2+x+1
- ==> _[2]=3
- module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1];
- intvec v=2,3,6;
- show(degreepart(m,8,8,v));
- ==> // module, 1 generator(s)
- ==> [x4,xy2,xz]
-
-
-File: sing.info, Node: elimlinearpart, Next: elimpart, Prev: degreepart,
Up: presolve_lib
-
-D.7.1.2 elimlinearpart
-......................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- elimlinearpart(i[,n]); i=ideal, n=integer,
- default: n=nvars(basering)
-
-*Return:*
- list L with 5 entries:
-
- L[1]: (interreduced) ideal obtained from i by substituing
- from the first n variables those, which appear in a linear part
- of i, by putting this part into triangular form
- L[2]: ideal of variables which have been substituted
- L[3]: ideal, j-th element defines substitution of j-th var in [2]
- L[4]: ideal of variables of basering, eliminated ones are set to 0
- L[5]: ideal, describing the map from the basering to itself such that
- L[1] is the image of i
-
-*Note:*
- the procedure does always interreduce the ideal i internally w.r.t.
- ordering dp.
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z),dp;
- ideal i = x3+y2+z,x2y2+z3,y+z+1;
- elimlinearpart(i);
- ==> [1]:
- ==> _[1]=x3+z2+3z+1
- ==> _[2]=x2z2+2x2z+z3+x2
- ==> [2]:
- ==> _[1]=y
- ==> [3]:
- ==> _[1]=y+z+1
- ==> [4]:
- ==> _[1]=x
- ==> _[2]=0
- ==> _[3]=z
- ==> [5]:
- ==> _[1]=x
- ==> _[2]=-z-1
- ==> _[3]=z
-
-
-File: sing.info, Node: elimpart, Next: elimpartanyr, Prev: elimlinearpart,
Up: presolve_lib
-
-D.7.1.3 elimpart
-................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- elimpart(i [,n,e] ); i=ideal, n,e=integers
- n : only the first n vars are considered for substitution,
- e =0: substitute from linear part of i (same as elimlinearpart)
- e!=0: eliminate also by direct substitution
- (default: n = nvars(basering), e = 1)
-
-*Return:*
- list of 5 objects:
-
- [1]: ideal obtained by substituting from the first n variables those
- from i, which appear in the linear part of i (or, if e!=0, which
- can be expressed directly in the remaining vars)
- [2]: ideal, variables which have been substituted
- [3]: ideal, i-th element defines substitution of i-th var in [2]
- [4]: ideal of variables of basering, substituted ones are set to 0
- [5]: ideal, describing the map from the basering, say k[x(1..m)], to
- itself onto k[..variables fom [4]..] and [1] is the image of i
-
- The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5]
- maps [3] to 0, hence induces an isomorphism
-
- k[x(1..m)]/i -> k[..variables fom [4]..]/[1]
-
-*Note:*
- If the basering has ordering (c,dp), this is faster for big ideals,
- since it avoids internal ring change and mapping.
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z),dp;
- ideal i =x2+y2,x2+y+1;
- elimpart(i,3,0);
- ==> [1]:
- ==> _[1]=y2-y-1
- ==> _[2]=x2+y+1
- ==> [2]:
- ==> _[1]=0
- ==> [3]:
- ==> _[1]=0
- ==> [4]:
- ==> _[1]=x
- ==> _[2]=y
- ==> _[3]=z
- ==> [5]:
- ==> _[1]=x
- ==> _[2]=y
- ==> _[3]=z
- elimpart(i,3,1);
- ==> [1]:
- ==> _[1]=x4+3x2+1
- ==> [2]:
- ==> _[1]=y
- ==> [3]:
- ==> _[1]=x2+y+1
- ==> [4]:
- ==> _[1]=x
- ==> _[2]=0
- ==> _[3]=z
- ==> [5]:
- ==> _[1]=x
- ==> _[2]=-x2-1
- ==> _[3]=z
-
-
-File: sing.info, Node: elimpartanyr, Next: fastelim, Prev: elimpart, Up:
presolve_lib
-
-D.7.1.4 elimpartanyr
-....................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- elimpartanyr(i [,p,e] ); i=ideal, p=polynomial, e=integer
- p: product of vars to be eliminated,
- e =0: substitute from linear part of i (same as elimlinearpart)
- e!=0: eliminate also by direct substitution
- (default: p=product of all vars, e=1)
-
-*Return:*
- list of 6 objects:
-
- [1]: (interreduced) ideal obtained by substituting from i those vars
- appearing in p, which occur in the linear part of i (or which can
- be expressed directly in the remaining variables, if e!=0)
- [2]: ideal, variables which have been substituted
- [3]: ideal, i-th element defines substitution of i-th var in [2]
- [4]: ideal of variables of basering, substituted ones are set to 0
- [5]: ideal, describing the map from the basering, say k[x(1..m)], to
- itself onto k[..variables fom [4]..] and [1] is the image of i
- [6]: int, # of vars considered for substitution (= # of factors of p)
-
- The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5]
- maps [3] to 0, hence induces an isomorphism
-
- k[x(1..m)]/i -> k[..variables fom [4]..]/[1]
-
-*Note:*
- the proc uses `execute' to create a ring with ordering dp and vars
- placed correctly and then applies `elimpart'.
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z),dp;
- ideal i = x3+y2+z,x2y2+z3,y+z+1;
- elimpartanyr(i,z);
- ==> [1]:
- ==> _[1]=x3+y2-y-1
- ==> _[2]=x2y2-y3-3y2-3y-1
- ==> [2]:
- ==> _[1]=z
- ==> [3]:
- ==> _[1]=y+z+1
- ==> [4]:
- ==> _[1]=0
- ==> _[2]=x
- ==> _[3]=y
- ==> [5]:
- ==> _[1]=-y-1
- ==> _[2]=x
- ==> _[3]=y
- ==> [6]:
- ==> 1
-
-
-File: sing.info, Node: fastelim, Next: findvars, Prev: elimpartanyr, Up:
presolve_lib
-
-D.7.1.5 fastelim
-................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- fastelim(i,p[h,o,a,b,e,m]); i=ideal, p=polynomial;
- h,o,a,b,e=integers p: product of variables to be eliminated;
- Optional parameters:
-
- - h !=0: use Hilbert-series driven std-basis computation
- - o !=0: use proc `valvars' for a - hopefully - optimal ordering of vars
- - a !=0: order vars to be eliminated w.r.t. increasing complexity
- - b !=0: order vars not to be eliminated w.r.t. increasing complexity
- - e !=0: use `elimpart' first to eliminate easy part
- - m !=0: compute a minimal system of generators
-
- (default: h,o,a,b,e,m = 0,1,0,0,0,0)
-
-*Return:*
- ideal obtained from i by eliminating those variables, which occur
- in p
-
-*Example:*
- LIB "presolve.lib";
- ring s=31991,(e,f,x,y,z,t,u,v,w,a,b,c,d),dp;
- ideal i = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1,
- d2+e2-1, f4+2u, wa+tf, xy+tu+ab;
- fastelim(i,xytua,1,1); //with hilb,valvars
- ==> _[1]=f2+w2-1
- ==> _[2]=z2+v2+c2-1
- ==> _[3]=e2+d2-1
- fastelim(i,xytua,1,0,1); //with hilb,minbase
- ==> _[1]=z2+v2+c2-1
- ==> _[2]=f2+w2-1
- ==> _[3]=e2+d2-1
-
-
-File: sing.info, Node: findvars, Next: hilbvec, Prev: fastelim, Up:
presolve_lib
-
-D.7.1.6 findvars
-................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- findvars(id [,any] ); id=poly/ideal/vector/module/matrix, any=any
- type
-
-*Return:*
- if no second argument is present: ideal of variables occurring in
-id,
- if a second argument is given (of any type): list L with 4 entries:
-
- L[1]: ideal of variables occurring in id
- L[2]: intvec of variables occurring in id
- L[3]: ideal of variables not occurring in id
- L[4]: intvec of variables not occurring in id
-
-*Example:*
- LIB "presolve.lib";
- ring s = 0,(e,f,x,y,t,u,v,w,a,d),dp;
- ideal i = w2+f2-1, x2+t2+a2-1;
- findvars(i);
- ==> _[1]=f
- ==> _[2]=x
- ==> _[3]=t
- ==> _[4]=w
- ==> _[5]=a
- findvars(i,1);
- ==> [1]:
- ==> _[1]=f
- ==> _[2]=x
- ==> _[3]=t
- ==> _[4]=w
- ==> _[5]=a
- ==> [2]:
- ==> 2,3,5,8,9
- ==> [3]:
- ==> _[1]=e
- ==> _[2]=y
- ==> _[3]=u
- ==> _[4]=v
- ==> _[5]=d
- ==> [4]:
- ==> 1,4,6,7,10
-
-
-File: sing.info, Node: hilbvec, Next: linearpart, Prev: findvars, Up:
presolve_lib
-
-D.7.1.7 hilbvec
-...............
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- hilbvec(id[,c,o]); id=poly/ideal/vector/module/matrix, c,o=strings,
- c=char, o=ordering used by `hilb'
- (default: c="32003", o="dp")
-
-*Return:*
- intvec of 1-st Hilbert-series of id, computed in char c and
- ordering o
-
-*Note:*
- id must be homogeneous (i.e. all vars have weight 1)
-
-*Example:*
- LIB "presolve.lib";
- ring s = 0,(e,f,x,y,z,t,u,v,w,a,b,c,d,H),dp;
- ideal id = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1,
- d2+e2-1, f4+2u, wa+tf, xy+tu+ab;
- id = homog(id,H);
- hilbvec(id);
- ==> 1,0,-7,0,20,0,-28,0,14,0,14,0,-28,0,20,0,-7,0,1,0
-
-
-File: sing.info, Node: linearpart, Next: tolessvars, Prev: hilbvec, Up:
presolve_lib
-
-D.7.1.8 linearpart
-..................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- linearpart(id); id=ideal/module
-
-*Return:*
- generators of id of total degree <= 1
-
-*Example:*
- LIB "presolve.lib";
- ring r=0,(x,y,z),dp;
- ideal i=1+x+x2+x3,3,x+3y+5z;
- linearpart(i);
- ==> _[1]=3
- ==> _[2]=x+3y+5z
- module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1];
- show(linearpart(m));
- ==> // module, 1 generator(s)
- ==> [x,y,z]
-
-
-File: sing.info, Node: tolessvars, Next: solvelinearpart, Prev: linearpart,
Up: presolve_lib
-
-D.7.1.9 tolessvars
-..................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- tolessvars(id [,s1,s2] ); id poly/ideal/vector/module/matrix,
-s1,s2=strings
- s1: name of new ring,
- s2: new ordering
- (default: s1="R(n)" where n is the # of vars in the new ring,
- s2="dp" or "ds" depending whether the first block of the old
- ordering is a p- resp. an s-ordering)
-
-*Create:*
- nothing, if id contains all vars of the basering.
- Else, create a ring with same char as the basering, but possibly
- less variables (only those variables which actually occur in id)
- and map id to the new ring, which will be the basering after the
- proc has finished.
-
-*Display:*
- If printlevel >=0, display ideal of vars, which have been omitted
- from the old ring
-
-*Return:*
- the original ideal id (see NOTE)
-
-*Note:*
- You must not type, say, 'ideal id=tolessvars(id);' since the ring
- to which 'id' would belong will only be defined by the r.h.s.. But
- you may type 'def id=tolessvars(id);' or 'list id=tolessvars(id);'
- since then 'id' does not a priory belong to a ring, its type will
- be defined by the right hand side. Moreover, do not use a name
- which occurs in the old ring, for the same reason.
-
-*Example:*
- LIB "presolve.lib";
- ring r = 0,(x,y,z),dp;
- ideal i = y2-x3,x-3,y-2x;
- def j = tolessvars(i,"R_r","lp");
- ==>
- ==> // variables which did not occur:
- ==> z
- ==> // basering is now R_r
- show(basering);
- ==> // ring: (0),(x,y),(lp(2),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // j [0] ideal, 3 generator(s)
- j;
- ==> j[1]=-x3+y2
- ==> j[2]=x-3
- ==> j[3]=-2x+y
- kill R_r;
-
-
-File: sing.info, Node: solvelinearpart, Next: sortandmap, Prev: tolessvars,
Up: presolve_lib
-
-D.7.1.10 solvelinearpart
-........................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- solvelinearpart(id [,n] ); id=ideal/module, n=integer,
- (default: n=0)
-
-*Return:*
- (interreduced) generators of id of degree <=1 in reduced triangular
- form if n=0 [non-reduced triangular form if n!=0]
-
-*Assume:*
- monomial ordering is a global ordering (p-ordering)
-
-*Note:*
- may be used to solve a system of linear equations see proc
- `gauss_row' from 'matrix.lib' for a different method
-
-*Warning:*
- the result is very likely to be false for 'real' coefficients, use
- char 0 instead!
-
-*Example:*
- LIB "presolve.lib";
- // Solve the system of linear equations:
- // 3x + y + z - u = 2
- // 3x + 8y + 6z - 7u = 1
- // 14x + 10y + 6z - 7u = 0
- // 7x + 4y + 3z - 3u = 3
- ring r = 0,(x,y,z,u),lp;
- ideal i= 3x + y + z - u,
- 13x + 8y + 6z - 7u,
- 14x + 10y + 6z - 7u,
- 7x + 4y + 3z - 3u;
- ideal j= 2,1,0,3;
- j = i-j; // difference of 1x4 matrices
- // compute reduced triangular form, setting
- solvelinearpart(j); // the RHS equal 0 gives the solutions!
- ==> _[1]=u-4
- ==> _[2]=z-4
- ==> _[3]=y+1
- ==> _[4]=x-1
- solvelinearpart(j,1); ""; // triangular form, not reduced
- ==> _[1]=u-4
- ==> _[2]=3z-8u+20
- ==> _[3]=18y-6z+7u+14
- ==> _[4]=13x+8y+6z-7u-1
- ==>
-
-
-File: sing.info, Node: sortandmap, Next: sortvars, Prev: solvelinearpart,
Up: presolve_lib
-
-D.7.1.11 sortandmap
-...................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
-sortandmap(id,s1,s2[,n1,p1,n2,p2...,o1,m1,o2,m2...]);
-id=poly/ideal/vector/module,
- s1,s2 = strings (names for new ring and mapped id),
- p1,p2,...= polynomials (product of variables),
- n1,n2,...= integers,
- o1,o2,...= strings,
- m1,m2,...= integers
- (default: p1=product of all vars, n1=0, o1="dp",m1=0)
- the last pi (containing the remaining vars) may be omitted
-
-*Create:*
- a new ring and map id into it, the new ring has same char as
- basering but with new ordering and vars sorted in the following
- manner:
-
- - each block of vars occurring in pi is sorted w.r.t. its complexity in
id,
- - ni controls the sorting in i-th block (= vars occurring in pi):
- ni=0 (resp.!=0) means that less (resp. more) complex vars come first
- - oi and mi define the monomial ordering of the i-th block:
- if mi =0, oi=ordstr(i-th block)
- if mi!=0, the ordering of the i-th block itself is a blockordering,
- each subblock having ordstr=oi, such that vars of same complexity
are
- in one block
-
- Note that only simple ordstrings oi are allowed:
- "lp","dp","Dp","ls","ds","Ds".
-
-*Return:*
- nothing
-
-*Note:*
- We define a variable x to be more complex than y (with respect to
- id) if val(x) > val(y) lexicographically, where val(x) denotes the
- valuation vector of x:
- consider id as list of polynomials in x with coefficients in the
- remaining variables. Then:
- val(x) = (maximal occurring power of x, # of all monomials in
- leading coefficient, # of all monomials in coefficient of next
- smaller power of x,...).
-
-*Example:*
- LIB "presolve.lib";
- ring s = 32003,(x,y,z),dp;
- ideal i=x3+y2,xz+z2;
- sortandmap(i,"R_r","i");
- // i is now an ideal in the new basering R_r
- show(R_r);
- ==> // ring: (32003),(y,z,x),(dp(3),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // i [0] ideal, 2 generator(s)
- kill R_r; setring s;
- sortandmap(i,"R_r","i",1,xy,0,z,0,"ds",0,"lp",0);
- show(R_r);
- ==> // ring: (32003),(x,y,z),(ds(2),lp(1),C);
- ==> // minpoly = 0
- ==> // objects belonging to this ring:
- ==> // i [0] ideal, 2 generator(s)
- kill R_r;
-
-
-File: sing.info, Node: sortvars, Next: shortid, Prev: sortandmap, Up:
presolve_lib
-
-D.7.1.12 sortvars
-.................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
-sortvars(id[,n1,p1,n2,p2,...]);
-id=poly/ideal/vector/module,
- p1,p2,...= polynomials (product of vars),
-n1,n2,...=integers
- (default: p1=product of all vars, n1=0)
- the last pi (containing the remaining vars) may be omitted
-
-*Compute:*
- sort variables with respect to their complexity in id
-
-*Return:*
- list of two elements, an ideal and a list:
-
- [1]: ideal, variables of basering sorted w.r.t their complexity in id
- ni controls the ordering in i-th block (= vars occurring in pi):
- ni=0 (resp.!=0) means that less (resp. more) complex vars come
first
- [2]: a list with 4 entries for each pi:
- ideal ai : vars of pi in correct order,
- intvec vi: permutation vector describing the ordering in ai,
- intmat Mi: valuation matrix of ai, the columns of Mi being the
- valuation vectors of the vars in ai
- intvec wi: size of 1-st, 2-nd,... block of identical columns of Mi
- (vars with same valuation)
-
-*Note:*
- We define a variable x to be more complex than y (with respect to
- id) if val(x) > val(y) lexicographically, where val(x) denotes the
- valuation vector of x:
- consider id as list of polynomials in x with coefficients in the
- remaining variables. Then:
- val(x) = (maximal occurring power of x, # of all monomials in
- leading coefficient, # of all monomials in coefficient of next
- smaller power of x,...).
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z,w),dp;
- ideal i = x3+y2+yw2,xz+z2,xyz-w2;
- sortvars(i,0,xy,1,zw);
- ==> [1]:
- ==> _[1]=y
- ==> _[2]=x
- ==> _[3]=w
- ==> _[4]=z
- ==> [2]:
- ==> [1]:
- ==> _[1]=y
- ==> _[2]=x
- ==> [2]:
- ==> 2,1
- ==> [3]:
- ==> 2,3,
- ==> 1,1,
- ==> 2,0,
- ==> 0,2
- ==> [4]:
- ==> 1,1
- ==> [5]:
- ==> _[1]=w
- ==> _[2]=z
- ==> [6]:
- ==> 2,1
- ==> [7]:
- ==> 2,2,
- ==> 2,1,
- ==> 0,2
- ==> [8]:
- ==> 1,1
-
-
-File: sing.info, Node: shortid, Next: valvars, Prev: sortvars, Up:
presolve_lib
-
-D.7.1.13 shortid
-................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- shortid(id,n[,e]); id= ideal/module, n,e=integers
-
-*Return:*
- - if called with two arguments or e=0:
- same type as id, containing generators of id having <= n terms.
- - if called with three arguments and e!=0:
- a list L:
- L[1]: same type as id, containing generators of id having <= n
- terms.
- L[2]: number of corresponding generator of id
-
-*Note:*
- May be used to compute partial standard basis in case id is to hard
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z,w),dp;
- ideal i = (x3+y2+yw2)^2,(xz+z2)^2,xyz-w2-xzw;
- shortid(i,3);
- ==> _[1]=x2z2+2xz3+z4
- ==> _[2]=xyz-xzw-w2
-
-
-File: sing.info, Node: valvars, Next: idealSimplify, Prev: shortid, Up:
presolve_lib
-
-D.7.1.14 valvars
-................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
-valvars(id[,n1,p1,n2,p2,...]);
-id=poly/ideal/vector/module,
- p1,p2,...= polynomials (product of vars),
- n1,n2,...= integers,
-
- ni controls the ordering of vars occurring in pi: ni=0 (resp.!=0)
- means that less (resp. more) complex vars come first
- (default: p1=product of all vars, n1=0)
- the last pi (containing the remaining vars) may be omitted
-
-*Compute:*
- valuation (complexity) of variables with respect to id.
- ni controls the ordering of vars occurring in pi:
- ni=0 (resp.!=0) means that less (resp. more) complex vars come
- first.
-
-*Return:*
- list with 3 entries:
-
- [1]: intvec, say v, describing the permutation such that the permuted
- ringvariables are ordered with respect to their complexity in id
- [2]: list of intvecs, i-th intvec, say v(i) describing permutation
- of vars in a(i) such that v=v(1),v(2),...
- [3]: list of ideals and intmat's, say a(i) and M(i), where
- a(i): factors of pi,
- M(i): valuation matrix of a(i), such that the j-th column of M(i)
- is the valuation vector of j-th generator of a(i)
-
-*Note:*
- Use `sortvars' in order to actually sort the variables! We define
- a variable x to be more complex than y (with respect to id) if
- val(x) > val(y) lexicographically, where val(x) denotes the
- valuation vector of x:
- consider id as list of polynomials in x with coefficients in the
- remaining variables. Then:
- val(x) = (maximal occurring power of x, # of all monomials in
- leading coefficient, # of all monomials in coefficient of next
- smaller power of x,...).
-
-*Example:*
- LIB "presolve.lib";
- ring s=0,(x,y,z,a,b),dp;
- ideal i=ax2+ay3-b2x,abz+by2;
- valvars (i,0,xyz);
- ==> [1]:
- ==> 3,1,2,4,5
- ==> [2]:
- ==> [1]:
- ==> 3,1,2
- ==> [2]:
- ==> 1,2
- ==> [3]:
- ==> [1]:
- ==> _[1]=x
- ==> _[2]=y
- ==> _[3]=z
- ==> [2]:
- ==> 2,3,1,
- ==> 1,1,1,
- ==> 1,1,0
- ==> [3]:
- ==> _[1]=a
- ==> _[2]=b
- ==> [4]:
- ==> 1,2,
- ==> 3,1,
- ==> 0,2
-
-
-File: sing.info, Node: idealSimplify, Next: idealSplit, Prev: valvars, Up:
presolve_lib
-
-D.7.1.15 idealSimplify
-......................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- idealSimplify(id); id ideal
-
-*Return:*
- ideal I = eliminate(Id,m) m is a product of variables which are
- only linearly involved in the generators of id
-
-*Example:*
- LIB "presolve.lib";
- ring r=0,(x,y,z,w,t),dp;
- ideal i=
- t,
- x3+y2+2z,
- x2+3y,
- x2+y2+z2,
- w2+z;
- ideal j=idealSimplify(i);
- ideal k=eliminate(i,zyt);
- reduce(k,std(j));
- ==> _[1]=0
- ==> _[2]=0
- reduce(j,std(k));
- ==> _[1]=0
- ==> _[2]=0
-
-
-File: sing.info, Node: idealSplit, Prev: idealSimplify, Up: presolve_lib
-
-D.7.1.16 idealSplit
-...................
-
-Procedure from library `presolve.lib' (*note presolve_lib::).
-
-*Usage:*
- idealSplit(id,timeF,timeS); id ideal and optional
- timeF ,timeS integers to bound the time which can be used for
- factorization resp. standard basis computation
-
-*Return:*
- a list of ideals such that their intersection
- has the same radical as id
-
-*Example:*
- LIB "presolve.lib";
- ring r=32003,(b,s,t,u,v,w,x,y,z),dp;
- ideal i=
- bv+su,
- bw+tu,
- sw+tv,
- by+sx,
- bz+tx,
- sz+ty,
- uy+vx,
- uz+wx,
- vz+wy,
- bvz;
- idealSplit(i);
- ==> [1]:
- ==> _[1]=x
- ==> _[2]=u
- ==> _[3]=t
- ==> _[4]=s
- ==> _[5]=b
- ==> _[6]=wy+vz
- ==> [2]:
- ==> _[1]=z
- ==> _[2]=w
- ==> _[3]=t
- ==> _[4]=s
- ==> _[5]=b
- ==> _[6]=vx+uy
- ==> [3]:
- ==> _[1]=z
- ==> _[2]=x
- ==> _[3]=w
- ==> _[4]=u
- ==> _[5]=t
- ==> _[6]=b
- ==> [4]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=t
- ==> _[5]=s
- ==> _[6]=b
- ==> [5]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=u
- ==> _[5]=b
- ==> _[6]=tv+sw
- ==> [6]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=w
- ==> _[5]=t
- ==> _[6]=su+bv
- ==> [7]:
- ==> _[1]=w
- ==> _[2]=v
- ==> _[3]=u
- ==> _[4]=t
- ==> _[5]=s
- ==> _[6]=b
- ==> [8]:
- ==> _[1]=x
- ==> _[2]=w
- ==> _[3]=v
- ==> _[4]=u
- ==> _[5]=b
- ==> _[6]=ty+sz
- ==> [9]:
- ==> _[1]=z
- ==> _[2]=w
- ==> _[3]=v
- ==> _[4]=u
- ==> _[5]=t
- ==> _[6]=sx+by
- ==> [10]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=w
- ==> _[5]=v
- ==> _[6]=u
- ==> [11]:
- ==> _[1]=y
- ==> _[2]=v
- ==> _[3]=t
- ==> _[4]=s
- ==> _[5]=b
- ==> _[6]=wx+uz
- ==> [12]:
- ==> _[1]=y
- ==> _[2]=x
- ==> _[3]=v
- ==> _[4]=u
- ==> _[5]=s
- ==> _[6]=b
- ==> [13]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=x
- ==> _[4]=v
- ==> _[5]=s
- ==> _[6]=tu+bw
- ==> [14]:
- ==> _[1]=z
- ==> _[2]=y
- ==> _[3]=w
- ==> _[4]=v
- ==> _[5]=t
- ==> _[6]=s
- ==> [15]:
- ==> _[1]=y
- ==> _[2]=w
- ==> _[3]=v
- ==> _[4]=u
- ==> _[5]=s
- ==> _[6]=tx+bz
-
-
-File: sing.info, Node: solve_lib, Next: triang_lib, Prev: presolve_lib,
Up: Symbolic-numerical solving
-
-D.7.2 solve_lib
----------------
-
-*Library:*
- solve.lib
-
-*Purpose:*
- Complex Solving of Polynomial Systems
-
-*Author:*
- Moritz Wenk, email: address@hidden
- Wilfred Pohl, email: address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* laguerre_solve:: find all roots of univariate polynomial p
-* solve:: all roots of 0-dim. ideal i using triangular sets
-* ures_solve:: find all roots of 0-dimensional ideal i with resultants
-* mp_res_mat:: multipolynomial resultant matrix of ideal i
-* interpolate:: interpolate poly from evaluation points i and results j
-* fglm_solve:: find roots of 0-dim. ideal using FGLM and lex_solve
-* lex_solve:: find roots of reduced lexicographic standard basis
-* simplexOut:: prints solution of simplex in nice format
-* triangLf_solve:: find roots using triangular sys. (factorizing Lazard)
-* triangM_solve:: find roots of given triangular system (Moeller)
-* triangL_solve:: find roots using triangular system (Lazard)
-* triang_solve:: find roots of given triangular system
-
-
-File: sing.info, Node: laguerre_solve, Next: solve, Up: solve_lib
-
-D.7.2.1 laguerre_solve
-......................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- laguerre_solve(f [, m, l, n, s] ); f = polynomial,
- m, l, n, s = integers (control parameters of the method)
-
- m: precision of output in digits ( 4 <= m), if basering is not ring of
- complex numbers;
- l: precision of internal computation in decimal digits ( l >=8 )
- only if the basering is not complex or complex with smaller
precision;
- n: control of multiplicity of roots or of splitting of f into
- squarefree factors
- n < 0, no split of f (good, if all roots are simple)
- n >= 0, try to split
- n = 0, return only different roots
- n > 0, find all roots (with multiplicity)
- s: s != 0, returns ERROR if | f(root) | > 0.1^m (when computing in the
- current ring)
- ( default: m, l, n, s = 8, 30, 1, 0 )
-
-*Assume:*
- f is a univariate polynomial;
- basering has characteristic 0 and is either complex or without
- parameters.
-
-*Return:*
- list of (complex) roots of the polynomial f, depending on n. The
- result is of type
-
- string: if the basering is not complex,
- number: otherwise.
-
-*Note:*
- If printlevel >0: displays comments ( default = 0 ).
- If s != 0 and if the procedure stops with ERROR, try a higher
- internal precision m.
-
-*Example:*
- LIB "solve.lib";
- // Find all roots of an univariate polynomial using Laguerre's method:
- ring rs1= 0,(x,y),lp;
- poly f = 15x5 + x3 + x2 - 10;
- // 10 digits precision
- laguerre_solve(f,10);
- ==> [1]:
- ==> (0.2930464644-i*0.9003002396)
- ==> [2]:
- ==> (0.2930464644+i*0.9003002396)
- ==> [3]:
- ==> (-0.7392783383-i*0.5355190078)
- ==> [4]:
- ==> (-0.7392783383+i*0.5355190078)
- ==> [5]:
- ==> 0.8924637479
- // Now with complex coefficients,
- // internal precision is 30 digits (default)
- printlevel=2;
- ring rsc= (real,10,i),x,lp;
- poly f = (15.4+i*5)*x^5 + (25.0e-2+i*2)*x^3 + x2 - 10*i;
- list l = laguerre_solve(f);
- ==> //BEGIN laguerre_solve
- ==> //control: complex ring with precision 30
- ==> //working in: ring lagc=(complex,30,30),x,lp;
- ==> // polynomial has complex coefficients
- ==> //split in working ring:
- ==> // split without result
- ==> //END laguerre_solve
- l;
- ==> [1]:
- ==> (0.04588498039+i*0.9133296179)
- ==> [2]:
- ==> (0.5037408279-i*0.8058051828)
- ==> [3]:
- ==> (-0.5462895588-i*0.6796668873)
- ==> [4]:
- ==> (0.8524014357+i*0.2163760334)
- ==> [5]:
- ==> (-0.8557376852+i*0.3557664188)
- // check result, value of substituted poly should be near to zero
- // remember that l contains a list of strings
- // in the case of a different ring
- subst(f,x,l[1]);
- ==> 0
- subst(f,x,l[2]);
- ==> 0
-
-
-File: sing.info, Node: solve, Next: ures_solve, Prev: laguerre_solve, Up:
solve_lib
-
-D.7.2.2 solve
-.............
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Assume:*
- the ideal is 0-dimensional;
- basering has characteristic 0 and is either complex or without
- parameters;
-
-*Return:*
- list of solutions of the ideal G, depending on n; one solution is a
- list of complex numbers in the generated output ring (the new
- basering).
-
- The result is a list L
- n = 0: a list of all different solutions (L[i]),
- n != 0: a list of two elements,
- L[i][1] contains all different solutions with the same
multiplicity
- L[i][2] the multiplicity
- L is ordered w.r.t. multiplicity (the smallest first).
-
-*Note:*
- If the problem is not 0-dim. the procedure stops with ERROR, if the
- ideal G is not a lex. standard basis, it is generated with internal
- computation (Hilbert driven), if the input-ring (with char 0) has
- the name "<A>", the lexicographical and complex output-ring has the
- name "<A>C".
-
-*Example:*
- LIB "solve.lib";
- // Find all roots of a multivariate ideal using triangular sets:
- int d=4;// with these 3 parameters you may construct
- int t=3;// very hard problems for 'solve'
- int s=2;
- int i;
- ring A=0,(x(1..d)),dp;
- poly p=-1;
- for(i=d;i>0;i--){p=p+x(i)^s;}
- ideal I=x(d)^t-x(d)^s+p;
- for(i=d-1;i>0;i--){I=x(i)^t-x(i)^s+p,I;}
- I;
- ==> I[1]=x(1)^3+x(2)^2+x(3)^2+x(4)^2-1
- ==> I[2]=x(2)^3+x(1)^2+x(3)^2+x(4)^2-1
- ==> I[3]=x(3)^3+x(1)^2+x(2)^2+x(4)^2-1
- ==> I[4]=x(4)^3+x(1)^2+x(2)^2+x(3)^2-1
- // the mutiplicity is
- vdim(std(I));
- ==> 81
- list l1=solve(I,6,0);
- ==> // name of new current ring: AC
- // the current ring is
- AC;
- ==> // characteristic : 0 (complex:6 digits, additional 6 digits)
- ==> // 1 parameter : i
- ==> // minpoly : (i^2+1)
- ==> // number of vars : 4
- ==> // block 1 : ordering lp
- ==> // : names x(1) x(2) x(3) x(4)
- ==> // block 2 : ordering C
- // you must start with char. 0
- setring A;
- list l2=solve(I,6,1);
- ==> // name of current ring: AC
- // the number of different solutions is
- size(l1);
- ==> 37
- // this is equal to
- size(l2[1][1])+size(l2[2][1]);
- ==> 37
- // the number of solutions with multiplicity is
- size(l2[1][1])*l2[1][2]+size(l2[2][1])*l2[2][2];
- ==> 81
- // the solutions with multiplicity
- l2[2][2];
- ==> 12
- // are
- l2[2][1];
- ==> [1]:
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> 0
- ==> [3]:
- ==> 1
- ==> [4]:
- ==> 0
- ==> [2]:
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> 1
- ==> [3]:
- ==> 0
- ==> [4]:
- ==> 0
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> 0
- ==> [3]:
- ==> 0
- ==> [4]:
- ==> 0
- ==> [4]:
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> 0
- ==> [3]:
- ==> 0
- ==> [4]:
- ==> 1
-
-
-File: sing.info, Node: ures_solve, Next: mp_res_mat, Prev: solve, Up:
solve_lib
-
-D.7.2.3 ures_solve
-..................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- ures_solve(i [, k, p] ); i = ideal, k, p = integers
-
- k=0: use sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
- k=1: use resultant matrix of Macaulay which works only for
- homogeneous ideals,
- p>0: defines precision of the long floats for internal computation
- if the basering is not complex (in decimal digits),
- (default: k=0, p=30)
-
-*Assume:*
- i is a zerodimensional ideal with
- nvars(basering) = ncols(i) = number of vars
- actually occurring in i,
-
-*Return:*
- list of all (complex) roots of the polynomial system i = 0; the
- result is of type
-
- string: if the basering is not complex,
- number: otherwise.
-
-*Example:*
- LIB "solve.lib";
- // compute the intersection points of two curves
- ring rsq = 0,(x,y),lp;
- ideal gls= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- ures_solve(gls,0,16);
- ==> [1]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [2]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
- ==> [3]:
- ==> [1]:
- ==> 2.82842712474619
- ==> [2]:
- ==> 1.414213562373095
- ==> [4]:
- ==> [1]:
- ==> -2.82842712474619
- ==> [2]:
- ==> -1.414213562373095
- // result is a list (x,y)-coordinates as strings
- // now with complex coefficient field, precision is 20 digits
- ring rsc= (real,20,I),(x,y),lp;
- ideal i = (2+3*I)*x2 + (0.35+I*45.0e-2)*y2 - 8, x2 + xy + (42.7)*y2;
- list l= ures_solve(i,0,10);
- // result is a list of (x,y)-coordinates of complex numbers
- l;
- ==> [1]:
- ==> [1]:
- ==> (-1.315392899374542198+I*0.70468233142752928117)
- ==> [2]:
- ==> (0.12292646536251281054+I*0.19245727404407015049)
- ==> [2]:
- ==> [1]:
- ==> (1.315392899374542198-I*0.70468233142752928117)
- ==> [2]:
- ==> (-0.12292646536251281054-I*0.19245727404407015049)
- ==> [3]:
- ==> [1]:
- ==> (1.31584587549391830705-I*0.70396753310002259573)
- ==> [2]:
- ==> (0.092006639590217681983+I*0.20902112035965287775)
- ==> [4]:
- ==> [1]:
- ==> (-1.31584587549391830705+I*0.70396753310002259573)
- ==> [2]:
- ==> (-0.092006639590217681983-I*0.20902112035965287775)
- // check the result
- subst(subst(i[1],x,l[1][1]),y,l[1][2]);
- ==> 0
-
-
-File: sing.info, Node: mp_res_mat, Next: interpolate, Prev: ures_solve,
Up: solve_lib
-
-D.7.2.4 mp_res_mat
-..................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- mp_res_mat(i [, k] ); i ideal, k integer,
-
- k=0: sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
- k=1: resultant matrix of Macaulay (k=0 is default)
-
-*Assume:*
- The number of elements in the input system must be the number of
- variables in the basering plus one;
- if k=1 then i must be homogeneous.
-
-*Return:*
- module representing the multipolynomial resultant matrix
-
-*Example:*
- LIB "solve.lib";
- // compute resultant matrix in ring with parameters (sparse resultant
matrix)
- ring rsq= (0,u0,u1,u2),(x1,x2),lp;
- ideal i= u0+u1*x1+u2*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
- module m = mp_res_mat(i);
- print(m);
- ==> -16,0, -10,0, (u0),0, 0, 0, 0, 0,
- ==> 0, -16,0, -10,(u2),(u0),0, 0, 0, 0,
- ==> 2, 0, 1, 0, 0, (u2),0, 0, 0, 0,
- ==> 0, 2, 0, 1, 0, 0, 0, 0, 0, 0,
- ==> 0, 0, 0, 0, (u1),0, -10,(u0),0, -16,
- ==> 1, 0, 0, 0, 0, (u1),0, (u2),(u0),0,
- ==> 0, 1, 0, 0, 0, 0, 1, 0, (u2),2,
- ==> 1, 0, 1, 0, 0, 0, 0, (u1),0, 0,
- ==> 0, 1, 0, 1, 0, 0, 0, 0, (u1),1,
- ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
- // computing sparse resultant
- det(m);
- ==>
(-2*u0^4+18*u0^2*u1^2+4*u0^2*u1*u2+22*u0^2*u2^2-16*u1^4+80*u1^3*u2-52*u1^\
- 2*u2^2-120*u1*u2^3-36*u2^4)
- // compute resultant matrix (Macaulay resultant matrix)
- ring rdq= (0,u0,u1,u2),(x0,x1,x2),lp;
- ideal h= homog(imap(rsq,i),x0);
- h;
- ==> h[1]=(u0)*x0+(u1)*x1+(u2)*x2
- ==> h[2]=-10*x0^2+x1^2+x2^2
- ==> h[3]=-16*x0^2+x1^2+x1*x2+2*x2^2
- module m = mp_res_mat(h,1);
- print(m);
- ==> x0, x1, x2, 0, 0, 0, 0,0, 0, 0,
- ==> 0, x0, 0, x1,x2,0, 0,0, 0, 0,
- ==> 0, 0, x0, 0, x1,x2,0,0, 0, 0,
- ==> -10,0, 0, 1, 0, 1, 0,0, 0, 0,
- ==> 0, 0, 0, 0, x0,0, 0,x1,x2,0,
- ==> -16,0, 0, 1, 1, 2, 0,0, 0, 0,
- ==> 0, -10,0, 0, 0, 0, 1,0, 1, 0,
- ==> 0, 0, -10,0, 0, 0, 0,1, 0, 1,
- ==> 0, -16,0, 0, 0, 0, 1,1, 2, 0,
- ==> 0, 0, -16,0, 0, 0, 0,1, 1, 2
- // computing Macaulay resultant (should be the same as above!)
- det(m);
- ==>
2*x0^4-18*x0^2*x1^2-4*x0^2*x1*x2-22*x0^2*x2^2+16*x1^4-80*x1^3*x2+52*x1^2*\
- x2^2+120*x1*x2^3+36*x2^4
- // compute numerical sparse resultant matrix
- setring rsq;
- ideal ir= 15+2*x1+5*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
- module mn = mp_res_mat(ir);
- print(mn);
- ==> 15,0, -10,0, 0, 0, 0, -16,0, 0,
- ==> 5, 15,0, -10,0, 0, 0, 0, -16,0,
- ==> 0, 5, 1, 0, 0, 0, 0, 2, 0, 0,
- ==> 0, 0, 0, 1, 0, 0, 0, 0, 2, 0,
- ==> 2, 0, 0, 0, 15,0, -10,0, 0, -16,
- ==> 0, 2, 0, 0, 5, 15,0, 1, 0, 0,
- ==> 0, 0, 0, 0, 0, 5, 1, 0, 1, 2,
- ==> 0, 0, 1, 0, 2, 0, 0, 1, 0, 0,
- ==> 0, 0, 0, 1, 0, 2, 0, 0, 1, 1,
- ==> 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
- // computing sparse resultant
- det(mn);
- ==> -7056
-
-
-File: sing.info, Node: interpolate, Next: fglm_solve, Prev: mp_res_mat,
Up: solve_lib
-
-D.7.2.5 interpolate
-...................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- interpolate(p,v,d); p,v=ideals of numbers, d=integer
-
-*Assume:*
- Ground field K is the field of rational numbers, p and v are lists
- of elements of the ground field K with p[j] != -1,0,1, size(p) = n
- (= number of vars) and size(v)=N=(d+1)^n.
-
-*Return:*
- poly f, the unique polynomial f of degree n*d with prescribed
- values v[i] at the points p(i)=(p[1]^(i-1),..,p[n]^(i-1)),
- i=1,..,N.
-
-*Note:*
- mainly useful when n=1, i.e. f is satisfying f(p^(i-1)) = v[i],
- i=1..d+1.
-
-*Example:*
- LIB "solve.lib";
- ring r1 = 0,(x),lp;
- // determine f with deg(f) = 4 and
- // v = values of f at points 3^0, 3^1, 3^2, 3^3, 3^4
- ideal v=16,0,11376,1046880,85949136;
- interpolate( 3, v, 4 );
- ==> 2x4-22x2+36
-
-* Menu:
-
-See also:
-* vandermonde::
-
-*See also:* *note vandermonde::.
-
-
-File: sing.info, Node: fglm_solve, Next: lex_solve, Prev: interpolate, Up:
solve_lib
-
-D.7.2.6 fglm_solve
-..................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- fglm_solve(i [, p] ); i ideal, p integer
-
-*Assume:*
- the ground field has char 0.
-
-*Return:*
- a list of numbers, the complex roots of i;
- p>0: gives precision of complex numbers in decimal digits (default:
- p=30).
-
-*Note:*
- The procedure uses a standard basis of i to determine all complex
- roots of i.
- It creates a ring rC with the same number of variables but with
- complex coefficients (and precision p).
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- fglm_solve(s,10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [2]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [4]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
-
-
-File: sing.info, Node: lex_solve, Next: simplexOut, Prev: fglm_solve, Up:
solve_lib
-
-D.7.2.7 lex_solve
-.................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- lex_solve( i[,p] ); i=ideal, p=integer,
-
- p>0: gives precision of complex numbers in decimal digits (default:
p=30).
-
-*Assume:*
- i is a reduced lexicographical Groebner bases of a zero-dimensional
- ideal, sorted by increasing leading terms.
-
-*Return:*
- nothing
-
-*Create:*
- The procedure creates a complec ring with the same variables but
- with complex coefficients (and precision p).
- In this ring a list rlist of numbers is created, in which the
- complex roots of i are stored.
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- lex_solve(stdfglm(s),10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [2]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [4]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
-
-
-File: sing.info, Node: simplexOut, Next: triangLf_solve, Prev: lex_solve,
Up: solve_lib
-
-D.7.2.8 simplexOut
-..................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- simplexOut(l); l list
-
-*Assume:*
- l is the output of simplex.
-
-*Return:*
- nothing. The procedure prints the computed solution of simplex (as
- strings) in a nice format.
-
-*Example:*
- LIB "solve.lib";
- ring r = (real,10),(x),lp;
- // consider the max. problem:
- //
- // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4)
- //
- // with constraints: x(1) + 2*x(3) <= 740
- // 2*x(2) - 7*x(4) <= 0
- // x(2) - x(3) + 2*x(4) >= 0.5
- // x(1) + x(2) + x(3) + x(4) = 9
- //
- matrix sm[5][5]= 0, 1, 1, 3,-0.5,
- 740,-1, 0,-2, 0,
- 0, 0,-2, 0, 7,
- 0.5, 0,-1, 1,-2,
- 9,-1,-1,-1,-1;
- int n = 4; // number of constraints
- int m = 4; // number of variables
- int m1= 2; // number of <= constraints
- int m2= 1; // number of >= constraints
- int m3= 1; // number of == constraints
- list sol=simplex(sm, n, m, m1, m2, m3);
- simplexOut(sol);
- ==> z = 17.025
- ==> x2 = 3.325
- ==> x4 = 0.95
- ==> x3 = 4.725
-
-* Menu:
-
-See also:
-* simplex::
-
-*See also:* *note simplex::.
-
-
-File: sing.info, Node: triangLf_solve, Next: triangM_solve, Prev:
simplexOut, Up: solve_lib
-
-D.7.2.9 triangLf_solve
-......................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- triangLf_solve(i [, p] ); i ideal, p integer,
- p>0: gives precision of complex numbers in digits (default: p=30).
-
-*Assume:*
- the ground field has char 0; i is a zero-dimensional ideal
-
-*Return:*
- nothing
-
-*Create:*
- The procedure creates a ring rC with the same number of variables
- but with complex coefficients (and precision p).
- In rC a list rlist of numbers is created, in which the complex
- roots of i are stored.
- The proc uses a triangular system (Lazard's Algorithm with
- factorization) computed from a standard basis to determine
- recursively all complex roots with Laguerre's algorithm of input
- ideal i.
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- triangLf_solve(s,10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
- ==> [2]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [3]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [4]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
-
-
-File: sing.info, Node: triangM_solve, Next: triangL_solve, Prev:
triangLf_solve, Up: solve_lib
-
-D.7.2.10 triangM_solve
-......................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- triangM_solve(i [, p ] ); i=ideal, p=integer,
- p>0: gives precision of complex numbers in digits (default: p=30).
-
-*Assume:*
- the ground field has char 0;
- i zero-dimensional ideal
-
-*Return:*
- nothing
-
-*Create:*
- The procedure creates a ring rC with the same number of variables
- but with complex coefficients (and precision p).
- In rC a list rlist of numbers is created, in which the complex
- roots of i are stored.
- The proc uses a triangular system (Moellers Algorithm) computed
- from a standard basis to determine recursively all complex roots
- with Laguerre's algorithm of input ideal i.
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- triangM_solve(s,10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [2]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [4]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
-
-
-File: sing.info, Node: triangL_solve, Next: triang_solve, Prev:
triangM_solve, Up: solve_lib
-
-D.7.2.11 triangL_solve
-......................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- triangL_solve(i [, p] ); i=ideal, p=integer,
- p>0: gives precision of complex numbers in digits (default: p=30).
-
-*Assume:*
- the ground field has char 0; i is a zero-dimensional ideal.
-
-*Return:*
- nothing
-
-*Create:*
- The procedure creates a ring rC with the same number of variables
- but with complex coefficients (and precision p).
- In rC a list rlist of numbers is created, in which the complex
- roots of i are stored.
- The proc uses a triangular system (Lazard's Algorithm) computed
- from a standard basis to determine recursively all complex roots
- with Laguerre's algorithm of input ideal i.
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- triangL_solve(s,10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [2]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
- ==> [3]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [4]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
-
-
-File: sing.info, Node: triang_solve, Prev: triangL_solve, Up: solve_lib
-
-D.7.2.12 triang_solve
-.....................
-
-Procedure from library `solve.lib' (*note solve_lib::).
-
-*Usage:*
- triang_solve(l,p [, d] ); l=list, p,d=integers,
- l a list of finitely many triangular systems, such that the union
- of their varieties equals the variety of the initial ideal.
- p>0: gives precision of complex numbers in digits,
- d>0: gives precision (1<d<p) for near-zero-determination,
- (default: d=1/2*p).
-
-*Assume:*
- the ground field has char 0;
- l was computed using Algorithm of Lazard or Algorithm of Moeller
- (see triang.lib).
-
-*Return:*
- nothing
-
-*Create:*
- The procedure creates a ring rC with the same number of variables
- but with complex coefficients (and precision p).
- In rC a list rlist of numbers is created, in which the complex
- roots of i are stored.
-
-*Example:*
- LIB "solve.lib";
- ring r = 0,(x,y),lp;
- // compute the intersection points of two curves
- ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16;
- triang_solve(triangLfak(stdfglm(s)),10);
- ==> // name of new ring: rC
- ==> // list of roots: rlist
- rlist;
- ==> [1]:
- ==> [1]:
- ==> -1
- ==> [2]:
- ==> 3
- ==> [2]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> -3
- ==> [3]:
- ==> [1]:
- ==> 2.8284271247
- ==> [2]:
- ==> 1.4142135624
- ==> [4]:
- ==> [1]:
- ==> -2.8284271247
- ==> [2]:
- ==> -1.4142135624
-
-
-File: sing.info, Node: triang_lib, Next: ntsolve_lib, Prev: solve_lib, Up:
Symbolic-numerical solving
-
-D.7.3 triang_lib
-----------------
-
-*Library:*
- triang.lib
-
-*Purpose:*
- Decompose Zero-dimensional Ideals into Triangular Sets
-
-*Author:*
- D. Hillebrand
-
-*Procedures:*
-
-* Menu:
-
-* triangL:: Decomposition of (G) into triangular systems (Lazard).
-* triangLfak:: Decomp. of (G) into tri. systems plus factorization.
-* triangM:: Decomposition of (G) into triangular systems (Moeller).
-* triangMH:: Decomp. of (G) into tri. syst. with disjoint varieties.
-
-
-File: sing.info, Node: triangL, Next: triangLfak, Up: triang_lib
-
-D.7.3.1 triangL
-...............
-
-Procedure from library `triang.lib' (*note triang_lib::).
-
-*Usage:*
- triangL(G); G=ideal
-
-*Assume:*
- G is the reduced lexicographical Groebner bases of the
- zero-dimensional ideal (G), sorted by increasing leading terms.
-
-*Return:*
- a list of finitely many triangular systems, such that the union of
- their varieties equals the variety of (G).
-
-*Note:*
- Algorithm of Lazard (see: Lazard, D.: Solving zero-dimensional
- algebraic systems, J. Symb. Comp. 13, 117 - 132, 1992).
-
-*Example:*
- LIB "triang.lib";
- ring rC5 = 0,(e,d,c,b,a),lp;
- triangL(stdfglm(cyclic(5)));
-
-
-File: sing.info, Node: triangLfak, Next: triangM, Prev: triangL, Up:
triang_lib
-
-D.7.3.2 triangLfak
-..................
-
-Procedure from library `triang.lib' (*note triang_lib::).
-
-*Usage:*
- triangLfak(G); G=ideal
-
-*Assume:*
- G is the reduced lexicographical Groebner bases of the
- zero-dimensional ideal (G), sorted by increasing leading terms.
-
-*Return:*
- a list of finitely many triangular systems, such that the union of
- their varieties equals the variety of (G).
-
-*Note:*
- Algorithm of Lazard with factorization (see: Lazard, D.: Solving
- zero-dimensional algebraic systems, J. Symb. Comp. 13, 117 - 132,
- 1992).
-
-*Remark:*
- each polynomial of the triangular systems is factorized.
-
-*Example:*
- LIB "triang.lib";
- ring rC5 = 0,(e,d,c,b,a),lp;
- triangLfak(stdfglm(cyclic(5)));
-
-
-File: sing.info, Node: triangM, Next: triangMH, Prev: triangLfak, Up:
triang_lib
-
-D.7.3.3 triangM
-...............
-
-Procedure from library `triang.lib' (*note triang_lib::).
-
-*Usage:*
- triangM(G[,i]); G=ideal, i=integer,
-
-*Assume:*
- G is the reduced lexicographical Groebner bases of the
- zero-dimensional ideal (G), sorted by increasing leading terms.
-
-*Return:*
- a list of finitely many triangular systems, such that the union of
- their varieties equals the variety of (G). If i = 2, then each
- polynomial of the triangular systems is factorized.
-
-*Note:*
- Algorithm of Moeller (see: Moeller, H.M.:
- On decomposing systems of polynomial equations with
- finitely many solutions, Appl. Algebra Eng. Commun. Comput. 4, 217
- - 230, 1993).
-
-*Example:*
- LIB "triang.lib";
- ring rC5 = 0,(e,d,c,b,a),lp;
- triangM(stdfglm(cyclic(5))); //oder: triangM(stdfglm(cyclic(5)),2);
-
-
-File: sing.info, Node: triangMH, Prev: triangM, Up: triang_lib
-
-D.7.3.4 triangMH
-................
-
-Procedure from library `triang.lib' (*note triang_lib::).
-
-*Usage:*
- triangMH(G[,i]); G=ideal, i=integer
-
-*Assume:*
- G is the reduced lexicographical Groebner bases of the
- zero-dimensional ideal (G), sorted by increasing leading terms.
-
-*Return:*
- a list of finitely many triangular systems, such that the disjoint
- union of their varieties equals the variety of (G). If i = 2, then
- each polynomial of the triangular systems is factorized.
-
-*Note:*
- Algorithm of Moeller and Hillebrand (see: Moeller, H.M.: On
- decomposing systems of polynomial equations with finitely many
- solutions, Appl. Algebra Eng. Commun. Comput. 4, 217 - 230, 1993
- and Hillebrand, D.: Triangulierung nulldimensionaler Ideale -
- Implementierung und Vergleich zweier Algorithmen, master thesis,
- Universitaet Dortmund, Fachbereich Mathematik, Prof. Dr. H.M.
- Moeller, 1999).
-
-*Example:*
- LIB "triang.lib";
- ring rC5 = 0,(e,d,c,b,a),lp;
- triangMH(stdfglm(cyclic(5)));
-
-
-File: sing.info, Node: ntsolve_lib, Next: zeroset_lib, Prev: triang_lib,
Up: Symbolic-numerical solving
-
-D.7.4 ntsolve_lib
------------------
-
-*Library:*
- ntsolve.lib
-
-*Purpose:*
- Real Newton Solving of Polynomial Systems
-
-*Authors:*
- Wilfred Pohl, email: address@hidden
- Dietmar Hillebrand
-
-*Procedures:*
-
-* Menu:
-
-* nt_solve:: find one real root of 0-dimensional ideal G
-* triMNewton:: find one real root for 0-dim triangular system G
-
-
-File: sing.info, Node: nt_solve, Next: triMNewton, Up: ntsolve_lib
-
-D.7.4.1 nt_solve
-................
-
-Procedure from library `ntsolve.lib' (*note ntsolve_lib::).
-
-*Usage:*
- nt_solve(gls,ini[,ipar]); gls,ini= ideals, ipar=list/intvec,
- gls: contains the equations, for which a solution will be computed
- ini: ideal of initial values (approximate solutions to start with),
- ipar: control integers (default: ipar = 100,10)
-
- ipar[1]: max. number of iterations
- ipar[2]: accuracy (we have the l_2-norm ||.||): accept solution `sol'
- if ||gls(sol)|| < eps0*(0.1^ipar[2])
- where eps0 = ||gls(ini)|| is the initial error
-
-*Assume:*
- gls is a zerodimensional ideal with nvars(basering) = size(gls)
- (>1)
-
-*Return:*
- ideal, coordinates of one solution (if found), 0 else
-
-*Note:*
- if printlevel >0: displays comments (default =0)
-
-*Example:*
- LIB "ntsolve.lib";
- ring rsq = (real,40),(x,y,z,w),lp;
- ideal gls = x2+y2+z2-10, y2+z3+w-8, xy+yz+xz+w5 - 1,w3+y;
- ideal ini = 3.1,2.9,1.1,0.5;
- intvec ipar = 200,0;
- ideal sol = nt_solve(gls,ini,ipar);
- sol;
- ==> sol[1]=0.8698104581550055082008024750939710335537
- ==> sol[2]=2.8215774457503246008496262517717182369409
- ==> sol[3]=1.1323120084664179900060940157112668717318
- ==> sol[4]=-1.413071026406678849397999475590194239628
-
-
-File: sing.info, Node: triMNewton, Prev: nt_solve, Up: ntsolve_lib
-
-D.7.4.2 triMNewton
-..................
-
-Procedure from library `ntsolve.lib' (*note ntsolve_lib::).
-
-*Usage:*
- triMNewton(G,a[,ipar]); G,a= ideals, ipar=list/intvec
-
-*Assume:*
- G: g1,..,gn, a triangular system of n equations in n vars, i.e.
-gi=gi(var(n-i+1),..,var(n)),
- a: ideal of numbers, coordinates of an approximation of a common
- zero of G to start with (with a[i] to be substituted in var(i)),
- ipar: control integer vector (default: ipar = 100,10)
-
- ipar[1]: max. number of iterations
- ipar[2]: accuracy (we have as norm |.| absolute value ):
- accept solution `sol' if |G(sol)| < |G(a)|*(0.1^ipar[2]).
-
-*Return:*
- an ideal, coordinates of a better approximation of a zero of G
-
-*Example:*
- LIB "ntsolve.lib";
- ring r = (real,30),(z,y,x),(lp);
- ideal i = x^2-1,y^2+x4-3,z2-y4+x-1;
- ideal a = 2,3,4;
- intvec e = 20,10;
- ideal l = triMNewton(i,a,e);
- l;
- ==> l[1]=-2.000000000042265738880279143423
- ==> l[2]=1.41421356237309504880168872421
- ==> l[3]=1
-
-
-File: sing.info, Node: zeroset_lib, Prev: ntsolve_lib, Up:
Symbolic-numerical solving
-
-D.7.5 zeroset_lib
------------------
-
-*Library:*
- zeroset.lib
-
-*Purpose:*
- Procedures For Roots and Factorization
-
-*Author:*
- Thomas Bayer, email: address@hidden
- http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current
- Adress: Institut fuer Informatik, TU Muenchen
-
-*Overview:*
- Algorithms for finding the zero-set of a zero-dim. ideal in
- Q(a)[x_1,..,x_n], Roots and Factorization of univariate polynomials
- over Q(a)[t] where a is an algebraic number. Written in the frame
- of the diploma thesis (advisor: Prof. Gert-Martin Greuel)
- 'Computations of moduli spaces of semiquasihomogeneous
- singularities and an implementation in Singular'. This library is
- meant as a preliminary extension of the functionality of Singular
- for univariate factorization of polynomials over simple algebraic
- extensions in characteristic 0.
- Subprocedures with postfix 'Main' require that the ring contains a
- variable 'a' and no parameters, and the ideal 'mpoly', where
- 'minpoly' from the basering is stored.
-
-*Procedures:*
-
-* Menu:
-
-* EGCD:: gcd over an algebraic extension field of Q
-* Factor:: factorization of f over an algebraic extension field
-* Quotient:: quotient q of f w.r.t. g (in f = q*g + remainder)
-* Remainder:: remainder of the division of f by g
-* Roots:: computes all roots of f in an extension field of Q
-* SQFRNorm:: norm of f (f must be squarefree)
-* ZeroSet:: zero-set of the 0-dim. ideal I
-
-*Auxiliary procedures:*
-
-* Menu:
-
-* EGCDMain:: gcd over an algebraic extension field of Q
-* FactorMain:: factorization of f over an algebraic extension field
-* InvertNumberMain:: inverts an element of an algebraic extension field
-* QuotientMain:: quotient of f w.r.t. g
-* RemainderMain:: remainder of the division of f by g
-* RootsMain:: computes all roots of f, might extend the ground field
-* SQFRNormMain:: norm of f (f must be squarefree)
-* ContainedQ:: f in data ?
-* SameQ:: a == b (list a,b)
-
-
-File: sing.info, Node: EGCD, Next: Factor, Up: zeroset_lib
-
-D.7.5.1 EGCD
-............
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- EGCD(f, g); where f,g are polynomials
-
-*Purpose:*
- compute the polynomial gcd of f and g over Q(a)[x]
-
-*Return:*
- polynomial h s.t. h is a greatest common divisor of f and g (not
- nec. monic)
-
-*Assume:*
- basering = Q(a)[t]
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x4 - 1;
- poly g = x2 - 2*a*x - 1;
- EGCD(f, g);
- ==> (-4a)*x-4
-
-
-File: sing.info, Node: Factor, Next: Quotient, Prev: EGCD, Up: zeroset_lib
-
-D.7.5.2 Factor
-..............
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- Factor(f); where f is a polynomial
-
-*Purpose:*
- compute the factorization of the squarefree poly f over Q(a)[t]
-
-*Return:*
- list with two entries
-
- _[1] = factors (monic), first entry is the leading coefficient
- _[2] = multiplicities (not yet implemented)
-
-*Assume:*
- basering must be the univariate polynomial ring over a field, which
- is Q or a simple extension of Q given by a minpoly.
-
-*Note:*
- if basering = Q[t] then this is the built-in `factorize'
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x4 - 1;
- list fl = Factor(f);
- fl;
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=(40a+60)*x+(40a+60)
- ==> _[3]=(1/65a-29/130)*x+(-1/65a+29/130)
- ==> _[4]=(4a)*x+4
- ==> _[5]=(7/520a+1/130)*x+(1/130a-7/520)
- ==> [2]:
- ==> _[1]=1
- ==> _[2]=1
- ==> _[3]=1
- ==> _[4]=1
- ==> _[5]=1
- fl[1][1]*fl[1][2]*fl[1][3]*fl[1][4]*fl[1][5] - f;
- ==> 0
-
-
-File: sing.info, Node: Quotient, Next: Remainder, Prev: Factor, Up:
zeroset_lib
-
-D.7.5.3 Quotient
-................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- Quotient(f, g); where f,g are polynomials;
-
-*Purpose:*
- compute the quotient q and remainder r s.t. f = g*q + r, deg(r) <
- deg(g)
-
-*Return:*
- list of polynomials
-
- _[1] = quotient q
- _[2] = remainder r
-
-*Assume:*
- basering = Q[x] or Q(a)[x]
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x4 - 2;
- poly g = x - a;
- list qr = Quotient(f, g);
- qr;
- ==> [1]:
- ==> x3+(a)*x2-x+(-a)
- ==> [2]:
- ==> 0
- qr[1]*g + qr[2] - f;
- ==> 1
-
-
-File: sing.info, Node: Remainder, Next: Roots, Prev: Quotient, Up:
zeroset_lib
-
-D.7.5.4 Remainder
-.................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- Remainder(f, g); where f,g are polynomials
-
-*Purpose:*
- compute the remainder of the division of f by g, i.e. a polynomial
- r s.t. f = g*q + r, deg(r) < deg(g).
-
-*Return:*
- poly
-
-*Assume:*
- basering = Q[x] or Q(a)[x]
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x4 - 1;
- poly g = x3 - 1;
- Remainder(f, g);
- ==> x-1
-
-
-File: sing.info, Node: Roots, Next: SQFRNorm, Prev: Remainder, Up:
zeroset_lib
-
-D.7.5.5 Roots
-.............
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- Roots(f); where f is a polynomial
-
-*Purpose:*
- compute all roots of f in a finite extension of the ground field
- without multiplicities.
-
-*Return:*
- ring, a polynomial ring over an extension field of the ground
- field, containing a list 'roots' and polynomials 'newA' and 'f':
-
- - 'roots' is the list of roots of the polynomial f (no multiplicities)
- - if the ground field is Q(a') and the extension field is Q(a), then
- 'newA' is the representation of a' in Q(a).
- If the basering contains a parameter 'a' and the minpoly remains
unchanged
- then 'newA' = 'a'.
- If the basering does not contain a parameter then 'newA' = 'a'
(default).
- - 'f' is the polynomial f in Q(a) (a' being substituted by 'newA')
-
-*Assume:*
- ground field to be Q or a simple extension of Q given by a minpoly
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x3 - a;
- def R1 = Roots(f);
- ==>
- ==> // 'Roots' created a new ring which contains the list 'roots' and
- ==> // the polynomials 'f' and 'newA'
- ==> // To access the roots, newA and the new representation of f, type
- ==> def R = Roots(f); setring R; roots; newA; f;
- ==>
- setring R1;
- minpoly;
- ==> (a4-a2+1)
- newA;
- ==> (a3)
- f;
- ==> x3+(-a3)
- roots;
- ==> [1]:
- ==> (-a3)
- ==> [2]:
- ==> (a3-a)
- ==> [3]:
- ==> (a)
- map F;
- F[1] = roots[1];
- F(f);
- ==> 0
-
-
-File: sing.info, Node: SQFRNorm, Next: ZeroSet, Prev: Roots, Up:
zeroset_lib
-
-D.7.5.6 SQFRNorm
-................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- SQFRNorm(f); where f is a polynomial
-
-*Purpose:*
- compute the norm of the squarefree polynomial f in Q(a)[x].
-
-*Return:*
- list with 3 entries
-
- _[1] = squarefree norm of g (poly)
- _[2] = g (= f(x - s*a)) (poly)
- _[3] = s (int)
-
-*Assume:*
- f must be squarefree, basering = Q(a)[x] and minpoly != 0.
-
-*Note:*
- the norm is an element of Q[x]
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), x, lp;
- minpoly = a2+1;
- poly f = x4 - 2*x + 1;
- SQFRNorm(f);
- ==> [1]:
- ==> x8+4*x6-4*x5+8*x4+8*x3-4*x2+8*x+8
- ==> [2]:
- ==> x4+(-4a)*x3-6*x2+(4a-2)*x+(2a+2)
- ==> [3]:
- ==> 1
-
-
-File: sing.info, Node: ZeroSet, Next: EGCDMain, Prev: SQFRNorm, Up:
zeroset_lib
-
-D.7.5.7 ZeroSet
-...............
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- ZeroSet(I [,opt] ); I=ideal, opt=integer
-
-*Purpose:*
- compute the zero-set of the zero-dim. ideal I, in a finite
- extension of the ground field.
-
-*Return:*
- ring, a polynomial ring over an extension field of the ground
- field, containing a list 'zeroset', a polynomial 'newA', and an
- ideal 'id':
-
- - 'zeroset' is the list of the zeros of the ideal I, each zero is an
ideal.
- - if the ground field is Q(a') and the extension field is Q(a), then
- 'newA' is the representation of a' in Q(a).
- If the basering contains a parameter 'a' and the minpoly remains
unchanged
- then 'newA' = 'a'.
- If the basering does not contain a parameter then 'newA' = 'a'
(default).
- - 'id' is the ideal I in Q(a)[x_1,...] (a' substituted by 'newA')
-
-*Assume:*
- dim(I) = 0, and ground field to be Q or a simple extension of Q
- given by a minpoly.
-
-*Options:*
- opt = 0 no primary decomposition (default)
- opt > 0 primary decomposition
-
-*Note:*
- If I contains an algebraic number (parameter) then 'I' must be
- transformed w.r.t. 'newA' in the new ring.
-
-*Example:*
- LIB "zeroset.lib";
- ring R = (0,a), (x,y,z), lp;
- minpoly = a2 + 1;
- ideal I = x2 - 1/2, a*z - 1, y - 2;
- def T = ZeroSet(I);
- ==> 1
- setring T;
- minpoly;
- ==> (4a4+4a2+9)
- newA;
- ==> (1/3a3+5/6a)
- id;
- ==> id[1]=(1/3a3+5/6a)*z-1
- ==> id[2]=y-2
- ==> id[3]=2*x2-1
- zeroset;
- ==> [1]:
- ==> _[1]=(1/3a3-1/6a)
- ==> _[2]=2
- ==> _[3]=(-1/3a3-5/6a)
- ==> [2]:
- ==> _[1]=(-1/3a3+1/6a)
- ==> _[2]=2
- ==> _[3]=(-1/3a3-5/6a)
- map F1 = basering, zeroset[1];
- map F2 = basering, zeroset[2];
- F1(id);
- ==> _[1]=0
- ==> _[2]=0
- ==> _[3]=0
- F2(id);
- ==> _[1]=0
- ==> _[2]=0
- ==> _[3]=0
-
-
-File: sing.info, Node: EGCDMain, Next: FactorMain, Prev: ZeroSet, Up:
zeroset_lib
-
-D.7.5.8 EGCDMain
-................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Purpose:*
- compute the polynomial gcd of f and g over Q(a)[x]
-
-*Return:*
- poly
-
-*Assume:*
- basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
- represents the ring Q(a)[x] together with its minimal polynomial.
-
-
-File: sing.info, Node: FactorMain, Next: InvertNumberMain, Prev: EGCDMain,
Up: zeroset_lib
-
-D.7.5.9 FactorMain
-..................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Purpose:*
- compute the factorization of the squarefree poly f over Q(a)[t],
- minpoly = p(a).
-
-*Return:*
- list with 2 entries
-
- _[1] = factors, first is a constant
- _[2] = multiplicities (not yet implemented)
-
-*Assume:*
- basering = Q[x,a], representing Q(a)[x]. An ideal mpoly must be
- defined, representing the minimal polynomial (it might be 0!).
-
-
-File: sing.info, Node: InvertNumberMain, Next: QuotientMain, Prev:
FactorMain, Up: zeroset_lib
-
-D.7.5.10 InvertNumberMain
-.........................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- InvertNumberMain(f); where f is a polynomial
-
-*Purpose:*
- compute 1/f if f is a number in Q(a) i.e., f is represented by a
- polynomial in Q[a].
-
-*Return:*
- poly 1/f
-
-*Assume:*
- basering = Q[x_1,...,x_n,a], ideal mpoly must be defined and != 0 !
-
-
-File: sing.info, Node: QuotientMain, Next: RemainderMain, Prev:
InvertNumberMain, Up: zeroset_lib
-
-D.7.5.11 QuotientMain
-.....................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- QuotientMain(f, g); where f,g are polynomials
-
-*Purpose:*
- compute the quotient q and remainder r s.t. f = g*q + r, deg(r) <
- deg(g)
-
-*Return:*
- list of polynomials
-
- _[1] = quotient q
- _[2] = remainder r
-
-*Assume:*
- basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
- represents the ring Q(a)[x] together with its minimal polynomial.
-
-
-File: sing.info, Node: RemainderMain, Next: RootsMain, Prev: QuotientMain,
Up: zeroset_lib
-
-D.7.5.12 RemainderMain
-......................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- RemainderMain(f, g); where f,g are polynomials
-
-*Purpose:*
- compute the remainder r s.t. f = g*q + r, deg(r) < deg(g)
-
-*Return:*
- poly
-
-*Assume:*
- basering = Q[x,a] and ideal mpoly is defined (it might be 0), this
- represents the ring Q(a)[x] together with its minimal polynomial.
-
-
-File: sing.info, Node: RootsMain, Next: SQFRNormMain, Prev: RemainderMain,
Up: zeroset_lib
-
-D.7.5.13 RootsMain
-..................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- RootsMain(f); where f is a polynomial
-
-*Purpose:*
- compute all roots of f in a finite extension of the ground field
- without multiplicities.
-
-*Return:*
- list, all entries are polynomials
-
- _[1] = roots of f, each entry is a polynomial
- _[2] = 'newA' - if the ground field is Q(a') and the extension field
- is Q(a), then 'newA' is the representation of a' in Q(a)
- _[3] = minpoly of the algebraic extension of the ground field
-
-*Assume:*
- basering = Q[x,a] ideal mpoly must be defined, it might be 0!
-
-*Note:*
- might change the ideal mpoly !!
-
-
-File: sing.info, Node: SQFRNormMain, Next: ContainedQ, Prev: RootsMain,
Up: zeroset_lib
-
-D.7.5.14 SQFRNormMain
-.....................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- SQFRNorm(f); where f is a polynomial
-
-*Purpose:*
- compute the norm of the squarefree polynomial f in Q(a)[x].
-
-*Return:*
- list with 3 entries
-
- _[1] = squarefree norm of g (poly)
- _[2] = g (= f(x - s*a)) (poly)
- _[3] = s (int)
-
-*Assume:*
- f must be squarefree, basering = Q[x,a] and ideal mpoly is equal to
- 'minpoly',this represents the ring Q(a)[x] together with 'minpoly'.
-
-*Note:*
- the norm is an element of Q[x]
-
-
-File: sing.info, Node: ContainedQ, Next: SameQ, Prev: SQFRNormMain, Up:
zeroset_lib
-
-D.7.5.15 ContainedQ
-...................
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- ContainedQ(data, f [, opt]); data=list; f=any type, opt=integer
-
-*Purpose:*
- test if f is an element of data.
-
-*Return:*
- int
- 0 if f not contained in data
- 1 if f contained in data
-
-*Options:*
- opt = 0 : use '==' for comparing f with elements from data
- opt = 1 : use `SameQ' for comparing f with elements from data
-
-
-File: sing.info, Node: SameQ, Prev: ContainedQ, Up: zeroset_lib
-
-D.7.5.16 SameQ
-..............
-
-Procedure from library `zeroset.lib' (*note zeroset_lib::).
-
-*Usage:*
- SameQ(a, b); a,b=list/intvec
-
-*Purpose:*
- test a == b elementwise, i.e., a[i] = b[i].
-
-*Return:*
- int
- 0 if a != b
- 1 if a == b
-
-
-File: sing.info, Node: Visualization, Next: Coding theory, Prev:
Symbolic-numerical solving, Up: SINGULAR libraries
-
-D.8 Visualization
-=================
-
-* Menu:
-
-* graphics_lib:: procedures to draw with Mathematica
-* latex_lib:: procedures for typesetting in TeX
-* paramet_lib:: procedures for parametrizations
-* surf_lib:: interface to the surf program
-
-
-File: sing.info, Node: graphics_lib, Next: latex_lib, Prev: Visualization,
Up: Visualization
-
-D.8.1 graphics_lib
-------------------
-
-*Library:*
- graphics.lib
-
-*Purpose:*
- Procedures to use Graphics with Mathematica
-
-*Author:*
- Christian Gorzel, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* staircase:: Mathematica text for displaying staircase of I
-* mathinit:: string for loading Mathematica's ImplicitPlot
-* mplot:: Mathematica text for various plots
-
-
-File: sing.info, Node: staircase, Next: mathinit, Up: graphics_lib
-
-D.8.1.1 staircase
-.................
-
-Procedure from library `graphics.lib' (*note graphics_lib::).
-
-*Usage:*
- staircase(s,I); s a string, I ideal in two variables
-
-*Return:*
- string with Mathematica input for displaying staircase diagrams of
- an ideal I, i.e. exponent vectors of the initial ideal of I
-
-*Note:*
- ideal I should be given by a standard basis. Let s="" and copy and
- paste the result into a Mathematica notebook.
-
-*Example:*
- LIB "graphics.lib";
- ring r0 = 0,(x,y),ls;
- ideal I = -1x2y6-1x4y2, 7x6y5+1/2x7y4+6x4y6;
- staircase("",std(I));
- ring r1 = 0,(x,y),dp;
- ideal I = fetch(r0,I);
- staircase("",std(I));
- ring r2 = 0,(x,y),wp(2,3);
- ideal I = fetch(r0,I);
- staircase("",std(I));
- // Paste the output into a Mathematica notebook
- // active evalutation of the cell with SHIFT RETURN
-
-
-File: sing.info, Node: mathinit, Next: mplot, Prev: staircase, Up:
graphics_lib
-
-D.8.1.2 mathinit
-................
-
-Procedure from library `graphics.lib' (*note graphics_lib::).
-
-*Usage:*
- mathinit();
-
-*Return:*
- initializing string for loading Mathematica's ImplicitPlot
-
-*Example:*
- LIB "graphics.lib";
- mathinit();
- // Paste the output into a Mathematica notebook
- // active evalutation of the cell with SHIFT RETURN
-
-
-File: sing.info, Node: mplot, Prev: mathinit, Up: graphics_lib
-
-D.8.1.3 mplot
-.............
-
-Procedure from library `graphics.lib' (*note graphics_lib::).
-
-*Usage:*
- mplot(fname, I [,I1,I2,..,s] ); fname=string; I,I1,I2,..=ideals,
- s=string representing the plot region.
- Use the ideals I1,I2,.. in order to produce multiple plots (they
- need to have the same number of entries as I!).
-
-*Return:*
- string, text with Mathematica commands to display a plot
-
-*Note:*
- The plotregion is defaulted to -1,1 around zero.
- For implicit given curves enter first the string returned by proc
- mathinit into Mathematica in order to load ImplicitPlot. The
- following conventions for I are used:
-
- - ideal with 2 entries in one variable means a parametrised plane curve,
- - ideal with 3 entries in one variable means a parametrised space curve,
- - ideal with 3 entries in two variables means a parametrised surface,
- - ideal with 2 entries in two variables means an implicit curve
- given as I[1]==I[2],
- - ideal with 1 entry (or one polynomial) in two variables means
- an implicit curve given as f == 0,
-
-*Example:*
- LIB "graphics.lib";
- // --------- plane curves ------------
- ring rr0 = 0,x,dp; export rr0;
- ideal I = x3 + x, x2;
- ideal J = x2, -x+x3;
- mplot("",I,J,"-2,2");
- // Paste the output into a Mathematica notebook
- // active evalutation of the cell with SHIFT RETURN
- // --------- space curves --------------
- I = x3,-1/10x3+x2,x2;
- mplot("",I);
- // Paste the output into a Mathematica notebook
- // active evalutation of the cell with SHIFT RETURN
- // ----------- surfaces -------------------
- ring rr1 = 0,(x,y),dp; export rr1;
- ideal J = xy,y,x2;
- mplot("",J,"-2,1","1,2");
- // Paste the output into a Mathematica notebook
- // active evalutation of the cell with SHIFT RETURN
- kill rr0,rr1;
-
-
-File: sing.info, Node: latex_lib, Next: paramet_lib, Prev: graphics_lib,
Up: Visualization
-
-D.8.2 latex_lib
----------------
-
-*Library:*
- latex.lib
-
-*Purpose:*
- Typesetting of Singular-Objects in LaTeX2e
-
-*Author:*
- Christian Gorzel, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* closetex:: writes closing line for LaTeX-document
-* opentex:: writes header for LaTeX-file fnm
-* tex:: calls LaTeX2e for LaTeX-file fnm
-* texdemo:: produces a file explaining the features of this lib
-* texfactorize:: creates string in LaTeX-format for factors of poly f
-* texmap:: creates string in LaTeX-format for map m:r1->r2
-* texname:: creates string in LaTeX-format for identifier
-* texobj:: creates string in LaTeX-format for any (basic) type
-* texpoly:: creates string in LaTeX-format for poly
-* texproc:: creates string in LaTeX-format of text from proc p
-* texring:: creates string in LaTeX-format for ring/qring
-* rmx:: removes .aux and .log files of LaTeX-files
-* xdvi:: calls xdvi for dvi-files
-
-*Global variables:*
- TeXwidth, TeXnofrac, TeXbrack, TeXproj, TeXaligned, TeXreplace,
- NoDollars are used to control the typesetting. Call `texdemo();'
- to obtain a LaTeX2e file `texlibdemo.tex' explaining the features
- of `latex.lib' and its global variables.
-
- `TeXwidth' (int) -1, 0, 1..9, >9: controls breaking of long polynomials
- `TeXnofrac' (int) flag: write 1/2 instead of \frac{1}{2}
- `TeXbrack' (string) "{", "(", "<", "|", empty string:
- controls brackets around ideals and
matrices
- `TeXproj' (int) flag: write ":" instead of "," in vectors
- `TeXaligned' (int) flag: write maps (and ideals) aligned
- `TeXreplace' (list) list entries = 2 strings: replacing symbols
- `NoDollars' (int) flag: suppresses surrounding $ signs
-
-
-File: sing.info, Node: closetex, Next: opentex, Up: latex_lib
-
-D.8.2.1 closetex
-................
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- closetex(fname); fname string
-
-*Return:*
- nothing; writes a LaTeX2e closing line into file `<fname>'.
-
-*Note:*
- preceding ">>" are deleted and suffix ".tex" (if not given) is
- added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- opentex("exmpl");
- texobj("exmpl","{\\large \\bf hello}");
- closetex("exmpl");
-
-
-File: sing.info, Node: opentex, Next: tex, Prev: closetex, Up: latex_lib
-
-D.8.2.2 opentex
-...............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- opentex(fname); fname string
-
-*Return:*
- nothing; writes a LaTeX2e header into a new file `<fname>'.
-
-*Note:*
- preceding ">>" are deleted and suffix ".tex" (if not given) is
- added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- opentex("exmpl");
- texobj("exmpl","hello");
- closetex("exmpl");
-
-
-File: sing.info, Node: tex, Next: texdemo, Prev: opentex, Up: latex_lib
-
-D.8.2.3 tex
-...........
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- tex(fname); fname string
-
-*Return:*
- nothing; calls latex (LaTeX2e) for compiling the file fname
-
-*Note:*
- preceding ">>" are deleted and suffix ".tex" (if not given) is
- added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- ring r;
- ideal I = maxideal(7);
- opentex("exp001"); // open latex2e document
- texobj("exp001","An ideal ",I);
- closetex("exp001");
- tex("exp001");
- ==> calling latex2e for : exp001.tex
- ==>
- ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
- ==> (exp001.tex
- ==> LaTeX2e <1998/12/01> patch level 1
- ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
- man, i
- ==> talian, nohyphenation, loaded.
- ==> (/usr/share/texmf/tex/latex/base/article.cls
- ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
- ==> (/usr/share/texmf/tex/latex/base/size10.clo))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
- ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
- ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
- ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
- ==> No file exp001.aux.
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
- ==> Output written on exp001.dvi (1 page, 2912 bytes).
- ==> Transcript written on exp001.log.
- system("sh","rm exp001.*");
- ==> 0
-
-
-File: sing.info, Node: texdemo, Next: texfactorize, Prev: tex, Up:
latex_lib
-
-D.8.2.4 texdemo
-...............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texdemo();
-
-*Return:*
- nothing; generates a LaTeX2e file called `texlibdemo.tex'
- explaining the features of `latex.lib' and its global variables.
-
-*Note:*
- this proc may take some time.
-
-
-File: sing.info, Node: texfactorize, Next: texmap, Prev: texdemo, Up:
latex_lib
-
-D.8.2.5 texfactorize
-....................
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texfactorize(fname,f); fname string, f poly
-
-*Return:*
- if `fname=""': string, f as a product of its irreducible factors
- otherwise: append this string to the file `<fname>', and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted and suffix ".tex" (if not given) is
- added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- ring r2 = 13,(x,y),dp;
- poly f = (x+1+y)^2*x3y*(2x-2y)*y12;
- texfactorize("",f);
- ==> $-2\cdot x^{3}\cdot y^{13}\cdot (-x+y)\cdot (x+y+1)^{2}$
- ring R49 = (7,a),x,dp;
- minpoly = a2+a+3;
- poly f = (a24x5+x3)*a2x6*(x+1)^2;
- f;
- ==> (a+3)*x13+(2a-1)*x12+(-2a+1)*x10+(-a-3)*x9
- texfactorize("",f);
- ==> $(a+3)\cdot (x-1)\cdot (x+1)^{3}\cdot x^{9}$
-
-
-File: sing.info, Node: texmap, Next: texname, Prev: texfactorize, Up:
latex_lib
-
-D.8.2.6 texmap
-..............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texmap(fname,m,@r1,@r2); fname string, m string/map, @r1,@r2 rings
-
-*Return:*
- if `fname=""': string, the map m from @r1 to @r2 (preceded by its
- name if m = string) in TeX-typesetting;
- otherwise: append this string to the file `<fname>', and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted in `fname', and suffix ".tex" (if not
- given) is added to `fname'. If m is a string then it has to be the
- name of an existing map from @r1 to @r2.
-
-*Example:*
- LIB "latex.lib";
- // -------- prepare for example ---------
- if (defined(TeXaligned)) {int Teali=TeXaligned; kill TeXaligned;}
- if (defined(TeXreplace)) {list Terep=TeXreplace; kill TeXreplace;}
- // -------- the example starts here ---------
- //
- string fname = "tldemo";
- ring @r1=0,(x,y,z),dp;
- if(system("with","Namespaces")) { exportto(Current, @r1); }
- else { export @r1; }
- ==> // ** address@hidden is already global
- ring r2=0,(u,v),dp;
- map @phi =(@r1,u2,uv -v,v2); export @phi;
- ==> // ** address@hidden is already global
- list TeXreplace;
- TeXreplace[1] = list("@phi","\\phi"); // @phi --> \phi
- export TeXreplace;
- ==> // ** `TeXreplace` is already global
- texmap("","@phi",@r1,r2); // standard form
- ==> $$
- ==> \begin{array}{rcc}
- ==> \phi:\Q[x,y,z] & \longrightarrow & \Q[u,v]\\[2mm]
- ==> \left(x,y,z\right) & \longmapsto &
- ==> \left(
- ==> \begin{array}{c}
- ==> u^{2}\\
- ==> uv-v\\
- ==> v^{2}
- ==> \end{array}
- ==> \right)
- ==> \end{array}
- ==> $$
- //
- int TeXaligned; export TeXaligned; // map in one line
- ==> // ** `TeXaligned` is already global
- texmap("",@phi,@r1,r2);
- ==> $\Q[x,y,z]\longrightarrow\Q[u,v], \ \left(x,y,z\right)\longmapsto
\left(u\
- ^{2},uv-v,v^{2}\right)$
- //
- kill @r1,TeXreplace,TeXaligned;
- //
- // --- restore global variables if previously defined ---
- if (defined(Teali)) {int TeXaligned=Teali; export TeXaligned; kill Teali;}
- if (defined(Terep)) {list TeXreplace=Terep; export TeXreplace; kill
Terep;}
-
-
-File: sing.info, Node: texname, Next: texobj, Prev: texmap, Up: latex_lib
-
-D.8.2.7 texname
-...............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texname(fname,s); fname,s strings
-
-*Return:*
- if `fname=""': string, the transformed string s, where the
- following rules apply:
-
- s' + "~" --> "\\tilde{"+ s' +"}"
- "_" + int --> "_{" + int +"}"
- "[" + s' + "]" --> "_{" + s' + "}"
- "A..Z" + int --> "A..Z" + "^{" + int + "}"
- "a..z" + int --> "a..z" + "_{" + int + "}"
- "(" + int + "," + s' + ")" --> "_{"+ int +"}" + "^{" + s'+"}"
-
- Anyhow, strings which begin with a `"{"' are only changed by
- deleting the first and last character (intended to remove the
- surrounding curly brackets).
-
- if `fname!=""': append the transformed string s to the file
- `<fname>', and return nothing.
-
-*Note:*
- preceding ">>" are deleted in `fname', and suffix ".tex" (if not
- given) is added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- ring r = 0,(x,y),lp;
- poly f = 3xy4 + 2xy2 + x5y3 + x + y6;
- texname("","{f(10)}");
- ==> f(10)
- texname("","f(10) =");
- ==> f_{10} =
- texname("","n1");
- ==> n_{1}
- texname("","T1_12");
- ==> T^{1}_{12}
- texname("","g'_11");
- ==> g'_{11}
- texname("","f23");
- ==> f_{23}
- texname("","M[2,3]");
- ==> M_{2,3}
- texname("","A(0,3);");
- ==> A_{0}^{3};
- texname("","E~(3)");
- ==> \tilde{E}_{3}
-
-
-File: sing.info, Node: texobj, Next: texpoly, Prev: texname, Up: latex_lib
-
-D.8.2.8 texobj
-..............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texobj(fname,l); fname string, l list
-
-*Return:*
- if `fname=""': string, the entries of l in LaTeX-typesetting;
- otherwise: append this string to the file `<fname>', and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted in `fname', and suffix ".tex" (if not
- given) is added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- // -------- prepare for example ---------
- if (defined(TeXaligned)) {int Teali=TeXaligned; kill TeXaligned;}
- if (defined(TeXbrack)){string Tebra=TeXbrack; kill TeXbrack;}
- //
- // -------------- typesetting for polynomials ----------
- ring r = 0,(x,y),lp;
- poly f = x5y3 + 3xy4 + 2xy2 + y6;
- f;
- ==> x5y3+3xy4+2xy2+y6
- texobj("",f);
- ==> $$\begin{array}{rl}
- ==> & x^{5}y^{3}+3xy^{4}+2xy^{2}+y^{6}\\
- ==> \end{array}
- ==> $$
- ==>
- // -------------- typesetting for ideals ----------
- ideal G = jacob(f);
- G;
- ==> G[1]=5x4y3+3y4+2y2
- ==> G[2]=3x5y2+12xy3+4xy+6y5
- texobj("",G);
- ==> $$\left(
- ==> \begin{array}{c}
- ==> 5x^{4}y^{3}+3y^{4}+2y^{2}, \\
- ==> 3x^{5}y^{2}+12xy^{3}+4xy+6y^{5}
- ==> \end{array}
- ==> \right)$$
- ==>
- // -------------- variation of typesetting for ideals ----------
- int TeXaligned = 1; export TeXaligned;
- ==> // ** `TeXaligned` is already global
- string TeXbrack = "<"; export TeXbrack;
- ==> // ** `TeXbrack` is already global
- texobj("",G);
- ==>
$\left<5x^{4}y^{3}+3y^{4}+2y^{2},3x^{5}y^{2}+12xy^{3}+4xy+6y^{5}\right>$
- ==>
- kill TeXaligned, TeXbrack;
- // -------------- typesetting for matrices ----------
- matrix J = jacob(G);
- texobj("",J);
- ==> $$\left(
- ==> \begin{array}{*{2}{c}}
- ==> 20x^{3}y^{3} & 15x^{4}y^{2}+12y^{3}+4y \\
- ==> 15x^{4}y^{2}+12y^{3}+4y & 6x^{5}y+36xy^{2}+4x+30y^{4}
- ==> \end{array}
- ==> \right)
- ==> $$
- ==>
- // -------------- typesetting for intmats ----------
- intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7;
- texobj("",m);
- ==> $$\left(
- ==> \begin{array}{*{4}{r}}
- ==> 9 & 2 & 4 & 5\\
- ==> 2 & 5 & -2 & 4\\
- ==> -6 & 10 & -1 & 2
- ==> \end{array}
- ==> \right)
- ==> $$
- ==>
- //
- // --- restore global variables if previously defined ---
- if (defined(Teali)){int TeXaligned=Teali; export TeXaligned; kill Teali;}
- if (defined(Tebra)){string TeXbrack=Tebra; export TeXbrack; kill Tebra;}
-
-
-File: sing.info, Node: texpoly, Next: texproc, Prev: texobj, Up: latex_lib
-
-D.8.2.9 texpoly
-...............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texpoly(fname,p); fname string, p poly
-
-*Return:*
- if `fname=""': string, the poly p in LaTeX-typesetting;
- otherwise: append this string to the file `<fname>', and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted in `fname', and suffix ".tex" (if not
- given) is added to `fname'.
-
-*Example:*
- LIB "latex.lib";
- ring r0=0,(x,y,z),dp;
- poly f = -1x^2 + 2;
- texpoly("",f);
- ==> $-x^{2}+2$
- ring rr= real,(x,y,z),dp;
- texpoly("",2x2y23z);
- ==> $2.000x^{2}y^{23}z$
- ring r7= 7,(x,y,z),dp;
- poly f = 2x2y23z;
- texpoly("",f);
- ==> $2x^{2}y^{23}z$
- ring rab =(0,a,b),(x,y,z),dp;
- poly f = (-2a2 +b3 -2)/a * x2y4z5 + (a2+1)*x + a+1;
- f;
- ==> (-2a2+b3-2)/(a)*x2y4z5+(a2+1)*x+(a+1)
- texpoly("",f);
- ==> $-\frac{2a^{2}-b^{3}+2}{a}x^{2}y^{4}z^{5}+(a^{2}+1)x+(a+1)$
-
-
-File: sing.info, Node: texproc, Next: texring, Prev: texpoly, Up: latex_lib
-
-D.8.2.10 texproc
-................
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texproc(fname,pname); fname,pname strings
-
-*Assume:*
- ``pname`' is a procedure.
-
-*Return:*
- if `fname=""': string, the proc ``pname`' in a verbatim environment
- in LaTeX-typesetting;
- otherwise: append this string to the file `<fname>', and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted in `fname', and suffix ".tex" (if not
- given) is added to `fname'.
- `texproc' cannot be applied to itself correctly.
-
-*Example:*
- LIB "latex.lib";
- proc exp(int i,int j,list #)
- { string s;
- if (size(#))
- {
- for(i;i<=j;i++)
- { s = s + string(j) + string(#); }
- }
- return(s);
- }
- export exp;
- ==> // ** `exp` is already global
- texproc("","exp");
- ==> \begin{verbatim}
- ==> proc exp(int i,int j,list #)
- ==> {
- ==> string s;
- ==> if (size(#))
- ==> {
- ==> for(i;i<=j;i++)
- ==> { s = s + string(j) + string(#); }
- ==> }
- ==> return(s);
- ==>
- ==> }
- ==> \end{verbatim}
- ==>
- kill exp;
-
-
-File: sing.info, Node: texring, Next: rmx, Prev: texproc, Up: latex_lib
-
-D.8.2.11 texring
-................
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- texring(fname, r[,L]); fname string, r ring, L list
-
-*Return:*
- if `fname=""': string, the ring in TeX-typesetting;
- otherwise: append this string to the file `<fname>' and return
- nothing.
-
-*Note:*
- preceding ">>" are deleted and suffix ".tex" (if not given) is
- added to `fname'.
- The optional list L is assumed to be a list of strings which
- control, e.g., the symbol for the field of coefficients.
- For more details call `texdemo();' (generates a LaTeX2e file called
- `texlibdemo.tex' which explains all features of `texring').
-
-*Example:*
- LIB "latex.lib";
- ring r0 = 0,(x,y),dp; // char = 0, polynomial ordering
- texring("",r0);
- ==> $\Q[x,y]$
- //
- ring r7 =7,(x(0..2)),ds; // char = 7, local ordering
- texring("",r7);
- ==> $\Z_{7}[[x_{0},x_{1},x_{2}]]$
- //
- ring r1 = 0,(x1,x2,y1,y2),wp(1,2,3,4);
- texring("",r1);
- ==> $\Q[x_{1},x_{2},y_{1},y_{2}]$
- //
- ring rr = real,(x),dp; // real numbers
- texring("",rr);
- ==> $\R[x]$
- //
- ring rabc =(0,t1,t2,t3),(x,y),dp; // ring with parameters
- texring("",rabc);
- ==> $\Q(t_{1},t_{2},t_{3})[x,y]$
- //
- ring ralg = (7,a),(x1,x2),ds; // algebraic extension
- minpoly = a2-a+3;
- texring("",ralg);
- ==> $\Z_{7}(a)[[x_{1},x_{2}]]$
- texring("",ralg,"mipo");
- ==> $\Z_{7}(a)/(a^{2}-a+3)[[x_{1},x_{2}]]$
- //
- ring r49=(49,a),x,dp; // Galois field
- texring("",r49);
- ==> $\F_{49}[x]$
- //
- setring r0; // quotient ring
- ideal i = x2-y3;
- qring q = std(i);
- texring("",q);
- ==> $\Q[x,y]/\left(y^{3}-x^{2}\right)
- ==> $
- //
- // ------------------ additional features -------------------
- ring r9 =0,(x(0..9)),ds;
- texring("",r9,1);
- ==> $\Q[[x_{0},\ldots,x_{9}]]$
- texring("",r9,"C","{","^G");
- ==> $\C\{x_{0},x_{1},x_{2},x_{3},x_{4},x_{5},x_{6},x_{7},x_{8},x_{9}\}^G$
- //
- ring rxy = 0,(x(1..5),y(1..6)),ds;
- intvec v = 5,6;
- texring("",rxy,v);
- ==> $\Q[[x_{1},\ldots,x_{5},y_{1},\ldots,y_{6}]]$
-
-
-File: sing.info, Node: rmx, Next: xdvi, Prev: texring, Up: latex_lib
-
-D.8.2.12 rmx
-............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- rmx(fname); fname string
-
-*Return:*
- nothing; removes the `.log' and `.aux' files associated to the
- LaTeX file <fname>.
-
-*Note:*
- If `fname' ends by `".dvi"' or `".tex"', the `.dvi' or `.tex' file
- will be deleted, too.
-
-*Example:*
- LIB "latex.lib";
- ring r;
- poly f = x+y+z;
- opentex("exp001"); // defaulted latex2e document
- texobj("exp001","A polynom",f);
- closetex("exp001");
- tex("exp001");
- ==> calling latex2e for : exp001.tex
- ==>
- ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
- ==> (exp001.tex
- ==> LaTeX2e <1998/12/01> patch level 1
- ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
- man, i
- ==> talian, nohyphenation, loaded.
- ==> (/usr/share/texmf/tex/latex/base/article.cls
- ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
- ==> (/usr/share/texmf/tex/latex/base/size10.clo))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
- ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
- ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
- ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
- ==> No file exp001.aux.
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
- ==> Output written on exp001.dvi (1 page, 308 bytes).
- ==> Transcript written on exp001.log.
- rmx("exp001"); // removes aux and log file of exp001
- system("sh","rm exp001.*");
- ==> 0
-
-
-File: sing.info, Node: xdvi, Prev: rmx, Up: latex_lib
-
-D.8.2.13 xdvi
-.............
-
-Procedure from library `latex.lib' (*note latex_lib::).
-
-*Usage:*
- xdvi(fname[,style]); fname,style = string
-
-*Return:*
- nothing; displays dvi-file fname.dvi with previewer xdvi
-
-*Note:*
- ending .dvi may miss in fname
- style overwrites the default setting xdvi
-
-*Example:*
- LIB "latex.lib";
- intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7;
- opentex("exp001");
- texobj("exp001","An intmat: ",m);
- closetex("exp001");
- tex("exp001");
- ==> calling latex2e for : exp001.tex
- ==>
- ==> This is TeX, Version 3.14159 (Web2C 7.3.1)
- ==> (exp001.tex
- ==> LaTeX2e <1998/12/01> patch level 1
- ==> Babel <v3.6x> and hyphenation patterns for american, french, german,
nger\
- man, i
- ==> talian, nohyphenation, loaded.
- ==> (/usr/share/texmf/tex/latex/base/article.cls
- ==> Document Class: article 1999/01/07 v1.4a Standard LaTeX document class
- ==> (/usr/share/texmf/tex/latex/base/size10.clo))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsmath.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amstext.sty
- ==> (/usr/share/texmf/tex/latex/amslatex/amsgen.sty))
- ==> (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty)
- ==> (/usr/share/texmf/tex/latex/amslatex/amsopn.sty))
- ==> (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty
- ==> (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty))
- ==> No file exp001.aux.
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsa.fd)
- ==> (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) )
- ==> Output written on exp001.dvi (1 page, 524 bytes).
- ==> Transcript written on exp001.log.
- xdvi("exp001");
- ==> calling xdvi for : exp001
- ==>
- system("sh","rm exp001.*");
- ==> 0
-
-
-File: sing.info, Node: paramet_lib, Next: surf_lib, Prev: latex_lib, Up:
Visualization
-
-D.8.3 paramet_lib
------------------
-
-*Library:*
- paramet.lib
-
-*Purpose:*
- Parametrization of Varieties
-
-*Author:*
- Thomas Keilen, address@hidden
-
-*Procedures:*
-
-* Menu:
-
-* parametrize:: parametrizes a prime ideal via the normalization
-* parametrizepd:: calculates the prim.dec. and parametrizes the components
-* parametrizesing:: parametrizes an isolated plane curve singularity
-
-*Overview:*
- A library to compute parametrizations of algebraic varieties (if
- possible) with the aid of a normalization, or a primary
- decomposition, resp. to compute a parametrization of a plane curve
- singularity with the aid of a Hamburger-Noether expansion.
-
-* Menu:
-
-See also:
-* hnoether_lib::
-* normal_lib::
-* primdec_lib::
-
-*See also:* *note hnoether_lib::; *note normal_lib::; *note
-primdec_lib::.
-
-
-File: sing.info, Node: parametrize, Next: parametrizepd, Up: paramet_lib
-
-D.8.3.1 parametrize
-...................
-
-Procedure from library `paramet.lib' (*note paramet_lib::).
-
-*Usage:*
- parametrize(I); I ideal in an arbitrary number of variables, whose
- radical is prime, in a ring with global ordering
-
-*Create:*
- If the parametrization is successful, the basering will be changed
- to the parametrization ring, that is to the ring PR=0,(s,t),dp;
- respectively PR=0,t(1..d),dp;, depending on the dimension of the
- parametrized variety.
-
-*Return:*
- a list containing the parametrization ideal resp. the original
- ideal, the number of variables needed for the parametrization resp.
- 0, and 1 resp. 0 depending on whether the parametrization was
- successful or not
-
-*Example:*
- LIB "paramet.lib";
- ring RING=0,(x,y,z),dp;
- ideal I=z2-y2x2+x3;
- parametrize(I);
- ==> [1]:
- ==> _[1]=s2-t2
- ==> _[2]=s
- ==> _[3]=s2t-t3
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
-
-* Menu:
-
-See also:
-* normal::
-* parametrizepd::
-* primdecGTZ::
-* radical::
-
-*See also:* *note normal::; *note parametrizepd::; *note primdecGTZ::;
-*note radical::.
-
-
-File: sing.info, Node: parametrizepd, Next: parametrizesing, Prev:
parametrize, Up: paramet_lib
-
-D.8.3.2 parametrizepd
-.....................
-
-Procedure from library `paramet.lib' (*note paramet_lib::).
-
-*Usage:*
- parametrizepd(I); I ideal in a polynomial ring with global ordering
-
-*Create:*
- If the parametrization is successful, the basering will be changed
- to the parametrization ring, that is to the ring PR=0,(s,t),dp;
- respectively PR=0,t(1..d),dp;, depending on the dimension of the
- parametrized variety.
-
-*Return:*
- a list of lists, where each entry contains the parametrization of a
- primary component of I resp. 0, the number of variables resp. 0,
- and 1 resp. 0 depending on whether the parametrization of the
- component was successful or not
-
-*Example:*
- LIB "paramet.lib";
- ring RING=0,(x,y,z),dp;
- ideal I=(x2-y2z2+z3)*(x2-z2-z3),(x2-y2z2+z3)*yz;
- parametrizepd(I);
- ==> [1]:
- ==> [1]:
- ==> _[1]=s2t-t3
- ==> _[2]=s
- ==> _[3]=s2-t2
- ==> [2]:
- ==> 2
- ==> [3]:
- ==> 1
- ==> [2]:
- ==> [1]:
- ==> _[1]=0
- ==> _[2]=s
- ==> _[3]=0
- ==> [2]:
- ==> 1
- ==> [3]:
- ==> 1
- ==> [3]:
- ==> [1]:
- ==> _[1]=s3-s
- ==> _[2]=0
- ==> _[3]=s2-1
- ==> [2]:
- ==> 1
- ==> [3]:
- ==> 1
-
-* Menu:
-
-See also:
-* normal::
-* parametrize::
-* primdecGTZ::
-
-*See also:* *note normal::; *note parametrize::; *note primdecGTZ::.
-
-
-File: sing.info, Node: parametrizesing, Prev: parametrizepd, Up: paramet_lib
-
-D.8.3.3 parametrizesing
-.......................
-
-Procedure from library `paramet.lib' (*note paramet_lib::).
-
-*Usage:*
- parametrizesing(f); f a polynomial in two variables, ordering ls or
- ds
-
-*Create:*
- If the parametrization is successful, the basering will be changed
- to the parametrization ring, that is to the ring 0,(x,y),ls;
-
-*Return:*
- a list containing the parametrizations of the different branches of
- the singularity at the origin resp. 0, if f was not of the desired
- kind
-
-*Example:*
- LIB "paramet.lib";
- ring RING=0,(x,y),ls;
- poly f=(x^2-y^3)*(x^2-y^2-y^3);
- parametrizesing(f);
- ==> [1]:
- ==> _[1]=x
- ==> _[2]=x-1/2x2
- ==> [2]:
- ==> _[1]=x
- ==> _[2]=-x-1/2x2
- ==> [3]:
- ==> _[1]=x3
- ==> _[2]=x2
-
-* Menu:
-
-See also:
-* develop::
-* hnexpansion::
-* hnoether_lib::
-
-*See also:* *note develop::; *note hnexpansion::; *note hnoether_lib::.
-
-
-File: sing.info, Node: surf_lib, Prev: paramet_lib, Up: Visualization
-
-D.8.4 surf_lib
---------------
-
-*Library:*
- surf.lib
-
-*Purpose:*
- Procedures for Graphics with Surf
-
-*Author:*
- Hans Schoenemann,
- the program surf is written by Stefan Endrass
-
-*Note:*
- To use this library requires the program `surf' to be installed.
- `surf' is only available for Linux PCs and Sun workstations. You
- can download `surf' either from
- `http://sourceforge.net/projects/surf' or from
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'.
-
-*Procedures:*
-
-* Menu:
-
-* plot:: plots plane curves and surfaces
-
-
-File: sing.info, Node: plot, Up: surf_lib
-
-D.8.4.1 plot
-............
-
-Procedure from library `surf.lib' (*note surf_lib::).
-
-*Usage:*
- plot(I); I ideal or poly
-
-*Assume:*
- I defines a plane curve or a surface given by one equation
-
-*Return:*
- nothing
-
-*Note:*
- requires the external program 'surf' to be installed
-
-*Example:*
- LIB "surf.lib";
- // --------- plane curves ------------
- ring rr0 = 0,(x1,x2),dp;
- ideal I = x1^3 - x2^2;
- plot(I);
- ring rr1 = 0,(x,y,z),dp;
- ideal I(1) = 2x2-1/2x3 +1-y+1;
- plot(I(1));
- // ---- Singular Logo --------------
- poly logo = ((x+3)^3 + 2*(x+3)^2 - y^2)*(x^3 -
y^2)*((x-3)^3-2*(x-3)^2-y^2);
- plot(logo);
- // Steiner surface
- ideal J(2) = x^2*y^2+x^2*z^2+y^2*z^2-17*x*y*z;
- plot(J(2));
- // --------------------
- plot(x*(x2-y2)+z2);
- // E7
- plot(x^3-x*y^3+z^2);
- // Whitney umbrella
- plot(z^2-x^2*y);
-
-
-File: sing.info, Node: Coding theory, Prev: Visualization, Up: SINGULAR
libraries
-
-D.9 Coding theory
-=================
-
-* Menu:
-
-* brnoeth_lib:: Brill-Noether algorithm, Weierstrass semigroups and AG codes
-
-
-File: sing.info, Node: brnoeth_lib, Up: Coding theory
-
-D.9.1 brnoeth_lib
------------------
-
-*Library:*
- brnoeth.lib
-
-*Purpose:*
- Brill-Noether Algorithm, Weierstrass-SG and AG-codes
-
-*Authors:*
- Jose Ignacio Farran Martin, address@hidden
- Christoph Lossen, address@hidden
-
-*Overview:*
- Implementation of the Brill-Noether algorithm for solving the
- Riemann-Roch problem and applications in Algebraic Geometry codes.
- The computation of Weierstrass semigroups is also implemented.
- The procedures are intended only for plane (singular) curves
- defined over a prime field of positive characteristic.
- For more information about the library see the end of the file
- brnoeth.lib.
-
-*Main procedures:*
-
-* Menu:
-
-* Adj_div:: computes the conductor of a curve
-* NSplaces:: computes non-singular places with given degrees
-* BrillNoether:: computes a vector space basis of the linear system L(D)
-* Weierstrass:: computes the Weierstrass semigroup of C at P up to m
-* extcurve:: extends the curve C to an extension of degree d
-* AGcode_L:: computes the evaluation AG code with divisors G and D
-* AGcode_Omega:: computes the residual AG code with divisors G and D
-* prepSV:: preprocessing for the basic decoding algorithm
-* decodeSV:: decoding of a word with the basic decoding algorithm
-
-*Auxiliary procedures:*
-
-* Menu:
-
-* closed_points:: computes the zero-set of a zero-dim. ideal in 2 vars
-* dual_code:: computes the dual code
-* sys_code:: computes an equivalent systematic code
-* permute_L:: applies a permutation to a list
-
-* Menu:
-
-See also:
-* hnoether_lib::
-* triang_lib::
-
-*See also:* *note hnoether_lib::; *note triang_lib::.
-
-
-File: sing.info, Node: Adj_div, Next: NSplaces, Up: brnoeth_lib
-
-D.9.1.1 Adj_div
-...............
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- Adj_div( f [,l] ); f a poly, [l a list]
-
-*Return:*
- list L with the computed data:
-
- L[1] a list of rings: L[1][1]=aff_r (affine), L[1][2]=Proj_R
(projective),
- L[2] an intvec with 2 entries (degree, genus),
- L[3] a list of intvec (closed places),
- L[4] an intvec (conductor),
- L[5] a list of lists:
- L[5][d][1] a (local) ring over an extension of degree d,
- L[5][d][2] an intvec (degrees of base points of places of degree d)
-
-*Note:*
- `Adj_div(f);' computes and stores the fundamental data of the plane
- curve defined by f as needed for AG codes.
- In the affine ring you can find the following data:
-
- poly CHI: affine equation of the curve,
- ideal Aff_SLocus: affine singular locus (std),
- list Inf_Points: points at infinity
- Inf_Points[1]: singular points
- Inf_Points[2]: non-singular points,
- list Aff_SPoints: affine singular points (if not empty).
-
- In the projective ring you can find the projective equation CHI of
- the curve (poly).
- In the local rings L[5][d][1] you find:
-
- list POINTS: base points of the places of degree d,
- list LOC_EQS: local equations of the curve at the base points,
- list BRANCHES: Hamburger-Noether developments of the places,
- list PARAMETRIZATIONS: local parametrizations of the places,
-
- Each entry of the list L[3] corresponds to one closed place (i.e.,
- a place and all its conjugates) which is represented by an intvec
- of size two, the first entry is the degree of the place (in
- particular, it tells the local ring where to find the data
- describing one representative of the closed place), and the second
- one is the position of those data in the lists POINTS, etc., inside
- this local ring.
- In the intvec L[4] (conductor) the i-th entry corresponds to the
- i-th entry in the list of places L[3].
-
- With no optional arguments, the conductor is computed by local
- invariants of the singularities; otherwise it is computed by the
- Dedekind formula.
- An affine point is represented by a list P where P[1] is std of a
- prime ideal and P[2] is an intvec containing the position of the
- places above P in the list of closed places L[3].
- If the point is at infinity, P[1] is a homogeneous irreducible
- polynomial in two variables.
-
- If `printlevel>=0' additional comments are displayed (default:
- `printlevel=0').
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list C=Adj_div(y9+y8+xy6+x2y3+y2+x3);
- ==> The genus of the curve is 3
- def aff_R=C[1][1]; // the affine ring
- setring aff_R;
- listvar(aff_R); // data in the affine ring
- ==> // aff_R [0] *ring
- ==> // Inf_Points [0] list, size: 2
- ==> // Aff_SPoints [0] list, size: 3
- ==> // Aff_SLocus [0] ideal (SB), 2 generator(s)
- ==> // CHI [0] poly
- CHI; // affine equation of the curve
- ==> x3+x2y3+xy6+y9+y8+y2
- Aff_SLocus; // ideal of the affine singular locus
- ==> Aff_SLocus[1]=y8+y2
- ==> Aff_SLocus[2]=x2+y6
- Aff_SPoints[1]; // 1st affine singular point: (1:1:1), no.1
- ==> [1]:
- ==> _[1]=y2+y+1
- ==> _[2]=x+1
- ==> [2]:
- ==> 1
- Inf_Points[1]; // singular point(s) at infinity: (1:0:0), no.4
- ==> [1]:
- ==> [1]:
- ==> y
- ==> [2]:
- ==> 4
- Inf_Points[2]; // list of non-singular points at infinity
- ==> empty list
- //
- def proj_R=C[1][2]; // the projective ring
- setring proj_R;
- CHI; // projective equation of the curve
- ==> x3z6+x2y3z4+xy6z2+y9+y8z+y2z7
- C[2][1]; // degree of the curve
- ==> 9
- C[2][2]; // genus of the curve
- ==> 3
- C[3]; // list of computed places
- ==> [1]:
- ==> 2,1
- ==> [2]:
- ==> 1,1
- ==> [3]:
- ==> 1,2
- ==> [4]:
- ==> 1,3
- C[4]; // adjunction divisor (all points are singular!)
- ==> 2,2,2,42
- //
- // we look at the place(s) of degree 2 by changing to the ring
- C[5][2][1];
- ==> // characteristic : 2
- ==> // 1 parameter : a
- ==> // minpoly : ...
- ==> // number of vars : 3
- ==> // block 1 : ordering ls
- ==> // : names x y t
- ==> // block 2 : ordering C
- def S(2)=C[5][2][1];
- setring S(2);
- POINTS; // base point(s) of place(s) of degree 2: (1:a:1)
- ==> [1]:
- ==> [1]:
- ==> 1
- ==> [2]:
- ==> (a)
- ==> [3]:
- ==> 1
- LOC_EQS; // local equation(s)
- ==> [1]:
- ==>
y2+y3+(a+1)*y4+y6+(a+1)*y8+y9+(a)*xy2+(a+1)*xy4+xy6+(a+1)*x2y+(a)*x2y2\
- +x2y3+x3
- PARAMETRIZATIONS; // parametrization(s) and exactness
- ==> [1]:
- ==> [1]:
- ==> _[1]=t2+(a+1)*t3
- ==> _[2]=t3+(a+1)*t4
- ==> [2]:
- ==> 3,4
- BRANCHES; // Hamburger-Noether development
- ==> [1]:
- ==> [1]:
- ==> _[1,1]=0
- ==> _[1,2]=x
- ==> _[1,3]=0
- ==> _[2,1]=0
- ==> _[2,2]=1
- ==> _[2,3]=(a+1)
- ==> [2]:
- ==> 1,-4
- ==> [3]:
- ==> 0
- ==> [4]:
- ==>
y+(a+1)*xy+(a)*x2y+(a)*x2y2+(a+1)*x3+x3y+x3y3+(a)*x4+(a+1)*x4y2+(a+\
-
1)*x4y3+x5+x5y2+(a)*x6+(a+1)*x6y2+x6y4+x6y5+x7y+(a+1)*x8+(a+1)*x8y+x8y4+(\
-
a+1)*x8y6+x9+x9y7+(a+1)*x10+x11y6+(a+1)*x12y4+x13y5+x14+x14y+x15y4+x16+(a\
- +1)*x16y2+x17y3+x19y2+(a+1)*x20+x21y+x23
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* NSplaces::
-* closed_points::
-
-*See also:* *note NSplaces::; *note closed_points::.
-
-
-File: sing.info, Node: NSplaces, Next: BrillNoether, Prev: Adj_div, Up:
brnoeth_lib
-
-D.9.1.2 NSplaces
-................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- NSplaces( h, CURVE ), where h is an intvec and CURVE is a list
-
-*Return:*
- list L with updated data of CURVE after computing all non-singular
- affine closed places whose degrees are in the intvec h:
-
- in L[1][1]: (affine ring) lists Aff_Points(d) with affine non-singular
- (closed) points of degree d (if non-empty),
- in L[3]: the newly computed closed places are added,
- in L[5]: local rings created/updated to store (repres. of) new
places.
-
- See *note Adj_div:: for a description of the entries in L.
-
-*Note:*
- The list_expression should be the output of the procedure Adj_div.
- If `printlevel>=0' additional comments are displayed (default:
- `printlevel=0').
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list C=Adj_div(x3y+y3+x);
- ==> The genus of the curve is 3
- // The list of computed places:
- C[3];
- ==> [1]:
- ==> 1,1
- ==> [2]:
- ==> 1,2
- // create places up to degree 4
- list L=NSplaces(1..4,C);
- // The list of computed places is now:
- L[3];
- ==> [1]:
- ==> 1,1
- ==> [2]:
- ==> 1,2
- ==> [3]:
- ==> 1,3
- ==> [4]:
- ==> 2,1
- ==> [5]:
- ==> 3,1
- ==> [6]:
- ==> 3,2
- ==> [7]:
- ==> 3,3
- ==> [8]:
- ==> 3,4
- ==> [9]:
- ==> 3,5
- ==> [10]:
- ==> 3,6
- ==> [11]:
- ==> 3,7
- ==> [12]:
- ==> 4,1
- ==> [13]:
- ==> 4,2
- ==> [14]:
- ==> 4,3
- // e.g., affine non-singular points of degree 4 :
- def aff_r=L[1][1];
- setring aff_r;
- Aff_Points(4);
- ==> [1]:
- ==> [1]:
- ==> _[1]=y2+y+1
- ==> _[2]=x2+xy+x+1
- ==> [2]:
- ==> 12
- ==> [2]:
- ==> [1]:
- ==> _[1]=y4+y3+y2+y+1
- ==> _[2]=x+y2+y+1
- ==> [2]:
- ==> 13
- ==> [3]:
- ==> [1]:
- ==> _[1]=y4+y3+1
- ==> _[2]=x+y3+y
- ==> [2]:
- ==> 14
- // e.g., base point of the 1st place of degree 4 :
- def S(4)=L[5][4][1];
- setring S(4);
- POINTS[1];
- ==> [1]:
- ==> (a3)
- ==> [2]:
- ==> (a2+a)
- ==> [3]:
- ==> 1
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* Adj_div::
-* closed_points::
-
-*See also:* *note Adj_div::; *note closed_points::.
-
-
-File: sing.info, Node: BrillNoether, Next: Weierstrass, Prev: NSplaces,
Up: brnoeth_lib
-
-D.9.1.3 BrillNoether
-....................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- BrillNoether(G,CURVE); G an intvec, CURVE a list
-
-*Return:*
- list of ideals (each of them with two homogeneous generators, which
- represent the numerator, resp. denominator, of a rational
-function).
- The corresponding rational functions form a vector basis of the
- linear system L(G), G a rational divisor over a non-singular curve.
-
-*Note:*
- The procedure must be called from the ring CURVE[1][2], where CURVE
- is the output of the procedure `NSplaces'.
- The intvec G represents a rational divisor supported on the closed
- places of CURVE[3] (e.g. `G=2,0,-1;' means 2 times the closed place
- 1 minus 1 times the closed place 3).
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list C=Adj_div(x3y+y3+x);
- ==> The genus of the curve is 3
- C=NSplaces(1..4,C);
- // the first 3 Places in C[3] are of degree 1.
- // we define the rational divisor G = 4*C[3][1]+4*C[3][3] (of degree 8):
- intvec G=4,0,4;
- def R=C[1][2];
- setring R;
- list LG=BrillNoether(G,C);
- ==> Vector basis successfully computed
- // here is the vector basis of L(G):
- LG;
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=1
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=x
- ==> [3]:
- ==> _[1]=z
- ==> _[2]=x
- ==> [4]:
- ==> _[1]=y2
- ==> _[2]=x2
- ==> [5]:
- ==> _[1]=xz2+y3
- ==> _[2]=x3
- ==> [6]:
- ==> _[1]=xyz2+y4
- ==> _[2]=x4
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* Adj_div::
-* NSplaces::
-* Weierstrass::
-
-*See also:* *note Adj_div::; *note NSplaces::; *note Weierstrass::.
-
-
-File: sing.info, Node: Weierstrass, Next: extcurve, Prev: BrillNoether,
Up: brnoeth_lib
-
-D.9.1.4 Weierstrass
-...................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- Weierstrass( i, m, CURVE ); i,m integers and CURVE a list
-
-*Return:*
- list WS of two lists:
-
- WS[1] list of integers (Weierstr. semigroup of the curve at place i up
to m)
- WS[2] list of ideals (the associated rational functions)
-
-*Note:*
- The procedure must be called from the ring CURVE[1][2], where CURVE
- is the output of the procedure `NSplaces'.
- i represents the place CURVE[3][i].
- Rational functions are represented by numerator/denominator in form
- of ideals with two homogeneous generators.
-
-*Warning:*
- The place must be rational, i.e., necessarily CURVE[3][i][1]=1.
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list C=Adj_div(x3y+y3+x);
- ==> The genus of the curve is 3
- C=NSplaces(1..4,C);
- def R=C[1][2];
- setring R;
- // Place C[3][1] has degree 1 (i.e it is rational);
- list WS=Weierstrass(1,7,C);
- ==> Vector basis successfully computed
- // the first part of the list is the Weierstrass semigroup up to 7 :
- WS[1];
- ==> [1]:
- ==> 0
- ==> [2]:
- ==> 3
- ==> [3]:
- ==> 5
- ==> [4]:
- ==> 6
- ==> [5]:
- ==> 7
- // and the second part are the corresponding functions :
- WS[2];
- ==> [1]:
- ==> _[1]=1
- ==> _[2]=1
- ==> [2]:
- ==> _[1]=y
- ==> _[2]=z
- ==> [3]:
- ==> _[1]=xy
- ==> _[2]=z2
- ==> [4]:
- ==> _[1]=y2
- ==> _[2]=z2
- ==> [5]:
- ==> _[1]=y3
- ==> _[2]=xz2
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* Adj_div::
-* BrillNoether::
-* NSplaces::
-
-*See also:* *note Adj_div::; *note BrillNoether::; *note NSplaces::.
-
-
-File: sing.info, Node: extcurve, Next: AGcode_L, Prev: Weierstrass, Up:
brnoeth_lib
-
-D.9.1.5 extcurve
-................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- extcurve( d, CURVE ); d an integer, CURVE a list
-
-*Return:*
- list L which is the update of the list CURVE with additional
- entries
-
- L[1][3]: ring (p,a),(x,y),lp (affine),
- L[1][4]: ring (p,a),(x,y,z),lp (projective),
- L[1][5]: ring (p,a),(x,y,t),ls (local),
- L[2][3]: int (the number of rational places),
-
- the rings being defined over a field extension of degree d.
- If d<2 then `extcurve(d,CURVE);' creates a list L which is the
- update of the list CURVE with additional entries
-
- L[1][5]: ring p,(x,y,t),ls,
- L[2][3]: int (the number of computed places over the base field).
-
- In both cases, in the ring L[1][5] lists with the data for all the
- computed rational places (after a field extension of degree d) are
- created (see *note Adj_div::):
-
- lists POINTS, LOC_EQS, BRANCHES, PARAMETRIZATIONS.
-
-*Note:*
- The list CURVE should be the output of `NSplaces', and must contain
- (at least) one place of degree d.
- You actually need all the places with degree dividing d.
- Otherwise, not all the places are computed, but only part of them.
- This procedure must be executed before constructing AG codes, even
- if no extension is needed. The ring L[1][4] must be active when
- constructing codes over the field extension.
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list C=Adj_div(x5+y2+y);
- ==> The genus of the curve is 2
- C=NSplaces(1..4,C);
- // since we have all points up to degree 4, we can extend the curve
- // to that extension, in order to get rational points over F_16;
- C=extcurve(4,C);
- ==> Total number of rational places : NrRatPl = 33
- // e.g., display the basepoint of place no. 32:
- def R=C[1][5];
- setring R;
- POINTS[32];
- ==> [1]:
- ==> (a3+a2+a+1)
- ==> [2]:
- ==> (a2+a)
- ==> [3]:
- ==> 1
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* AGcode_L::
-* AGcode_Omega::
-* Adj_div::
-* NSplaces::
-* closed_points::
-
-*See also:* *note AGcode_L::; *note AGcode_Omega::; *note Adj_div::;
-*note NSplaces::; *note closed_points::.
-
-
-File: sing.info, Node: AGcode_L, Next: AGcode_Omega, Prev: extcurve, Up:
brnoeth_lib
-
-D.9.1.6 AGcode_L
-................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- AGcode_L( G, D, EC ); G,D intvec, EC a list
-
-*Return:*
- a generator matrix for the evaluation AG code defined by the
- divisors G and D.
-
-*Note:*
- The procedure must be called within the ring EC[1][4], where EC is
- the output of `extcurve(d)' (or within the ring EC[1][2] if d=1).
- The entry i in the intvec D refers to the i-th rational place in
- EC[1][5] (i.e., to POINTS[i], etc., see *note extcurve::).
- The intvec G represents a rational divisor (see *note
- BrillNoether:: for more details).
- The code evaluates the vector basis of L(G) at the rational places
- given by D.
-
-*Warnings:*
- G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
- , which is not checked by the algorithm.
- G and D should have disjoint supports (checked by the algorithm).
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list HC=Adj_div(x3+y2+y);
- ==> The genus of the curve is 1
- HC=NSplaces(1..2,HC);
- HC=extcurve(2,HC);
- ==> Total number of rational places : NrRatPl = 9
- def ER=HC[1][4];
- setring ER;
- intvec G=5; // the rational divisor G = 5*HC[3][1]
- intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
- // let us construct the corresponding evaluation AG code :
- matrix C=AGcode_L(G,D,HC);
- ==> Vector basis successfully computed
- // here is a linear code of type [8,5,>=3] over F_4
- print(C);
- ==> 0,0,(a), (a+1),1, 1, (a+1),(a),
- ==> 1,0,(a), (a+1),(a),(a+1),(a), (a+1),
- ==> 1,1,1, 1, 1, 1, 1, 1,
- ==> 0,0,(a+1),(a), 1, 1, (a), (a+1),
- ==> 0,0,(a+1),(a), (a),(a+1),1, 1
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* AGcode_Omega::
-* Adj_div::
-* BrillNoether::
-* extcurve::
-
-*See also:* *note AGcode_Omega::; *note Adj_div::; *note BrillNoether::;
-*note extcurve::.
-
-
-File: sing.info, Node: AGcode_Omega, Next: prepSV, Prev: AGcode_L, Up:
brnoeth_lib
-
-D.9.1.7 AGcode_Omega
-....................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- AGcode_Omega( G, D, EC ); G,D intvec, EC a list
-
-*Return:*
- a generator matrix for the residual AG code defined by the divisors
- G and D.
-
-*Note:*
- The procedure must be called within the ring EC[1][4], where EC is
- the output of `extcurve(d)' (or within the ring EC[1][2] if d=1).
- The entry i in the intvec D refers to the i-th rational place in
- EC[1][5] (i.e., to POINTS[i], etc., see *note extcurve::).
- The intvec G represents a rational divisor (see *note
- BrillNoether:: for more details).
- The code computes the residues of a vector space basis of
-
- \Omega(G-D) $\Omega(G-D)$
- at the rational places given by D.
-
-*Warnings:*
- G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
- , which is not checked by the algorithm.
- G and D should have disjoint supports (checked by the algorithm).
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list HC=Adj_div(x3+y2+y);
- ==> The genus of the curve is 1
- HC=NSplaces(1..2,HC);
- HC=extcurve(2,HC);
- ==> Total number of rational places : NrRatPl = 9
- def ER=HC[1][4];
- setring ER;
- intvec G=5; // the rational divisor G = 5*HC[3][1]
- intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
- // let us construct the corresponding residual AG code :
- matrix C=AGcode_Omega(G,D,HC);
- ==> Vector basis successfully computed
- // here is a linear code of type [8,3,>=5] over F_4
- print(C);
- ==> 0, (a),(a),(a), (a+1),1,0, 0,
- ==> (a+1),1, (a),0, (a), 0,(a),0,
- ==> (a+1),0, (a),(a+1),(a+1),0,0, 1
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* AGcode_L::
-* Adj_div::
-* BrillNoether::
-* extcurve::
-
-*See also:* *note AGcode_L::; *note Adj_div::; *note BrillNoether::;
-*note extcurve::.
-
-
-File: sing.info, Node: prepSV, Next: decodeSV, Prev: AGcode_Omega, Up:
brnoeth_lib
-
-D.9.1.8 prepSV
-..............
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- prepSV( G, D, F, EC ); G,D,F intvecs and EC a list
-
-*Return:*
- list E of size n+3, where n=size(D). All its entries but E[n+3] are
- matrices:
-
- E[1]: parity check matrix for the current AG code
- E[2] ... E[n+2]: matrices used in the procedure decodeSV
- E[n+3]: intvec with
- E[n+3][1]: correction capacity
- epsilon
-$epsilon$
- of the algorithm
- E[n+3][2]: designed Goppa distance
- delta
-$delta$
- of the current AG code
-
-*Note:*
- Computes the preprocessing for the basic (Skorobogatov-Vladut)
- decoding algorithm.
- The procedure must be called within the ring EC[1][4], where EC is
- the output of `extcurve(d)' (or in the ring EC[1][2] if d=1)
- The intvec G and F represent rational divisors (see *note
- BrillNoether:: for more details).
- The intvec D refers to rational places (see *note AGcode_Omega::
- for more details.). The current AG code is `AGcode_Omega(G,D,EC)'.
- If you know the exact minimum distance d and you want to use it in
- `decodeSV' instead of delta $delta$
- , you can change the value of E[n+3][2] to d before applying
- decodeSV.
- If you have a systematic encoding for the current code and want to
- keep it during the decoding, you must previously permute D (using
- `permute_L(D,P);'), e.g., according to the permutation P=L[3], L
- being the output of `sys_code'.
-
-*Warnings:*
- F must be a divisor with support disjoint from the support of D and
- with degree epsilon + genus $epsilon + genus$
- , where
-
- epsilon:=[(deg(G)-3*genus+1)/2] $epsilon:=[(deg(G)-3*genus+1)/2]$
-.
- G should satisfy 2*genus-2 < deg(G) < size(D) $ 2*genus-2 < deg(G) <
size(D) $
- , which is not checked by the algorithm.
- G and D should also have disjoint supports (checked by the
- algorithm).
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list HC=Adj_div(x3+y2+y);
- ==> The genus of the curve is 1
- HC=NSplaces(1..2,HC);
- HC=extcurve(2,HC);
- ==> Total number of rational places : NrRatPl = 9
- def ER=HC[1][4];
- setring ER;
- intvec G=5; // the rational divisor G = 5*HC[3][1]
- intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
- // construct the corresp. residual AG code of type [8,3,>=5] over F_4:
- matrix C=AGcode_Omega(G,D,HC);
- ==> Vector basis successfully computed
- // we can correct 1 error and the genus is 1, thus F must have degree 2
- // and support disjoint from that of D;
- intvec F=2;
- list SV=prepSV(G,D,F,HC);
- ==> Vector basis successfully computed
- ==> Vector basis successfully computed
- ==> Vector basis successfully computed
- // now everything is prepared to decode with the basic algorithm;
- // for example, here is a parity check matrix to compute the syndrome :
- print(SV[1]);
- ==> 0,0,(a), (a+1),1, 1, (a+1),(a),
- ==> 1,0,(a), (a+1),(a),(a+1),(a), (a+1),
- ==> 1,1,1, 1, 1, 1, 1, 1,
- ==> 0,0,(a+1),(a), 1, 1, (a), (a+1),
- ==> 0,0,(a+1),(a), (a),(a+1),1, 1
- // and here you have the correction capacity of the algorithm :
- int epsilon=SV[size(D)+3][1];
- epsilon;
- ==> 1
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* AGcode_Omega::
-* decodeSV::
-* extcurve::
-* permute_L::
-* sys_code::
-
-*See also:* *note AGcode_Omega::; *note decodeSV::; *note extcurve::;
-*note permute_L::; *note sys_code::.
-
-
-File: sing.info, Node: decodeSV, Next: closed_points, Prev: prepSV, Up:
brnoeth_lib
-
-D.9.1.9 decodeSV
-................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- decodeSV( y, K ); y a row-matrix and K a list
-
-*Return:*
- a codeword (row-matrix) if possible, resp. the 0-matrix (of size 1)
- if decoding is impossible.
- For decoding the basic (Skorobogatov-Vladut) decoding algorithm is
- applied.
-
-*Note:*
- The list_expression should be the output K of the procedure
-`prepSV'.
- The matrix_expression should be a (1 x n)-matrix, where n =
-ncols(K[1]).
- The decoding may fail if the number of errors is greater than the
- correction capacity of the algorithm.
-
-*Example:*
- LIB "brnoeth.lib";
- int plevel=printlevel;
- printlevel=-1;
- ring s=2,(x,y),lp;
- list HC=Adj_div(x3+y2+y);
- ==> The genus of the curve is 1
- HC=NSplaces(1..2,HC);
- HC=extcurve(2,HC);
- ==> Total number of rational places : NrRatPl = 9
- def ER=HC[1][4];
- setring ER;
- intvec G=5; // the rational divisor G = 5*HC[3][1]
- intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4
- // construct the corresp. residual AG code of type [8,3,>=5] over F_4:
- matrix C=AGcode_Omega(G,D,HC);
- ==> Vector basis successfully computed
- // we can correct 1 error and the genus is 1, thus F must have degree 2
- // and support disjoint from that of D
- intvec F=2;
- list SV=prepSV(G,D,F,HC);
- ==> Vector basis successfully computed
- ==> Vector basis successfully computed
- ==> Vector basis successfully computed
- // now we produce 1 error on the zero-codeword :
- matrix y[1][8];
- y[1,3]=a;
- // and then we decode :
- print(decodeSV(y,SV));
- ==> 0,0,0,0,0,0,0,0
- printlevel=plevel;
-
-* Menu:
-
-See also:
-* AGcode_Omega::
-* extcurve::
-* prepSV::
-
-*See also:* *note AGcode_Omega::; *note extcurve::; *note prepSV::.
-
-
-File: sing.info, Node: closed_points, Next: dual_code, Prev: decodeSV, Up:
brnoeth_lib
-
-D.9.1.10 closed_points
-......................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- closed_points(I); I an ideal
-
-*Return:*
- list of prime ideals (each a Groebner basis), corresponding to the
- (distinct affine closed) points of V(I)
-
-*Note:*
- The ideal must have dimension 0, the basering must have 2
- variables, the ordering must be lp, and the base field must be
- finite and prime.
- It might be convenient to set the option(redSB) in advance.
-
-*Example:*
- LIB "brnoeth.lib";
- ring s=2,(x,y),lp;
- // this is just the affine plane over F_4 :
- ideal I=x4+x,y4+y;
- list L=closed_points(I);
- // and here you have all the points :
- L;
- ==> [1]:
- ==> _[1]=y2+y+1
- ==> _[2]=x+y
- ==> [2]:
- ==> _[1]=y2+y+1
- ==> _[2]=x+1
- ==> [3]:
- ==> _[1]=y2+y+1
- ==> _[2]=x+y+1
- ==> [4]:
- ==> _[1]=y2+y+1
- ==> _[2]=x
- ==> [5]:
- ==> _[1]=y+1
- ==> _[2]=x2+x+1
- ==> [6]:
- ==> _[1]=y+1
- ==> _[2]=x+1
- ==> [7]:
- ==> _[1]=y+1
- ==> _[2]=x
- ==> [8]:
- ==> _[1]=y
- ==> _[2]=x2+x+1
- ==> [9]:
- ==> _[1]=y
- ==> _[2]=x+1
- ==> [10]:
- ==> _[1]=y
- ==> _[2]=x
-
-* Menu:
-
-See also:
-* triang_lib::
-
-*See also:* *note triang_lib::.
-
-
-File: sing.info, Node: dual_code, Next: sys_code, Prev: closed_points, Up:
brnoeth_lib
-
-D.9.1.11 dual_code
-..................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- dual_code(G); G a matrix of numbers
-
-*Return:*
- a generator matrix of the dual code generated by G
-
-*Note:*
- The input should be a matrix G of numbers.
- The output is also a parity check matrix for the code defined by G
-
-*Example:*
- LIB "brnoeth.lib";
- ring s=2,T,lp;
- // here is the Hamming code of length 7 and dimension 3
- matrix G[3][7]=1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1;
- print(G);
- ==> 1,0,1,0,1,0,1,
- ==> 0,1,1,0,0,1,1,
- ==> 0,0,0,1,1,1,1
- matrix H=dual_code(G);
- print(H);
- ==> 1,1,1,0,0,0,0,
- ==> 1,0,0,1,1,0,0,
- ==> 0,1,0,1,0,1,0,
- ==> 1,1,0,1,0,0,1
-
-
-File: sing.info, Node: sys_code, Next: permute_L, Prev: dual_code, Up:
brnoeth_lib
-
-D.9.1.12 sys_code
-.................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- sys_code(C); C is a matrix of constants
-
-*Return:*
- list L with:
-
- L[1] is the generator matrix in standard form of an equivalent code,
- L[2] is the parity check matrix in standard form of such code,
- L[3] is an intvec which represents the needed permutation.
-
-*Note:*
- Computes a systematic code which is equivalent to the given one.
- The input should be a matrix of numbers.
- The output has to be interpreted as follows: if the input was the
- generator matrix of an AG code then one should apply the
- permutation L[3] to the divisor D of rational points by means of
- `permute_L(D,L[3]);' before continuing to work with the code (for
- instance, if you want to use the systematic encoding together with
- a decoding algorithm).
-
-*Example:*
- LIB "brnoeth.lib";
- ring s=3,T,lp;
- matrix C[2][5]=0,1,0,1,1,0,1,0,0,1;
- print(C);
- ==> 0,1,0,1,1,
- ==> 0,1,0,0,1
- list L=sys_code(C);
- L[3];
- ==> 2,4,3,1,5
- // here is the generator matrix in standard form
- print(L[1]);
- ==> 1,0,0,0,1,
- ==> 0,1,0,0,0
- // here is the control matrix in standard form
- print(L[2]);
- ==> 0, 0,1,0,0,
- ==> 0, 0,0,1,0,
- ==> -1,0,0,0,1
- // we can check that both codes are dual to each other
- print(L[1]*transpose(L[2]));
- ==> 0,0,0,
- ==> 0,0,0
-
-* Menu:
-
-See also:
-* AGcode_Omega::
-* permute_L::
-* prepSV::
-
-*See also:* *note AGcode_Omega::; *note permute_L::; *note prepSV::.
-
-
-File: sing.info, Node: permute_L, Prev: sys_code, Up: brnoeth_lib
-
-D.9.1.13 permute_L
-..................
-
-Procedure from library `brnoeth.lib' (*note brnoeth_lib::).
-
-*Usage:*
- permute_L( L, P ); L,P either intvecs or lists
-
-*Return:*
- list obtained from L by applying the permutation given by P.
-
-*Note:*
- If P is a list, all entries must be integers.
-
-*Example:*
- LIB "brnoeth.lib";
- list L=list();
- L[1]="a";
- L[2]="b";
- L[3]="c";
- L[4]="d";
- intvec P=1,3,4,2;
- // the list L is permuted according to P :
- permute_L(L,P);
- ==> [1]:
- ==> a
- ==> [2]:
- ==> c
- ==> [3]:
- ==> d
- ==> [4]:
- ==> b
-
-* Menu:
-
-See also:
-* AGcode_Omega::
-* prepSV::
-* sys_code::
-
-*See also:* *note AGcode_Omega::; *note prepSV::; *note sys_code::.
-
-
-File: sing.info, Node: Release Notes, Next: Index, Prev: SINGULAR
libraries, Up: Top
-
-E Release Notes
-***************
-
-* Menu:
-
-* News and changes::
-* Downloading instructions::
-* Unix installation instructions::
-* Windows installation instructions::
-* Macintosh installation instructions::
-
-
-File: sing.info, Node: News and changes, Next: Downloading instructions,
Up: Release Notes
-
-E.1 News and changes
-====================
-
-NEWS in SINGULAR 2-0-4
-**********************
-
-The current version 2-0-4 is an update to the release series version
-2-0.
-
-Changes with respect to version 2-0-3:
-
-Factorizing algorithms revisited
-================================
-
-Starting with version 2-0-4, we use NTL (by Victor Shoup) for factoring
-univariate polynomials. The multivariate factoring code in
-libfac/factory does now also work over algebraic extension fields.
-
-Help system is configurable via LIB/help.cnf
-============================================
-
-The help browsers of Singular can be configured via the file
-LIB/help.cnf, also the addition of new help browsers is possible.
-
-Extensions of the ring concept
-==============================
-
-new coefficient domains: arbitrary long real and complex numbers
-
-no restriction on number of parameters
-
-degree bound on exponent values (maximum is now 2^31, standard 2^15)
-
-non-positives weights get a better handling (converts wp/Wp to ws/Ws)
-
-handle blocks of mixed orders correctly
-
-maximal prime characteristic is now 2147483629 instead of 32003
-
-Changes in SINGULAR libraries
-=============================
-
-The documentation of libraries was generally improved.
-*note equising_lib::
- procedures esStratum, isEquising now also for reducible polynomials
-
- new procedures: tau_es (codim of mu-const stratum in semi-universal
- def. base); esIdeal ((Wahl's) equisingularity ideal)
-
-*note gaussman_lib::
- added bernstein: roots of the Bernstein polynomial of t
-
-*note hnoether_lib::
- HNdevelop, reddevelop, essdevelop are obsolete, replaced by
- hnexpansion
- multsequence is "repaired" (since branches computed by hnexpansion
- et al) are now ordered according to the needs of multsequence.
- newtonpoly needs no longer that ordering of the basering is ls
- new procedures: is_NND test if f is Newton non-degenerate
-
-*note homolog_lib::
- new procedures: depth, fitting, flatteningStrat, isCM, isFlat,
- isLocallyFree, isReg, KoszulHomology, tensorMod, Tor
-
-*note matrix_lib::
- in proc tensor(A,B): check if ncols(A)==0
-
-*note normal_lib::
- new procedure: deltaLoc(f,S); (sum of) delta invariant(s) at
- conjugated singular points
- proc genus makes now use of is_NND of hnoether.lib
-
-*note primdec_lib::
- optimizations again
-
-*note solve_lib::
- procedure laguerre_solve ignores no longer the 2nd parameter
- (precision of internal computation)
- new procedure simplexOut: prints solution of simplex in nice
- format
-
-Internal Changes
-================
-
-normal form computation uses
- Bucket representation of polynomials.
-
-factorization
- revisited, missing cases implemented
-
-NTL
- NTL is used for univariate factorization
-
-source code
- adapted for use with gcc 3.1/3.2, gmp 4.x
-
-Porting
-=======
-
- * Singular is available for ix86-libc5, ix86-libc6, HPUX_9, HPUX_10,
- SunOS-4, SunOS-5, IRIX-6, ix86-Win (Windows 95/98/ME/NT/2K/XP),
- FreeBSD 4.x, MacOS X Windows 95/98/ME/NT/2K/XP and MacOS X
-
- * `MP' functionality is not available on Windows 95/98/ME/NT/2K/XP
- and MacOS X.
-
- * Singular 2-0-2 was the last version for MacOS 9
-
-
-File: sing.info, Node: Downloading instructions, Next: Unix installation
instructions, Prev: News and changes, Up: Release Notes
-
-E.2 Downloading instructions
-============================
-
-SINGULAR is available as binary program for most common hard- and
-software platforms. Release versions of SINGULAR can be downloaded with
-ftp from our FTP site
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/',
-or, using your favorite WWW browser, from
- `http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/'.
-
-To download SINGULAR for a Unix platform
-========================================
-
-Make sure that you have approximately 20 MByte of free disk space and
-follow these steps.
-
- 1. You need to download two (archive) files:
-
- `Singular-2-0-4-share.tar.gz'
- contains architecture independent data like documentation and
- libraries
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-share.tar.gz'
-
- `Singular-2-0-4-<uname>.tar.gz'
- contains architecture dependent executables, like the SINGULAR
- program.
-
- `<uname>' is a description of the processor and operating system
- for which SINGULAR is compiled. Choose one of the following:
- `ix86-Linux' PC's running under Linux with `libc' version 6 (e.g.,
- for SuSe Linux distribution version >= 6; RedHat Linux
- distribution version >= 5.2).
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-Linux.tar.gz'
- `ix86-Linux-libc5'PC's running under Linux with `libc' version 5 (if you
- are not sure which `libc' version you have, run `ldd
- /bin/ls').
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-Linux-libc5.tar.gz'
- `ix86-freebsd' 's running under FreeBSD
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-ix86-freebsd.tar.gz'
- `ix86-Win' PC's running Windows 95/98/ME/NT/2K/XP which have Cygwin
- version 1.3.9 (or higher) already installed. Unless you
- are familiar with Cygwin, we recommend that you download
- one of the self-extracting archives as described below.
- `HPUX-9' HP workstations running under HPUX version 9
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-HPUX-9.tar.gz'
- `HPUX-10' HP workstations running under HPUX version 10
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-HPUX-10.tar.gz'
- `SunOS-5' Sun workstations running Solaris version 5
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-SunOS-5.tar.gz'
- `IRIX-6' IRIX workstations running IRIX version 6
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-IRIX-6.tar.gz'
- `AIX-4' AIX workstations running AIX version 4
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-AIX-4.tar.gz'
- `PowerMacintosh-darwin'PowerMacintosh running Mac OS X
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/OsX/Singular-2-0-4-PowerMacintosh-darwin.tar.gz'
- `DecAlpha-Linux'Digital Dec Alpha running Linux (RedHat 5.2)
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-DecAlpha-Linux.tar.gz'
- `DecAlpha-OSF1'Digital Dec Alpha running OSF 1
-
`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-2-0-4-DecAlpha-OSF1.tar.gz'
- Please contact us if you can not find an appropriate architecture
- dependent archive.
-
- 2. Simply change to the directory in which you wish to install
- SINGULAR (usually wherever you install 3rd-party software):
-
- cd /usr/local/
-
- SINGULAR specific subdirectories will be created in such a way that
- multiple versions and multiple architecture dependent files of
- SINGULAR can peaceably coexist under the same `/usr/local/' tree.
-
- 3. Unpack the archives:
-
- gzip -dc Singular-2-0-4-<uname>.tar.gz | tar -pxf -
- gzip -dc Singular-2-0-4-share.tar.gz | tar -pxf -
-
- If you have downloaded `Singular-2-0-4-share.zip', unpack with
-
- unzip -u Singular-2-0-4-share.zip
-
- 4. After unpacking, see the created file `Singular/2-0-4/INSTALL'
- (which is also located at
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/INSTALL_unix.html'
- for details on how to finish the installation.
-
-To download SINGULAR for Windows 95/98/ME/NT/2K/XP
-==================================================
-
- 1. Download one of the following self-extracting archives:
-
- `Singular-2-0-4-Compact.exe
(ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-2-0-4-Compact.exe)'
- Minimal archive to download. Installs Singular and minimal set
- of needed tools and DLLs.
-
- `Singular-2-0-4-Typical.exe
(ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-2-0-4-Typical.exe)'
- Typical archive to download. Installs Singular and the XEmacs
- editor to run ESingular.
-
- 2. Double-click (or, execute), the self-extracting archives, and
- *carefully* follow the instructions given there.
-
- 3. If, while running setup, you obtain the following message `Setup
- failed to launch installation engine:' `Error loading type
- library/DLL', then you need to download and execute Microsoft
- DCOM98 package
- `http://www.microsoft.com/com/dcom/dcom98/download.asp'. Such a
- problem could appear on Win 95/98.
-
- 4. In case of problems, see the created file `/etc/INSTALL.txt' (which
- is also located at
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/INSTALL_win.htm'
- for details on how to finish the installation.
-
-To download SINGULAR for the Macintosh
-======================================
-
-For the SINGULAR version for Mac OS X refer to the Unix section.
-The SINGULAR version for Mac OS 9 is available as
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-html.sea.hqx'
-(documentation) and
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-ppc-MPW.sea.hqx'
-(binaries and libraries). The file
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.html'
-gives details on how to finish the installation.
-
-
-File: sing.info, Node: Unix installation instructions, Next: Windows
installation instructions, Prev: Downloading instructions, Up: Release Notes
-
-E.3 Unix installation instructions
-==================================
-
-To install SINGULAR on a Unix platform, you need the following two
-archives:
-`Singular-2-0-4-share.tar.gz'
- contains architecture independent data like documentation and
- libraries (alternatively, you may also download
- `Singular-2-0-4-share.zip').
-
-`Singular-2-0-4-<uname>.tar.gz'
- contains architecture dependent executables, like the SINGULAR
- program.
-
-`<uname>' is a description of the processor and operating system for
-which SINGULAR is compiled (e.g, `ix86-Linux'). Please contact us if you
-can not find an appropriate architecture dependent archive.
-
-You can obtain these (and other) archives from
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular'.
-
-To install SINGULAR
-===================
-
-Make sure that you have approximately 12MByte of free disk space and
-follow these steps.
- 1. Simply change to the directory in which you wish to install
- SINGULAR (usually wherever you install 3rd-party software), for
- example:
-
- cd /usr/local
- or
- mkdir install;cd install
- (you do not need root privileges in this case)
-
- SINGULAR specific subdirectories will be created in such a way that
- multiple versions and multiple architecture dependent files of
- SINGULAR can peaceably coexist under the same `/usr/local' tree.
-
- 2. Unpack the archives:
-
- gzip -dc <path_to>/Singular-2-0-4-<uname>.tar.gz | tar -pxf -
- gzip -dc <path_to>/Singular-2-0-4-share.tar.gz | tar -pxf -
-
- This creates the the directory Singular/2-0-4 with
- (sub)directories which contain
- `<uname>' `Singular' and `ESingular' executables
- `LIB' SINGULAR libraries (`*.lib' files)
- `emacs' files for the SINGULAR Emacs user interface
- `info' info files of SINGULAR manual
- `html' html files of SINGULAR manual
- `doc' miscellaneous documentation files
- `examples' SINGULAR examples (`*.sing' files)
-
- For the executable to work, the directory layout must look pretty
- much like this; the executable looks for "sibling" directories at
- run-time to figure out where its SINGULAR libraries and on-line
- documentation files are. These constraints on the local directory
- layout are necessary to avoid having to hard-code pathnames into
- the executables, or require that environment variables be set
- before running the executable. In particular, you *must not move or
- copy* the SINGULAR executables to another place, but use soft-links
- instead.
-
-The following steps are optional:
-
- * Arrange that typing `Singular' at the shell prompt starts up the
- installed SINGULAR executable.
-
- If you have root permission, do:
-
- ln -s `pwd`/Singular/2-0-4/<uname>/Singular
/usr/local/bin/Singular-2-0-4
- ln -s `pwd`/Singular/2-0-4/<uname>/ESingular
/usr/local/bin/ESingular-2-0-4
- ln -s /usr/local/bin/Singular-2-0-4 /usr/local/bin/Singular
- ln -s /usr/local/bin/ESingular-2-0-4 /usr/local/bin/ESingular
-
- Otherwise, append the directory ``pwd`/Singular/2-0-4/<uname>/' to
- your `$PATH' environment variable. For the `csh' (or, `tcsh') shell
- do:
-
- set path=(`pwd`/Singular/2-0-4/<uname> $path)
-
- For the `bash' (or, `ksh') shell do:
-
- export PATH=`pwd`/Singular/2-0-4/<uname>/:$PATH
-
- You also might want to adjust your personal start-up files
- (`~/.cshrc' for `csh', `~/.tcshrc' for `tcsh', or `~/.profile' for
- `bash') accordingly, so that the `$PATH' variable is set
- automatically each time you login.
-
- *IMPORTANT:* Do _never_ move or copy the file
- `Singular/2-0-4/<uname>/Singular' to another place, but use
- soft-links instead.
-
- * If you wish to use any of following features of SINGULAR, make sure
- that the respective programs are installed on your system:
-
- *Feature* *Requires*
- running `ESingular', or `Singular' Emacs version 20 or higher, or,
- within Emacs XEmacs version 20.3 or higher
- (ESingular is only included in the
- Linux distribution, on other Unix
- platforms you can download the
- Singular emacs lisp files but we
- give no warranties for specific
- platforms).
- on-line `html' help netscape browser
- on-line `info' help info, or tkinfo texinfo browser
- programs
- TAB completion and history shared readline library, i.e.
- mechanism of ASCII-terminal `/usr/lib/libreadline.so'
- interface
- visualization of curves and surf version 0.9 or higher (only
- surfaces available for Linux and Solaris).
-
- You may download most of these programs from
-
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/'.
-
- * Customize the on-line help system:
-
- By default, on-line help is displayed in the `html' format using
- the `netscape' program.
-
- However, this behavior can be customized in several ways using the
- SINGULAR commands `system("--browser",<browser>)' and
- `system("--allow-net", 1)' (or, by starting up SINGULAR with the
- respective command line options).
-
- In particular, creating the file `Singular/2-0-4/LIB/.singularrc'
- and putting the SINGULAR command
-
- system("--allow-net", 1);
-
- in it, allows the on-line help system to fetch its `html' pages
- from Singular's WWW home site (http://www.singular.uni-kl.de) in
- case its local html pages are not found. That is, you may delete
- your local html pages, after setting this option.
-
- See also *note The online help system::, *note Command line
- options::, and *note Startup sequence::, for more details on
- customizing the on-line help system.
-
- * Add the line
-
- * Singular:(singular.hlp). A system for polynomial computations
-
- to your system-wide `dir' file (usually `/usr/info/dir' or
- `/usr/local/info/dir' and copy or soft-link the file
- `Singular/2-0-4/info/singular.hlp' to the directory of your `dir'
- file.
- This assures that the SINGULAR manual can be accessed from
- stand-alone texinfo browser programs such as `info' or `Emacs'.
- (It is not necessary for the use of the help system from within
- `Singular'.)
-
-Troubleshooting
-===============
-
- * General: SINGULAR can not find its libraries or on-line help
-
- 1. Make sure that you have read and/or execute permission the
- files and directories of the Singular distribution. If in
- doubt, `cd' to the directory where you unpacked SINGULAR, and
- do (as root, if necessary):
-
- chmod -R a+rX Singular
-
- 2. Start up SINGULAR, and issue the command
- `system("Singular");'. If this does not return the correct
- and expanded location of the SINGULAR executable, then you
- found a bug in SINGULAR, which we ask you to report (see
- below).
-
- 3. Check whether the directories containing the libraries and
- on-line help files can be found by SINGULAR: If `$bindir'
- denotes the directory where the SINGULAR executable resides,
- then SINGULAR looks for library files as follows:
- (0) the current directory
- (1) all dirs of the environment variable SINGULARPATH
- (2) `$bindir/LIB'
- (3) `$bindir/../LIB'
- (4) `/usr/local/Singular/2-0-4/LIB'
- (4) `/usr/local/Singular/LIB'
- The on-line `info' files need to be at `$bindir/../info' and
- the `html' pages at `$bindir/../html'.
-
- You can inspect the found library and `info'/`html' directories by
- starting up SINGULAR with the `--version' option, or by issuing the
- SINGULAR command `system("--version");'.
-
- * Under SuSE-Linux, ESINGULAR does not display a prompt: This is due
- to the very restrictive access rights of `/dev/pty*' of the
- standard SuSE (http:/www.suse.de) distribution (starting from
- version 6.3 on). As root, do one of the following: Either
-
- chmod 666 /dev/pty*
-
- or,
-
- chmod g+s $(which emacs)
- chgrp tty $(which emacs)
- chmod g+s $(which xemacs)
- chgrp tty $(which xemacs)
-
- See also `http://sdb.suse.de/sdb/de/html/ke_devpts-63.html' for
- details.
-
- * For `HPUX' systems:
- The /etc/termcap files which are pre-installed on these systems are
- broken which leads to messages like
-
- Name collision between 9826 9836
-
- when SINGULAR is started. To fix this, you can get fixed termcap
- files from `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils'
- by downloading the files termcap-<uname-description> and either
- replace your /etc/termcap file by the file found there, or view,
- and redo the respective changes by `diff''ing the downloaded and
- the original file.
-
- * For `ix86-Linux' systems:
- Due to some incompatibilities of shared libraries, the start-up of
- SINGULAR might fail with messages like
-
- Can not find shared library ...
-
- For DEBIAN systems, try to do `ln -s /usr/lib/libncurses.so
- /usr/lib/libncurses.so.4'.
- If this fails (and on other systems) download and install
- `Singular-2-0-4-ix86-Linux-static.tar.gz'.
-
- * For `AIX' systems:
- The default `info' program of the system is not GNU's texinfo
- browser which is used to display the on-line documentation in the
- `info' format. Therefore, the distribution of the AIX executable
- already contains the `info' browser program. If you remove this
- program, make sure that the GNU `info' program is executed if you
- call '`info'' from your shell.
-
- * For any other troubles:
- Please send an email to <address@hidden> and include
- the header which is displayed by starting up SINGULAR with the `-v'
- option, and a description of your machine (issue the command `uname
- -a' on your shell) in your report.
-
-
-File: sing.info, Node: Windows installation instructions, Next: Macintosh
installation instructions, Prev: Unix installation instructions, Up: Release
Notes
-
-E.4 Windows installation instructions
-=====================================
-
-For the impatient:
-==================
-
- * If you run Windows NT/2K/XP, make sure you are logged in with the
- `Administrator' rights.
-
- * If you have some older version of `Singular' installed, please
- uninstall it before installing `Singular-2-0-4'. It is recommended
- to install the new `Singular' in the same directory where the
- previous version was installed. Thus your existing environment will
- be used automatically.
-
- * If you have `Cygwin' or `XEmacs' installed and they do not belong
- of some previous `Singular' installation, please read the
- information below.
-
- * Execute the self-extracting installation archive and *carefully*
- follow the instructions given there. Setup will analyze your
- system, create the corresponding configuration and give you further
- tips on the installation process.
-
- * In case of troubles, see the installed files `/etc/INSTALL.txt',
- `/etc/TROUBLESHOOTING.txt' or visit the *Singular Forum* at
- `http://www.singular.uni-kl.de/forum'.
-
-Installation preliminaries
-==========================
-
-Running `Singular' on MS Windows requires that the Cygwin DLL
-(dynamically linked library) version 1.3.9 or higher is installed on
-your system (see `http://sources.redhat.com/cygwin/' for details about
-Cygwin). We install and configure `Cygwin' version 1.3.9 automatically,
-if the `BasicCygwin' component is selected (default setting).
-
-To run `ESingular' (i.e. `Singular' within its Emacs interface) on MS
-Windows requires furthermore that the `XEmacs' editor is installed on
-your system. We install and configure `XEmacs' version 21.1.13
-automatically, if the `XEmacs' component is selected.
-
-The `Singular' installation is divided into the following components
-(you see them explicitly if you choose the Custom Setup Type during the
-installation):
-`*Program Files:*'
-
- `Singular'
- Contains the `Singular' Program, documentation and example
- files.
- All files of this component are installed under the directory
- `/usr/local/Singular/2-0-4'
-
- `BasicCygwin'
- Contains the Cygwin DLL and basic tools/programs (like `bash'
- or `info') of the Cygwin environment.
- The Cygwin DLL and programs are installed in the directory
- `/bin'. Miscellaneous documentation and configuration files
- are installed into the directory `/etc'.
-
- `XEmacs'
- Contains the Cygwin port of the `XEmacs' editor (see
- `http://www.xemacs.org' for more about `XEmacs') version
- 21.1.13.
- All files of this component are installed under the directory
- `/usr/local'.
-
- `ESingular'
- Contains the `ESingular', the most comfortable Singular
- interface. Requires `XEmacs' to run.
-
-`*Remark:*'
- All essential DLLs, some programs and symbolic links are installed
- in the directory `/usr/local/Singular/2-0-4/ix86-Win', which must
- be present in your `PATH' system variable.
-
-`*Help Files:*'
-
- `WinHelp'
- Contains Singular Manual, converted to Windows help format
- (.hlp). We recommend to install it, because it is small in
- size. Moreover, we set it as default help browser in all the
- Singular executables.
-
- `HTML Help'
- Contains the "native" Singular Manual. It's not included by
- default, because it is much bigger than WinHelp, though it has
- better typesetting of mathematical formulae.
-
-The Typical Setup Type of the Singular-2-0-4-Typical.exe contains
-`BasicCygwin', `Singular', `XEmacs', `ESingular', `WinHelp' and `HTML
-Help' components. The Compact Setup Type does not contain only the `HTML
-Help' component.
-
-Downloading preliminaries
-=========================
-
-To install `Singular' on a PC running Windows 95/98/ME/NT/2K/XP, you
-need to download *one* of the following archive files:
-
-Minimal archive: Singular-2-0-4-Compact.exe (Singular-2-0-4-Compact.exe)
-(`BasicCygwin', `Singular', `WinHelp' components)
-
-Typical archive : Singular-2-0-4-Typical.exe
-(Singular-2-0-4-Typical.exe) (`BasicCygwin', `Singular', `XEmacs',
-`ESingular', `WinHelp', `HTML Help' components)
-
-You can obtain these (and other) archives either from the `WINDOWS'
-directory on the `Singular' CD or from
- `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/'.
-
-Installing Singular
-===================
-
-The recent Setup program analyzes your system, e.g. it detects whether
-Cygwin and XEmacs are present and functional. Then it gives you hints
-and/or error messages with instructions during the installation.
-
-`If you have Cygwin installed'
- If the version of `cygwin1.dll' is not less than 1.3.9, you
- will be prompted that the `BasicCygwin' component will not
- be installed. Moreover, the existing Cygwin root directory will be
- proposed as the default installation directory. You can
- accept it, then `Singular' will be placed into the existing
- Cygwin environment. If you choose another destination,
- `Singular' will use Cygwin programs anyway. If your Cygwin
- has incorrect settings (like inconsistent mount points
- among the important ones), `Singular' Setup will correct
- them.
- If setup could not detect `cygwin', present in the system, you
- can try to break the installation, start it once more, choose the
- "Custom" setup type and unselect the `BasicCygwin' component.
-
-`If you have XEmacs installed'
- The `Cygwin' port of `XEmacs' version 21.1.13 together with
- the most important packages is included in the
- distribution. The use of non-`Cygwin' ports or earlier
- `Cygwin' ports has some quirks and does not work
- properly together with `Singular' (i.e., running `ESingular'
- results in problems). Nevertheless, if you want to test the
- compatibility of `ESingular' with your own `XEmacs', just
- de-select the XEmacs component, but leave `ESingular' selected.
- If your `XEmacs' happens to be incompatible with ESingular, you can
- install just the XEmacs component and use in fact two different
- `XEmacs' programs. The setup program will search for
- `XEmacs' and packages in `<TARGETDIR>/usr/local/lib' (here
- `<TARGETDIR>' is the directory which you selected while running
- setup). If you have `Cygwin' and the Cygwin port of
- `XEmacs', you might have `XEmacs' installed there. To avoid
- overwriting your `XEmacs' files, setup will ask you what to do.
-
-Customizing Singular
-====================
-
-The following step(s) are optional:
- * To conveniently access all files on your computer, mount the drives
- of your disk(s):
-
- 1. Open a rxvt terminal (from Start->Programs->Singular
- 2.0->Tools).
-
- 2. For each drive (letter) issue the following command (the drive
- `C:' is used in the example):
-
- mount -f -s -t C: /C
-
- After mounting the drive(s) this way, you can conveniently access
- the files on a drive from the `bash' shell and from `XEmacs' using
- the `/C/' prefix. Otherwise, you need to type `/cygdrive/C' - that
- is the Cygwin convention. You can get more information on `mount'
- command by invoking `mount --help'. Command `umount' unmount the
- selected mount point.
-
- * Create your personal `HOME' directory.
- Various applications (e.g., `bash' or `XEmacs') store user-specific
- configuration/customization files in the `HOME' directory of the
- current user. During the installation, the `HOME' directory is
- globally set for all users to `/home/Singular'. To create your
- individual `HOME' directory follow these steps:
-
- 1. Create a directory (folder), say, `C:\home\MyHome'.
-
- 2. Copy all files from `/home/Singular' to `C:\home\MyHome'.
-
- 3. Set the _user_ environment variable `HOME' to
- `C:\home\MyHome':
- On Windows 95/98/ME, edit the respective line the
- `AUTOEXEC.BAT' file.
- On Windows NT/2K/XP add an entry in your `Environment' control
- panel.
-
- 4. Restart your computer (On Windows 95/98/ME).
-
- You may furthermore examine the files copied into your `HOME'
- directory and adjust (i.e. edit) them to your personal
- preferences/needs. System-wide settings are stored in the file
- `/etc/profile'.
-
-Uninstalling Singular
-=====================
-
-You can uninstall individual or all installed components by opening the
-`Software' shortcut of the `Control panel'. Simply double-click the
-`Singular' item and follow the instructions given there.
-
-For any other troubles, please send an email to
-<address@hidden> and include the header which is
-displayed by starting up `Singular' with the `-v' option, and a
-description of your machine and operating system.
-
-
-File: sing.info, Node: Macintosh installation instructions, Prev: Windows
installation instructions, Up: Release Notes
-
-E.5 Macintosh installation instructions
-=======================================
-
-For the SINGULAR version for Mac OS X refer to the Unix section. The
-SINGULAR version for Mac OS 9 is available as
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-4-html.sea.hqx'
-(documentation) and
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-4-ppc-MPW.sea.hqx'
-(binaries and libraries). The file
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.txt'
-gives details on how to finish the installation.
-
-Installation preliminaries
-==========================
-
-This is the final distribution of SINGULAR as MPW tool. Newer versions
-of SINGULAR will only be available for MacOS X (which is handled like
-other UNIX-systems). To install SINGULAR on a Macintosh (PPC only), you
-need the file `Singular-2-0-2-ppc-MPW.sea.hqx' resp.
-`Singular-2-0-2-ppc-MPW.hqx' which you can obtain by public ftp from
-`ftp://www.mathematik.uni-kl.de/pub/Math/Singular'. Furthermore, you
-need MacOS version >= 8.5 with an installed MPW shell. This version
-works also without Carbon.
-
-Installing SINGULAR on MacOS X
-==============================
-
-Please see `INSTALL_unix.html'. In contrast to other Unix systems,
-under MacOS X, SINGULAR is only available as a shell command and there
-is no Emacs interface. Enter `Singular' in a terminal under Aqua to run
-SINGULAR. Alternatively, you may choose `Terminal' as the application
-to open the file `Singular' with and put it into the dock.
-
-Installing Singular
-===================
-
- 1. Make sure that you have MPW installed on your system. See below
- for instructions on how to install MPW and how to avoid conflicts
- with the `Carbon.lib'.
-
- 2. Download the file `Singular-2-0-2-ppc-MPW.sea.hqx'.
-
- 3. Expand the downloaded file using a standard Expander (like Compact
- Pro or StuffIt) to obtain the corresponding self-extracting
- `Singular-2-0-2-ppc-MPW.sea' file.
-
- 4. Click on the self-extracting `Singular-2-0-2-ppc-MPW.sea' file.
- This will create a new folder named `Singular:' which contains the
- SINGULAR program in the subfolder `2-0-2:ppc-MPW:'. Do not change
- the structure of the subfolders.
-
- 5. Make the folder which contains the executable to the working
- directory of the MPW shell. To start SINGULAR, you need to type
- `Singular' in the MPW worksheet. Clicking on the SINGULAR icon on
- the desktop, starts up the MPW shell (the working directory of the
- MPW shell is then the directory of the executable). If you start
- the MPW shell manually, you must set the working directory to the
- directory of the SINGULAR program. You may use the directory menu
- or write into the startup file of the MPW shell the line
-
- setdirectory "{Boot}"Singular:2-0-2:ppc-MPW:
-
- if `"{Boot}"Singular:2-0-2:ppc-MPW:' is the folder of the
- executable.
-
- After unpacking, you will have a directory structure like:
-
- `Singular:2-0-2:ppc-MPW:Singular'
- Singular executable
-
- `Singular:2-0-2:ppc-MPW:libparse'
- parser for Singular libraries
-
- `Singular:2-0-2:LIB:'
- Singular libraries
-
- `Singular:2-0-2:LIB:gftables:'
- Singular gftables
-
- `Singular:2-0-2:doc:singular.idx'
- index of inline help
-
- `Singular:2-0-2:doc:singular.hlp'
- file for inline help
-
- `Singular:2-0-2:README'
- information of the distribution
-
- `Singular:2-0-2:README.hlml'
-
- `Singular:2-0-2:COPYING'
- license information
-
- `Singular:2-0-2:COPYING.html'
-
- `Singular:2-0-2:NEWS'
- news in the distribution
-
- `Singular:2-0-2:NEWS.html'
-
- `Singular:2-0-2:INSTALL'
- instructions like this file
-
- The SINGULAR libraries have a special form to work here. Do not
- use the libraries from other distributions. They are not
- compatible. A supplementary file is `Singular-2-0-2-html.sea.hqx'
- which contains the html pages. You can use this with a browser but
- not from the program SINGULAR. The self-extracting archive will
- create the folder `html:' and you may extract it at
- `"{Boot}"Singular:2-0-2:'.
-
-Installing MPW
-==============
-
-The final version of MPW is downloadable from Apple at
-`ftp://ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/'.
-Older versions of `Carbon.lib' may conflict with the latest MPW. In
-this case, you need to update `Carbon.lib' or work without it.
-
-Restrictions
-============
-
-Some typical Unix features of SINGULAR are not working with MPW, e.g.
-links and cooperation with other programs like XEmacs and xterm.
-
-For any other troubles, please send an email to
-<address@hidden> and include the header which is
-displayed by starting up SINGULAR with the `-v' option, and a
-description of your machine and operating system.
-
-
-File: sing.info, Node: Index, Prev: Release Notes, Up: Top
-
-F Index
-*******
-
- [index ]
-* Menu:
-
-* !: Special characters. (line 58)
-* !=: Special characters. (line 42)
-* != <1>: boolean expressions. (line 5)
-* ": Special characters. (line 67)
-* #: Special characters. (line 104)
-* $: Special characters. (line 107)
-* %: Special characters. (line 33)
-* &&: Special characters. (line 61)
-* && <1>: boolean operations. (line 5)
-* (: Special characters. (line 11)
-* ): Special characters. (line 11)
-* *: Special characters. (line 26)
-* **: Special characters. (line 36)
-* +: Special characters. (line 20)
-* -: Special characters. (line 23)
-* -allow-net: Command line options.
- (line 26)
-* -b: Command line options.
- (line 109)
-* -batch: Command line options.
- (line 109)
-* -browser: Command line options.
- (line 31)
-* -c: Command line options.
- (line 73)
-* -d: Command line options.
- (line 13)
-* -e: Command line options.
- (line 17)
-* -echo: Command line options.
- (line 17)
-* -emacs: Command line options.
- (line 128)
-* -emacs-dir: Command line options.
- (line 132)
-* -emacs-load: Command line options.
- (line 136)
-* -execute: Command line options.
- (line 73)
-* -h: Command line options.
- (line 23)
-* -help: Command line options.
- (line 23)
-* -min-time: Command line options.
- (line 95)
-* -MPhost: Command line options.
- (line 120)
-* -MPport: Command line options.
- (line 115)
-* -no-out: Command line options.
- (line 50)
-* -no-rc: Command line options.
- (line 39)
-* -no-stdlib: Command line options.
- (line 43)
-* -no-tty: Command line options.
- (line 53)
-* -no-warn: Command line options.
- (line 47)
-* -q: Command line options.
- (line 57)
-* -quiet: Command line options.
- (line 57)
-* -r: Command line options.
- (line 88)
-* -random: Command line options.
- (line 88)
-* -sdb: Command line options.
- (line 13)
-* -singular: Command line options.
- (line 139)
-* -ticks-per-sec: Command line options.
- (line 103)
-* -u: Command line options.
- (line 80)
-* -user-option: Command line options.
- (line 80)
-* -v: Command line options.
- (line 63)
-* -verbose: Command line options.
- (line 63)
-* ..: Special characters. (line 94)
-* .singularrc file: Startup sequence. (line 10)
-* .singularrc file, no loading: Command line options.
- (line 39)
-* /: Special characters. (line 29)
-* //: Special characters. (line 76)
-* // <1>: Special characters. (line 79)
-* // <2>: Special characters. (line 82)
-* ;: Special characters. (line 85)
-* <: Special characters. (line 54)
-* < <1>: filecmd. (line 5)
-* <=: Special characters. (line 51)
-* <= <1>: boolean expressions. (line 5)
-* <>: Special characters. (line 42)
-* <> <1>: boolean expressions. (line 5)
-* =: Special characters. (line 8)
-* ==: Special characters. (line 39)
-* == <1>: boolean expressions. (line 5)
-* >: Special characters. (line 48)
-* >=: Special characters. (line 45)
-* >= <1>: boolean expressions. (line 5)
-* ?: Special characters. (line 73)
-* ? <1>: help. (line 20)
-* [: Special characters. (line 14)
-* \: Special characters. (line 91)
-* ]: Special characters. (line 14)
-* ^: Special characters. (line 36)
-* _: Special characters. (line 98)
-* `: Special characters. (line 70)
-* ||: Special characters. (line 64)
-* || <1>: boolean operations. (line 5)
-* ~: Special characters. (line 101)
-* ~ <1>: ~. (line 5)
-* a, ordering: Extra weight vector. (line 5)
-* absValue: absValue. (line 5)
-* actionIsProper: actionIsProper. (line 5)
-* addcol: addcol. (line 5)
-* addrow: addrow. (line 5)
-* adjoint: adjoint. (line 5)
-* adjunction divisor: Adj_div. (line 65)
-* Adj_div: Adj_div. (line 5)
-* AGcode_L: AGcode_L. (line 5)
-* AGcode_Omega: AGcode_Omega. (line 5)
-* ainvar.lib: ainvar_lib. (line 5)
-* ainvar_lib: ainvar_lib. (line 5)
-* algDependent: algDependent. (line 5)
-* algebra.lib: algebra_lib. (line 5)
-* Algebraic dependence: Algebraic dependence.
- (line 5)
-* algebraic field extension: splitring. (line 35)
-* Algebraic Geometry codes: brnoeth_lib. (line 47)
-* algebra_containment: algebra_containment. (line 5)
-* algebra_lib: algebra_lib. (line 5)
-* algorithm of Bigatti, La Scala and Robbiano: Bigatti and La Scala and
Robbiano.
- (line 5)
-* algorithm of Conti and Traverso: Conti and Traverso. (line 5)
-* algorithm of Di Biase and Urbanke: Di Biase and Urbanke.
- (line 5)
-* algorithm of Hosten and Sturmfels: Hosten and Sturmfels.
- (line 5)
-* algorithm of Pottier: Pottier. (line 5)
-* alg_kernel: alg_kernel. (line 5)
-* all.lib: all_lib. (line 5)
-* allowing net access: Command line options.
- (line 26)
-* allprint: allprint. (line 5)
-* allsquarefree: allsquarefree. (line 5)
-* all_lib: all_lib. (line 5)
-* and: boolean operations. (line 5)
-* and <1>: Evaluation of logical expressions.
- (line 5)
-* Ann: Ann. (line 5)
-* annil: annil. (line 5)
-* ArnoldAction: ArnoldAction. (line 5)
-* ASCII: ASCII. (line 5)
-* ASCII links: ASCII links. (line 5)
-* attrib: attrib. (line 5)
-* A_L: A_L. (line 5)
-* A_Z: A_Z. (line 5)
-* Bachmann, Olaf: Preface. (line 105)
-* Background: Background. (line 5)
-* bareiss: bareiss. (line 5)
-* basicinvariants: basicinvariants. (line 5)
-* bernstein: bernstein. (line 5)
-* Bernstein polynomial: bernstein. (line 21)
-* betti: betti. (line 5)
-* Betti number: Syzygies and resolutions.
- (line 79)
-* Bigatti-La Scala-Robbiano algorithm: Bigatti and La Scala and Robbiano.
- (line 5)
-* BinDir: Loading of a library.
- (line 5)
-* binomial: binomial. (line 5)
-* block: Flow control. (line 5)
-* block <1>: Control structures. (line 5)
-* blowup0: blowup0. (line 5)
-* boolean expressions: boolean expressions. (line 5)
-* boolean operations: boolean operations. (line 5)
-* bracket: Usage of brackets. (line 5)
-* Branches of an Isolated Space Curve Singularity: Branches of an Isolated
Space Curve Singularity.
- (line 5)
-* break: break. (line 5)
-* break point: ~. (line 5)
-* breakpoint: breakpoint. (line 5)
-* Brieskorn lattice: gaussman_lib. (line 46)
-* Brieskorn lattice <1>: gmsring. (line 28)
-* Brieskorn lattice <2>: gmsnf. (line 23)
-* Brieskorn lattice <3>: gmscoeffs. (line 23)
-* Brieskorn lattice <4>: bernstein. (line 21)
-* Brieskorn lattice <5>: monodromy. (line 25)
-* Brieskorn lattice <6>: spectrum. (line 23)
-* Brieskorn lattice <7>: sppairs. (line 25)
-* Brieskorn lattice <8>: vfilt. (line 27)
-* Brieskorn lattice <9>: vwfilt. (line 29)
-* Brieskorn lattice <10>: tmatrix. (line 22)
-* Brieskorn lattice <11>: endvfilt. (line 26)
-* Brieskorn lattice <12>: mondromy_lib. (line 33)
-* Brill-Noether algorithm: brnoeth_lib. (line 47)
-* BrillNoether: BrillNoether. (line 5)
-* brnoeth.lib: brnoeth_lib. (line 5)
-* brnoeth_lib: brnoeth_lib. (line 5)
-* browser, command line option: Command line options.
- (line 31)
-* browser, setting the: system. (line 80)
-* browsers: The online help system.
- (line 14)
-* browsers, setting the: system. (line 80)
-* Buchberger algorithm for toric ideals: Buchberger algorithm.
- (line 5)
-* bug, ESingular: Unix installation instructions.
- (line 195)
-* busadj: busadj. (line 5)
-* C programming language: Major differences to the C
programming language.
- (line 5)
-* C, module ordering: Module orderings. (line 25)
-* c, module ordering: Module orderings. (line 64)
-* case: No case or switch statement.
- (line 5)
-* category in a library: Format of a library. (line 56)
-* Change of rings: Change of rings. (line 5)
-* changechar: changechar. (line 5)
-* changeord: changeord. (line 5)
-* changes: News and changes. (line 5)
-* changevar: changevar. (line 5)
-* char: char. (line 5)
-* characteristic exponents: invariants. (line 55)
-* Characteristic sets: Characteristic sets. (line 5)
-* charpoly: charpoly. (line 5)
-* charstr: charstr. (line 5)
-* char_series: char_series. (line 5)
-* Classification: Classification. (line 5)
-* classify: classify. (line 5)
-* classify.lib: classify_lib. (line 5)
-* classify_lib: classify_lib. (line 5)
-* cleardenom: cleardenom. (line 5)
-* close: close. (line 5)
-* closed_points: closed_points. (line 5)
-* closetex: closetex. (line 5)
-* closureFrac: closureFrac. (line 5)
-* closureRingtower: closureRingtower. (line 5)
-* clrSBmod: clrSBmod. (line 5)
-* CMtype: CMtype. (line 5)
-* Coding theory: Coding theory. (line 5)
-* coef: coef. (line 5)
-* coefficient field: number. (line 5)
-* coeffs: coeffs. (line 5)
-* colred: colred. (line 5)
-* comma: Usage of commas. (line 5)
-* Command line options: Command line options.
- (line 5)
-* command-line option, setting value of: system. (line 80)
-* command-line option, value of: system. (line 75)
-* command-line options, print all values of: system. (line 72)
-* command-line options, short help: Command line options.
- (line 23)
-* Commands: Functions and system variables.
- (line 5)
-* Commutative algebra: Commutative algebra. (line 5)
-* completeReduction: completeReduction. (line 5)
-* complex: Rings and orderings. (line 23)
-* Components of Windows installation: Windows installation instructions.
- (line 44)
-* compress: compress. (line 5)
-* concat: concat. (line 5)
-* conductor, degree: invariants. (line 55)
-* ContainedQ: ContainedQ. (line 5)
-* content: content. (line 5)
-* Conti-Traverso algorithm: Conti and Traverso. (line 5)
-* continue: continue. (line 5)
-* continue <1>: Behavior of continue.
- (line 5)
-* contract: contract. (line 5)
-* contributors: system. (line 52)
-* Control structures: Control structures. (line 5)
-* control_Matrix: control_Matrix. (line 5)
-* copyright: Preface. (line 5)
-* corank: corank. (line 5)
-* Critical points: Critical points. (line 5)
-* cup: cup. (line 5)
-* cupproduct: cupproduct. (line 5)
-* curve singularities: hnoether_lib. (line 53)
-* curve singularities <1>: parametrizesing. (line 21)
-* Customization of the Emacs interface: Customization of the Emacs interface.
- (line 5)
-* cyclic: cyclic. (line 5)
-* Cyclic roots: Cyclic roots. (line 5)
-* cyclotomic: cyclotomic. (line 5)
-* Data types: Data types. (line 5)
-* DBM links: DBM links. (line 5)
-* dbprint: dbprint. (line 5)
-* debugger: Source code debugger.
- (line 5)
-* debugging library code: Source code debugger.
- (line 5)
-* Debugging tools: Debugging tools. (line 5)
-* debugLib, option: option. (line 150)
-* debug_log: debug_log. (line 5)
-* dec1var: dec1var. (line 5)
-* decodeSV: decodeSV. (line 5)
-* def: def. (line 5)
-* def declarations: def declarations. (line 5)
-* DefaultDir: Loading of a library.
- (line 5)
-* defined: defined. (line 5)
-* deform: deform. (line 5)
-* deform.lib: deform_lib. (line 5)
-* Deformations: Deformations. (line 5)
-* deform_lib: deform_lib. (line 5)
-* defring: defring. (line 5)
-* defringp: defringp. (line 5)
-* defrings: defrings. (line 5)
-* deg: deg. (line 5)
-* degBound: degBound. (line 5)
-* degree: degree. (line 5)
-* degree <1>: Miscellaneous oddities.
- (line 51)
-* degree lexicographical ordering: Global orderings. (line 38)
-* degree reverse lexicographical ordering: Global orderings. (line 24)
-* degreepart: degreepart. (line 5)
-* delete: delete. (line 5)
-* deleteSublist: deleteSublist. (line 5)
-* delta: delta. (line 5)
-* delta invariant: deltaLoc. (line 36)
-* delta invariant <1>: delta. (line 26)
-* delta invariant.: normal. (line 37)
-* deltaLoc: deltaLoc. (line 5)
-* Demo mode: Demo mode. (line 5)
-* denominator: denominator. (line 5)
-* Depth: Depth. (line 5)
-* depth: depth. (line 5)
-* derivate: derivate. (line 5)
-* det: det. (line 5)
-* detadj: detadj. (line 5)
-* det_B: det_B. (line 5)
-* develop: develop. (line 5)
-* Di Biase-Urbanke algorithm: Di Biase and Urbanke.
- (line 5)
-* diag: diag. (line 5)
-* diag_test: diag_test. (line 5)
-* diff: diff. (line 5)
-* dim: dim. (line 5)
-* dim_slocus: dim_slocus. (line 5)
-* discr: discr. (line 5)
-* DISPLAY environment variable: The online help system.
- (line 90)
-* displayHNE: displayHNE. (line 5)
-* displayInvariants: displayInvariants. (line 5)
-* displayMultsequence: displayMultsequence. (line 5)
-* div: int operations. (line 5)
-* div <1>: Miscellaneous oddities.
- (line 6)
-* division: division. (line 5)
-* Documentation of a library: Documentation of a library.
- (line 5)
-* downloading: Downloading instructions.
- (line 5)
-* dp, global ordering: Global orderings. (line 24)
-* Dp, global ordering: Global orderings. (line 38)
-* ds, local ordering: Local orderings. (line 19)
-* Ds, local ordering: Local orderings. (line 33)
-* dsum: dsum. (line 5)
-* dual_code: dual_code. (line 5)
-* dump: dump. (line 5)
-* echo: echo. (line 5)
-* Editing input: Editing input. (line 5)
-* Editing SINGULAR input files with Emacs: Editing SINGULAR input files with
Emacs.
- (line 5)
-* EGCD: EGCD. (line 5)
-* EGCDMain: EGCDMain. (line 5)
-* eigenvals: eigenvals. (line 5)
-* elim: elim. (line 5)
-* elim.lib: elim_lib. (line 5)
-* elim1: elim1. (line 5)
-* eliminate: eliminate. (line 5)
-* Elimination: Elimination. (line 5)
-* elimlinearpart: elimlinearpart. (line 5)
-* elimpart: elimpart. (line 5)
-* elimpartanyr: elimpartanyr. (line 5)
-* elim_lib: elim_lib. (line 5)
-* else: if. (line 5)
-* Emacs: Emacs user interface.
- (line 5)
-* Emacs, a quick guide: A quick guide to Emacs.
- (line 5)
-* Emacs, customization of Singular mode: Customization of the Emacs interface.
- (line 5)
-* Emacs, editing Singular input files: Editing SINGULAR input files with
Emacs.
- (line 5)
-* Emacs, important commands: Top 20 Emacs commands.
- (line 5)
-* Emacs, overview: A quick guide to Emacs.
- (line 5)
-* Emacs, running Singular under: Running SINGULAR under Emacs.
- (line 5)
-* Emacs, Singular demo mode: Demo mode. (line 5)
-* Emacs, user interface: Emacs user interface.
- (line 5)
-* endomorphism filtration: endvfilt. (line 26)
-* endvfilt: endvfilt. (line 5)
-* environment variable, DISPLAY: The online help system.
- (line 90)
-* equidim: equidim. (line 5)
-* equidimMax: equidimMax. (line 5)
-* equidimMaxEHV: equidimMaxEHV. (line 5)
-* equiRadical: equiRadical. (line 5)
-* equising.lib: equising_lib. (line 5)
-* equisingular stratum: esStratum. (line 42)
-* equisingularity ideal: esIdeal. (line 26)
-* equising_lib: equising_lib. (line 5)
-* ERROR: ERROR. (line 5)
-* error recovery: The SINGULAR prompt. (line 5)
-* esIdeal: esIdeal. (line 5)
-* ESingular, no prompt: Unix installation instructions.
- (line 195)
-* esStratum: esStratum. (line 5)
-* eval: eval. (line 5)
-* evaluate_reynolds: evaluate_reynolds. (line 5)
-* Evaluation of logical expressions: Evaluation of logical expressions.
- (line 5)
-* evnf: evnf. (line 5)
-* example: example. (line 5)
-* Examples: Examples. (line 5)
-* Examples of ring declarations: Examples of ring declarations.
- (line 5)
-* execute: execute. (line 5)
-* exit: exit. (line 5)
-* exit <1>: quit. (line 5)
-* export: export. (line 5)
-* expression list: Data types. (line 5)
-* Ext: Computation of Ext. (line 5)
-* Ext <1>: Ext. (line 5)
-* extcurve: extcurve. (line 5)
-* extdevelop: extdevelop. (line 5)
-* extendring: extendring. (line 5)
-* extension of rings: splitring. (line 35)
-* extgcd: extgcd. (line 5)
-* Extra weight vector: Extra weight vector. (line 5)
-* Ext_R: Ext_R. (line 5)
-* facstd: facstd. (line 5)
-* Factor: Factor. (line 5)
-* factorH: factorH. (line 5)
-* factorial: factorial. (line 5)
-* Factorization: Factorization. (line 5)
-* factorize: factorize. (line 5)
-* FactorMain: FactorMain. (line 5)
-* factory: Preface. (line 5)
-* Fast lexicographical GB: Fast lexicographical GB.
- (line 5)
-* fastelim: fastelim. (line 5)
-* fastHC, option: option. (line 61)
-* fetch: fetch. (line 5)
-* fetchall: fetchall. (line 5)
-* fglm: fglm. (line 5)
-* fglm <1>: stdfglm. (line 21)
-* fglmquot: fglmquot. (line 5)
-* fglm_solve: fglm_solve. (line 5)
-* fibonacci: fibonacci. (line 5)
-* field: number. (line 5)
-* file, .singularrc: Startup sequence. (line 10)
-* filecmd: filecmd. (line 5)
-* find: find. (line 5)
-* finduni: finduni. (line 5)
-* findvars: findvars. (line 5)
-* finite field: number. (line 5)
-* Finite fields: Finite fields. (line 5)
-* finitenessTest: finitenessTest. (line 5)
-* finvar.lib: finvar_lib. (line 5)
-* finvar_lib: finvar_lib. (line 5)
-* First steps: First steps. (line 5)
-* fitting: fitting. (line 5)
-* flatten: flatten. (line 5)
-* flatteningStrat: flatteningStrat. (line 5)
-* Flow control: Flow control. (line 5)
-* for: for. (line 5)
-* Format of a library: Format of a library. (line 5)
-* Formatting output: Formatting output. (line 5)
-* fprintf: fprintf. (line 5)
-* Free resolution: Free resolution. (line 5)
-* freemodule: freemodule. (line 5)
-* freerank: freerank. (line 5)
-* Fru"bis-Kru"ger, Anne: Preface. (line 105)
-* Functions: Functions. (line 5)
-* furtherInvar: furtherInvar. (line 5)
-* further_hn_proc: further_hn_proc. (line 5)
-* galois field: number. (line 5)
-* Gauss-Manin connection: Gauss-Manin connection.
- (line 5)
-* Gauss-Manin connection <1>: gaussman_lib. (line 46)
-* Gauss-Manin connection <2>: gmsring. (line 28)
-* Gauss-Manin connection <3>: gmsnf. (line 23)
-* Gauss-Manin connection <4>: gmscoeffs. (line 23)
-* Gauss-Manin connection <5>: bernstein. (line 21)
-* Gauss-Manin connection <6>: monodromy. (line 25)
-* Gauss-Manin connection <7>: spectrum. (line 23)
-* Gauss-Manin connection <8>: sppairs. (line 25)
-* Gauss-Manin connection <9>: vfilt. (line 27)
-* Gauss-Manin connection <10>: vwfilt. (line 29)
-* Gauss-Manin connection <11>: tmatrix. (line 22)
-* Gauss-Manin connection <12>: endvfilt. (line 26)
-* Gauss-Manin connection <13>: mondromy_lib. (line 33)
-* Gauss-Manin connection <14>: spectrumnd. (line 27)
-* gaussman.lib: gaussman_lib. (line 5)
-* gaussman_lib: gaussman_lib. (line 5)
-* gaussred: gaussred. (line 5)
-* gaussred_pivot: gaussred_pivot. (line 5)
-* gauss_col: gauss_col. (line 5)
-* gauss_nf: gauss_nf. (line 5)
-* gauss_row: gauss_row. (line 5)
-* gcd: gcd. (line 5)
-* gen: gen. (line 5)
-* General command syntax: General command syntax.
- (line 5)
-* General concepts: General concepts. (line 5)
-* General purpose: General purpose. (line 5)
-* General syntax of a ring declaration: General syntax of a ring declaration.
- (line 5)
-* general weighted lexicographical ordering: Local orderings. (line 53)
-* general weighted reverse lexicographical ordering: Local orderings.
- (line 46)
-* general.lib: general_lib. (line 5)
-* general_lib: general_lib. (line 5)
-* genericid: genericid. (line 5)
-* genericmat: genericmat. (line 5)
-* genus: genus. (line 5)
-* German Umlaute: Limitations. (line 40)
-* getData: getData. (line 5)
-* getdump: getdump. (line 5)
-* getenv: system. (line 37)
-* Getting started: Getting started. (line 5)
-* Global orderings: Global orderings. (line 5)
-* GMP: Preface. (line 5)
-* gmscoeffs: gmscoeffs. (line 5)
-* gmsnf: gmsnf. (line 5)
-* gmsring: gmsring. (line 5)
-* graphics.lib: graphics_lib. (line 5)
-* graphics_lib: graphics_lib. (line 5)
-* Grassmann, Hubert: Preface. (line 108)
-* Greuel, Gert-Martin: Preface. (line 101)
-* groebner: groebner. (line 5)
-* ground field: number. (line 5)
-* group_reynolds: group_reynolds. (line 5)
-* GTZmod: GTZmod. (line 5)
-* GTZopt: GTZopt. (line 5)
-* Guidelines for writing a library: Guidelines for writing a library.
- (line 5)
-* G_a -Invariants: G_a -Invariants. (line 5)
-* H2basis: H2basis. (line 5)
-* Hamburger-Noether expansion: hnoether_lib. (line 53)
-* Hamburger-Noether expansions: Adj_div. (line 65)
-* hardware platform: system. (line 33)
-* Hcode: Hcode. (line 5)
-* headStand: headStand. (line 5)
-* help: help. (line 5)
-* help browsers: The online help system.
- (line 14)
-* help browsers, dummy: The online help system.
- (line 40)
-* help browsers, dummy <1>: The online help system.
- (line 46)
-* help browsers, emacs: The online help system.
- (line 43)
-* help browsers, html: The online help system.
- (line 21)
-* help browsers, info: The online help system.
- (line 37)
-* help browsers, netscape: The online help system.
- (line 27)
-* help browsers, setting command to use: The online help system.
- (line 93)
-* help browsers, setting the: system. (line 80)
-* help browsers, tkinfo: The online help system.
- (line 30)
-* help browsers, winhlp: The online help system.
- (line 24)
-* help browsers, xinfo: The online help system.
- (line 33)
-* help string of a library: The help string of a library.
- (line 5)
-* help string of a procedure: The help string of procedures.
- (line 5)
-* help, accessing over the net: Command line options.
- (line 26)
-* help, online help system: The online help system.
- (line 5)
-* hessenberg: hessenberg. (line 5)
-* highcorner: highcorner. (line 5)
-* hilb: hilb. (line 5)
-* Hilbert function: stdhilb. (line 24)
-* Hilbert function <1>: Hilbert function. (line 5)
-* Hilbert series: Hilbert function. (line 5)
-* HilbertSeries: HilbertSeries. (line 5)
-* HilbertWeights: HilbertWeights. (line 5)
-* hilbPoly: hilbPoly. (line 5)
-* hilbvec: hilbvec. (line 5)
-* hnexpansion: hnexpansion. (line 5)
-* hnoether.lib: hnoether_lib. (line 5)
-* hnoether_lib: hnoether_lib. (line 5)
-* Hom: Hom. (line 5)
-* HomJJ: HomJJ. (line 5)
-* homog: homog. (line 5)
-* homolog.lib: homolog_lib. (line 5)
-* homology: homology. (line 5)
-* homolog_lib: homolog_lib. (line 5)
-* Hosten-Sturmfels algorithm: Hosten and Sturmfels.
- (line 5)
-* How to enter and exit: How to enter and exit.
- (line 5)
-* How to use this manual: How to use this manual.
- (line 5)
-* howto, download: Downloading instructions.
- (line 5)
-* howto, install on Macintosh: Macintosh installation instructions.
- (line 5)
-* howto, install on Unix: Unix installation instructions.
- (line 5)
-* howto, install on Windows: Windows installation instructions.
- (line 5)
-* hres: hres. (line 5)
-* html, default help: The online help system.
- (line 21)
-* html, default help <1>: The online help system.
- (line 24)
-* hypersurface singularity: mondromy_lib. (line 33)
-* id2mod: id2mod. (line 5)
-* ideal: ideal. (line 5)
-* ideal declarations: ideal declarations. (line 5)
-* ideal expressions: ideal expressions. (line 5)
-* Ideal membership: Standard bases. (line 41)
-* ideal operations: ideal operations. (line 5)
-* ideal related functions: ideal related functions.
- (line 5)
-* ideal, toric: Toric ideals. (line 5)
-* ideals: Miscellaneous oddities.
- (line 67)
-* idealSimplify: idealSimplify. (line 5)
-* idealSplit: idealSplit. (line 5)
-* identifier: Identifier resolution.
- (line 5)
-* Identifiers, syntax of: Names. (line 5)
-* if: if. (line 5)
-* ImageGroup: ImageGroup. (line 5)
-* ImageVariety: ImageVariety. (line 5)
-* image_of_variety: image_of_variety. (line 5)
-* imap: imap. (line 5)
-* Imap, option: option. (line 143)
-* imapall: imapall. (line 5)
-* impart: impart. (line 5)
-* Implemented algorithms: Implemented algorithms.
- (line 5)
-* IN: lead. (line 18)
-* indepSet: indepSet. (line 5)
-* Index: Index. (line 5)
-* indexed names: Special characters. (line 11)
-* indSet: indSet. (line 5)
-* info: The online help system.
- (line 37)
-* info <1>: The online help system.
- (line 135)
-* INFO environment variable: The online help system.
- (line 93)
-* info in a library: Format of a library. (line 15)
-* info string of a library: The help string of a library.
- (line 5)
-* init_debug: init_debug. (line 5)
-* inout.lib: inout_lib. (line 5)
-* inout_lib: inout_lib. (line 5)
-* input: Input and output. (line 5)
-* insert: insert. (line 5)
-* instructions, downloading: Downloading instructions.
- (line 5)
-* instructions, Macintosh installation: Macintosh installation instructions.
- (line 5)
-* instructions, Unix installation: Unix installation instructions.
- (line 5)
-* instructions, Windows installation: Windows installation instructions.
- (line 5)
-* inSubring: inSubring. (line 5)
-* int: int. (line 5)
-* int declarations: int declarations. (line 5)
-* int expressions: int expressions. (line 5)
-* int operations: int operations. (line 5)
-* int related functions: int related functions.
- (line 5)
-* integer division: Miscellaneous oddities.
- (line 6)
-* integer programming: Integer programming. (line 5)
-* Interactive use: Interactive use. (line 5)
-* interface, Emacs: Emacs user interface.
- (line 5)
-* internalfunctions: internalfunctions. (line 5)
-* interpolate: interpolate. (line 5)
-* interred: interred. (line 5)
-* Interrupting SINGULAR: Interrupting SINGULAR.
- (line 5)
-* intersect: intersect. (line 5)
-* intersection: intersection. (line 5)
-* intersection multiplicity: intersection. (line 20)
-* intmat: intmat. (line 5)
-* intmat declarations: intmat declarations. (line 5)
-* intmat expressions: intmat expressions. (line 5)
-* intmat operations: intmat operations. (line 5)
-* intmat related functions: intmat related functions.
- (line 5)
-* intmat type cast: intmat type cast. (line 5)
-* intprog.lib: intprog_lib. (line 5)
-* intprog_lib: intprog_lib. (line 5)
-* Introduction: Introduction. (line 5)
-* intStrategy, option: option. (line 66)
-* intvec: intvec. (line 5)
-* intvec declarations: intvec declarations. (line 5)
-* intvec expressions: intvec expressions. (line 5)
-* intvec operations: intvec operations. (line 5)
-* intvec related functions: intvec related functions.
- (line 5)
-* Invariant theory: Invariant theory. (line 5)
-* InvariantQ: InvariantQ. (line 5)
-* invariantRing: invariantRing. (line 5)
-* InvariantRing: InvariantRing. (line 5)
-* invariants: invariants. (line 5)
-* Invariants of a finite group: Invariants of a finite group.
- (line 5)
-* invariant_basis: invariant_basis. (line 5)
-* invariant_basis_reynolds: invariant_basis_reynolds.
- (line 5)
-* invariant_ring: invariant_ring. (line 5)
-* invariant_ring_random: invariant_ring_random.
- (line 5)
-* inverse: inverse. (line 5)
-* inverse_B: inverse_B. (line 5)
-* inverse_L: inverse_L. (line 5)
-* InvertNumberMain: InvertNumberMain. (line 5)
-* invunit: invunit. (line 5)
-* irreducible power series: is_irred. (line 26)
-* isCM: isCM. (line 5)
-* isCMcod2: isCMcod2. (line 5)
-* isEquising: isEquising. (line 5)
-* isFlat: isFlat. (line 5)
-* isLocallyFree: isLocallyFree. (line 5)
-* isReg: isReg. (line 5)
-* is_active: is_active. (line 5)
-* is_bijective: is_bijective. (line 5)
-* is_ci: is_ci. (line 5)
-* is_complex: is_complex. (line 5)
-* is_homog: is_homog. (line 5)
-* is_injective: is_injective. (line 5)
-* is_irred: is_irred. (line 5)
-* is_is: is_is. (line 5)
-* is_NND: is_NND. (line 5)
-* is_reg: is_reg. (line 5)
-* is_regs: is_regs. (line 5)
-* is_surjective: is_surjective. (line 5)
-* is_zero: is_zero. (line 5)
-* jacob: jacob. (line 5)
-* jacoblift: jacoblift. (line 5)
-* jet: jet. (line 5)
-* jordan: jordan. (line 5)
-* jordanbasis: jordanbasis. (line 5)
-* jordanmatrix: jordanmatrix. (line 5)
-* jordannf: jordannf. (line 5)
-* katsura: katsura. (line 5)
-* kbase: kbase. (line 5)
-* keepring: keepring. (line 5)
-* Keilen, Thomas: Preface. (line 105)
-* kernel: preimage. (line 5)
-* kernel <1>: kernel. (line 5)
-* Kernel of module homomorphisms: Kernel of module homomorphisms.
- (line 5)
-* kill: kill. (line 5)
-* killall: killall. (line 5)
-* killattrib: killattrib. (line 5)
-* kill_rings: kill_rings. (line 5)
-* kmemory: kmemory. (line 5)
-* kohom: kohom. (line 5)
-* kontrahom: kontrahom. (line 5)
-* koszul: koszul. (line 5)
-* KoszulHomology: KoszulHomology. (line 5)
-* Kru"ger, Kai: Preface. (line 105)
-* KSpencerKernel: KSpencerKernel. (line 5)
-* laguerre: laguerre. (line 5)
-* laguerre_solve: laguerre_solve. (line 5)
-* latex.lib: latex_lib. (line 5)
-* latex_lib: latex_lib. (line 5)
-* lcm: lcm. (line 5)
-* lead: lead. (line 5)
-* leadcoef: leadcoef. (line 5)
-* leadexp: leadexp. (line 5)
-* leadmonom: leadmonom. (line 5)
-* Levandovskyy, Viktor: Preface. (line 105)
-* lexicographical ordering: Global orderings. (line 10)
-* lex_solve: lex_solve. (line 5)
-* LIB: LIB. (line 5)
-* lib2doc: lib2doc. (line 5)
-* libfac: Preface. (line 5)
-* libparse: libparse. (line 5)
-* Libraries: Libraries. (line 5)
-* library, documentation: Documentation of a library.
- (line 5)
-* library, Guidelines for writing: Guidelines for writing a library.
- (line 5)
-* library, help string: The help string of a library.
- (line 5)
-* library, info string: The help string of a library.
- (line 5)
-* library, info string <1>: template_lib. (line 138)
-* library, procedures: Procedures in a library.
- (line 5)
-* library, template: template_lib. (line 5)
-* library, template.lib: template_lib. (line 138)
-* library, typesetting of help strings: Typesetting of help strings.
- (line 5)
-* LIBs: SINGULAR libraries. (line 5)
-* lift: lift. (line 5)
-* liftstd: liftstd. (line 5)
-* lift_kbase: lift_kbase. (line 5)
-* lift_rel_kb: lift_rel_kb. (line 5)
-* Limitations: Limitations. (line 5)
-* linalg.lib: linalg_lib. (line 5)
-* linalg_lib: linalg_lib. (line 5)
-* Linear algebra: Linear algebra. (line 5)
-* linear code, dual: dual_code. (line 18)
-* linear code, systematic: sys_code. (line 28)
-* LinearActionQ: LinearActionQ. (line 5)
-* LinearCombinationQ: LinearCombinationQ. (line 5)
-* LinearizeAction: LinearizeAction. (line 5)
-* linearpart: linearpart. (line 5)
-* link: link. (line 5)
-* link <1>: Parallelization with MPtcp links.
- (line 5)
-* link declarations: link declarations. (line 5)
-* link expressions: link expressions. (line 5)
-* link related functions: link related functions.
- (line 5)
-* list: list. (line 5)
-* list declarations: list declarations. (line 5)
-* list expressions: list expressions. (line 5)
-* list operations: list operations. (line 5)
-* list related functions: list related functions.
- (line 5)
-* listvar: listvar. (line 5)
-* Loading of a library: Loading of a library.
- (line 5)
-* loadLib, option: option. (line 147)
-* loadProc, option: option. (line 153)
-* local names: Names in procedures. (line 5)
-* Local orderings: Local orderings. (line 5)
-* local weighted lexicographical ordering: Local orderings. (line 53)
-* local weighted reverse lexicographical ordering: Local orderings.
- (line 46)
-* localInvar: localInvar. (line 5)
-* locstd: locstd. (line 5)
-* Long coefficients: Long coefficients. (line 5)
-* Lossen, Christoph: Preface. (line 105)
-* lp, global ordering: Global orderings. (line 10)
-* lprint: lprint. (line 5)
-* lres: lres. (line 5)
-* ls, local ordering: Local orderings. (line 12)
-* M, ordering: Matrix orderings. (line 5)
-* Macintosh installation: Macintosh installation instructions.
- (line 5)
-* map: map. (line 5)
-* map declarations: map declarations. (line 5)
-* map expressions: map expressions. (line 5)
-* map operations: map operations. (line 5)
-* mapall: mapall. (line 5)
-* mapIsFinite: mapIsFinite. (line 5)
-* Mathematical background: Mathematical background.
- (line 5)
-* mathematical objects: Representation of mathematical
objects.
- (line 5)
-* mathinit: mathinit. (line 5)
-* matrix: matrix. (line 5)
-* matrix declarations: matrix declarations. (line 5)
-* matrix expressions: matrix expressions. (line 5)
-* matrix operations: matrix operations. (line 5)
-* Matrix orderings: Matrix orderings. (line 5)
-* matrix related functions: matrix related functions.
- (line 5)
-* matrix type cast: matrix type cast. (line 5)
-* matrix.lib: matrix_lib. (line 5)
-* matrixT1: matrixT1. (line 5)
-* matrix_lib: matrix_lib. (line 5)
-* mat_rk: mat_rk. (line 5)
-* Max: Max. (line 5)
-* maxcoef: maxcoef. (line 5)
-* maxdeg: maxdeg. (line 5)
-* maxdeg1: maxdeg1. (line 5)
-* maxideal: maxideal. (line 5)
-* mdouble: mdouble. (line 5)
-* mem, option: option. (line 156)
-* memory: memory. (line 5)
-* memory managment: memory. (line 5)
-* Milnor: Milnor and Tjurina. (line 5)
-* milnor: milnor. (line 5)
-* milnorcode: milnorcode. (line 5)
-* Min: Min. (line 5)
-* minAssChar: minAssChar. (line 5)
-* minAssGTZ: minAssGTZ. (line 5)
-* minbase: minbase. (line 5)
-* mindeg: mindeg. (line 5)
-* mindeg1: mindeg1. (line 5)
-* minimal display time, setting the: system. (line 80)
-* MinimalDecomposition: MinimalDecomposition.
- (line 5)
-* minipoly: minipoly. (line 5)
-* minor: minor. (line 5)
-* minpoly: minpoly. (line 5)
-* minres: minres. (line 5)
-* minRes, option: option. (line 77)
-* minSatMod: minSatMod. (line 5)
-* mixed Hodge structure: gaussman_lib. (line 46)
-* mixed Hodge structure <1>: spectrum. (line 23)
-* mixed Hodge structure <2>: sppairs. (line 25)
-* mixed Hodge structure <3>: vfilt. (line 27)
-* mixed Hodge structure <4>: vwfilt. (line 29)
-* mixed Hodge structure <5>: tmatrix. (line 22)
-* mixed Hodge structure <6>: endvfilt. (line 26)
-* mod: int operations. (line 5)
-* mod <1>: number operations. (line 5)
-* mod2id: mod2id. (line 5)
-* modDec: modDec. (line 5)
-* ModEqn: ModEqn. (line 5)
-* module: module. (line 5)
-* module declarations: module declarations. (line 5)
-* module expressions: module expressions. (line 5)
-* module operations: module operations. (line 5)
-* module ordering C: Module orderings. (line 25)
-* module ordering c: Module orderings. (line 64)
-* Module orderings: Module orderings. (line 5)
-* module related functions: module related functions.
- (line 5)
-* Modules and and their annihilator: Modules and their annihilator.
- (line 5)
-* modulesEqual: modulesEqual. (line 5)
-* module_containment: module_containment. (line 5)
-* modulo: modulo. (line 5)
-* mod_versal: mod_versal. (line 5)
-* molien: molien. (line 5)
-* mondromy.lib: mondromy_lib. (line 5)
-* mondromy_lib: mondromy_lib. (line 5)
-* monitor: monitor. (line 5)
-* monodromy: gaussman_lib. (line 46)
-* monodromy <1>: monodromy. (line 5)
-* monodromy <2>: monodromy. (line 25)
-* Monodromy: mondromy_lib. (line 33)
-* monodromyB: monodromyB. (line 5)
-* Monomial orderings: Monomial orderings. (line 5)
-* monomial orderings: General definitions for orderings.
- (line 5)
-* monomial orderings introduction: Introduction to orderings.
- (line 5)
-* Monomial orderings, Term orderings: Term orderings. (line 5)
-* monomials and precedence: Miscellaneous oddities.
- (line 39)
-* morsesplit: morsesplit. (line 5)
-* MP: Preface. (line 5)
-* MP links: MP links. (line 5)
-* MP, groebner basis computations: groebner. (line 33)
-* MPfile links: MPfile links. (line 5)
-* mplot: mplot. (line 5)
-* mpresmat: mpresmat. (line 5)
-* mprimdec.lib: mprimdec_lib. (line 5)
-* mprimdec_lib: mprimdec_lib. (line 5)
-* MPtcp: Parallelization with MPtcp links.
- (line 5)
-* MPtcp links: MPtcp links. (line 5)
-* mp_res_mat: mp_res_mat. (line 5)
-* mregular.lib: mregular_lib. (line 5)
-* mregular_lib: mregular_lib. (line 5)
-* mres: mres. (line 5)
-* mstd: mstd. (line 5)
-* msum: msum. (line 5)
-* mtripple: mtripple. (line 5)
-* mult: mult. (line 5)
-* mult <1>: Miscellaneous oddities.
- (line 51)
-* multBound: multBound. (line 5)
-* multcol: multcol. (line 5)
-* multiplicities, sequence of: invariants. (line 55)
-* multiplicity sequence: multsequence. (line 53)
-* multrow: multrow. (line 5)
-* multsequence: multsequence. (line 5)
-* nameof: nameof. (line 5)
-* Names: Names. (line 5)
-* names: names. (line 5)
-* Names in procedures: Names in procedures. (line 5)
-* nblocks: system. (line 63)
-* ncols: ncols. (line 5)
-* negative degree lexicographical ordering: Local orderings. (line 33)
-* negative degree reverse lexicographical ordering: Local orderings.
- (line 19)
-* negative lexicographical ordering: Local orderings. (line 12)
-* net access: Command line options.
- (line 26)
-* netscape: The online help system.
- (line 27)
-* NETSCAPE environment variable: The online help system.
- (line 93)
-* Neumann, Wolfgang: Preface. (line 108)
-* newline: string. (line 5)
-* news: News and changes. (line 5)
-* Newton non-degenerate: is_NND. (line 19)
-* Newton polygon: newtonpoly. (line 22)
-* Newton polygon <1>: is_NND. (line 19)
-* newtonpoly: newtonpoly. (line 5)
-* NF: reduce. (line 5)
-* nf_icis: nf_icis. (line 5)
-* noether: noether. (line 5)
-* noetherNormal: noetherNormal. (line 5)
-* non-english special characters: Limitations. (line 40)
-* none, option: option. (line 53)
-* normal: normal. (line 5)
-* Normal form: Standard bases. (line 24)
-* normal.lib: normal_lib. (line 5)
-* normalform: normalform. (line 5)
-* normalI: normalI. (line 5)
-* Normalization: Normalization. (line 5)
-* normalization: normal. (line 37)
-* normalization <1>: parametrize. (line 24)
-* normalization <2>: parametrizepd. (line 23)
-* normalize: normalize. (line 5)
-* normal_lib: normal_lib. (line 5)
-* not: boolean operations. (line 5)
-* notBuckets, option: option. (line 89)
-* notRegularity, option: option. (line 82)
-* notSugar, option: option. (line 86)
-* npars: npars. (line 5)
-* nres: nres. (line 5)
-* nrows: nrows. (line 5)
-* nselect: nselect. (line 5)
-* NSplaces: NSplaces. (line 5)
-* ntsolve.lib: ntsolve_lib. (line 5)
-* ntsolve_lib: ntsolve_lib. (line 5)
-* nt_solve: nt_solve. (line 5)
-* NullCone: NullCone. (line 5)
-* number: number. (line 5)
-* number declarations: number declarations. (line 5)
-* number expressions: number expressions. (line 5)
-* number operations: number operations. (line 5)
-* number related functions: number related functions.
- (line 5)
-* number_e: number_e. (line 5)
-* number_pi: number_pi. (line 5)
-* numerator: numerator. (line 5)
-* nvars: nvars. (line 5)
-* Objects: Objects. (line 5)
-* oldStd, option: option. (line 72)
-* online help: The online help system.
- (line 5)
-* open: open. (line 5)
-* opentex: opentex. (line 5)
-* opposite Hodge filtration: tmatrix. (line 22)
-* option: option. (line 5)
-* or: boolean operations. (line 5)
-* or <1>: Evaluation of logical expressions.
- (line 5)
-* orbit_variety: orbit_variety. (line 5)
-* ord: ord. (line 5)
-* orderings: General definitions for orderings.
- (line 5)
-* orderings introduction: Introduction to orderings.
- (line 5)
-* orderings, a: Extra weight vector. (line 5)
-* orderings, global: Global orderings. (line 5)
-* orderings, local: Local orderings. (line 5)
-* orderings, M: Matrix orderings. (line 5)
-* orderings, product: Product orderings. (line 5)
-* ordstr: ordstr. (line 5)
-* ord_test: ord_test. (line 5)
-* orthogonalize: orthogonalize. (line 5)
-* outer: outer. (line 5)
-* output: Input and output. (line 5)
-* par: par. (line 5)
-* Parallelization: Parallelization with MPtcp links.
- (line 5)
-* paramet.lib: paramet_lib. (line 5)
-* Parameter list: Parameter list. (line 5)
-* parameter, as numbers: number. (line 5)
-* Parameters: Parameters. (line 5)
-* parametrisation: parametrisation. (line 5)
-* parametrization: parametrisation. (line 39)
-* parametrization <1>: parametrize. (line 24)
-* parametrization <2>: parametrizepd. (line 23)
-* parametrization <3>: parametrizesing. (line 21)
-* parametrize: parametrize. (line 5)
-* parametrizepd: parametrizepd. (line 5)
-* parametrizesing: parametrizesing. (line 5)
-* paramet_lib: paramet_lib. (line 5)
-* pardeg: pardeg. (line 5)
-* parstr: parstr. (line 5)
-* partial_molien: partial_molien. (line 5)
-* path: Loading of a library.
- (line 5)
-* pause: pause. (line 5)
-* permcol: permcol. (line 5)
-* permrow: permrow. (line 5)
-* permute_L: permute_L. (line 5)
-* Pfister, Gerhard: Preface. (line 101)
-* pid: system. (line 30)
-* plot: plot. (line 5)
-* pmat: pmat. (line 5)
-* Pohl, Wilfred: Preface. (line 105)
-* Polar curves: Polar curves. (line 5)
-* poly: poly. (line 5)
-* poly declarations: poly declarations. (line 5)
-* poly expressions: poly expressions. (line 5)
-* poly operations: poly operations. (line 5)
-* poly related functions: poly related functions.
- (line 5)
-* poly.lib: poly_lib. (line 5)
-* Polynomial data: Polynomial data. (line 5)
-* poly_lib: poly_lib. (line 5)
-* posweight: posweight. (line 5)
-* pos_def: pos_def. (line 5)
-* Pottier algorithm: Pottier. (line 5)
-* power: power. (line 5)
-* power_products: power_products. (line 5)
-* preComp: preComp. (line 5)
-* Preface: Preface. (line 5)
-* preimage: preimage. (line 5)
-* prepareAss: prepareAss. (line 5)
-* prepMat: prepMat. (line 5)
-* prepSV: prepSV. (line 5)
-* presolve.lib: presolve_lib. (line 5)
-* presolve_lib: presolve_lib. (line 5)
-* Primary decomposition: Primary decomposition.
- (line 5)
-* primary_char0: primary_char0. (line 5)
-* primary_char0_no_molien: primary_char0_no_molien.
- (line 5)
-* primary_char0_no_molien_random: primary_char0_no_molien_random.
- (line 5)
-* primary_char0_random: primary_char0_random.
- (line 5)
-* primary_charp: primary_charp. (line 5)
-* primary_charp_no_molien: primary_charp_no_molien.
- (line 5)
-* primary_charp_no_molien_random: primary_charp_no_molien_random.
- (line 5)
-* primary_charp_random: primary_charp_random.
- (line 5)
-* primary_charp_without: primary_charp_without.
- (line 5)
-* primary_charp_without_random: primary_charp_without_random.
- (line 5)
-* primary_invariants: primary_invariants. (line 5)
-* primary_invariants_random: primary_invariants_random.
- (line 5)
-* primdec.lib: primdec_lib. (line 5)
-* PrimdecA: PrimdecA. (line 5)
-* PrimdecB: PrimdecB. (line 5)
-* primdecGTZ: primdecGTZ. (line 5)
-* primdecSY: primdecSY. (line 5)
-* primdec_lib: primdec_lib. (line 5)
-* prime: prime. (line 5)
-* primeClosure: primeClosure. (line 5)
-* primecoeffs: primecoeffs. (line 5)
-* primefactors: primefactors. (line 5)
-* primes: primes. (line 5)
-* primitiv.lib: primitiv_lib. (line 5)
-* primitive: primitive. (line 5)
-* primitive element: primitive. (line 34)
-* primitive_extra: primitive_extra. (line 5)
-* primitiv_lib: primitiv_lib. (line 5)
-* primTest: primTest. (line 5)
-* print: print. (line 5)
-* printf: printf. (line 5)
-* printlevel: printlevel. (line 5)
-* proc: proc. (line 5)
-* proc declaration: proc declaration. (line 5)
-* Procedure commands: Procedure commands. (line 5)
-* Procedure definition: Procedure definition.
- (line 5)
-* procedure, ASCII help: mdouble. (line 19)
-* procedure, ASCII/Texinfo help: msum. (line 37)
-* procedure, texinfo help: mtripple. (line 23)
-* Procedures: Procedures. (line 5)
-* Procedures and LIB: Procedures and LIB. (line 5)
-* Procedures and libraries: Procedures and libraries.
- (line 5)
-* Procedures in a library: Procedures in a library.
- (line 5)
-* procedures, help string: The help string of procedures.
- (line 5)
-* procedures, static: Procedure definition.
- (line 5)
-* product: product. (line 5)
-* Product orderings: Product orderings. (line 5)
-* progress watch: option. (line 95)
-* prompt: The SINGULAR prompt. (line 5)
-* prompt, option: option. (line 159)
-* prot, option: option. (line 95)
-* protocoll of computations: option. (line 95)
-* prune: prune. (line 5)
-* Puiseux expansion: hnoether_lib. (line 53)
-* Puiseux pairs: Puiseux pairs. (line 5)
-* Puiseux pairs <1>: invariants. (line 55)
-* puiseux2generators: puiseux2generators. (line 5)
-* qhmatrix: qhmatrix. (line 5)
-* qhmoduli.lib: qhmoduli_lib. (line 5)
-* qhmoduli_lib: qhmoduli_lib. (line 5)
-* qhspectrum: qhspectrum. (line 5)
-* qhweight: qhweight. (line 5)
-* qring: qring. (line 5)
-* qring <1>: Miscellaneous oddities.
- (line 73)
-* qring declaration: qring declaration. (line 5)
-* quickclass: quickclass. (line 5)
-* quit: quit. (line 5)
-* quot: quot. (line 5)
-* quote: quote. (line 5)
-* quotient: quotient. (line 5)
-* Quotient: Quotient. (line 5)
-* QuotientEquations: QuotientEquations. (line 5)
-* QuotientMain: QuotientMain. (line 5)
-* radical: radical. (line 5)
-* radicalEHV: radicalEHV. (line 5)
-* rad_con: rad_con. (line 5)
-* random: random. (line 5)
-* random number generator, seed: system. (line 80)
-* random.lib: random_lib. (line 5)
-* randomBinomial: randomBinomial. (line 5)
-* randomid: randomid. (line 5)
-* randomLast: randomLast. (line 5)
-* randommat: randommat. (line 5)
-* random_lib: random_lib. (line 5)
-* read: read. (line 5)
-* reading, option: option. (line 162)
-* readline: Preface. (line 5)
-* real: Rings and orderings. (line 23)
-* redefine, option: option. (line 165)
-* redSB, option: option. (line 101)
-* redTail, option: option. (line 105)
-* redThrough, option: option. (line 111)
-* reduce: reduce. (line 5)
-* reduced standard basis: option. (line 101)
-* reduction: reduction. (line 5)
-* ReesAlgebra: ReesAlgebra. (line 5)
-* reesclos.lib: reesclos_lib. (line 5)
-* reesclos_lib: reesclos_lib. (line 5)
-* References: References. (line 5)
-* regularity: regularity. (line 5)
-* regularity <1>: Syzygies and resolutions.
- (line 79)
-* reg_CM: reg_CM. (line 5)
-* reg_curve: reg_curve. (line 5)
-* reg_moncurve: reg_moncurve. (line 5)
-* relative_orbit_variety: relative_orbit_variety.
- (line 5)
-* Release Notes: Release Notes. (line 5)
-* relweight: relweight. (line 5)
-* Remainder: Remainder. (line 5)
-* RemainderMain: RemainderMain. (line 5)
-* repart: repart. (line 5)
-* representation, math objects: Representation of mathematical
objects.
- (line 5)
-* res: res. (line 5)
-* reservedName: reservedName. (line 5)
-* Resolution: Resolution. (line 5)
-* resolution: resolution. (line 5)
-* resolution declarations: resolution declarations.
- (line 5)
-* resolution expressions: resolution expressions.
- (line 5)
-* resolution related functions: resolution related functions.
- (line 5)
-* resolution, computation of: res. (line 7)
-* resolution, hilbert-driven: hres. (line 5)
-* resolution, La Scala's method: lres. (line 5)
-* resultant: resultant. (line 5)
-* return: return. (line 5)
-* return type of procedures: Return type of procedures.
- (line 5)
-* returnSB, option: option. (line 56)
-* reverse lexicographical ordering: Global orderings. (line 17)
-* ReynoldsImage: ReynoldsImage. (line 5)
-* ReynoldsOperator: ReynoldsOperator. (line 5)
-* reynolds_molien: reynolds_molien. (line 5)
-* ring: ring. (line 5)
-* ring declarations: ring declarations. (line 5)
-* ring operations: ring operations. (line 5)
-* ring related functions: ring related functions.
- (line 5)
-* ring.lib: ring_lib. (line 5)
-* Rings and orderings: Rings and orderings. (line 5)
-* Rings and standard bases: Rings and standard bases.
- (line 5)
-* ringtensor: ringtensor. (line 5)
-* ringweights: ringweights. (line 5)
-* ring_lib: ring_lib. (line 5)
-* rinvar.lib: rinvar_lib. (line 5)
-* rinvar_lib: rinvar_lib. (line 5)
-* rMacaulay: rMacaulay. (line 5)
-* rmx: rmx. (line 5)
-* rm_unitcol: rm_unitcol. (line 5)
-* rm_unitrow: rm_unitrow. (line 5)
-* RootDir: Loading of a library.
- (line 5)
-* Roots: Roots. (line 5)
-* RootsMain: RootsMain. (line 5)
-* rowred: rowred. (line 5)
-* rp, global ordering: Global orderings. (line 17)
-* Running SINGULAR under Emacs: Running SINGULAR under Emacs.
- (line 5)
-* rvalue: No rvalue of increments and
assignments.
- (line 5)
-* rvar: rvar. (line 5)
-* SameQ: SameQ. (line 5)
-* sat: sat. (line 5)
-* Saturation: Saturation. (line 5)
-* Schmidt, Jens: Preface. (line 108)
-* Scho"nemann, Hans: Preface. (line 101)
-* Schulze, Mathias: Preface. (line 105)
-* SDB breakpoint: Source code debugger.
- (line 55)
-* SDB debugger: Source code debugger.
- (line 55)
-* sdb, source code debugger: Source code debugger.
- (line 5)
-* SearchPath: Loading of a library.
- (line 5)
-* secondary_and_irreducibles_no_molien: secondary_and_irreducibles_no_molien.
- (line 5)
-* secondary_char0: secondary_char0. (line 5)
-* secondary_charp: secondary_charp. (line 5)
-* secondary_not_cohen_macaulay: secondary_not_cohen_macaulay.
- (line 5)
-* secondary_no_molien: secondary_no_molien. (line 5)
-* select: select. (line 5)
-* select1: select1. (line 5)
-* semiCMcod2: semiCMcod2. (line 5)
-* semigroup of values: invariants. (line 55)
-* separateHNE: separateHNE. (line 5)
-* separator: separator. (line 5)
-* setenv: system. (line 41)
-* sethnering: sethnering. (line 5)
-* setring: setring. (line 5)
-* sh: system. (line 26)
-* short: short. (line 5)
-* shortid: shortid. (line 5)
-* show: show. (line 5)
-* showrecursive: showrecursive. (line 5)
-* simplex: simplex. (line 5)
-* simplexOut: simplexOut. (line 5)
-* simplify: simplify. (line 5)
-* SimplifyIdeal: SimplifyIdeal. (line 5)
-* sing.lib: sing_lib. (line 5)
-* Singular: system. (line 68)
-* SINGULAR libraries: SINGULAR libraries. (line 5)
-* Singular, customization of Emacs user interface: Customization of the Emacs
interface.
- (line 5)
-* Singular, demo mode: Demo mode. (line 5)
-* Singular, editing input files with Emacs: Editing SINGULAR input files with
Emacs.
- (line 5)
-* Singular, important commands of Emacs interface: Top 20 Emacs commands.
- (line 5)
-* Singular, running within Emacs: Running SINGULAR under Emacs.
- (line 5)
-* SINGULARHIST: Editing input. (line 5)
-* Singularities: Singularities. (line 5)
-* singularities: gaussman_lib. (line 46)
-* singularities <1>: gmsring. (line 28)
-* singularities <2>: gmsnf. (line 23)
-* singularities <3>: gmscoeffs. (line 23)
-* singularities <4>: bernstein. (line 21)
-* singularities <5>: monodromy. (line 25)
-* singularities <6>: spectrum. (line 23)
-* singularities <7>: sppairs. (line 25)
-* singularities <8>: vfilt. (line 27)
-* singularities <9>: vwfilt. (line 29)
-* singularities <10>: tmatrix. (line 22)
-* singularities <11>: endvfilt. (line 26)
-* singularities <12>: spectrumnd. (line 27)
-* singularity: singularity. (line 5)
-* SINGULARPATH: Loading of a library.
- (line 5)
-* singularrc: Startup sequence. (line 10)
-* sing_lib: sing_lib. (line 5)
-* size: size. (line 5)
-* size <1>: Miscellaneous oddities.
- (line 67)
-* skewmat: skewmat. (line 5)
-* sleep: status. (line 5)
-* slocus: slocus. (line 5)
-* solve: solve. (line 5)
-* solve.lib: solve_lib. (line 5)
-* solvelinearpart: solvelinearpart. (line 5)
-* solve_IP: solve_IP. (line 5)
-* solve_lib: solve_lib. (line 5)
-* sort: sort. (line 5)
-* sortandmap: sortandmap. (line 5)
-* sortier: sortier. (line 5)
-* sortvars: sortvars. (line 5)
-* sortvec: sortvec. (line 5)
-* Source code debugger, invocation: Command line options.
- (line 13)
-* source code debugger, sdb: Source code debugger.
- (line 5)
-* spadd: spadd. (line 5)
-* sparseid: sparseid. (line 5)
-* sparsemat: sparsemat. (line 5)
-* sparsematrix: sparsematrix. (line 5)
-* sparsepoly: sparsepoly. (line 5)
-* sparsetriag: sparsetriag. (line 5)
-* spcurve.lib: spcurve_lib. (line 5)
-* spcurve_lib: spcurve_lib. (line 5)
-* Special characters: Special characters. (line 5)
-* special characters, non-english: Limitations. (line 40)
-* specialModulesEqual: specialModulesEqual. (line 5)
-* spectral pairs: gaussman_lib. (line 46)
-* spectral pairs <1>: sppairs. (line 25)
-* spectral pairs <2>: vwfilt. (line 29)
-* spectrum: gaussman_lib. (line 46)
-* spectrum <1>: spectrum. (line 5)
-* spectrum <2>: spectrum. (line 23)
-* spectrum <3>: sppairs. (line 25)
-* spectrum <4>: vfilt. (line 27)
-* spectrum <5>: vwfilt. (line 29)
-* spectrum <6>: spectrumnd. (line 27)
-* spectrum.lib: spectrum_lib. (line 5)
-* spectrumnd: spectrumnd. (line 5)
-* spectrum_lib: spectrum_lib. (line 5)
-* spgamma: spgamma. (line 5)
-* spgeomgenus: spgeomgenus. (line 5)
-* spissemicont: spissemicont. (line 5)
-* split: split. (line 5)
-* splitring: splitring. (line 5)
-* splitting: splitting. (line 5)
-* spmilnor: spmilnor. (line 5)
-* spmul: spmul. (line 5)
-* spnf: spnf. (line 5)
-* sppairs: sppairs. (line 5)
-* sppnf: sppnf. (line 5)
-* sppprint: sppprint. (line 5)
-* spprint: spprint. (line 5)
-* sprintf: sprintf. (line 5)
-* spsemicont: spsemicont. (line 5)
-* spsub: spsub. (line 5)
-* SQFRNorm: SQFRNorm. (line 5)
-* SQFRNormMain: SQFRNormMain. (line 5)
-* squarefree: squarefree. (line 5)
-* sres: sres. (line 5)
-* StabEqn: StabEqn. (line 5)
-* StabEqnId: StabEqnId. (line 5)
-* StabOrder: StabOrder. (line 5)
-* staircase: staircase. (line 5)
-* Standard bases: Standard bases. (line 5)
-* standard.lib: standard_lib. (line 10)
-* standard_lib: standard_lib. (line 10)
-* Startup sequence: Startup sequence. (line 5)
-* static procedures: Procedure definition.
- (line 5)
-* status: status. (line 5)
-* std: std. (line 5)
-* stdfglm: stdfglm. (line 5)
-* stdhilb: stdhilb. (line 5)
-* stdModulesEqual: stdModulesEqual. (line 5)
-* Stobbe, Ru"diger: Preface. (line 108)
-* stratify: stratify. (line 5)
-* stratify.lib: stratify_lib. (line 5)
-* stratify_lib: stratify_lib. (line 5)
-* string: string. (line 5)
-* string <1>: Miscellaneous oddities.
- (line 83)
-* string declarations: string declarations. (line 5)
-* string expressions: string expressions. (line 5)
-* string operations: string operations. (line 5)
-* string related functions: string related functions.
- (line 5)
-* string type cast: string type cast. (line 5)
-* stripHNE: stripHNE. (line 5)
-* submat: submat. (line 5)
-* subrInterred: subrInterred. (line 5)
-* subst: subst. (line 5)
-* substitute: substitute. (line 5)
-* sugarCrit, option: option. (line 118)
-* sum: sum. (line 5)
-* surf.lib: surf_lib. (line 5)
-* surf_lib: surf_lib. (line 5)
-* SuSE, ESingular bug: Unix installation instructions.
- (line 195)
-* suspend: status. (line 5)
-* SV-decoding algorithm: decodeSV. (line 25)
-* SV-decoding algorithm, preprocessing: prepSV. (line 57)
-* swap: swap. (line 5)
-* switch: No case or switch statement.
- (line 5)
-* Symbolic-numerical solving: Symbolic-numerical solving.
- (line 5)
-* symmat: symmat. (line 5)
-* sym_gauss: sym_gauss. (line 5)
-* system: system. (line 5)
-* System variables: System variables. (line 5)
-* system, -: system. (line 72)
-* system, -long_option_name: system. (line 75)
-* system, -long_option_name=value: system. (line 80)
-* system, browsers: system. (line 88)
-* system, contributors: system. (line 52)
-* system, gen: system. (line 56)
-* system, getenv: system. (line 37)
-* system, nblocks: system. (line 63)
-* system, pid: system. (line 30)
-* system, setenv: system. (line 41)
-* system, sh: system. (line 26)
-* system, Singular: system. (line 68)
-* system, tty: system. (line 46)
-* system, uname: system. (line 33)
-* system, version: system. (line 49)
-* sys_code: sys_code. (line 5)
-* syz: syz. (line 5)
-* Syzygies and resolutions: Syzygies and resolutions.
- (line 5)
-* T1: T1 and T2. (line 5)
-* T2: T1 and T2. (line 5)
-* tab: tab. (line 5)
-* Table: Table. (line 5)
-* tangentcone: tangentcone. (line 5)
-* tau_es: tau_es. (line 5)
-* Template for writing a library: template_lib. (line 5)
-* template.lib: template_lib. (line 128)
-* template.lib <1>: template_lib. (line 138)
-* template_lib: template_lib. (line 5)
-* template_lib <1>: template_lib. (line 128)
-* tensor: tensor. (line 5)
-* tensorMod: tensorMod. (line 5)
-* term orderings: General definitions for orderings.
- (line 5)
-* term orderings introduction: Introduction to orderings.
- (line 5)
-* testPrimary: testPrimary. (line 5)
-* tex: tex. (line 5)
-* texdemo: texdemo. (line 5)
-* texfactorize: texfactorize. (line 5)
-* texmap: texmap. (line 5)
-* texname: texname. (line 5)
-* texobj: texobj. (line 5)
-* texpoly: texpoly. (line 5)
-* texproc: texproc. (line 5)
-* texring: texring. (line 5)
-* The online help system: The online help system.
- (line 5)
-* The SINGULAR language: The SINGULAR language.
- (line 5)
-* time limit on computations: groebner. (line 33)
-* timeFactorize: timeFactorize. (line 5)
-* timer: timer. (line 5)
-* timer <1>: rtimer. (line 5)
-* timer resolution, setting the: system. (line 80)
-* timeStd: timeStd. (line 5)
-* Tjurina: Milnor and Tjurina. (line 5)
-* Tjurina <1>: Tjurina. (line 5)
-* tjurina: tjurina. (line 5)
-* Tjurina number: deltaLoc. (line 36)
-* tkinfo: The online help system.
- (line 30)
-* tmatrix: tmatrix. (line 5)
-* tolessvars: tolessvars. (line 5)
-* Top 20 Emacs commands: Top 20 Emacs commands.
- (line 5)
-* Tor: Tor. (line 5)
-* toric ideals: Toric ideals. (line 5)
-* Toric ideals and integer programming: Toric ideals and integer programming.
- (line 5)
-* toric.lib: toric_lib. (line 5)
-* toric_ideal: toric_ideal. (line 5)
-* toric_lib: toric_lib. (line 5)
-* toric_std: toric_std. (line 5)
-* trace: trace. (line 5)
-* TRACE: TRACE var. (line 5)
-* TransferIdeal: TransferIdeal. (line 5)
-* transpose: transpose. (line 5)
-* triagmatrix: triagmatrix. (line 5)
-* triang.lib: triang_lib. (line 5)
-* triangL: triangL. (line 5)
-* triangLfak: triangLfak. (line 5)
-* triangLf_solve: triangLf_solve. (line 5)
-* triangL_solve: triangL_solve. (line 5)
-* triangM: triangM. (line 5)
-* triangMH: triangMH. (line 5)
-* triangM_solve: triangM_solve. (line 5)
-* triang_lib: triang_lib. (line 5)
-* triang_solve: triang_solve. (line 5)
-* Tricks and pitfalls: Tricks and pitfalls. (line 5)
-* triMNewton: triMNewton. (line 5)
-* tty: system. (line 46)
-* type: type. (line 5)
-* Type casting: Type conversion and casting.
- (line 45)
-* Type conversion: Type conversion and casting.
- (line 8)
-* typeof: typeof. (line 5)
-* Typesetting of help strings: Typesetting of help strings.
- (line 5)
-* T_1: T_1. (line 5)
-* T_12: T_12. (line 5)
-* T_2: T_2. (line 5)
-* uname: system. (line 33)
-* unitmat: unitmat. (line 5)
-* Unix installation: Unix installation instructions.
- (line 5)
-* untyped definitions: def. (line 5)
-* UpperMonomials: UpperMonomials. (line 5)
-* uressolve: uressolve. (line 5)
-* ures_solve: ures_solve. (line 5)
-* usage, option: option. (line 168)
-* user interface, Emacs: Emacs user interface.
- (line 5)
-* U_D_O: U_D_O. (line 5)
-* V-filtration: gaussman_lib. (line 46)
-* V-filtration <1>: spectrum. (line 23)
-* V-filtration <2>: sppairs. (line 25)
-* V-filtration <3>: vfilt. (line 27)
-* V-filtration <4>: vwfilt. (line 29)
-* V-filtration <5>: tmatrix. (line 22)
-* V-filtration <6>: endvfilt. (line 26)
-* valvars: valvars. (line 5)
-* vandermonde: vandermonde. (line 5)
-* var: var. (line 5)
-* varstr: varstr. (line 5)
-* vdim: vdim. (line 5)
-* vector: vector. (line 5)
-* vector declarations: vector declarations. (line 5)
-* vector expressions: vector expressions. (line 5)
-* vector operations: vector operations. (line 5)
-* vector related functions: vector related functions.
- (line 5)
-* versal: versal. (line 5)
-* version: system. (line 49)
-* version in a library: Format of a library. (line 40)
-* vfilt: vfilt. (line 5)
-* Visualization: Visualization. (line 5)
-* voice: voice. (line 5)
-* vwfilt: vwfilt. (line 5)
-* watchdog: watchdog. (line 5)
-* wedge: wedge. (line 5)
-* Weierstrass: Weierstrass. (line 5)
-* Weierstrass semigroup: brnoeth_lib. (line 47)
-* weight: weight. (line 5)
-* weight filtration: gaussman_lib. (line 46)
-* weight filtration <1>: sppairs. (line 25)
-* weight filtration <2>: vwfilt. (line 29)
-* weighted lexicographical ordering: Global orderings. (line 59)
-* weighted reverse lexicographical ordering: Global orderings.
- (line 52)
-* weightM, option: option. (line 122)
-* Westenberger, Eric: Preface. (line 105)
-* which: which. (line 5)
-* while: while. (line 5)
-* Wichmann, Tim: Preface. (line 105)
-* Windows installation: Windows installation instructions.
- (line 5)
-* Windows installation, components: Windows installation instructions.
- (line 44)
-* wp, global ordering: Global orderings. (line 52)
-* WP, global ordering: Global orderings. (line 59)
-* write: write. (line 5)
-* writelist: writelist. (line 5)
-* ws, local ordering: Local orderings. (line 46)
-* Ws, local ordering: Local orderings. (line 53)
-* xdvi: xdvi. (line 5)
-* xinfo: The online help system.
- (line 33)
-* XINFO environment variable: The online help system.
- (line 93)
-* XTERM environment variable: The online help system.
- (line 93)
-* zerodec: zerodec. (line 5)
-* zeroMod: zeroMod. (line 5)
-* zeroOpt: zeroOpt. (line 5)
-* ZeroSet: ZeroSet. (line 5)
-* zeroset.lib: zeroset_lib. (line 5)
-* zeroset_lib: zeroset_lib. (line 5)
-
-<font size="-1">
- User manual for <a
href="http://www.singular.uni-kl.de/"><i>Singular</i></a> version 2-0-4,
October 2002,
-generated by <a href="http://www.nongnu.org/texi2html/"><i>texi2html</i></a>.
-</font>
-
-</body>
-</html>
- texinfo/texi2html ChangeLog NEWS TODO texi2html...,
Patrice Dumas <=