texinfo-commits
[Top][All Lists]
Advanced

[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">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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">
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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">
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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">
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]