Mock Version: 1.4.14 Mock Version: 1.4.14 ENTER ['do'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target riscv64 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'], chrootPath='/var/lib/mock/f31-build-89457-32073/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'en_US.UTF-8'}shell=Falselogger=timeout=345600uid=986gid=135user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target riscv64 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'en_US.UTF-8'} and shell False Building target platforms: riscv64 Building for target riscv64 setting SOURCE_DATE_EPOCH=1564012800 Wrote: /builddir/build/SRPMS/gap-pkg-edim-1.3.3-6.fc31.src.rpm Child return code was: 0 ENTER ['do'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target riscv64 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'], chrootPath='/var/lib/mock/f31-build-89457-32073/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'en_US.UTF-8'}shell=Falselogger=timeout=345600uid=986gid=135user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target riscv64 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'en_US.UTF-8'} and shell False Building target platforms: riscv64 Building for target riscv64 setting SOURCE_DATE_EPOCH=1564012800 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.iAYWin + umask 022 + cd /builddir/build/BUILD + cd /builddir/build/BUILD + rm -rf EDIM-1.3.3 + /usr/bin/bzip2 -dc /builddir/build/SOURCES/edim-1.3.3.tar.bz2 + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd EDIM-1.3.3 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + for fil in doc/edim.bib doc/edim.bbl + iconv -f iso8859-1 -t utf-8 doc/edim.bib + touch -r doc/edim.bib doc/edim.bib.utf8 + mv -f doc/edim.bib.utf8 doc/edim.bib + for fil in doc/edim.bib doc/edim.bbl + iconv -f iso8859-1 -t utf-8 doc/edim.bbl + touch -r doc/edim.bbl doc/edim.bbl.utf8 + mv -f doc/edim.bbl.utf8 doc/edim.bbl + RPM_EC=0 BUILDSTDERR: ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.Z6abPm + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.3 + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + ./configure /usr/lib/gap + make -j4 + ln -s /usr/lib/gap/doc ../../doc + mkdir ../pkg + ln -s ../EDIM-1.3.3 ../pkg + gap -l '/builddir/build/BUILD/EDIM-1.3.3/..;/usr/lib/gap' Using /usr/lib/gap as GAP build directory. Using config in /usr/lib/gap/sysinfo.gap-default64 Created ./Makefile-default64 with link from ./Makefile if test ! -d bin; then mkdir bin; fi if test ! -d bin/riscv64-redhat-linux-gnu-default64-kv3; then mkdir -p bin/riscv64-redhat-linux-gnu-default64-kv3; fi /usr/lib/gap/bin/riscv64-redhat-linux-gnu-default64-kv3/gac -d -o bin/riscv64-redhat-linux-gnu-default64-kv3/ediv.so src/ediv.c /bin/sh /usr/bin/libtool --mode=compile gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fasynchronous-unwind-tables -fstack-clash-protection -o /tmp/gac41dXBPr/29894_ediv.lo -I/usr/lib/gap/gen -I/usr/lib/gap/src -I/usr/lib/gap -DHAVE_CONFIG_H -DSYS_DEFAULT_PATHS=/usr/lib/gap -c src/ediv.c libtool: compile: gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gap/gen -I/usr/lib/gap/src -I/usr/lib/gap -DHAVE_CONFIG_H -DSYS_DEFAULT_PATHS=/usr/lib/gap -c src/ediv.c -fPIC -DPIC -o /tmp/gac41dXBPr/.libs/29894_ediv.o libtool: compile: gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fasynchronous-unwind-tables -fstack-clash-protection -I/usr/lib/gap/gen -I/usr/lib/gap/src -I/usr/lib/gap -DHAVE_CONFIG_H -DSYS_DEFAULT_PATHS=/usr/lib/gap -c src/ediv.c -o /tmp/gac41dXBPr/29894_ediv.o >/dev/null 2>&1 /bin/sh /usr/bin/libtool --mode=link gcc -module -avoid-version -rpath /usr/lib64 -Wl,-z,relro -Wl,--as-needed -o bin/riscv64-redhat-linux-gnu-default64-kv3/ediv.so /tmp/gac41dXBPr/29894_ediv.lo libtool: link: gcc -shared -fPIC -DPIC /tmp/gac41dXBPr/.libs/29894_ediv.o -Wl,-z -Wl,relro -Wl,--as-needed -Wl,-soname -Wl,ediv.so -o bin/riscv64-redhat-linux-gnu-default64-kv3/.libs/ediv.so libtool: link: ar cru bin/riscv64-redhat-linux-gnu-default64-kv3/.libs/ediv.a /tmp/gac41dXBPr/29894_ediv.o libtool: link: ranlib bin/riscv64-redhat-linux-gnu-default64-kv3/.libs/ediv.a libtool: link: ( cd "bin/riscv64-redhat-linux-gnu-default64-kv3/.libs" && rm -f "ediv.la" && ln -s "../ediv.la" "ediv.la" ) rm -f /tmp/gac41dXBPr/29894_ediv.lo ┌───────┐ GAP 4.10.2 of 19-Jun-2019 │ GAP │ https://www.gap-system.org └───────┘ Architecture: riscv64-redhat-linux-gnu-default64-kv3 Configuration: gmp 6.1.2, readline Loading the library and packages ... #I autpgrp package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I alnuth package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I crisp package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I ctbllib package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I factint package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I fga package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I irredsol package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I laguna package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I polenta package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I polycyclic package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I resclasses package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I sophus package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I tomlib package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') Packages: GAPDoc 1.6.3, PrimGrp 3.3.2, SmallGrp 1.3, TransGrp 2.0.4 Try '??help' for help. See also '?copyright', '?cite' and '?authors' gap> gap> gap> gap> gap> true gap> gap> #I Composing XML document . . . #I Parsing XML document . . . #I Checking XML structure . . . #I Text version (also produces labels for hyperlinks): #I First run, collecting cross references, index, toc, bib and so on . . . #I Table of contents complete. #I Producing the index . . . #I Reading bibliography data files . . . #I BibTeX format: edim #I checking and translating to BibXMLext . . . #I Writing bibliography . . . #I Second run through document . . . #I Producing simplified search strings and labels for hyperlinks . . . #I Constructing LaTeX version and calling pdflatex: #I Writing LaTeX file, 4 x pdflatex with bibtex and makeindex, #I Writing manual.six file ... #I Finally the HTML version . . . #I First run, collecting cross references, index, toc, bib and so on . . . #I Table of contents complete. #I Producing the index . . . #I Writing bibliography . . . #I Second run through document . . . #I - also HTML version for MathJax . . . #I First run, collecting cross references, index, toc, bib and so on . . . #I Table of contents complete. #I Producing the index . . . #I Writing bibliography . . . #I Second run through document . . . rec( Name := "edim", attributes := rec( ), bibdata := "edim", bibentries := [ , , , ], bibkeys := [ "D82", "HMM98", "HS79", "L98" ], biblabels := [ "Dix82", "HMM98", "HS79", "Lüb02" ], bibpath := dir("doc/"), bibstrings := [ [ 0, 0 ] ], bibtext := "\n

\n

\n[Dix82] Dixon, J. D.<\ /b>,\n Exact Solution of Linear Equations Using p-adic Exp\ ansions,\n Numer. Math.,\n 40\n (1982),\n 137--141.\n

\n\n\n

\ \n

\n[HMM98] Havas, G., Majewski, B. S. and Matthews, K. R.,\n Extended gcd and Hermite normal form algorithms via lattice\n basis redu\ ction,\n Experimental Mathematics,\n 7\n (1998),\n 125--135.\n

\n\n\n

\n

\n[HS79] Havas, G. and Sterling, L. S.,\n Integer mat\ rices and abelian groups,\n in Symbolic and alge\ braic computation,\n Springer-Verlag, Berlin,\n Lecture Notes in Computer Science,\n 72\n (1979),\n 431--451.\n

\n\n\n

\

\n

\n[Lüb02] Lübeck, F.,\n On the Computation of \n \ Elementary Divisors of Integer Matrices,\n Journal of Symbolic Computation,\n 33<\ /em>\n (2002),\n 57--65.\n

\n\n", bookname := "edim", chapsectlinks := rec( 1 := "\n\ \n" ), chapsectlinkstext := rec( 1 := "\n\ \n" ), chaptitle := rec( 1 := "The EDIM-Pa\ ckage" ), content := [ rec( content := "xml version=\"1.0\" encoding=\"UTF-8\"", count := [ 0, 0, 0, 1 ], name := "XMLPI", root := ~ ), rec( content := "Book SYSTEM \"gapdoc.dtd\"", count := [ 0, 0, 0, 1 ], name := "XMLDOCTYPE", root := ~ ), rec( content := "\n\n manual.xml EDIM mini-package documentatio\ n Frank Lübeck\n\n Copyright (C) 2000-2018, Lehrstuhl D für Mathemat\ ik, RWTH-Aachen\n\n", count := [ 0, 0, 0, 1 ], name := "XMLCOMMENT", root := ~ ), rec( attributes := rec( Name := "edim" ), content := [ rec( attributes := rec( ), content := [ rec( attributes := rec( ), content := [ rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "Package", next := 300, root := ~, start := 277, stop := 299 ) ], count := [ 0, 0, 0, 1 ], name := "Title", next := 308, root := ~, start := 270, stop := 307 ), rec( attributes := rec( ), content := [ rec( content := "Elementary Divisors and Integer M\ atrices", count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 1 ], name := "Subtitle", next := 374, root := ~, start := 313, stop := 373 ), rec( attributes := rec( ), content := [ rec( content := "\n Version 1.3.3\n\n ", count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 1 ], name := "Version", next := 424, root := ~, start := 379, stop := 423 ), rec( attributes := rec( ), content := [ rec( content := "Frank Lübeck\n", count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\nLehrstuhl D für Mathem\ atik\nRWTH Aachen\nPontdriesch 14/16\n52062 Aachen\nGermany\n", count := [ 0, 0, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 2 ], name := "Address", next := 550, root := ~, start := 451, stop := 549 ), rec( content := "\n ", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Frank.Luebeck@Math.RWTH-A\ achen.De", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "Email", next := 603, root := ~, start := 555, stop := 602 ), rec( content := "\n ", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "http://www.math.rwth-aach\ en.de/~Frank.Luebeck", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "Homepage", next := 680, root := ~, start := 608, stop := 679 ), rec( content := "\n ", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 1 ], name := "Author", next := 694, root := ~, start := 429, stop := 693 ), rec( attributes := rec( ), content := [ rec( content := "January 2018", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 3 ], name := "Date", next := 724, root := ~, start := 699, stop := 723 ), rec( attributes := rec( ), content := [ rec( content := " ", count := [ 0, 0, 1, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "License", count := [ 0, 0, 1, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 1, 1 ], mathmode := "Text", name := "Index", next := 763, root := ~, start := 741, stop := 762 ), rec( content := "\n © 2000-2018 by \ Frank Lübeck ", count := [ 0, 0, 1, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "P", next := 821, root := ~, start := 817, stop := 820 ), rec( content := "\n ", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "Package", next := 859, root := ~, start := 836, stop := 858 ), rec( content := " \n is free softwa\ re; you can redistribute it\n and/or modify it under the terms of\ the ", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Text := "GNU General Public License" ), content := [ rec( content := "http://www.fsf.org/licens\ es/gpl.html", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "URL", next := 1067, root := ~, start := 972, stop := 1066 ), rec( content := " as published by th\ e Free Software Foundation;\n either version 2 of the License, or\ (at your option) any\n later version.\n ", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 1, 1 ], name := "Copyright", next := 1243, root := ~, start := 729, stop := 1242 ) ], count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "TitlePage", next := 1257, root := ~, start := 254, stop := 1256 ), rec( content := " TableOfContents . . . . . . generate a table\ of contents ", count := [ 0, 0, 1, 2 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "TableOfContents", next := 1348, root := ~, start := 1330, stop := 1347 ), rec( content := " The only chapter of the book ", count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\n", count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " \n\n main.xml EDIM package \ documentation Frank Lübeck\n\n Copyright (C) 1999-2004, Lehrst\ uhl D für Mathematik, RWTH-Aachen\n\nThis is the main chapter of the document\ ation.\n\n", count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Chap-EDIM" ), content := [ rec( content := "\n", count := [ 1, 0, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "The ", count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "Package", next := 1669, root := ~, start := 1646, stop := 1668 ), rec( content := "-Package", count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "Heading", next := 1687, root := ~, start := 1633, stop := 1686 ), rec( content := "\n", count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "Package", next := 1718, root := ~, start := 1695, stop := 1717 ) ], count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "Index", next := 1726, root := ~, start := 1688, stop := 1725 ), rec( content := "\n\n", count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "(Elementary Divisors \ and Integer Matrices, by Frank\nLübeck)", count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "Emph", next := 1814, root := ~, start := 1728, stop := 1813 ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "P", next := 1818, root := ~, start := 1814, stop := 1817 ), rec( content := "\n\nThis chapter describes the\ functions defined in the ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "GAP", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "Package", next := 23, root := ~, start := 1, stop := 22 ), rec( content := "4 package\n", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "Package", next := 1916, root := ~, start := 1893, stop := 1915 ), rec( content := ". The main functions implement\ variants of an\nalgorithm for computing for a given prime ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "M", next := 2016, root := ~, start := 2008, stop := 2015 ), rec( content := " the ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "M", next := 2029, root := ~, start := 2021, stop := 2028 ), rec( content := "-parts of\nthe elementary divis\ ors of an integer matrix. These algorithms use\na ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "M", next := 2123, root := ~, start := 2115, stop := 2122 ), rec( content := "-adic method and are describ\ ed by the author in ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "L98" ), content := 0, count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "Cite", next := 2196, root := ~, start := 2179, stop := 2195 ), rec( content := " (see ", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "ElementaryDivisorsPPartRk" ) , content := 0, count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "Ref", next := 2241, root := ~, start := 2202, stop := 2240 ), rec( content := ").", count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 5 ], mathmode := "Text", name := "P", next := 2247, root := ~, start := 2243, stop := 2246 ), rec( content := "\n\nThese functions were already\ applied to integer matrices of dimension\ngreater than ", count := [ 1, 0, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "11000", count := [ 1, 0, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 5 ], mathmode := "Text", name := "M", next := 2347, root := ~, start := 2335, stop := 2346 ), rec( content := " (which had many non-trivial \ elementary\ndivisors which were products of small primes).", count := [ 1, 0, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "P", next := 2441, root := ~, start := 2437, stop := 2440 ), rec( content := "\n\nFurthermore there are func\ tions for finding the biggest elementary\ndivisor of an invertible integer m\ atrix and the inverse of a rational\ninvertible matrix (see ", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "ExponentSquareIntMatFullRank" ) , content := 0, count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "Ref", next := 2651, root := ~, start := 2609, stop := 2650 ), rec( content := " and\n", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "InverseRatMat" ) , content := 0, count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "Ref", next := 2684, root := ~, start := 2656, stop := 2683 ), rec( content := "). These algorithms use ", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "M", next := 2721, root := ~, start := 2713, stop := 2720 ), rec( content := "-adic\napproximations, explained\ in ", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Sect := "Sect-InvRatMatAlg" ), content := 0, count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "Ref", next := 2787, root := ~, start := 2756, stop := 2786 ), rec( content := ".", count := [ 1, 0, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "P", next := 2792, root := ~, start := 2788, stop := 2791 ), rec( content := "\n\nFinally we distribute imple\ mentations of some other algorithms for\nfinding elementary divisors or no\ rmal forms of integer matrices: A\n", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "M", next := 2944, root := ~, start := 2936, stop := 2943 ), rec( content := "-modular algorithm by Havas\ and Sterling from ", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "HS79" ), content := 0, count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "Cite", next := 3019, root := ~, start := 3001, stop := 3018 ), rec( content := " (see ", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "ElementaryDivisorsPPartHavasSte\ rling" ), content := 0, count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "Ref", next := 3076, root := ~, start := 3026, stop := 3075 ), rec( content := ")\nand LLL-based algorithms for\ extended greatest common divisors of\nintegers (see ", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "GcdexIntLLL" ), content := 0, count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "Ref", next := 3188, root := ~, start := 3163, stop := 3187 ), rec( content := ") and for Hermite normal forms\\ nof integer matrices with (very nice) transforming matrices (see ", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "HermiteIntMatLLL" ), content := 0, count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "Ref", next := 3316, root := ~, start := 3286, stop := 3315 ), rec( content := ").", count := [ 1, 0, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "P", next := 3322, root := ~, start := 3318, stop := 3321 ), rec( content := "\n\nBy default the ", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "Package", next := 3367, root := ~, start := 3344, stop := 3366 ), rec( content := " is automatically loaded\nb\ y ", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "GAP", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "Package", next := 23, root := ~, start := 1, stop := 22 ), rec( content := " when it is installed. \ If the automatic loading\nis disabled in your installation you \ must load the package\nwith ", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "RequirePackage(\"edim\");\ ", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "C", next := 3580, root := ~, start := 3550, stop := 3579 ), rec( content := " before its functions bec\ ome\navailable.", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "P", next := 3630, root := ~, start := 3626, stop := 3629 ), rec( content := "\n\nPlease, send \ me an e-mail\n(", count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Frank.Luebeck@Math.RWTH-A\ achen.De", count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "Email", next := 3752, root := ~, start := 3704, stop := 3751 ), rec( content := ") if you have any\nquestions\ , remarks, suggestions, etc. concerning this mini-package.\nAlso, I would l\ ike to hear about applications of this package.", count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 10 ], mathmode := "Text", name := "P", next := 3911, root := ~, start := 3907, stop := 3910 ), rec( content := "\n\nFrank Lübeck \n\n", count := [ 1, 0, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-Install" ) , content := [ rec( content := "\n", count := [ 1, 1, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Installation of t\ he ", count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "Package", next := 4012, root := ~, start := 3989, stop := 4011 ), rec( content := " package", count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "Heading", next := 4030, root := ~, start := 3960, stop := 4029 ), rec( content := "\n\nTo install this pack\ age first unpack it inside some GAP root directory\ninto the subdirectory ", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "pkg/edim", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "F", next := 4140, root := ~, start := 4125, stop := 4139 ), rec( content := " (see \n", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( BookName := "Reference", Sect := "Installing a GAP Packag\ e" ), content := 0, count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "Ref", next := 4206, root := ~, start := 4147, stop := 4205 ), rec( content := "). Then\nthe ", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "Package", next := 4241, root := ~, start := 4218, stop := 4240 ), rec( content := " package can already be \ loaded and used.\nBut we strongly recommend to compile a kernel function as we\ ll during\ninstallation, otherwise \nthe function ", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "ElementaryDivisorsPPart\ RkExpSmall" ), content := 0, count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "Ref", next := 4440, root := ~, start := 4393, stop := 4439 ), rec( content := " \nwill not be available\ .", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 4 ], mathmode := "Text", name := "P", next := 4468, root := ~, start := 4464, stop := 4467 ), rec( content := "\n\nTo install the kerne\ l function go to the directory ", count := [ 1, 1, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "pkg/edim", count := [ 1, 1, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 4 ], mathmode := "Text", name := "F", next := 4540, root := ~, start := 4525, stop := 4539 ), rec( content := " to\nwhich the package w\ as extracted and call", count := [ 1, 1, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "P", next := 4588, root := ~, start := 4584, stop := 4587 ), rec( content := "\n\n", count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "/bin/sh ./configu\ re [path] [CONFIGNAME=...]", count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "C", next := 4640, root := ~, start := 4590, stop := 4639 ), rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "P", next := 4644, root := ~, start := 4640, stop := 4643 ), rec( content := "\n\nwhere ", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "path", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "C", next := 4663, root := ~, start := 4652, stop := 4662 ), rec( content := " is a path to the mai\ n ", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "GAP", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "Package", next := 4711, root := ~, start := 4689, stop := 4710 ), rec( content := " root\ndirectory (if not\ given, the default ", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "../..", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "F", next := 4766, root := ~, start := 4754, stop := 4765 ), rec( content := " is assumed). \nIf you h\ ave installed several GAP kernels you can compile the corresponding\n", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "Package", next := 4880, root := ~, start := 4857, stop := 4879 ), rec( content := " kernel function by spec\ ifying the ", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "CONFIGNAME", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "C", next := 4932, root := ~, start := 4915, stop := 4931 ), rec( content := "\nthat was used to confi\ gure that kernel.", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "P", next := 4976, root := ~, start := 4972, stop := 4975 ), rec( content := "\n\nAfterwards call ", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "make", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "C", next := 5005, root := ~, start := 4994, stop := 5004 ), rec( content := " to compile a binary \ file. ", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "P", next := 5039, root := ~, start := 5035, stop := 5038 ), rec( content := "\n\nIf you have installe\ d several GAP kernels repeat these two steps for each \nof them, using the var\ ious values of ", count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "CONFIGNAME", count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "C", next := 5170, root := ~, start := 5153, stop := 5169 ), rec( content := ".\n\nYou can run a t\ est of the installation by typing ", count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "make test", count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "C", next := 5247, root := ~, start := 5231, stop := 5246 ), rec( content := ".\n\n", count := [ 1, 1, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Name := "InfoEDIM" ), content := 0, count := [ 1, 1, 1, 2 ], mathmode := "Text", name := "InfoClass", next := 5293, root := ~, start := 5265, stop := 5292 ), rec( attributes := rec( ), content := [ rec( content := " \nThi\ s is an ", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "I\ nfo", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "K", next := 5337, root := ~, start := 5326, stop := 5336 ), rec( content := " class f\ or the ", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "E\ DIM", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "Package", next := 5375, root := ~, start := 5352, stop := 5374 ), rec( content := "-package\ .\nBy ", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "S\ etInfoLevel(InfoEDIM, 1);", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "C", next := 5421, root := ~, start := 5388, stop := 5420 ), rec( content := " you can\ switch on the printing of\nsome information during the computatio\ ns of certain\n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "E\ DIM", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "Package", next := 5550, root := ~, start := 5527, stop := 5549 ), rec( content := "-functio\ ns. \n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "Description", next := 5578, root := ~, start := 5296, stop := 5577 ) ], count := [ 1, 1, 1, 1 ], mathmode := "Text", name := "ManSection", next := 5592, root := ~, start := 5250, stop := 5591 ), rec( content := "\n\n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 1 ], mathmode := "Text", name := "Section", next := 5604, root := ~, start := 3929, stop := 5603 ), rec( content := "\n\n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-PPElDiv" ) , content := [ rec( content := "\n", count := [ 1, 2, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( ), content := [ rec( content := "p", count := [ 1, 2, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 0, 2 ], mathmode := "Text", name := "M", next := 5724, root := ~, start := 5716, stop := 5723 ), rec( content := "-Parts of Elemen\ tary Divisors", count := [ 1, 2, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 0, 2 ], mathmode := "Text", name := "Heading", next := 5763, root := ~, start := 5707, stop := 5762 ), rec( content := "\n\nHere we explain the \ main functions of the package.\n\n", count := [ 1, 2, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A, p[, rk ]", Name := "ElementaryDivis\ orsPPartRk" ), content := 0, count := [ 1, 2, 1, 2 ], mathmode := "Text", name := "Func", next := 5894, root := ~, start := 5830, stop := 5893 ), rec( attributes := rec( Arg := "A, p, rk", Name := "ElementaryDivis\ orsPPartRkI" ), content := 0, count := [ 1, 2, 1, 4 ], mathmode := "Text", name := "Func", next := 5957, root := ~, start := 5895, stop := 5956 ), rec( attributes := rec( Arg := "A, p, rk", Name := "ElementaryDivis\ orsPPartRkII" ), content := 0, count := [ 1, 2, 1, 6 ], mathmode := "Text", name := "Func", next := 6021, root := ~, start := 5958, stop := 6020 ), rec( attributes := rec( Arg := "A, p, rk, exp", Name := "ElementaryDivis\ orsPPartRkExp" ), content := 0, count := [ 1, 2, 1, 8 ], mathmode := "Text", name := "Func", next := 6091, root := ~, start := 6022, stop := 6090 ), rec( attributes := rec( Arg := "A, p, rk, exp, i\ l", Name := "ElementaryDivisorsPPartRkExpSmall" ), content := 0, count := [ 1, 2, 1, 10 ], mathmode := "Text", name := "Func", next := 6170, root := ~, start := 6092, stop := 6169 ), rec( attributes := rec( ), content := [ rec( content := " These f\ unctions return a list ", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ m_1, m_2, \\ldots,\nm_r]", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "M", next := 6251, root := ~, start := 6220, stop := 6250 ), rec( content := " where " , count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "m\ _i", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "M", next := 6268, root := ~, start := 6258, stop := 6267 ), rec( content := " is the \ number of nonzero elementary divisors\nof ", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "A", next := 6325, root := ~, start := 6317, stop := 6324 ), rec( content := " divisi\ ble by ", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 11 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := \ "Text", name := "A", next := 6352, root := ~, start := 6344, stop := 6351 ), rec( content := "\ ^i", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "M", next := 6358, root := ~, start := 6341, stop := 6357 ), rec( content := " (see " , count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( BookName := "ref\ ", Func := "ElementaryDivisorsMat" ), content := 0, count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "Ref", next := 6417, root := ~, start := 6365, stop := 6416 ), rec( content := " for a \ definition of the elementary\ndivisors).", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 12 ], mathmode := "Text", name := "P", next := 6470, root := ~, start := 6466, stop := 6469 ), rec( content := "\n\nThe \ algorithms for these functions are described in ", count := [ 1, 2, 1, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "L98" ), content := 0, count := [ 1, 2, 1, 12 ], mathmode := "Text", name := "Cite", next := 6554, root := ~, start := 6537, stop := 6553 ), rec( content := ".", count := [ 1, 2, 1, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "P", next := 6559, root := ~, start := 6555, stop := 6558 ), rec( content := "\n\n", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "A", next := 6569, root := ~, start := 6561, stop := 6568 ), rec( content := " must be\ a matrix with integer entries, ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "A", next := 6618, root := ~, start := 6610, stop := 6617 ), rec( content := " a prime\ , and\n", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ k", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "A", next := 6641, root := ~, start := 6632, stop := 6640 ), rec( content := " the ra\ nk of ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "A", next := 6664, root := ~, start := 6656, stop := 6663 ), rec( content := " (as rat\ ional matrix). In the first\nversion of the command ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ k", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "A", next := 6735, root := ~, start := 6726, stop := 6734 ), rec( content := " is comp\ uted, if it is not given. ", count := [ 1, 2, 1, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 14 ], mathmode := "Text", name := "P", next := 6773, root := ~, start := 6769, stop := 6772 ), rec( content := "\n\nThe \ first version of the command delegates its job to the fourth\nversion by\ trying growing values for ", count := [ 1, 2, 1, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "e\ xp", count := [ 1, 2, 1, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 14 ], mathmode := "Text", name := "A", next := 6893, root := ~, start := 6883, stop := 6892 ), rec( content := ", see be\ low. ", count := [ 1, 2, 1, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "P", next := 6910, root := ~, start := 6906, stop := 6909 ), rec( content := "\n\nThe \ second and third versions implement the main algorithm described\nin ", count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "L98" ), content := 0, count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "Cite", next := 7009, root := ~, start := 6988, stop := 7008 ), rec( content := " and \ a variation. Here ", count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Element\ aryDivisorsPPartRkII" ), content := 0, count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "Ref", next := 7090, root := ~, start := 7049, stop := 7089 ), rec( content := " has a b\ it more overhead, but can\nbe advantageous because the intermediate \ entries during the\ncomputation can be much smaller.", count := [ 1, 2, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "P", next := 7232, root := ~, start := 7228, stop := 7231 ), rec( content := "\n\nIn t\ he fourth form ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "e\ xp", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "A", next := 7263, root := ~, start := 7253, stop := 7262 ), rec( content := " must be\ an upper bound for the highest\npower of ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "A", next := 7322, root := ~, start := 7314, stop := 7321 ), rec( content := " appear\ ing in an elementary divisor of ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "A", next := 7374, root := ~, start := 7366, stop := 7373 ), rec( content := ".\nThis \ information allows reduction of matrix entries modulo\n", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 16 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := \ "Text", name := "A", next := 7458, root := ~, start := 7450, stop := 7457 ), rec( content := "\ ^{", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp", count := [ 1, 2, 1, 16 ], mathm\ ode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := \ "Text", name := "A", next := 7470, root := ~, start := 7460, stop := 7469 ), rec( content := "\ }", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "M", next := 7475, root := ~, start := 7447, stop := 7474 ), rec( content := " during \ the computation. ", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "P", next := 7504, root := ~, start := 7500, stop := 7503 ), rec( content := "\n\nIf " , count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "e\ xp", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "A", next := 7519, root := ~, start := 7509, stop := 7518 ), rec( content := " is too \ small or the given ", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ k", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "A", next := 7556, root := ~, start := 7547, stop := 7555 ), rec( content := " is not\ correct the\nfunction returns `fail'. ", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "P", next := 7606, root := ~, start := 7602, stop := 7605 ), rec( content := "\n\nAs l\ ong as ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 18 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := \ "Text", name := "A", next := 7630, root := ~, start := 7622, stop := 7629 ), rec( content := "\ ^{", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp", count := [ 1, 2, 1, 18 ], mathm\ ode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := \ "Text", name := "A", next := 7642, root := ~, start := 7632, stop := 7641 ), rec( content := "\ }", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7647, root := ~, start := 7619, stop := 7646 ), rec( content := " is sma\ ller than ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "2\ ^{28}", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7678, root := ~, start := 7665, stop := 7677 ), rec( content := "\nand ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 18 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := \ "Text", name := "A", next := 7694, root := ~, start := 7686, stop := 7693 ), rec( content := "\ ^{", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp", count := [ 1, 2, 1, 18 ], mathm\ ode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := \ "Text", name := "A", next := 7706, root := ~, start := 7696, stop := 7705 ), rec( content := "\ + 2}", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7716, root := ~, start := 7683, stop := 7715 ), rec( content := " is smal\ ler than ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "2\ ^{31}", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7746, root := ~, start := 7733, stop := 7745 ), rec( content := " we\nuse\ internally a kernel function which can also be used directly in\nthe fift\ h form of the command. There ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i\ l", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "A", next := 7871, root := ~, start := 7862, stop := 7870 ), rec( content := " can be\ ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "0\ ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7888, root := ~, start := 7880, stop := 7887 ), rec( content := " or\n", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "1\ ", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7900, root := ~, start := 7892, stop := 7899 ), rec( content := " where i\ n the second case some information is printed during\nthe computation.", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "P", next := 7983, root := ~, start := 7979, stop := 7982 ), rec( content := "\n\nThis\ last form of the function was already succesfully applied to\ndense matr\ ices of rank up to ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "1\ 1000", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "M", next := 8097, root := ~, start := 8085, stop := 8096 ), rec( content := ".", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "P", next := 8102, root := ~, start := 8098, stop := 8101 ), rec( content := "\n\nNote\ that you have to compile a file (see ", count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Sect := "Sect-In\ stall" ), content := 0, count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "Ref", next := 8173, root := ~, start := 8147, stop := 8172 ), rec( content := ")\nwhile\ installing this package, if you want to have this kernel\nfunction av\ ailable.", count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 21 ], mathmode := "Text", name := "P", next := 8269, root := ~, start := 8265, stop := 8268 ), rec( content := " \n\n", count := [ 1, 2, 1, 21 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'ma\ t' with elementary divisors 'eldiv'.\ntrue\ngap> ElementaryDivisorsPPartRkI(ma\ t, 2, 242); time; # mat has full rank\n[ 94, 78, 69, 57, 23, 23, 9, 2, 2, 0 ]\ \n490\ngap> ElementaryDivisorsPPartRkExpSmall(mat, 2, 242, 10, 0); time;\n[ 94\ , 78, 69, 57, 23, 23, 9, 2, 2, 0 ]\n10\n", count := [ 1, 2, 1, 22 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 1, 22 ], mathmode := "Text", name := "Example", next := 8629, root := ~, start := 8272, stop := 8628 ), rec( content := "\n", count := [ 1, 2, 1, 23 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "Description", next := 8644, root := ~, start := 6172, stop := 8643 ) ], count := [ 1, 2, 1, 1 ], mathmode := "Text", name := "ManSection", next := 8658, root := ~, start := 5817, stop := 8657 ), rec( content := "\n\n", count := [ 1, 2, 1, 23 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 2, 1, 23 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n", count := [ 1, 2, 1, 23 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A, p, d", Comm := "another modular\ algorithm", Name := "ElementaryDivisorsPPartHavasSterling" ), content := 0, count := [ 1, 2, 2, 2 ], mathmode := "Text", name := "Func", next := 8854, root := ~, start := 8743, stop := 8853 ), rec( attributes := rec( ), content := [ rec( content := " \nFor an\ integer matrix ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "A", next := 8903, root := ~, start := 8895, stop := 8902 ), rec( content := " and a \ prime ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "A", next := 8925, root := ~, start := 8917, stop := 8924 ), rec( content := " this \ function\nreturns a list ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ m_1, m_2, \\ldots, m_r]", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "M", next := 8988, root := ~, start := 8957, stop := 8987 ), rec( content := " where " , count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "m\ _i", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "M", next := 9005, root := ~, start := 8995, stop := 9004 ), rec( content := " is the\\ nnumber of nonzero elementary divisors of ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "A", next := 9069, root := ~, start := 9061, stop := 9068 ), rec( content := " divisi\ ble by\n", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 2, 3 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := \ "Text", name := "A", next := 9095, root := ~, start := 9087, stop := 9094 ), rec( content := "\ ^i", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "M", next := 9101, root := ~, start := 9084, stop := 9100 ), rec( content := ". ", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "P", next := 9107, root := ~, start := 9103, stop := 9106 ), rec( content := "\n\nAn u\ pper bound ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "A", next := 9132, root := ~, start := 9124, stop := 9131 ), rec( content := " for the\ highest power of ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "A", next := 9166, root := ~, start := 9158, stop := 9165 ), rec( content := " appeari\ ng in\nan elementary divisor of ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "A", next := 9216, root := ~, start := 9208, stop := 9215 ), rec( content := " must be\ given. Smaller ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ ", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "A", next := 9250, root := ~, start := 9242, stop := 9249 ), rec( content := "\nimprov\ e the performance of the algorithm considerably.", count := [ 1, 2, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 2, 5 ], mathmode := "Text", name := "P", next := 9309, root := ~, start := 9305, stop := 9308 ), rec( content := "\n\nThis\ is an implementation of the modular algorithm described in ", count := [ 1, 2, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "HS79" ), content := 0, count := [ 1, 2, 2, 5 ], mathmode := "Text", name := "Cite", next := 9394, root := ~, start := 9376, stop := 9393 ), rec( content := ". ", count := [ 1, 2, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "P", next := 9400, root := ~, start := 9396, stop := 9399 ), rec( content := "\n\nWe a\ dded a slight improvement: we divide the considered submatrices by\nthe ", count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "A", next := 9485, root := ~, start := 9477, stop := 9484 ), rec( content := "-part o\ f the greatest common divisor of all entries (and\nlower the ", count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ ", count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "A", next := 9563, root := ~, start := 9555, stop := 9562 ), rec( content := " appropr\ iately). This reduces the size of the\nentries and often shortens the pi\ vot search.", count := [ 1, 2, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 2, 7 ], mathmode := "Text", name := "P", next := 9663, root := ~, start := 9659, stop := 9662 ), rec( content := "\n\n", count := [ 1, 2, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'ma\ t' with elementary divisors 'eldiv'.\ntrue\ngap> ElementaryDivisorsPPartHavasS\ terling(mat, 2, 10); time;\n[ 94, 78, 69, 57, 23, 23, 9, 2, 2 ]\n1260\n", count := [ 1, 2, 2, 8 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 2, 8 ], mathmode := "Text", name := "Example", next := 9901, root := ~, start := 9665, stop := 9900 ), rec( content := "\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "Description", next := 9916, root := ~, start := 8856, stop := 9915 ) ], count := [ 1, 2, 2, 1 ], mathmode := "Text", name := "ManSection", next := 9930, root := ~, start := 8730, stop := 9929 ), rec( content := "\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 0, 1 ], mathmode := "Text", name := "Section", next := 9941, root := ~, start := 5676, stop := 9940 ), rec( content := "\n\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-InvRatMat" ), content := [ rec( content := "\n", count := [ 1, 3, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Inverse of Ration\ al Matrices", count := [ 1, 3, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 0, 2 ], mathmode := "Text", name := "Heading", next := 10094, root := ~, start := 10047, stop := 10093 ), rec( content := "\n\n", count := [ 1, 3, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A[, p ]", Comm := "inverse of a ra\ tional matrix", Name := "InverseRatMat" ), content := 0, count := [ 1, 3, 1, 2 ], mathmode := "Text", name := "Func", next := 10199, root := ~, start := 10109, stop := 10198 ), rec( attributes := rec( ), content := [ rec( content := " \nThis \ function returns the inverse of an invertible matrix over the\nrational nu\ mbers.", count := [ 1, 3, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "P", next := 10309, root := ~, start := 10305, stop := 10308 ), rec( content := "\n\nIt f\ irst computes the inverse modulo some prime ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "A", next := 10371, root := ~, start := 10363, stop := 10370 ), rec( content := ", comput\ es\nfrom this a ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "A", next := 10404, root := ~, start := 10396, stop := 10403 ), rec( content := "-adic ap\ proximation to the inverse and finally\nconstructs the rational entr\ ies from their ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "A", next := 10518, root := ~, start := 10510, stop := 10517 ), rec( content := "-adic\na\ pproximations. See section ", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Sect := "Sect-In\ vRatMatAlg" ), content := 0, count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "Ref", next := 10585, root := ~, start := 10554, stop := 10584 ), rec( content := " for mo\ re\ndetails.", count := [ 1, 3, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "P", next := 10608, root := ~, start := 10604, stop := 10607 ), rec( content := "\n\nThis\ seems to be better than ", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "G\ AP", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "Package", next := 10678, root := ~, start := 10656, stop := 10677 ), rec( content := "'s\nstan\ dard Gauß algorithm (", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ^-1", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "C", next := 10726, root := ~, start := 10715, stop := 10725 ), rec( content := ") alre\ ady for small\nmatrices. (Try, e.g., ", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "R\ andomMat(20,20,[-10000..10000])", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "C", next := 10819, root := ~, start := 10780, stop := 10818 ), rec( content := " or\n", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "R\ andomMat(100,100)", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDA\ TA", root := ~ ) ], count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "C", next := 10849, root := ~, start := 10824, stop := 10848 ), rec( content := ".)", count := [ 1, 3, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "P", next := 10855, root := ~, start := 10851, stop := 10854 ), rec( content := "\n\nThe \ optional argument ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 10888, root := ~, start := 10880, stop := 10887 ), rec( content := " should \ be a prime such that ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 10927, root := ~, start := 10919, stop := 10926 ), rec( content := "\nmodulo\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 10944, root := ~, start := 10936, stop := 10943 ), rec( content := " is inv\ ertible (default is ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 3, 1, 6 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := \ "Text", name := "A", next := 10985, root := ~, start := 10977, stop := 10984 ) , rec( content := "\ =251", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "M", next := 10993, root := ~, start := 10974, stop := 10992 ), rec( content := "). If\n" , count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 11007, root := ~, start := 10999, stop := 11006 ), rec( content := " is \ not invertible modulo ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 11050, root := ~, start := 11042, stop := 11049 ), rec( content := " then " , count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "A", next := 11065, root := ~, start := 11057, stop := 11064 ), rec( content := " is\nau\ tomatically replaced by the next prime.", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "P", next := 11115, root := ~, start := 11111, stop := 11114 ), rec( content := "\n", count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 3 ], mathmode := "Text", name := "Description", next := 11130, root := ~, start := 10201, stop := 11129 ) ], count := [ 1, 3, 1, 1 ], mathmode := "Text", name := "ManSection", next := 11144, root := ~, start := 10096, stop := 11143 ), rec( content := "\n\n", count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n", count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A, v[, p[, invA \ ] ]", Comm := "rational solution of linear system over integers", Name := "RationalSolutio\ nIntMat" ), content := 0, count := [ 1, 3, 2, 2 ], mathmode := "Text", name := "Func", next := 11360, root := ~, start := 11229, stop := 11359 ), rec( attributes := rec( ), content := [ rec( content := " \nThis \ function returns the solution ", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x\ ", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "M", next := 11422, root := ~, start := 11414, stop := 11421 ), rec( content := " of the \ system of linear\nequations ", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x\ ", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes :\ = rec( ), content := [ rec( content := "A", count := [ 1, 3, 2, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 3 ], mathmode := \ "Text", name := "A", next := 11470, root := ~, start := 11462, stop := 11469 ) , rec( content := "\ = ", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "v", count := [ 1, 3, 2, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 3 ], mathmode := \ "Text", name := "A", next := 11481, root := ~, start := 11473, stop := 11480 ) ], count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "M", next := 11485, root := ~, start := 11457, stop := 11484 ), rec( content := ".", count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "P", next := 11490, root := ~, start := 11486, stop := 11489 ), rec( content := "\n\nHere\ , ", count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "A", next := 11506, root := ~, start := 11498, stop := 11505 ), rec( content := " must be\ a matrix with integer entries which is invertible\nover the rationals and ", count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v\ ", count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "A", next := 11596, root := ~, start := 11588, stop := 11595 ), rec( content := " must be\ a vector with integer entries of\nthe appropriate length.", count := [ 1, 3, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "P", next := 11665, root := ~, start := 11661, stop := 11664 ), rec( content := "\n\nThe \ optional arguments are a prime ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "A", next := 11713, root := ~, start := 11705, stop := 11712 ), rec( content := " such t\ hat ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "A", count := [ 1, 3, 2, 5 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := \ "Text", name := "A", next := 11737, root := ~, start := 11729, stop := 11736 ) , rec( content := "\ \n\\pmod{p}", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "M", next := 11750, root := ~, start := 11726, stop := 11749 ), rec( content := " is inve\ rtible (if not given, ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ = 251", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "M", next := 11796, root := ~, start := 11781, stop := 11795 ), rec( content := " is assu\ med)\nand the inverse ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i\ nvA", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "A", next := 11836, root := ~, start := 11825, stop := 11835 ), rec( content := " of ", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "A", count := [ 1, 3, 2, 5 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := \ "Text", name := "A", next := 11851, root := ~, start := 11843, stop := 11850 ) , rec( content := "\ \\pmod{p}", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "M", next := 11864, root := ~, start := 11840, stop := 11863 ), rec( content := ".", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "P", next := 11869, root := ~, start := 11865, stop := 11868 ), rec( content := "\n\nThe \ solution is computed via ", count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "M", next := 11908, root := ~, start := 11900, stop := 11907 ), rec( content := "-adic ap\ proximation as explained in \n", count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Sect := "Sect-In\ vRatMatAlg" ), content := 0, count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "Ref", next := 11976, root := ~, start := 11945, stop := 11975 ), rec( content := ".", count := [ 1, 3, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "P", next := 11981, root := ~, start := 11977, stop := 11980 ), rec( content := "\n", count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "Description", next := 11996, root := ~, start := 11362, stop := 11995 ) ], count := [ 1, 3, 2, 1 ], mathmode := "Text", name := "ManSection", next := 12010, root := ~, start := 11216, stop := 12009 ), rec( content := "\n\n", count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A[, p[, nr ] ]" , Comm := "", Name := "ExponentSquareI\ ntMatFullRank" ), content := 0, count := [ 1, 3, 3, 2 ], mathmode := "Text", name := "Func", next := 12181, root := ~, start := 12096, stop := 12180 ), rec( attributes := rec( ), content := [ rec( content := "\nThis fu\ nction returns the biggest elementary divisor of a square\ninteger matri\ x ", count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "A", next := 12292, root := ~, start := 12284, stop := 12291 ), rec( content := " of full\ rank.", count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "P", next := 12310, root := ~, start := 12306, stop := 12309 ), rec( content := "\n\nFor \ such a matrix ", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "A", next := 12340, root := ~, start := 12332, stop := 12339 ), rec( content := " the \ least common multiple of the\ndenominators of all entries of the inverse\ matrix ", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "A", count := [ 1, 3, 3, 4 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 4 ], mathmode := \ "Text", name := "A", next := 12444, root := ~, start := 12436, stop := 12443 ) , rec( content := "\ ^{-1}", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "M", next := 12453, root := ~, start := 12433, stop := 12452 ), rec( content := "\nis exa\ ctly the biggest elementary divisor of ", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "A", next := 12507, root := ~, start := 12499, stop := 12506 ), rec( content := ".", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "P", next := 12512, root := ~, start := 12508, stop := 12511 ), rec( content := "\n \nTh\ is function is implemented by a slight modification of ", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Inverse\ RatMat" ), content := 0, count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "Ref", next := 12609, root := ~, start := 12582, stop := 12608 ), rec( content := ". The \ third argument ", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ r", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "A", next := 12644, root := ~, start := 12635, stop := 12643 ), rec( content := " tells\ the\nfunction to return the least common multiple of the first ", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ r", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "A", next := 12728, root := ~, start := 12719, stop := 12727 ), rec( content := "\nrows \ of the rational inverse matrix only. Very often the function\nwill alre\ ady return the biggest elementary divisor with\n", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "nr", count := [ 1, 3, 3, 5 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := \ "Text", name := "A", next := 12883, root := ~, start := 12874, stop := 12882 ) , rec( content := "\ =2", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "M", next := 12889, root := ~, start := 12871, stop := 12888 ), rec( content := " or ", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "3\ ", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "M", next := 12901, root := ~, start := 12893, stop := 12900 ), rec( content := " (and t\ he command without this argument\nwould spend most time in checking, that this\ is correct).", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "P", next := 13003, root := ~, start := 12999, stop := 13002 ), rec( content := "\n\nThe \ optional argument ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13036, root := ~, start := 13028, stop := 13035 ), rec( content := " should \ be a prime such that ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13075, root := ~, start := 13067, stop := 13074 ), rec( content := "\nmodulo\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13091, root := ~, start := 13083, stop := 13090 ), rec( content := " is inv\ ertible (default is ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 3, 3, 6 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := \ "Text", name := "A", next := 13133, root := ~, start := 13125, stop := 13132 ) , rec( content := "\ =251", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "M", next := 13141, root := ~, start := 13122, stop := 13140 ), rec( content := "). If\n" , count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13155, root := ~, start := 13147, stop := 13154 ), rec( content := " is \ not invertible modulo ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13198, root := ~, start := 13190, stop := 13197 ), rec( content := " then " , count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "A", next := 13213, root := ~, start := 13205, stop := 13212 ), rec( content := " is\nau\ tomatically replaced by the next prime.", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 3, 3, 7 ], mathmode := "Text", name := "P", next := 13263, root := ~, start := 13259, stop := 13262 ), rec( content := "\n\n", count := [ 1, 3, 3, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'ma\ t' with elementary divisors 'eldiv'.\ntrue\ngap> inv := InverseRatMat(mat);; t\ ime; \n840\ngap> ExponentSquareIntMatFullRank(mat, 101, 3\ ); # same as without the `3'\n115200\n", count := [ 1, 3, 3, 8 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 3, 3, 8 ], mathmode := "Text", name := "Example", next := 13545, root := ~, start := 13265, stop := 13544 ), rec( content := "\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "Description", next := 13560, root := ~, start := 12184, stop := 13559 ) ], count := [ 1, 3, 3, 1 ], mathmode := "Text", name := "ManSection", next := 13574, root := ~, start := 12083, stop := 13573 ), rec( content := "\n\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 0, 1 ], mathmode := "Text", name := "Section", next := 13586, root := ~, start := 10014, stop := 13585 ), rec( content := "\n\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-ElDivPad" ), content := [ rec( content := "\n", count := [ 1, 4, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "All Elementary Di\ visors Using p-adic Method", count := [ 1, 4, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 0, 2 ], mathmode := "Text", name := "Heading", next := 13753, root := ~, start := 13691, stop := 13752 ), rec( content := "\n\nIn the following tw\ o functions we put things together. In particular\nwe handle the prime parts\ of the elementary divisors efficiently for\nprimes appearing with low power\ s in the highest elementary divisor\nrespectively determinant divisor.\n\n" , count := [ 1, 4, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A ", Name := "ElementaryDivis\ orsSquareIntMatFullRank" ), content := 0, count := [ 1, 4, 1, 2 ], mathmode := "Text", name := "Func", next := 14087, root := ~, start := 14016, stop := 14086 ), rec( attributes := rec( ), content := [ rec( content := "\nThis f\ unction returns a list of nonzero elementary divisors of an\ninteger matri\ x ", count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "A", next := 14198, root := ~, start := 14190, stop := 14197 ), rec( content := ".", count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "P", next := 14203, root := ~, start := 14199, stop := 14202 ), rec( content := "\n \nHe\ re we start with computing the biggest elementary divisor via ", count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Exponen\ tSquareIntMatFullRank" ), content := 0, count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "Ref", next := 14315, root := ~, start := 14273, stop := 14314 ), rec( content := ". If \ it runs into a problem\nbecause ", count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "A", next := 14366, root := ~, start := 14358, stop := 14365 ), rec( content := " is sin\ gular modulo a choosen prime (it starts by\ndefault with 251) then the prim\ e is automatically replaced by the next\none.", count := [ 1, 4, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "P", next := 14499, root := ~, start := 14495, stop := 14498 ), rec( content := "\n\nThe \ rest is done using ", count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Element\ aryDivisorsPPartRkExp" ), content := 0, count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "Ref", next := 14567, root := ~, start := 14525, stop := 14566 ), rec( content := " and\n", count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "RankMod\ " ), content := 0, count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "Ref", next := 14593, root := ~, start := 14572, stop := 14592 ), rec( content := ".", count := [ 1, 4, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 1, 6 ], mathmode := "Text", name := "P", next := 14598, root := ~, start := 14594, stop := 14597 ), rec( content := "\n\nThe \ function fails if the biggest elementary divisor cannot be\ncompletely \ factored and the non-factored part is not a divisor of the\nbiggest elementar\ y divisor only.", count := [ 1, 4, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "P", next := 14777, root := ~, start := 14773, stop := 14776 ), rec( content := "\n\nNote\ that this function may for many matrices not be the best choice\nfor comput\ ing all elementary divisors. You may first try the standard\n", count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "G\ AP", count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "Package", next := 14943, root := ~, start := 14921, stop := 14942 ), rec( content := " library\ routines for Smith normal form instead\nof this function. Ne\ vertheless remember ", count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Element\ aryDivisorsSquareIntMatFullRank" ), content := 0, count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "Ref", next := 15110, root := ~, start := 15058, stop := 15109 ), rec( content := " for h\ ard and big\nexamples. It is particularly good when the largest elementar\ y divisor\nis a very small factor of the determinant.\n\n", count := [ 1, 4, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> Collected(ElementaryDivisorsSquareIntMatFullRank(mat)); \n[ [ 1, 49\ ], [ 3, 99 ], [ 6, 7 ], [ 30, 9 ], [ 60, 9 ], [ 120, 2 ], \n [ 360, 10 ], [ \ 720, 22 ], [ 3600, 12 ], [ 14400, 14 ], \n [ 28800, 7 ], [ 115200, 2 ] ]\ngap\ > time;\n860\ngap> last2 = Collected(DiagonalOfMat(NormalFormIntMat(mat, 1).no\ rmal));\ntrue\ngap> time;\n5170\n", count := [ 1, 4, 1, 8 ], name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 8 ], mathmode := "Text", name := "Example", next := 15603, root := ~, start := 15249, stop := 15602 ), rec( content := "\n", count := [ 1, 4, 1, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "Description", next := 15618, root := ~, start := 14090, stop := 15617 ) ], count := [ 1, 4, 1, 1 ], mathmode := "Text", name := "ManSection", next := 15632, root := ~, start := 14003, stop := 15631 ), rec( content := "\n\n", count := [ 1, 4, 1, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 4, 1, 9 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 4, 1, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A, det[, rk] ", Name := "ElementaryDivis\ orsIntMatDeterminant" ), content := 0, count := [ 1, 4, 2, 2 ], mathmode := "Text", name := "Func", next := 15797, root := ~, start := 15718, stop := 15796 ), rec( attributes := rec( ), content := [ rec( content := "\nThis fu\ nction returns a list of nonzero elementary divisors of an\ninteger matri\ x ", count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "A", next := 15907, root := ~, start := 15899, stop := 15906 ), rec( content := ".", count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "P", next := 15912, root := ~, start := 15908, stop := 15911 ), rec( content := "\n\nHere\ ", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes := rec( ), content := [ rec( content := "d\ et", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "A", next := 15929, root := ~, start := 15919, stop := 15928 ), rec( content := " must be\ an integer which is a multiple of the biggest\ndeterminant divisor of ", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "A", next := 16016, root := ~, start := 16008, stop := 16015 ), rec( content := ". If \ the matrix does not have full\nrank then its rank ", count := [ 1, 4, 2, 4 ] , mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ k", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "A", next := 16084, root := ~, start := 16075, stop := 16083 ), rec( content := " must be\ given, too.", count := [ 1, 4, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "P", next := 16108, root := ~, start := 16104, stop := 16107 ), rec( content := "\n\nThe \ argument ", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ et", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "A", next := 16139, root := ~, start := 16129, stop := 16138 ), rec( content := " can \ be given in the form of\n", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "C\ ollected(FactorsInt(", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ et", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 5 ], mathmode := \ "Text", name := "A", next := 16215, root := ~, start := 16205, stop := 16214 ) , rec( content := "\ ))", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "C", next := 16221, root := ~, start := 16181, stop := 16220 ), rec( content := ".", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "P", next := 16226, root := ~, start := 16222, stop := 16225 ), rec( content := "\n\nThis\ function handles prime divisors of ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ et", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "A", next := 16279, root := ~, start := 16269, stop := 16278 ), rec( content := " with m\ ultiplicity\nsmaller than 4 specially, for the other prime divisors ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "M", next := 16366, root := ~, start := 16358, stop := 16365 ), rec( content := " it\ndel\ egates to ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Element\ aryDivisorsPPartRkExp" ), content := 0, count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "Ref", next := 16429, root := ~, start := 16385, stop := 16428 ), rec( content := " where \ the\n", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "e\ xp", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "A", next := 16451, root := ~, start := 16441, stop := 16450 ), rec( content := " argumen\ t is the multiplicity of the ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "M", next := 16496, root := ~, start := 16488, stop := 16495 ), rec( content := " in ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "d\ et", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "A", next := 16510, root := ~, start := 16500, stop := 16509 ), rec( content := ".\n(Note\ that this is not very good when ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "M", next := 16561, root := ~, start := 16553, stop := 16560 ), rec( content := " has act\ ually a much\nsmaller multiplicity in the largest elementary divisor.)", count := [ 1, 4, 2, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 4, 2, 7 ], mathmode := "Text", name := "P", next := 16643, root := ~, start := 16639, stop := 16642 ), rec( content := "\n\n", count := [ 1, 4, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'ma\ t' with elementary divisors 'eldiv'.\ntrue\ngap> # not so good:\ngap> Elementa\ ryDivisorsIntMatDeterminant(mat,Product(eldiv)) = \n> Concatenation([1..49]*0+\ 1, eldiv); time;\ntrue\n5490\n", count := [ 1, 4, 2, 8 ], name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 8 ], mathmode := "Text", name := "Example", next := 16916, root := ~, start := 16645, stop := 16915 ), rec( content := "\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "Description", next := 16931, root := ~, start := 15799, stop := 16930 ) ], count := [ 1, 4, 2, 1 ], mathmode := "Text", name := "ManSection", next := 16945, root := ~, start := 15705, stop := 16944 ), rec( content := "\n\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 0, 1 ], mathmode := "Text", name := "Section", next := 16957, root := ~, start := 13659, stop := 16956 ), rec( content := "\n\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-NFIntMatLLL" ), content := [ rec( content := "\n", count := [ 1, 5, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Gcd and Normal Fo\ rms Using LLL", count := [ 1, 5, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 0, 2 ], mathmode := "Text", name := "Heading", next := 17114, root := ~, start := 17065, stop := 17113 ), rec( content := "\n\nThe ", count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "Package", next := 17143, root := ~, start := 17120, stop := 17142 ), rec( content := "-mini package also conta\ ins implementations\nof an extended Gcd-algorithm for integers and a Hermi\ te and Smith\nnormal form algorithm for integer matrices using LLL-techique\ s. They\nare well described in the paper ", count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "HMM98" ) , content := 0, count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "Cite", next := 17380, root := ~, start := 17361, stop := 17379 ), rec( content := " by Havas, Majewski\nand\ Matthews.", count := [ 1, 5, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 5, 0, 4 ], mathmode := "Text", name := "P", next := 17417, root := ~, start := 17413, stop := 17416 ), rec( content := "\n\nThey are particularl\ y useful if one wants to have the normal forms\ntogether with transforming\ matrices. These transforming matrices have\nspectacularly nice (i.e., ", count := [ 1, 5, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "small", count := [ 1, 5, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 0, 4 ], mathmode := "Text", name := "Q", next := 17602, root := ~, start := 17590, stop := 17601 ), rec( content := ") entries in cases of\ input\nmatrices which are non-square or not of full rank (otherwise t\ he\ntransformation to the Hermite normal form is unique).", count := [ 1, 5, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 5, 0, 5 ], mathmode := "Text", name := "P", next := 17763, root := ~, start := 17759, stop := 17762 ), rec( content := "\n\nIn detail:", count := [ 1, 5, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 5, 0, 6 ], mathmode := "Text", name := "P", next := 17779, root := ~, start := 17775, stop := 17778 ), rec( content := "\n\n", count := [ 1, 5, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "n1, n2, ...", Name := "GcdexIntLLL" ), content := 0, count := [ 1, 5, 1, 2 ], mathmode := "Text", name := "Func", next := 17847, root := ~, start := 17794, stop := 17846 ), rec( attributes := rec( ), content := [ rec( content := " \nThis \ function returns for integers ", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "n1", count := [ 1, 5, 1, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := \ "Text", name := "A", next := 17913, root := ~, start := 17904, stop := 17912 ) , rec( content := "\ , ", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n2", count := [ 1, 5, 1, 3 ], mathmod\ e := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := \ "Text", name := "A", next := 17924, root := ~, start := 17915, stop := 17923 ) , rec( content := "\ , \\ldots", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 17936, root := ~, start := 17901, stop := 17935 ), rec( content := " a\nlist\ ", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ g, [c_1, c_2, \\ldots]]", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 17978, root := ~, start := 17945, stop := 17977 ), rec( content := ", where \ ", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes := rec( ), content := [ rec( content := "g\ = c_1", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n1", count := [ 1, 5, 1, 3 ], mathmod\ e := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := \ "Text", name := "A", next := 18008, root := ~, start := 17999, stop := 18007 ) , rec( content := "\ +\nc_2", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n2", count := [ 1, 5, 1, 3 ], mathmod\ e := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := \ "Text", name := "A", next := 18024, root := ~, start := 18015, stop := 18023 ) , rec( content := "\ + \\ldots", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 18039, root := ~, start := 17987, stop := 18038 ), rec( content := " is th\ e greatest common divisor of the\n", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ i", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "A", next := 18094, root := ~, start := 18085, stop := 18093 ), rec( content := ". Here a\ ll the ", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c\ _i", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 18119, root := ~, start := 18109, stop := 18118 ), rec( content := " are usu\ ally very small.\n\n", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> GcdexIntLLL( 517, 244, -304, -872, -286, 854, 866, 224, -765, -38);\n[ 1\ , [ 0, 0, 0, 0, 1, 0, 1, 1, 1, 1 ] ]\n", count := [ 1, 5, 1, 4 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 5, 1, 4 ], mathmode := "Text", name := "Example", next := 18278, root := ~, start := 18145, stop := 18277 ), rec( content := "\n", count := [ 1, 5, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "Description", next := 18293, root := ~, start := 17850, stop := 18292 ) ], count := [ 1, 5, 1, 1 ], mathmode := "Text", name := "ManSection", next := 18307, root := ~, start := 17781, stop := 18306 ), rec( content := "\n\n", count := [ 1, 5, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 5, 1, 5 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 5, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A", Name := "HermiteIntMatLL\ L" ), content := 0, count := [ 1, 5, 2, 2 ], mathmode := "Text", name := "Func", next := 18440, root := ~, start := 18393, stop := 18439 ), rec( attributes := rec( ), content := [ rec( content := " This r\ eturns the Hermite normal form of an integer\nmatrix ", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "A", next := 18529, root := ~, start := 18521, stop := 18528 ), rec( content := " and use\ s the LLL-algorithm to avoid entry explosion.\n", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "Description", next := 18598, root := ~, start := 18442, stop := 18597 ) ], count := [ 1, 5, 2, 1 ], mathmode := "Text", name := "ManSection", next := 18612, root := ~, start := 18380, stop := 18611 ), rec( content := "\n\n", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 5, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A ", Name := "HermiteIntMatLL\ LTrans" ), content := 0, count := [ 1, 5, 3, 2 ], mathmode := "Text", name := "Func", next := 18752, root := ~, start := 18698, stop := 18751 ), rec( attributes := rec( ), content := [ rec( content := " \nThis f\ unction returns a pair of matrices ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ H, L]", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "M", next := 18824, root := ~, start := 18811, stop := 18823 ), rec( content := " where \ ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "H\ = L\n", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "A", count := [ 1, 5, 3, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := \ "Text", name := "A", next := 18849, root := ~, start := 18841, stop := 18848 ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "M", next := 18853, root := ~, start := 18832, stop := 18852 ), rec( content := " is the \ Hermite normal form of an integer matrix ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "A", next := 18910, root := ~, start := 18902, stop := 18909 ), rec( content := ".\nThe t\ ransforming matrix ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "L\ ", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "M", next := 18944, root := ~, start := 18936, stop := 18943 ), rec( content := " can hav\ e surprisingly small entries.\n\n", count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat2\");\nReading 34x34 integer matrix 'mat\ 2' with elementary divisors 'eldiv2'.\ntrue\ngap> tr := HermiteIntMatLLLTrans(\ mat2);; Maximum(List(Flat(tr[2]), AbsInt));\n606\ngap> tr[2]*mat2 = tr[1]; \ \ntrue\n", count := [ 1, 5, 3, 4 ] , name := "PCD\ ATA", root := ~ ) ], count := [ 1, 5, 3, 4 ], mathmode := "Text", name := "Example", next := 19277, root := ~, start := 18983, stop := 19276 ), rec( content := "\n", count := [ 1, 5, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "Description", next := 19292, root := ~, start := 18755, stop := 19291 ) ], count := [ 1, 5, 3, 1 ], mathmode := "Text", name := "ManSection", next := 19306, root := ~, start := 18685, stop := 19305 ), rec( content := "\n\n", count := [ 1, 5, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 5, 3, 5 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 5, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A ", Name := "SmithIntMatLLL"\ ), content := 0, count := [ 1, 5, 4, 2 ], mathmode := "Text", name := "Func", next := 19439, root := ~, start := 19392, stop := 19438 ), rec( attributes := rec( ), content := [ rec( content := " \nThis \ function returns the Smith normal form of an integer matrix\n", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "A", next := 19536, root := ~, start := 19528, stop := 19535 ), rec( content := " using t\ he LLL-algorithm to avoid entry explosion.\n", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "Description", next := 19601, root := ~, start := 19442, stop := 19600 ) ], count := [ 1, 5, 4, 1 ], mathmode := "Text", name := "ManSection", next := 19615, root := ~, start := 19379, stop := 19614 ), rec( content := "\n\n", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 5, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := " A ", Name := "SmithIntMatLLLT\ rans" ), content := 0, count := [ 1, 5, 5, 2 ], mathmode := "Text", name := "Func", next := 19754, root := ~, start := 19701, stop := 19753 ), rec( attributes := rec( ), content := [ rec( content := "\nThis f\ unction returns ", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ S, L, R]", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "M", next := 19809, root := ~, start := 19793, stop := 19808 ), rec( content := " where \ ", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "S\ = L ", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "A", count := [ 1, 5, 5, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := \ "Text", name := "A", next := 19834, root := ~, start := 19826, stop := 19833 ) , rec( content := "\ R", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "M", next := 19840, root := ~, start := 19817, stop := 19839 ), rec( content := "\nis the\ Smith normal form of an integer matrix ", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "A", next := 19895, root := ~, start := 19887, stop := 19894 ), rec( content := ".", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 5, 5, 4 ], mathmode := "Text", name := "P", next := 19900, root := ~, start := 19896, stop := 19899 ), rec( content := "\n\nWe a\ pply the algorithm for Hermite normal form several times to get\nthe Smit\ h normal form, that is not in the paper ", count := [ 1, 5, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "HMM98" ) , content := 0, count := [ 1, 5, 5, 4 ], mathmode := "Text", name := "Cite", next := 20057, root := ~, start := 20038, stop := 20056 ), rec( content := ". The t\ ransforming matrices need not be as nice as for\nthe Hermite normal form.", count := [ 1, 5, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 5, 5, 5 ], mathmode := "Text", name := "P", next := 20143, root := ~, start := 20139, stop := 20142 ), rec( content := "\n\n", count := [ 1, 5, 5, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat2\");\nReading 34x34 integer matrix 'mat\ 2' with elementary divisors 'eldiv2'.\ntrue\ngap> tr := SmithIntMatLLLTrans(ma\ t2);;\ngap> tr[2] * mat2 * tr[3] = tr[1]; \ntrue\n", count := [ 1, 5, 5, 6 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 5, 5, 6 ], mathmode := "Text", name := "Example", next := 20363, root := ~, start := 20145, stop := 20362 ), rec( content := "\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "Description", next := 20378, root := ~, start := 19756, stop := 20377 ) ], count := [ 1, 5, 5, 1 ], mathmode := "Text", name := "ManSection", next := 20392, root := ~, start := 19688, stop := 20391 ), rec( content := "\n\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 0, 1 ], mathmode := "Text", name := "Section", next := 20404, root := ~, start := 17030, stop := 20403 ), rec( content := "\n\n\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-Util" ), content := [ rec( content := "\n\n", count := [ 1, 6, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Utility Functions\ from the ", count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "EDIM", count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "Package", next := 20566, root := ~, start := 20543, stop := 20565 ), rec( content := "-package", count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "Heading", next := 20584, root := ~, start := 20507, stop := 20583 ), rec( content := "\n\n", count := [ 1, 6, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "n, k, l, x", Name := "RatNumberFromMo\ dular" ), content := 0, count := [ 1, 6, 1, 2 ], mathmode := "Text", name := "Func", next := 20659, root := ~, start := 20599, stop := 20658 ), rec( attributes := rec( ), content := [ rec( content := "\nThis fu\ nction returns ", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ /s = ", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "x", count := [ 1, 6, 1, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := \ "Text", name := "A", next := 20715, root := ~, start := 20707, stop := 20714 ) , rec( content := "\ \\pmod{", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 3 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := \ "Text", name := "A", next := 20730, root := ~, start := 20722, stop := 20729 ) , rec( content := "\ }", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "M", next := 20735, root := ~, start := 20697, stop := 20734 ), rec( content := ", if\nit\ exists. More precisely:", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "P", next := 20770, root := ~, start := 20766, stop := 20769 ), rec( content := "\n\n", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "A", next := 20780, root := ~, start := 20772, stop := 20779 ), rec( content := ", ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "k\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "A", next := 20792, root := ~, start := 20784, stop := 20791 ), rec( content := ", ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "A", next := 20803, root := ~, start := 20795, stop := 20802 ), rec( content := " must \ be positive integers with\n", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "2\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "k", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20855, root := ~, start := 20847, stop := 20854 ) , rec( attributes :\ = rec( ), content := [ rec( content := "l", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20863, root := ~, start := 20855, stop := 20862 ) , rec( content := "\ \\leq ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20878, root := ~, start := 20870, stop := 20877 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 20882, root := ~, start := 20843, stop := 20881 ), rec( content := " and ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "A", next := 20896, root := ~, start := 20888, stop := 20895 ), rec( content := " an int\ eger with\n", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "-\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20926, root := ~, start := 20918, stop := 20925 ) , rec( content := "\ /2 < ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "x", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20944, root := ~, start := 20936, stop := 20943 ) , rec( content := "\ \\leq ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 20961, root := ~, start := 20953, stop := 20960 ) , rec( content := "\ /2", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 20967, root := ~, start := 20914, stop := 20966 ), rec( content := ". If i\ t exists\nthis function returns a rational number ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ /s", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21038, root := ~, start := 21028, stop := 21037 ), rec( content := " with " , count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "0\ <\ns < ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "l", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21073, root := ~, start := 21065, stop := 21072 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21077, root := ~, start := 21045, stop := 21076 ), rec( content := ", ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ \gcd(s, ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21100, root := ~, start := 21092, stop := 21099 ) , rec( content := "\ ) = 1", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21111, root := ~, start := 21080, stop := 21110 ), rec( content := ", ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "-\ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "k", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21126, root := ~, start := 21118, stop := 21125 ) , rec( content := "\ \n< r < ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "k", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21149, root := ~, start := 21141, stop := 21148 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21153, root := ~, start := 21114, stop := 21152 ), rec( content := " and " , count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ /s", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21170, root := ~, start := 21160, stop := 21169 ), rec( content := " congru\ ent to ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "x", count := [ 1, 6, 1, 4 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21197, root := ~, start := 21189, stop := 21196 ) , rec( content := "\ \n\\pmod{", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21212, root := ~, start := 21204, stop := 21211 ) , rec( content := "\ }", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21217, root := ~, start := 21186, stop := 21216 ), rec( content := " (i.e., \ ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "n", count := [ 1, 6, 1, 4 ], mathmode \ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21236, root := ~, start := 21228, stop := 21235 ) , rec( content := "\ \\mid r - s ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA" , root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "x", count := [ 1, 6, 1, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := \ "Text", name := "A", next := 21257, root := ~, start := 21249, stop := 21256 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21261, root := ~, start := 21225, stop := 21260 ), rec( content := "). Such\\ nan ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "r\ /s", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21282, root := ~, start := 21272, stop := 21281 ), rec( content := " is uni\ que. The function returns ", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "f\ ail", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "K", next := 21328, root := ~, start := 21317, stop := 21327 ), rec( content := " if suc\ h a\nnumber does not exist.", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "P", next := 21366, root := ~, start := 21362, stop := 21365 ), rec( content := "\n", count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "Description", next := 21381, root := ~, start := 20661, stop := 21380 ) ], count := [ 1, 6, 1, 1 ], mathmode := "Text", name := "ManSection", next := 21395, root := ~, start := 20586, stop := 21394 ), rec( content := "\n\n", count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A, p", Name := "InverseIntMatMo\ d" ), content := 0, count := [ 1, 6, 2, 2 ], mathmode := "Text", name := "Func", next := 21531, root := ~, start := 21481, stop := 21530 ), rec( attributes := rec( ), content := [ rec( content := "\nThis fu\ nction returns an inverse matrix modulo a prime ", count := [ 1, 6, 2, 3 ] , mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "A", next := 21615, root := ~, start := 21607, stop := 21614 ), rec( content := " or\n", count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "f\ ail", count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "K", next := 21630, root := ~, start := 21619, stop := 21629 ), rec( content := ". More p\ recisely:", count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "P", next := 21651, root := ~, start := 21647, stop := 21650 ), rec( content := "\n\n", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21661, root := ~, start := 21653, stop := 21660 ), rec( content := " must \ be an integer matrix and ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21705, root := ~, start := 21697, stop := 21704 ), rec( content := " a prime\ such that\n", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21732, root := ~, start := 21724, stop := 21731 ), rec( content := " is inv\ ertible modulo ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21765, root := ~, start := 21757, stop := 21764 ), rec( content := ". This\ function returns an\ninteger matrix ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i\ nv", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21820, root := ~, start := 21810, stop := 21819 ), rec( content := " with \ entries in the range ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "]\ -", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes :\ = rec( ), content := [ rec( content := "p", count := [ 1, 6, 2, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := \ "Text", name := "A", next := 21863, root := ~, start := 21855, stop := 21862 ) , rec( content := "\ /2\n\\ldots ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "p", count := [ 1, 6, 2, 4 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := \ "Text", name := "A", next := 21881, root := ~, start := 21873, stop := 21880 ) , rec( content := "\ /2]", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "M", next := 21888, root := ~, start := 21850, stop := 21887 ), rec( content := " such th\ at ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i\ nv", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21910, root := ~, start := 21900, stop := 21909 ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "A", next := 21918, root := ~, start := 21910, stop := 21917 ), rec( content := " reduced\ modulo p\nis the identity matrix.", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "P", next := 21964, root := ~, start := 21960, stop := 21963 ), rec( content := "\n\nIt r\ eturns ", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "f\ ail", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "K", next := 21988, root := ~, start := 21977, stop := 21987 ), rec( content := " if the\ inverse modulo ", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "A", next := 22020, root := ~, start := 22012, stop := 22019 ), rec( content := " does no\ t exist.\n\nThis function is particularly fast for primes smaller 256.\n", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 3 ], mathmode := "Text", name := "Description", next := 22111, root := ~, start := 21534, stop := 22110 ) ], count := [ 1, 6, 2, 1 ], mathmode := "Text", name := "ManSection", next := 22125, root := ~, start := 21468, stop := 22124 ), rec( content := "\n\n", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 6, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A", Name := "HadamardBoundIn\ tMat" ), content := 0, count := [ 1, 6, 3, 2 ], mathmode := "Text", name := "Func", next := 22261, root := ~, start := 22211, stop := 22260 ), rec( attributes := rec( ), content := [ rec( content := "\nThe Had\ amard bound for a square integer matrix ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "A", next := 22333, root := ~, start := 22325, stop := 22332 ), rec( content := " is the \ product\nof Euclidean norms of the nonzero rows (or columns) of ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "A", next := 22412, root := ~, start := 22404, stop := 22411 ), rec( content := ". It is\\ nan upper bound for the absolute value of the determinant of ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "A", next := 22488, root := ~, start := 22480, stop := 22487 ), rec( content := ".\n", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "Description", next := 22504, root := ~, start := 22264, stop := 22503 ) ], count := [ 1, 6, 3, 1 ], mathmode := "Text", name := "ManSection", next := 22518, root := ~, start := 22198, stop := 22517 ), rec( content := "\n\n", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "n[, nr]", Name := "CheapFactorsInt\ " ), content := 0, count := [ 1, 6, 4, 2 ], mathmode := "Text", name := "Func", next := 22656, root := ~, start := 22604, stop := 22655 ), rec( attributes := rec( ), content := [ rec( content := "\nThis f\ unction returns a list of factors of an integer ", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ ", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "A", next := 22742, root := ~, start := 22734, stop := 22741 ), rec( content := ",\ninclu\ ding ", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "s\ mall", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "Q", next := 22767, root := ~, start := 22755, stop := 22766 ), rec( content := " prime \ factors - here the optional argument\n", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n\ r", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "A", next := 22824, root := ~, start := 22815, stop := 22823 ), rec( content := " is the \ number of iterations for `FactorsRho' (default is\n2000).", count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 4, 4 ], mathmode := "Text", name := "P", next := 22896, root := ~, start := 22892, stop := 22895 ), rec( content := "\n\nThis\ is only a slight modification of the library function ", count := [ 1, 6, 4, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( BookName := "ref\ ", Func := "FactorsInt" ), content := 0, count := [ 1, 6, 4, 4 ], mathmode := "Text", name := "Ref", next := 23005, root := ~, start := 22966, stop := 23004 ), rec( content := " which \ avoids an error message when\nthe number is not completely factored.", count := [ 1, 6, 4, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "P", next := 23086, root := ~, start := 23082, stop := 23085 ), rec( content := " \n", count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "Description", next := 23102, root := ~, start := 22659, stop := 23101 ) ], count := [ 1, 6, 4, 1 ], mathmode := "Text", name := "ManSection", next := 23117, root := ~, start := 22591, stop := 23116 ), rec( content := "\n\n", count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( Arg := "A, p", Name := "RankMod" ), content := 0, count := [ 1, 6, 5, 2 ], mathmode := "Text", name := "Func", next := 23244, root := ~, start := 23203, stop := 23243 ), rec( attributes := rec( ), content := [ rec( content := "\nThis fu\ nction returns the rank of an integer matrix ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "A", next := 23322, root := ~, start := 23314, stop := 23321 ), rec( content := " modulo\ \n", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "A", next := 23339, root := ~, start := 23331, stop := 23338 ), rec( content := ". Here " , count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "A", next := 23354, root := ~, start := 23346, stop := 23353 ), rec( content := " must no\ t necessarily be a prime. If it is not\nand this function returns an inte\ ger, then this is the rank of\n", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "A", next := 23481, root := ~, start := 23473, stop := 23480 ), rec( content := " for all\ prime divisors of ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "A", next := 23516, root := ~, start := 23508, stop := 23515 ), rec( content := ".", count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "P", next := 23521, root := ~, start := 23517, stop := 23520 ), rec( content := "\n\nIf \ during the computation a factorisation of ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "A", next := 23584, root := ~, start := 23576, stop := 23583 ), rec( content := " is foun\ d\n(because some pivot entry has nontrivial greatest common divisor with\n", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "A", next := 23673, root := ~, start := 23665, stop := 23672 ), rec( content := ") then t\ he function is recursively applied to the found\nfactors ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "f\ _i", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "C", next := 23754, root := ~, start := 23744, stop := 23753 ), rec( content := " of ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "p\ ", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "A", next := 23766, root := ~, start := 23758, stop := 23765 ), rec( content := ". The r\ esult is then given in the form\n", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "[\ [f_1, rk_1], [f_2, rk_2], ...]", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "C", next := 23844, root := ~, start := 23806, stop := 23843 ), rec( content := ".", count := [ 1, 6, 5, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 5, 5 ], mathmode := "Text", name := "P", next := 23849, root := ~, start := 23845, stop := 23848 ), rec( content := "\n\nThe \ idea to make this function useful for non primes was to use it\nwith large\ factors of the biggest elementary divisor of ", count := [ 1, 6, 5, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A\ ", count := [ 1, 6, 5, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 5 ], mathmode := "Text", name := "A", next := 23986, root := ~, start := 23978, stop := 23985 ), rec( content := " whose\n\ prime factorization cannot be found easily.", count := [ 1, 6, 5, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 6, 5, 6 ], mathmode := "Text", name := "P", next := 24040, root := ~, start := 24036, stop := 24039 ), rec( content := "\n\n", count := [ 1, 6, 5, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\ ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'ma\ t' with elementary divisors 'eldiv'.\ntrue\ngap> RankMod(mat, 5);\n155\ngap> R\ ankMod(mat, (2*79*4001));\n[ [ 2, 148 ], [ 79, 242 ], [ 4001, 242 ] ]\n", count := [ 1, 6, 5, 7 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 6, 5, 7 ], mathmode := "Text", name := "Example", next := 24277, root := ~, start := 24042, stop := 24276 ), rec( content := "\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "Description", next := 24292, root := ~, start := 23246, stop := 24291 ) ], count := [ 1, 6, 5, 1 ], mathmode := "Text", name := "ManSection", next := 24306, root := ~, start := 23190, stop := 24305 ), rec( content := "\n\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 0, 1 ], mathmode := "Text", name := "Section", next := 24318, root := ~, start := 20478, stop := 24317 ), rec( content := "\n\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " ###############################\ ############################# ", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Sect-InvRatMatAlg" ), content := [ rec( content := "\n", count := [ 1, 7, 0, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "InverseRatMat - t\ he Algorithm", count := [ 1, 7, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 2 ], mathmode := "Text", name := "Heading", next := 24475, root := ~, start := 24427, stop := 24474 ), rec( content := "\n\n\nThe idea is to \ recover a rational matrix from an ", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "M", next := 24543, root := ~, start := 24535, stop := 24542 ), rec( content := "-adic\napproximation for\ some prime ", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "M", next := 24586, root := ~, start := 24578, stop := 24585 ), rec( content := ". This description cam\ e out of\ndiscussions with Jürgen Müller. I thank John Cannon for pointin\ g out\nthat the basic idea already appeared in the paper ", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Key := "D82" ), content := 0, count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "Cite", next := 24760, root := ~, start := 24743, stop := 24759 ), rec( content := " of\nDixon.", count := [ 1, 7, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 4 ], mathmode := "Text", name := "P", next := 24774, root := ~, start := 24770, stop := 24773 ), rec( content := "\n\nLet ", count := [ 1, 7, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A", count := [ 1, 7, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 4 ], mathmode := "Text", name := "M", next := 24788, root := ~, start := 24780, stop := 24787 ), rec( content := " be an invertible matri\ x over the rational numbers. By\nmultiplying with a constant we may assume \ that its entries are in fact\nintegers.", count := [ 1, 7, 0, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "P", next := 24931, root := ~, start := 24927, stop := 24930 ), rec( content := "\n\n(1) We first descri\ be how to find an ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 24981, root := ~, start := 24973, stop := 24980 ), rec( content := "-adic approximation of\n\ ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A^{-1}", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25017, root := ~, start := 25004, stop := 25016 ), rec( content := ". Find a prime ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25041, root := ~, start := 25033, stop := 25040 ), rec( content := " such that ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25060, root := ~, start := 25052, stop := 25059 ), rec( content := " is invertible\nmodulo " , count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25090, root := ~, start := 25082, stop := 25089 ), rec( content := " and let ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "B", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25107, root := ~, start := 25099, stop := 25106 ), rec( content := " be the integer matrix w\ ith entries in\nthe range ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\left]-l/2,l/2\\\ right]", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25188, root := ~, start := 25160, stop := 25187 ), rec( content := " such that ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "BA", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25212, root := ~, start := 25203, stop := 25211 ), rec( content := " is\ncongruent to the\ identity matrix modulo ", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "M", next := 25270, root := ~, start := 25262, stop := 25269 ), rec( content := ". (This can be\ncompu\ ted fast by usual Gauß elimination.)", count := [ 1, 7, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "P", next := 25334, root := ~, start := 25330, stop := 25333 ), rec( content := "\n\nNow let ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v \\in ℤ^r", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25365, root := ~, start := 25345, stop := 25364 ), rec( content := " be a row vector. Defi\ ne two sequences\n", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v_i", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25417, root := ~, start := 25407, stop := 25416 ), rec( content := " and ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x_i", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25432, root := ~, start := 25422, stop := 25431 ), rec( content := " of row vectors in ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "ℤ^r", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25466, root := ~, start := 25453, stop := 25465 ), rec( content := " by: ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x_0\n:= 0 \\in �\ ��^r", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25498, root := ~, start := 25471, stop := 25497 ), rec( content := ", ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v_0 := -v", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25518, root := ~, start := 25501, stop := 25517 ), rec( content := " and for ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i > 0", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25544, root := ~, start := 25528, stop := 25543 ), rec( content := " set\n", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x_i", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25559, root := ~, start := 25549, stop := 25558 ), rec( content := " to the vector congr\ uent to ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "-v_{i-1} B", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25611, root := ~, start := 25593, stop := 25610 ), rec( content := " modulo\n", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25628, root := ~, start := 25620, stop := 25627 ), rec( content := " having entries in the\ range ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\left]-l/2, l/2\\ \right]", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25689, root := ~, start := 25660, stop := 25688 ), rec( content := ".\nThen all entries of \ ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "x_i A + v_{i-1}", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25734, root := ~, start := 25712, stop := 25733 ), rec( content := " are divisible by ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25761, root := ~, start := 25753, stop := 25760 ), rec( content := "\nand we set ", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v_i := (1/l) \\cd\ ot (x_i A + v_{i-1})", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "M", next := 25816, root := ~, start := 25773, stop := 25815 ), rec( content := ".", count := [ 1, 7, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "P", next := 25821, root := ~, start := 25817, stop := 25820 ), rec( content := "\n\nInduction shows tha\ t for ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i := \\sum_{k=\ 1}^{i} l^{k-1} x_k", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 25890, root := ~, start := 25849, stop := 25889 ), rec( content := " we\nhave ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i A = v + l^i\ v_i", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 25927, root := ~, start := 25899, stop := 25926 ), rec( content := " for all ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i \\geq 0", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 25952, root := ~, start := 25937, stop := 25951 ), rec( content := ". Hence the\nsequence \ ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 25985, root := ~, start := 25975, stop := 25984 ), rec( content := ", ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i \\geq 0", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 26008, root := ~, start := 25990, stop := 26007 ), rec( content := ", gives an ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 26030, root := ~, start := 26022, stop := 26029 ), rec( content := "-adic\napproximation to \ the vector ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y \\in ℚ^r", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 26084, root := ~, start := 26065, stop := 26083 ), rec( content := " with ", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y A =\nv", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "M", next := 26106, root := ~, start := 26091, stop := 26105 ), rec( content := ".", count := [ 1, 7, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "P", next := 26111, root := ~, start := 26107, stop := 26110 ), rec( content := "\n\n(2) The second point\ is to show how we can get the vector ", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26183, root := ~, start := 26175, stop := 26182 ), rec( content := "\nfrom a sufficiently \ good approximation ", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26236, root := ~, start := 26226, stop := 26235 ), rec( content := ". Note that the\nsequ\ ence of ", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26277, root := ~, start := 26267, stop := 26276 ), rec( content := " becomes constant for " , count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "i \\geq i_0", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26318, root := ~, start := 26300, stop := 26317 ), rec( content := " if all\nentries of " , count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26348, root := ~, start := 26340, stop := 26347 ), rec( content := " are integers of abso\ lute value smaller than\n", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l^{i_0} / 2", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26415, root := ~, start := 26397, stop := 26414 ), rec( content := " because of our choice o\ f representatives of residue\nclasses modulo ", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26495, root := ~, start := 26487, stop := 26494 ), rec( content := " in the interval\ ", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\left]-l/2,\nl/2\ \\right]", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "M", next := 26553, root := ~, start := 26524, stop := 26552 ), rec( content := ".", count := [ 1, 7, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "P", next := 26558, root := ~, start := 26554, stop := 26557 ), rec( content := "\n\nMore generally consi\ der ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a / b \\in ℚ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26605, root := ~, start := 26584, stop := 26604 ), rec( content := " with ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "b > 0", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26626, root := ~, start := 26611, stop := 26625 ), rec( content := " and\n", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a, b", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26642, root := ~, start := 26631, stop := 26641 ), rec( content := " coprime. Then there is \ for each ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n \\in ℕ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26692, root := ~, start := 26675, stop := 26691 ), rec( content := " which is\ncoprime to " , count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "b", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26721, root := ~, start := 26713, stop := 26720 ), rec( content := " a unique ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c \\in ℤ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26749, root := ~, start := 26732, stop := 26748 ), rec( content := " with ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "-n / 2 < c\n\\le\ q n / 2", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26787, root := ~, start := 26755, stop := 26786 ), rec( content := " and ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a \\equiv c b \\\ pmod{n}", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26821, root := ~, start := 26793, stop := 26820 ), rec( content := ". This ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26836, root := ~, start := 26828, stop := 26835 ), rec( content := " can be\ncomputed via th\ e extended Euclidean algorithm applied to ", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "b", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26910, root := ~, start := 26902, stop := 26909 ), rec( content := " and\n", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "M", next := 26923, root := ~, start := 26915, stop := 26922 ), rec( content := ".", count := [ 1, 7, 0, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "P", next := 26928, root := ~, start := 26924, stop := 26927 ), rec( content := "\n\nNow let ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n, \\alpha, \\be\ ta \\in ℕ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 26971, root := ~, start := 26938, stop := 26970 ), rec( content := " with ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "2 \\alpha \\beta\ \\leq\nn", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27006, root := ~, start := 26977, stop := 27005 ), rec( content := ". Then the map ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\{a/b \\in ℚ \\ \mid -\\alpha \\leq a \\leq \\alpha,\n1 \\leq b < \\beta \\} \\rightarrow \\l\ eft]-n/2, n/2\\right]", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27134, root := ~, start := 27021, stop := 27133 ), rec( content := ", ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a/b\n\\mapsto c", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27156, root := ~, start := 27136, stop := 27155 ), rec( content := " (defined as above) is \ injective (since for ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a/b", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27212, root := ~, start := 27202, stop := 27211 ), rec( content := ",\n", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a'/b'", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27226, root := ~, start := 27214, stop := 27225 ), rec( content := " in the above set we \ have ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a b' - a' b \\\ equiv 0\n\\pmod{n}", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27297, root := ~, start := 27257, stop := 27296 ), rec( content := " if and only if ", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a b' - a' b = 0", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "M", next := 27335, root := ~, start := 27313, stop := 27334 ), rec( content := ").", count := [ 1, 7, 0, 10 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "P", next := 27341, root := ~, start := 27337, stop := 27340 ), rec( content := "\n\nIn practice we can \ use for any ", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c \\in \\left]-n/\ 2, n/2\\right]", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "M", next := 27411, root := ~, start := 27376, stop := 27410 ), rec( content := " a\ncertain extended Euc\ lidean algorithm applied to ", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "M", next := 27471, root := ~, start := 27463, stop := 27470 ), rec( content := " and ", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "M", next := 27484, root := ~, start := 27476, stop := 27483 ), rec( content := "\nto decide if ", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "c", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "M", next := 27506, root := ~, start := 27498, stop := 27505 ), rec( content := " is in the image of the \ above map and to find the\ncorresponding ", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "a/b", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "M", next := 27580, root := ~, start := 27570, stop := 27579 ), rec( content := " if it exists.", count := [ 1, 7, 0, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "P", next := 27598, root := ~, start := 27594, stop := 27597 ), rec( content := "\n\n(3) To put things to\ gether we apply (2) to the entries of the vectors\n", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27681, root := ~, start := 27671, stop := 27680 ), rec( content := " constructed in (1), ch\ oosing ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "n = l^i", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27728, root := ~, start := 27712, stop := 27727 ), rec( content := ", ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\alpha =\n\\sqrt\ {n}/2", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27756, root := ~, start := 27730, stop := 27755 ), rec( content := " and ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\beta = \\sqrt{n\ }", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27784, root := ~, start := 27761, stop := 27783 ), rec( content := ". If we have found this\ way\na candidate for ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27839, root := ~, start := 27831, stop := 27838 ), rec( content := " we can easily check i\ f it is correct by\ncomputing ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y A", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27904, root := ~, start := 27894, stop := 27903 ), rec( content := ". If ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\mu", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 27920, root := ~, start := 27910, stop := 27919 ), rec( content := " is the maximal absolut\ e value of\nall numerators and denominators of the entries of ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 28013, root := ~, start := 28005, stop := 28012 ), rec( content := " it is clear\nfrom (2) t\ hat we will find ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 28062, root := ~, start := 28054, stop := 28061 ), rec( content := " from ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 28078, root := ~, start := 28068, stop := 28077 ), rec( content := " if ", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "l^i > 2\n\\mu^2", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "M", next := 28106, root := ~, start := 28083, stop := 28105 ), rec( content := ".", count := [ 1, 7, 0, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "P", next := 28111, root := ~, start := 28107, stop := 28110 ), rec( content := "\n\n(4) If we take as " , count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28139, root := ~, start := 28131, stop := 28138 ), rec( content := " in (1) to(3) all stan\ dard unit vectors we\nclearly get the rows of ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A^{-1}", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28226, root := ~, start := 28213, stop := 28225 ), rec( content := ". But we can do \ it\nbetter. Namely we can take as ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28297, root := ~, start := 28289, stop := 28296 ), rec( content := " the standard unit vec\ tors\nmultiplied by the least common multiple ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\epsilon", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28388, root := ~, start := 28373, stop := 28387 ), rec( content := " of the\ndenominators \ of the already computed entries of ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A^{-1}", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28461, root := ~, start := 28448, stop := 28460 ), rec( content := ". In\nmany examples t\ his ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\epsilon", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28503, root := ~, start := 28488, stop := 28502 ), rec( content := " actually equals ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "\\epsilon_r", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28538, root := ~, start := 28521, stop := 28537 ), rec( content := "\nafter the computation\ of the first or first few rows. Therefore we\nwill often find quickly the \ next row of ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "A^{-1}", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28664, root := ~, start := 28651, stop := 28663 ), rec( content := " already in (1),\nbecaus\ e we find a ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "v_i = 0", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28713, root := ~, start := 28699, stop := 28712 ), rec( content := " such that the sequence\ of ", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "y_i", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28751, root := ~, start := 28741, stop := 28750 ), rec( content := "\nbecomes constant (", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "=y", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "M", next := 28779, root := ~, start := 28770, stop := 28778 ), rec( content := ").", count := [ 1, 7, 0, 13 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 0, 14 ], mathmode := "Text", name := "P", next := 28785, root := ~, start := 28781, stop := 28784 ), rec( content := "\n\n", count := [ 1, 7, 0, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Label := "Ssect-rankintmat" ) , content := [ rec( content := "\n", count := [ 1, 7, 1, 1 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Rank of I\ nteger Matrix", count := [ 1, 7, 1, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 2 ], mathmode := "Text", name := "Heading", next := 28866, root := ~, start := 28825, stop := 28865 ), rec( content := "\n\nThe followin\ g strategy has shown to be useful in proving that some very\nbig integer matr\ ix is not invertible.", count := [ 1, 7, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 7, 1, 4 ], mathmode := "Text", name := "P", next := 28982, root := ~, start := 28978, stop := 28981 ), rec( content := "\n\n", count := [ 1, 7, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes := rec( ) , content := [ rec( content := "C\ heck the rank modulo some small primes, say with ", count := [ 1, 7, 1, 6 ], mathmode := \ "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "RankMo\ d" ), content := 0, count := [ 1, 7, 1, 6 ], mathmode := "Text", name := "Ref" , next := 2908\ 0, root := ~, start := 29059, stop := 29079 ), rec( content := ". ", count := [ 1, 7, 1, 6 ], mathmode := \ "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 6 ], name := "Item", next := 29089, root := ~, start := 28991, stop := 29088 ), rec( attributes := rec( ), content := [ rec( content := "I\ f the rank seems less than the number of rows choose a prime\n", count := [ 1, 7, 1, 8 ], mathmode := \ "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( cont\ ent := "p", count := [ 1, 7, 1, 8 ], mathmode := "Text", name := "PCDATA", root\ := ~ ) ], count := [ 1, 7, 1, 8 ], mathmode := "Text", name := "M", next := 2917\ 1, root := ~, start := 29163, stop := 29170 ), rec( content := ", a collectio\ n of lines which is linearly independent modulo\n", count := [ 1, 7, 1, 8 ] , mathmode := \ "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( cont\ ent := "p", count := [ 1, 7, 1, 8 ], mathmode := "Text", name := "PCDATA", root\ := ~ ) ], count := [ 1, 7, 1, 8 ], mathmode := "Text", name := "M", next := 2924\ 4, root := ~, start := 29236, stop := 29243 ), rec( content := ", and another \ line linearly dependend on these. Guess that this\nlast line is also linearl\ y dependend on the chosen collection over the\nrational numbers (maybe check \ modulo several small primes).", count := [ 1, 7, 1, 8 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 7, 1, 8 ], name := "Item", next := 29448, root := ~, start := 29090, stop := 29447 ), rec( attributes := rec( ), content := [ rec( content := "F\ ind columns of the collection of lines which give an invertible\nmatrix modu\ lo some prime.", count := [ 1, 7, 1, 10 ], mathmode := "Text", name := "PCDATA\ ", root := ~ ) ], count := [ 1, 7, 1, 10 ], name := "Item", next := 29554, root := ~, start := 29449, stop := 29553 ), rec( attributes := rec( ), content := [ rec( content := "T\ hen use ", count := [ 1, 7, 1, 12 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( Func := "RationalSolutionIntMat" ), content := 0, count := [ 1, 7, 1, 12 ], mathmode := \ "Text", name := "Ref", next := 29607, root := ~, start := 29570, stop := 29606\ ), rec( content := " with the invertible\nsubmatrix and corresponding entrie\ s of the linearly dependend row to\nprove this.", count := [ 1, 7, 1, 12 ], mathmode := \ "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 12 ], name := "Item", next := 29719, root := ~, start := 29555, stop := 29718 ) ], count := [ 1, 7, 1, 5 ], mathmode := "Text", name := "List", next := 29727, root := ~, start := 28984, stop := 29726 ), rec( content := "\n\nGuessing th\ e rank of a matrix from the rank modulo several primes,\nchosing a maxim\ al set of lines which are linearly independent modulo\nsome primes, and u\ sing ", count := [ 1, 7, 1, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "RationalSolutio\ nIntMat" ), content := 0, count := [ 1, 7, 1, 14 ], mathmode := "Text", name := "Ref", next := 29937, root := ~, start := 29900, stop := 29936 ), rec( content := " with the\nrema\ ining lines, one may also find the exact rank of a huge integer\nmatrix. \ ", count := [ 1, 7, 1, 14 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes := rec( ), content := 0, count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "P", next := 30033, root := ~, start := 30029, stop := 30032 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 1 ], mathmode := "Text", name := "Subsection", next := 30048, root := ~, start := 28787, stop := 30047 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 1 ], mathmode := "Text", name := "Section", next := 30060, root := ~, start := 24391, stop := 30059 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 1 ], mathmode := "Text", name := "Chapter", next := 30072, root := ~, start := 1605, stop := 30071 ), rec( content := "\n\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 2, 1 ], mathmode := "Text", name := "Body", next := 30082, root := ~, start := 1391, stop := 30081 ), rec( content := " We want a bibliography ", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( attributes := rec( Databases := "edim" ), content := 0, count := [ "Bib", 0, 0, 1 ], mathmode := "Text", name := "Bibliography", next := 30150, root := ~, start := 30118, stop := 30149 ), rec( content := " And finally an index as well ", count := [ "Bib", 0, 0, 1 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( attributes := rec( ), content := 0, count := [ "Ind", 0, 0, 1 ], mathmode := "Text", name := "TheIndex", next := 30204, root := ~, start := 30193, stop := 30203 ) ], count := [ 0, 0, 0, 1 ], name := "Book", next := 30213, root := ~, start := 234, stop := 30212 ) ], count := [ 0, 0, 0, 1 ], indent := "", indextext := "EDIM 1.
\nCheapFactorsInt\ 1.6-4
\nElementaryDivisorsIntMatDeterminant 1.4-2
\nElementaryDivisorsP\ PartHavasSterling 1.2-2
\nElementaryDivisorsPPartRk
1.2-1
\nElemen\ taryDivisorsPPartRkExp 1.2\ -1
\nElementaryDivisorsPPartRkExpSmall \ 1.2-1
\nElementaryDivisorsPPartRkI 1.2-1
\nElementaryDivisorsPPartRkII 1.2-1
\nElementaryDivisorsSquareIntMatFullRank 1.4-1
\nExponentSquar\ eIntMatFullRank 1.3-3 \
\nGcdexIntLLL 1.5-1
\nHadamardBoundIntMat 1.6-3
\nHermiteIntMatLLL 1.5-2
\nHermiteIntMatLLLTrans 1.5-3
\nInfoEDIM 1.1-1
\nInverseIntMatMod 1.6-2
\nInverseRatMat <\ a href=\"chap1_mj.html#X7A9656D47C4D2D16\">1.3-1
\nLicense .-1
\nRan\ kMod 1.6-5
\nRationalSolutionIntMat
1.3-2
\nRatNumberFromModular 1.6-1
\nSmithIntMatLLL 1.5-4
\nSmithIntMatLLLTrans 1.5-5
\n", input := "\n\n\n\n\n\n\n\n\n <\ Package>EDIM</Package>\n Elementary Divisors and Integer \ Matrices\n \n Version 1.3.3\n\n \n \ Frank Lübeck\n
\nLehrstuhl D für Mathematik\nRWTH Aachen\nP\ ontdriesch 14/16\n52062 Aachen\nGermany\n
\n Frank.Luebeck@\ Math.RWTH-Aachen.De\n http://www.math.rwth-aachen.de/&til\ de;Frank.Luebeck\n
\n January 2018\n \ License\n ©right; 2000-2018 by Fr\ ank Lübeck

\n EDIM \n is fr\ ee software; you can redistribute it\n and/or modify it under the\ terms of the http://w\ ww.fsf.org/licenses/gpl.html as published by the Free Softw\ are Foundation;\n either version 2 of the License, or (at your op\ tion) any\n later version.\n \n\n\n\n<\ !-- TableOfContents . . . . . . generate a table of contents -->\n\n\n \n\n\n\n\ \nThe EDIM-Package\nEDIM\ \n\n(Elementary Divisors and Integer Matrices\ , by Frank\nLübeck)

\n\nThis chapter describes the functions\ defined in the &GAP;4 package\nEDIM. The main functio\ ns implement variants of an\nalgorithm for computing for a given prime p<\ /M> the p-parts of\nthe elementary divisors of an integer matrix. \ These algorithms use\na p-adic method and are described by the \ author in (see ).

\n\nThese functions were already applied to integer matrices of dimens\ ion\ngreater than 11000 (which had many non-trivial elementary\nd\ ivisors which were products of small primes).

\n\nFurthermore there are f\ unctions for finding the biggest elementary\ndivisor of an invertible intege\ r matrix and the inverse of a rational\ninvertible matrix (see and\n). These \ algorithms use p-adic\napproximations, explained in .

\n\nFinally we distribute implementations of some othe\ r algorithms for\nfinding elementary divisors or normal forms of integer \ matrices: A\np-modular algorithm by Havas and Sterling from \ (see )\nand LLL-based algorithms for extended greatest common divisors of\ \nintegers (see ) and for Hermite normal forms\nof\ integer matrices with (very nice) transforming matrices (see ).

\n\nBy default the EDIM is \ automatically loaded\nby &GAP; when it is installed. If the \ automatic loading\nis disabled in your installation you must load\ the package\nwith RequirePackage(\"edim\"); before its funct\ ions become\navailable.

\n\nPlease, send me \ an e-mail\n(Frank.Luebeck@Math.RWTH-Aachen.De) \ if you have any\nquestions, remarks, suggestions, etc. concerning this \ mini-package.\nAlso, I would like to hear about applications of this package.<\ P/>\n\nFrank Lübeck \n\n

\nInstallati\ on of the EDIM package\n\nTo install this package\ first unpack it inside some GAP root directory\ninto the subdirectory pkg/\ edim (see \n). Then\nthe EDIM package can already be loaded and used.\ \nBut we strongly recommend to compile a kernel function as well during\ninsta\ llation, otherwise \nthe function \nwill not be available.

\n\nTo install the kernel function go to\ the directory pkg/edim to\nwhich the package was extracted and call\

\n\n/bin/sh ./configure [path] [CONFIGNAME=...]

\n\nwhere pat\ h is a path to the main GAP root\ndirectory (if not \ given, the default ../.. is assumed). \nIf you have installed several G\ AP kernels you can compile the corresponding\nEDIM kernel f\ unction by specifying the CONFIGNAME\nthat was used to configure that k\ ernel.

\n\nAfterwards call make to compile a binary file.

\n\ \nIf you have installed several GAP kernels repeat these two steps for each \n\ of them, using the various values of CONFIGNAME.\n\nYou can run a t\ est of the installation by typing make test.\n\n \n\n<\ InfoClass Name=\"InfoEDIM\"/> \n\n \nThis is an Info c\ lass for the EDIM-package.\nBy SetInfoLevel(InfoEDIM, 1)\ ; you can switch on the printing of\nsome information during the \ computations of certain\nEDIM-functions. \n\n\n\n

\n\n\n
\n\ p-Parts of Elementary Divisors\n\nHere we explain the main fu\ nctions of the package.\n\n\n\n\n\n\n\n\n These functions return a list [m_\ 1, m_2, \\ldots,\nm_r] where m_i is the number of nonzero elementa\ ry divisors\nof A divisible by p^i (see for a definition of the element\ ary\ndivisors).

\n\nThe algorithms for these functions are des\ cribed in .

\n\nA must be a matrix with integer \ entries, p a prime, and\nrk the rank of A (as rational\ matrix). In the first\nversion of the command rk is computed, if it\ is not given.

\n\nThe first version of the command delegates its job\ to the fourth\nversion by trying growing values for exp, see below. <\ P/>\n\nThe second and third versions implement the main algorithm described\ \nin and a variation. Here has a bit more overhead, but can\nbe a\ dvantageous because the intermediate entries during the\ncomputation \ can be much smaller.

\n\nIn the fourth form exp must be an upper bo\ und for the highest\npower of p appearing in an elementary divisor \ of A.\nThis information allows reduction of matrix entries \ modulo\np^{exp} during the computation.

\n\nIf e\ xp is too small or the given rk is not correct the\nfunction retu\ rns `fail'.

\n\nAs long as p^{exp} is smaller than <\ M>2^{28}\nand p^{exp + 2} is smaller than 2^{31}<\ /M> we\nuse internally a kernel function which can also be used directly in\ \nthe fifth form of the command. There il can be 0 or\n1\ where in the second case some information is printed during\nthe comput\ ation.

\n\nThis last form of the function was already succesfully appli\ ed to\ndense matrices of rank up to 11000.

\n\nNote that you have t\ o compile a file (see )\nwhile installing this \ package, if you want to have this kernel\nfunction available.

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer ma\ trix 'mat' with elementary divisors 'eldiv'.\ntrue\ngap> ElementaryDivisorsPPa\ rtRkI(mat, 2, 242); time; # mat has full rank\n[ 94, 78, 69, 57, 23, 23, 9, 2,\ 2, 0 ]\n490\ngap> ElementaryDivisorsPPartRkExpSmall(mat, 2, 242, 10, 0); time\ ;\n[ 94, 78, 69, 57, 23, 23, 9, 2, 2, 0 ]\n10\n\n\n\n\n\n\n\n\n \nFor an integer matrix A and a prime p this function\nre\ turns a list [m_1, m_2, \\ldots, m_r] where m_i is the\nnumber \ of nonzero elementary divisors of A divisible by\np^i\ .

\n\nAn upper bound d for the highest power of p appear\ ing in\nan elementary divisor of A must be given. Smaller d\ \nimprove the performance of the algorithm considerably.

\n\nThis is an imp\ lementation of the modular algorithm described in .

\ \n\nWe added a slight improvement: we divide the considered submatrices by\nth\ e p-part of the greatest common divisor of all entries (and\nlower th\ e d appropriately). This reduces the size of the\nentries and of\ ten shortens the pivot search.

\n\n\ngap> ReadPackage(\"edim\", \ \"tst/mat\");\nReading 242x242 integer matrix 'mat' with elementary divisors '\ eldiv'.\ntrue\ngap> ElementaryDivisorsPPartHavasSterling(mat, 2, 10); time;\n[\ 94, 78, 69, 57, 23, 23, 9, 2, 2 ]\n1260\n\n\n\n

\n\n\n\n
\nInverse of Ration\ al Matrices\n\n\n\n\n \ \nThis function returns the inverse of an invertible matrix over the\nrati\ onal numbers.

\n\nIt first computes the inverse modulo some prime p<\ /A>, computes\nfrom this a p-adic approximation to the inverse and \ finally\nconstructs the rational entries from their p-adi\ c\napproximations. See section for more\n\ details.

\n\nThis seems to be better than GAP's\nstandard Gauß algorithm (A^-1) already for sm\ all\nmatrices. (Try, e.g., RandomMat(20,20,[-10000..10000]) or\n<\ C>RandomMat(100,100).)

\n\nThe optional argument p should be \ a prime such that A\nmodulo p is invertible (default is <\ A>p=251). If\nA is not invertible modulo p the\ n p is\nautomatically replaced by the next prime.

\n\ \n\n\n\n\n\n\n \nThis function returns the solution x of \ the system of linear\nequations x A = v.

\n\nHere, \ A must be a matrix with integer entries which is invertible\nover the rati\ onals and v must be a vector with integer entries of\nthe appropriate l\ ength.

\n\nThe optional arguments are a prime p such that A\n\\pmod{p} is invertible (if not given, p = 251 is assumed\ )\nand the inverse invA of A \\pmod{p}.

\n\nThe soluti\ on is computed via p-adic approximation as explained in \n.

\n\n\n\n\n\n\n \n\n\nThis function returns the biggest elementary div\ isor of a square\ninteger matrix A of full rank.

\n\nFor such a \ matrix A the least common multiple of the\ndenominators of all\ entries of the inverse matrix A^{-1}\nis exactly the biggest el\ ementary divisor of A.

\n \nThis function is implemented by a \ slight modification of . The third argu\ ment nr tells the\nfunction to return the least common multiple o\ f the first nr\nrows of the rational inverse matrix only. Very oft\ en the function\nwill already return the biggest elementary div\ isor with\nnr=2 or 3 (and the command without this argum\ ent\nwould spend most time in checking, that this is correct).

\n\nThe opti\ onal argument p should be a prime such that A\nmodulo p is invertible (default is p=251). If\nA is not \ invertible modulo p then p is\nautomatically replaced by \ the next prime.

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat\");\nR\ eading 242x242 integer matrix 'mat' with elementary divisors 'eldiv'.\ntrue\ng\ ap> inv := InverseRatMat(mat);; time; \n840\ngap> Exponen\ tSquareIntMatFullRank(mat, 101, 3); # same as without the `3'\n115200\n\n\n\n\n

\n\n\n\n
\nAll Elementary Divisors Using p-adic Method\n\nIn the \ following two functions we put things together. In particular\nwe handle th\ e prime parts of the elementary divisors efficiently for\nprimes appearing wi\ th low powers in the highest elementary divisor\nrespectively determinant \ divisor.\n\n\n \n\n\nThis function returns a list o\ f nonzero elementary divisors of an\ninteger matrix A.

\n \nHere \ we start with computing the biggest elementary divisor via . If it runs into a problem\nbecause A is singular modulo a choosen prime (it starts by\ndefault with 251) the\ n the prime is automatically replaced by the next\none.

\n\nThe rest is do\ ne using and\n.

\n\nThe function fails if the biggest elementary divisor canno\ t be\ncompletely factored and the non-factored part is not a divisor of the\n\ biggest elementary divisor only.

\n\nNote that this function may for many \ matrices not be the best choice\nfor computing all elementary divisors. You \ may first try the standard\nGAP library routines for Smith\ normal form instead\nof this function. Nevertheless remem\ ber for hard \ and big\nexamples. It is particularly good when the largest elementary div\ isor\nis a very small factor of the determinant.\n\n\ngap> Collected(\ ElementaryDivisorsSquareIntMatFullRank(mat)); \n[ [ 1, 49 ], [ 3, 99 ], [\ 6, 7 ], [ 30, 9 ], [ 60, 9 ], [ 120, 2 ], \n [ 360, 10 ], [ 720, 22 ], [ 360\ 0, 12 ], [ 14400, 14 ], \n [ 28800, 7 ], [ 115200, 2 ] ]\ngap> time;\n860\nga\ p> last2 = Collected(DiagonalOfMat(NormalFormIntMat(mat, 1).normal));\ntrue\ng\ ap> time;\n5170\n\n\n\n\n\n\n\n\ \n\n\nThis function returns a list of nonzero elementary divis\ ors of an\ninteger matrix A.

\n\nHere det must be an intege\ r which is a multiple of the biggest\ndeterminant divisor of A. If \ the matrix does not have full\nrank then its rank rk must be given, t\ oo.

\n\nThe argument det can be given in the form \ of\nCollected(FactorsInt(det)).

\n\nThis function handles p\ rime divisors of det with multiplicity\nsmaller than 4 specially, fo\ r the other prime divisors p it\ndelegates to where the\nexp argument is the multiplicity \ of the p in det.\n(Note that this is not very good when p<\ /M> has actually a much\nsmaller multiplicity in the largest elementary divis\ or.)

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x\ 242 integer matrix 'mat' with elementary divisors 'eldiv'.\ntrue\ngap> # not s\ o good:\ngap> ElementaryDivisorsIntMatDeterminant(mat,Product(eldiv)) = \n> Co\ ncatenation([1..49]*0+1, eldiv); time;\ntrue\n5490\n\n\ \n\n\n

\n\n\n\n
\nGcd\ and Normal Forms Using LLL\n\nThe EDIM-mini pack\ age also contains implementations\nof an extended Gcd-algorithm for integers\ and a Hermite and Smith\nnormal form algorithm for integer matrices using\ LLL-techiques. They\nare well described in the paper b\ y Havas, Majewski\nand Matthews.

\n\nThey are particularly useful if one \ wants to have the normal forms\ntogether with transforming matrices. These \ transforming matrices have\nspectacularly nice (i.e., small) entries\ in cases of input\nmatrices which are non-square or not of full rank\ (otherwise the\ntransformation to the Hermite normal form is unique).

\n\ \nIn detail:

\n\n\n \n\n \nThis function returns for integers n\ 1, n2, \\ldots a\nlist [g, [c_1, c_2, \\ldots]], whe\ re g = c_1n1 +\nc_2n2 + \\ldots is the greatest \ common divisor of the\nni. Here all the c_i are usually very\ small.\n\n\ngap> GcdexIntLLL( 517, 244, -304, -872, -286, 854, 866, \ 224, -765, -38);\n[ 1, [ 0, 0, 0, 0, 1, 0, 1, 1, 1, 1 ] ]\n\n\n\n\n\n\n\n\n\n This returns the Hermite normal form of an in\ teger\nmatrix A and uses the LLL-algorithm to avoid entry explosion.\ \n\n\n\n\n\n\n \n\n \nThis function returns a pair of \ matrices [H, L] where H = L\nA is the Hermite normal for\ m of an integer matrix A.\nThe transforming matrix L can have su\ rprisingly small entries.\n\n\ngap> ReadPackage(\"edim\", \"tst/mat2\ \");\nReading 34x34 integer matrix 'mat2' with elementary divisors 'eldiv2'.\n\ true\ngap> tr := HermiteIntMatLLLTrans(mat2);; Maximum(List(Flat(tr[2]), AbsIn\ t));\n606\ngap> tr[2]*mat2 = tr[1]; \ \ntrue\n\n\n\n\n\n\n\n \n\n \nThis function \ returns the Smith normal form of an integer matrix\nA using the LLL\ -algorithm to avoid entry explosion.\n\n\n\n\n\n\ \n\n\n\ \nThis function returns [S, L, R] where S = L A R\nis t\ he Smith normal form of an integer matrix A.

\n\nWe apply the algor\ ithm for Hermite normal form several times to get\nthe Smith normal f\ orm, that is not in the paper . The transform\ ing matrices need not be as nice as for\nthe Hermite normal form.

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat2\");\nReading 34x34 integer matr\ ix 'mat2' with elementary divisors 'eldiv2'.\ntrue\ngap> tr := SmithIntMatLLLT\ rans(mat2);;\ngap> tr[2] * mat2 * tr[3] = tr[1]; \ntrue\n\n\n\n\n

\n\n\n\n\n
\n\nUtility Functions from the EDIM-package\n\n\n\n\ \n\nThis function returns r/s = x \\pmod{n}\ , if\nit exists. More precisely:

\n\nn, k, l must\ be positive integers with\n2kl \\leq n and\ x an integer with\n-n/2 < x \\leq n/\ 2. If it exists\nthis function returns a rational number r/s \ with 0 <\ns < l, \\gcd(s, n) = 1, <\ M>-k\n< r < k and r/s congruent to \ x\n\\pmod{n} (i.e., n \\mid r - s x). Suc\ h\nan r/s is unique. The function returns fail if such a\nnum\ ber does not exist.

\n\n\n\n\n\n\n \n\n\nThis function \ returns an inverse matrix modulo a prime p or\nfail. More pr\ ecisely:

\n\nA must be an integer matrix and p a prime s\ uch that\nA is invertible modulo p. This function returns \ an\ninteger matrix inv with entries in the range ]-p/2\n\\\ ldots p/2] such that invA reduced modulo p\nis the \ identity matrix.

\n\nIt returns fail if the inverse modulo p\ does not exist.\n\nThis function is particularly fast for primes smaller 256.\ \n\n\n\n\n\n\n \n\n\nThe Hadamard bound for a square integ\ er matrix A is the product\nof Euclidean norms of the nonzero rows (or \ columns) of A. It is\nan upper bound for the absolute value of the dete\ rminant of A.\n\n\n\n\n\n\n \n\n\nThis function \ returns a list of factors of an integer n,\nincluding small prime factors - here the optional argument\nnr is the number o\ f iterations for `FactorsRho' (default is\n2000).

\n\nThis is only a \ slight modification of the library function which avoids an error message when\nthe number is not compl\ etely factored.

\n \n\n\n\n\n\n\n\n\nThis function returns the \ rank of an integer matrix A modulo\np. Here p must not\ necessarily be a prime. If it is not\nand this function returns an integ\ er, then this is the rank of\nA for all prime divisors of p.\

\n\nIf during the computation a factorisation of p is found\ \n(because some pivot entry has nontrivial greatest common divisor with\np\ ) then the function is recursively applied to the found\nfactors f_i of p. The result is then given in the form\n[[f_1, rk_1], \ [f_2, rk_2], ...].

\n\nThe idea to make this function useful for non \ primes was to use it\nwith large factors of the biggest elementary divisor o\ f A whose\nprime factorization cannot be found easily.

\n\n\ \ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'm\ at' with elementary divisors 'eldiv'.\ntrue\ngap> RankMod(mat, 5);\n155\ngap> \ RankMod(mat, (2*79*4001));\n[ [ 2, 148 ], [ 79, 242 ], [ 4001, 242 ] ]\n\n\n\n\n

\n\n\n\n
\nInverseRatMat - the Algorithm\n\n\nThe idea is \ to recover a rational matrix from an l-adic\napproximation for som\ e prime l. This description came out of\ndiscussions with Jürgen M�\ �ller. I thank John Cannon for pointing out\nthat the basic idea already app\ eared in the paper of\nDixon.

\n\nLet A be an i\ nvertible matrix over the rational numbers. By\nmultiplying with a constant\ we may assume that its entries are in fact\nintegers.

\n\n(1) We first de\ scribe how to find an l-adic approximation of\nA^{-1}. Find a\ prime l such that A is invertible\nmodulo l and let B\ be the integer matrix with entries in\nthe range \\left]-l/2,l/2\\\ right] such that BA is\ncongruent to the identity matrix m\ odulo l. (This can be\ncomputed fast by usual Gauß elimination.)\n\nNow let v \\in &ZZ;^r be a row vector. Define two sequences\ \nv_i and x_i of row vectors in &ZZ;^r by: x_0\n:= 0\ \\in &ZZ;^r, v_0 := -v and for i > 0 set\nx_i to the vector congruent to -v_{i-1} B modulo\nl having\ entries in the range \\left]-l/2, l/2\\right].\nThen all entries o\ f x_i A + v_{i-1} are divisible by l\nand we set v_i := (1/l\ ) \\cdot (x_i A + v_{i-1}).

\n\nInduction shows that for y_i := \\\ sum_{k=1}^{i} l^{k-1} x_k we\nhave y_i A = v + l^i v_i for all <\ M>i \\geq 0. Hence the\nsequence y_i, i \\geq 0, gi\ ves an l-adic\napproximation to the vector y \\in &QQ;^r wit\ h y A =\nv.

\n\n(2) The second point is to show how we can get t\ he vector y\nfrom a sufficiently good approximation y_i. No\ te that the\nsequence of y_i becomes constant for i \\geq i_0 if all\nentries of y are integers of absolute value smaller th\ an\nl^{i_0} / 2 because of our choice of representatives of residue\ncl\ asses modulo l in the interval \\left]-l/2,\nl/2\\ri\ ght].

\n\nMore generally consider a / b \\in &QQ; with b >\ 0 and\na, b coprime. Then there is for each n \\in &NN; whi\ ch is\ncoprime to b a unique c \\in &ZZ; with -n / 2 < c\ \n\\leq n / 2 and a \\equiv c b \\pmod{n}. This c can be\nc\ omputed via the extended Euclidean algorithm applied to b and\nn.

\n\nNow let n, \\alpha, \\beta \\in &NN; with 2 \\alpha \\be\ ta \\leq\nn. Then the map \\{a/b \\in &QQ; \\mid -\\alpha \\leq a \\leq\ \\alpha,\n1 \\leq b < \\beta \\} \\rightarrow \\left]-n/2, n/2\\right], a/b\n\\mapsto c (defined as above) is injective (since for a/b<\ /M>,\na'/b' in the above set we have a b' - a' b \\equiv 0\ \n\\pmod{n} if and only if a b' - a' b = 0).

\n\nIn practice we \ can use for any c \\in \\left]-n/2, n/2\\right] a\ncertain extended E\ uclidean algorithm applied to n and c\nto decide if c is\ in the image of the above map and to find the\ncorresponding a/b if it\ exists.

\n\n(3) To put things together we apply (2) to the entries of the\ vectors\ny_i constructed in (1), choosing n = l^i, \\alph\ a =\n\\sqrt{n}/2 and \\beta = \\sqrt{n}. If we have found this way\ \na candidate for y we can easily check if it is correct by\ncomp\ uting y A. If \\mu is the maximal absolute value of\nall numer\ ators and denominators of the entries of y it is clear\nfrom (2) that w\ e will find y from y_i if l^i > 2\n\\mu^2.

\n\n(4\ ) If we take as v in (1) to(3) all standard unit vectors we\nclearly \ get the rows of A^{-1}. But we can do it\nbetter. Namel\ y we can take as v the standard unit vectors\nmultiplied by the \ least common multiple \\epsilon of the\ndenominators of the alre\ ady computed entries of A^{-1}. In\nmany examples this \\epsilo\ n actually equals \\epsilon_r\nafter the computation of the firs\ t or first few rows. Therefore we\nwill often find quickly the next row of \ A^{-1} already in (1),\nbecause we find a v_i = 0 such that the\ sequence of y_i\nbecomes constant (=y).

\n\n\nRank of Integer Matrix\n\nThe foll\ owing strategy has shown to be useful in proving that some very\nbig integer \ matrix is not invertible.

\n\n\nCheck the rank modulo some\ small primes, say with . \nIf the\ rank seems less than the number of rows choose a prime\np, a col\ lection of lines which is linearly independent modulo\np, and anothe\ r line linearly dependend on these. Guess that this\nlast line is also linea\ rly dependend on the chosen collection over the\nrational numbers (maybe chec\ k modulo several small primes).\nFind columns of the collection \ of lines which give an invertible\nmatrix modulo some prime.\nTh\ en use with the invertible\nsubmatrix \ and corresponding entries of the linearly dependend row to\nprove this.\n\n\nGuessing the rank of a matrix from the rank modulo sever\ al primes,\nchosing a maximal set of lines which are linearly independent\ modulo\nsome primes, and using with\ the\nremaining lines, one may also find the exact rank of a huge intege\ r\nmatrix.

\n\n\n\n

\n\n\n\n\n\n\n<\ !-- We want a bibliography -->\n\n\n\n\n\n
\n\n", inputorigins := [ [ 1, "doc/edim.xml", 1 ], [ 40, "doc/edim.xml", 2 ], [ 41, "doc/edim.xml", 3 ], [ 77, "doc/edim.xml", 4 ], [ 78, "doc/edim.xml", 5 ], [ 83, "doc/edim.xml", 6 ], [ 84, "doc/edim.xml", 7 ], [ 159, "doc/edim.xml", 8 ], [ 160, "doc/edim.xml", 9 ], [ 228, "doc/edim.xml", 10 ], [ 229, "doc/edim.xml", 11 ], [ 233, "doc/edim.xml", 12 ], [ 234, "doc/edim.xml", 13 ], [ 253, "doc/edim.xml", 14 ], [ 254, "doc/edim.xml", 15 ], [ 266, "doc/edim.xml", 16 ], [ 309, "doc/edim.xml", 17 ], [ 375, "doc/edim.xml", 18 ], [ 389, "doc/edim.xml", 19 ], [ 403, "doc/../VERSION", 1 ], [ 409, "doc/edim.xml", 19 ], [ 410, "doc/edim.xml", 20 ], [ 425, "doc/edim.xml", 21 ], [ 451, "doc/edim.xml", 22 ], [ 461, "doc/edim.xml", 23 ], [ 489, "doc/edim.xml", 24 ], [ 501, "doc/edim.xml", 25 ], [ 519, "doc/edim.xml", 26 ], [ 532, "doc/edim.xml", 27 ], [ 540, "doc/edim.xml", 28 ], [ 551, "doc/edim.xml", 29 ], [ 604, "doc/edim.xml", 30 ], [ 681, "doc/edim.xml", 31 ], [ 695, "doc/edim.xml", 32 ], [ 725, "doc/edim.xml", 33 ], [ 764, "doc/edim.xml", 34 ], [ 822, "doc/edim.xml", 35 ], [ 862, "doc/edim.xml", 36 ], [ 918, "doc/edim.xml", 37 ], [ 987, "doc/edim.xml", 38 ], [ 1127, "doc/edim.xml", 39 ], [ 1198, "doc/edim.xml", 40 ], [ 1227, "doc/edim.xml", 41 ], [ 1244, "doc/edim.xml", 42 ], [ 1245, "doc/edim.xml", 43 ], [ 1258, "doc/edim.xml", 44 ], [ 1259, "doc/edim.xml", 45 ], [ 1330, "doc/edim.xml", 46 ], [ 1349, "doc/edim.xml", 47 ], [ 1350, "doc/edim.xml", 48 ], [ 1391, "doc/edim.xml", 49 ], [ 1398, "doc/main.xml", 1 ], [ 1404, "doc/main.xml", 2 ], [ 1405, "doc/main.xml", 3 ], [ 1475, "doc/main.xml", 4 ], [ 1476, "doc/main.xml", 5 ], [ 1551, "doc/main.xml", 6 ], [ 1552, "doc/main.xml", 7 ], [ 1599, "doc/main.xml", 8 ], [ 1600, "doc/main.xml", 9 ], [ 1604, "doc/main.xml", 10 ], [ 1605, "doc/main.xml", 11 ], [ 1633, "doc/main.xml", 12 ], [ 1688, "doc/main.xml", 13 ], [ 1727, "doc/main.xml", 14 ], [ 1728, "doc/main.xml", 15 ], [ 1799, "doc/main.xml", 16 ], [ 1819, "doc/main.xml", 17 ], [ 1820, "doc/main.xml", 18 ], [ 1893, "doc/main.xml", 19 ], [ 1966, "doc/main.xml", 20 ], [ 2039, "doc/main.xml", 21 ], [ 2112, "doc/main.xml", 22 ], [ 2185, "doc/main.xml", 23 ], [ 2248, "doc/main.xml", 24 ], [ 2249, "doc/main.xml", 25 ], [ 2320, "doc/main.xml", 26 ], [ 2391, "doc/main.xml", 27 ], [ 2442, "doc/main.xml", 28 ], [ 2443, "doc/main.xml", 29 ], [ 2514, "doc/main.xml", 30 ], [ 2585, "doc/main.xml", 31 ], [ 2656, "doc/main.xml", 32 ], [ 2727, "doc/main.xml", 33 ], [ 2793, "doc/main.xml", 34 ], [ 2794, "doc/main.xml", 35 ], [ 2865, "doc/main.xml", 36 ], [ 2936, "doc/main.xml", 37 ], [ 3007, "doc/main.xml", 38 ], [ 3078, "doc/main.xml", 39 ], [ 3149, "doc/main.xml", 40 ], [ 3220, "doc/main.xml", 41 ], [ 3291, "doc/main.xml", 42 ], [ 3323, "doc/main.xml", 43 ], [ 3324, "doc/main.xml", 44 ], [ 3397, "doc/main.xml", 45 ], [ 3470, "doc/main.xml", 46 ], [ 3543, "doc/main.xml", 47 ], [ 3616, "doc/main.xml", 48 ], [ 3631, "doc/main.xml", 49 ], [ 3632, "doc/main.xml", 50 ], [ 3703, "doc/main.xml", 51 ], [ 3774, "doc/main.xml", 52 ], [ 3845, "doc/main.xml", 53 ], [ 3912, "doc/main.xml", 54 ], [ 3913, "doc/main.xml", 55 ], [ 3928, "doc/main.xml", 56 ], [ 3929, "doc/main.xml", 57 ], [ 3960, "doc/main.xml", 58 ], [ 4031, "doc/main.xml", 59 ], [ 4032, "doc/main.xml", 60 ], [ 4103, "doc/main.xml", 61 ], [ 4147, "doc/main.xml", 62 ], [ 4214, "doc/main.xml", 63 ], [ 4282, "doc/main.xml", 64 ], [ 4352, "doc/main.xml", 65 ], [ 4377, "doc/main.xml", 66 ], [ 4442, "doc/main.xml", 67 ], [ 4469, "doc/main.xml", 68 ], [ 4470, "doc/main.xml", 69 ], [ 4544, "doc/main.xml", 70 ], [ 4589, "doc/main.xml", 71 ], [ 4590, "doc/main.xml", 72 ], [ 4645, "doc/main.xml", 73 ], [ 4646, "doc/main.xml", 74 ], [ 4717, "doc/main.xml", 75 ], [ 4781, "doc/main.xml", 76 ], [ 4857, "doc/main.xml", 77 ], [ 4933, "doc/main.xml", 78 ], [ 4977, "doc/main.xml", 79 ], [ 4978, "doc/main.xml", 80 ], [ 5040, "doc/main.xml", 81 ], [ 5041, "doc/main.xml", 82 ], [ 5116, "doc/main.xml", 83 ], [ 5172, "doc/main.xml", 84 ], [ 5173, "doc/main.xml", 85 ], [ 5249, "doc/main.xml", 86 ], [ 5250, "doc/main.xml", 87 ], [ 5264, "doc/main.xml", 88 ], [ 5265, "doc/main.xml", 89 ], [ 5295, "doc/main.xml", 90 ], [ 5296, "doc/main.xml", 91 ], [ 5314, "doc/main.xml", 92 ], [ 5385, "doc/main.xml", 93 ], [ 5456, "doc/main.xml", 94 ], [ 5527, "doc/main.xml", 95 ], [ 5564, "doc/main.xml", 96 ], [ 5579, "doc/main.xml", 97 ], [ 5593, "doc/main.xml", 98 ], [ 5594, "doc/main.xml", 99 ], [ 5605, "doc/main.xml", 100 ], [ 5606, "doc/main.xml", 101 ], [ 5676, "doc/main.xml", 102 ], [ 5707, "doc/main.xml", 103 ], [ 5764, "doc/main.xml", 104 ], [ 5765, "doc/main.xml", 105 ], [ 5816, "doc/main.xml", 106 ], [ 5817, "doc/main.xml", 107 ], [ 5830, "doc/main.xml", 108 ], [ 5869, "doc/main.xml", 109 ], [ 5895, "doc/main.xml", 110 ], [ 5935, "doc/main.xml", 111 ], [ 5958, "doc/main.xml", 112 ], [ 5999, "doc/main.xml", 113 ], [ 6022, "doc/main.xml", 114 ], [ 6064, "doc/main.xml", 115 ], [ 6092, "doc/main.xml", 116 ], [ 6139, "doc/main.xml", 117 ], [ 6171, "doc/main.xml", 118 ], [ 6172, "doc/main.xml", 119 ], [ 6243, "doc/main.xml", 120 ], [ 6314, "doc/main.xml", 121 ], [ 6385, "doc/main.xml", 122 ], [ 6456, "doc/main.xml", 123 ], [ 6471, "doc/main.xml", 124 ], [ 6472, "doc/main.xml", 125 ], [ 6543, "doc/main.xml", 126 ], [ 6560, "doc/main.xml", 127 ], [ 6561, "doc/main.xml", 128 ], [ 6632, "doc/main.xml", 129 ], [ 6703, "doc/main.xml", 130 ], [ 6774, "doc/main.xml", 131 ], [ 6775, "doc/main.xml", 132 ], [ 6846, "doc/main.xml", 133 ], [ 6911, "doc/main.xml", 134 ], [ 6912, "doc/main.xml", 135 ], [ 6983, "doc/main.xml", 136 ], [ 7054, "doc/main.xml", 137 ], [ 7125, "doc/main.xml", 138 ], [ 7196, "doc/main.xml", 139 ], [ 7233, "doc/main.xml", 140 ], [ 7234, "doc/main.xml", 141 ], [ 7305, "doc/main.xml", 142 ], [ 7376, "doc/main.xml", 143 ], [ 7447, "doc/main.xml", 144 ], [ 7505, "doc/main.xml", 145 ], [ 7506, "doc/main.xml", 146 ], [ 7577, "doc/main.xml", 147 ], [ 7607, "doc/main.xml", 148 ], [ 7608, "doc/main.xml", 149 ], [ 7679, "doc/main.xml", 150 ], [ 7750, "doc/main.xml", 151 ], [ 7821, "doc/main.xml", 152 ], [ 7892, "doc/main.xml", 153 ], [ 7963, "doc/main.xml", 154 ], [ 7984, "doc/main.xml", 155 ], [ 7985, "doc/main.xml", 156 ], [ 8056, "doc/main.xml", 157 ], [ 8103, "doc/main.xml", 158 ], [ 8104, "doc/main.xml", 159 ], [ 8175, "doc/main.xml", 160 ], [ 8246, "doc/main.xml", 161 ], [ 8271, "doc/main.xml", 162 ], [ 8272, "doc/main.xml", 163 ], [ 8282, "doc/main.xml", 164 ], [ 8320, "doc/main.xml", 165 ], [ 8391, "doc/main.xml", 166 ], [ 8396, "doc/main.xml", 167 ], [ 8468, "doc/main.xml", 168 ], [ 8507, "doc/main.xml", 169 ], [ 8511, "doc/main.xml", 170 ], [ 8577, "doc/main.xml", 171 ], [ 8616, "doc/main.xml", 172 ], [ 8619, "doc/main.xml", 173 ], [ 8630, "doc/main.xml", 174 ], [ 8645, "doc/main.xml", 175 ], [ 8659, "doc/main.xml", 176 ], [ 8660, "doc/main.xml", 177 ], [ 8730, "doc/main.xml", 178 ], [ 8743, "doc/main.xml", 179 ], [ 8793, "doc/main.xml", 180 ], [ 8813, "doc/main.xml", 181 ], [ 8855, "doc/main.xml", 182 ], [ 8856, "doc/main.xml", 183 ], [ 8871, "doc/main.xml", 184 ], [ 8942, "doc/main.xml", 185 ], [ 9013, "doc/main.xml", 186 ], [ 9084, "doc/main.xml", 187 ], [ 9108, "doc/main.xml", 188 ], [ 9109, "doc/main.xml", 189 ], [ 9180, "doc/main.xml", 190 ], [ 9251, "doc/main.xml", 191 ], [ 9310, "doc/main.xml", 192 ], [ 9311, "doc/main.xml", 193 ], [ 9382, "doc/main.xml", 194 ], [ 9401, "doc/main.xml", 195 ], [ 9402, "doc/main.xml", 196 ], [ 9473, "doc/main.xml", 197 ], [ 9544, "doc/main.xml", 198 ], [ 9615, "doc/main.xml", 199 ], [ 9664, "doc/main.xml", 200 ], [ 9665, "doc/main.xml", 201 ], [ 9675, "doc/main.xml", 202 ], [ 9713, "doc/main.xml", 203 ], [ 9784, "doc/main.xml", 204 ], [ 9789, "doc/main.xml", 205 ], [ 9850, "doc/main.xml", 206 ], [ 9886, "doc/main.xml", 207 ], [ 9891, "doc/main.xml", 208 ], [ 9902, "doc/main.xml", 209 ], [ 9917, "doc/main.xml", 210 ], [ 9931, "doc/main.xml", 211 ], [ 9942, "doc/main.xml", 212 ], [ 9943, "doc/main.xml", 213 ], [ 10013, "doc/main.xml", 214 ], [ 10014, "doc/main.xml", 215 ], [ 10047, "doc/main.xml", 216 ], [ 10095, "doc/main.xml", 217 ], [ 10096, "doc/main.xml", 218 ], [ 10109, "doc/main.xml", 219 ], [ 10136, "doc/main.xml", 220 ], [ 10156, "doc/main.xml", 221 ], [ 10200, "doc/main.xml", 222 ], [ 10201, "doc/main.xml", 223 ], [ 10217, "doc/main.xml", 224 ], [ 10288, "doc/main.xml", 225 ], [ 10310, "doc/main.xml", 226 ], [ 10311, "doc/main.xml", 227 ], [ 10382, "doc/main.xml", 228 ], [ 10453, "doc/main.xml", 229 ], [ 10524, "doc/main.xml", 230 ], [ 10596, "doc/main.xml", 231 ], [ 10609, "doc/main.xml", 232 ], [ 10610, "doc/main.xml", 233 ], [ 10681, "doc/main.xml", 234 ], [ 10753, "doc/main.xml", 235 ], [ 10824, "doc/main.xml", 236 ], [ 10856, "doc/main.xml", 237 ], [ 10857, "doc/main.xml", 238 ], [ 10928, "doc/main.xml", 239 ], [ 10999, "doc/main.xml", 240 ], [ 11070, "doc/main.xml", 241 ], [ 11116, "doc/main.xml", 242 ], [ 11131, "doc/main.xml", 243 ], [ 11145, "doc/main.xml", 244 ], [ 11146, "doc/main.xml", 245 ], [ 11216, "doc/main.xml", 246 ], [ 11229, "doc/main.xml", 247 ], [ 11265, "doc/main.xml", 248 ], [ 11297, "doc/main.xml", 249 ], [ 11361, "doc/main.xml", 250 ], [ 11362, "doc/main.xml", 251 ], [ 11378, "doc/main.xml", 252 ], [ 11447, "doc/main.xml", 253 ], [ 11491, "doc/main.xml", 254 ], [ 11492, "doc/main.xml", 255 ], [ 11565, "doc/main.xml", 256 ], [ 11638, "doc/main.xml", 257 ], [ 11666, "doc/main.xml", 258 ], [ 11667, "doc/main.xml", 259 ], [ 11738, "doc/main.xml", 260 ], [ 11809, "doc/main.xml", 261 ], [ 11870, "doc/main.xml", 262 ], [ 11871, "doc/main.xml", 263 ], [ 11945, "doc/main.xml", 264 ], [ 11982, "doc/main.xml", 265 ], [ 11997, "doc/main.xml", 266 ], [ 12011, "doc/main.xml", 267 ], [ 12012, "doc/main.xml", 268 ], [ 12082, "doc/main.xml", 269 ], [ 12083, "doc/main.xml", 270 ], [ 12096, "doc/main.xml", 271 ], [ 12138, "doc/main.xml", 272 ], [ 12166, "doc/main.xml", 273 ], [ 12183, "doc/main.xml", 274 ], [ 12184, "doc/main.xml", 275 ], [ 12198, "doc/main.xml", 276 ], [ 12269, "doc/main.xml", 277 ], [ 12311, "doc/main.xml", 278 ], [ 12312, "doc/main.xml", 279 ], [ 12383, "doc/main.xml", 280 ], [ 12454, "doc/main.xml", 281 ], [ 12513, "doc/main.xml", 282 ], [ 12516, "doc/main.xml", 283 ], [ 12587, "doc/main.xml", 284 ], [ 12658, "doc/main.xml", 285 ], [ 12729, "doc/main.xml", 286 ], [ 12800, "doc/main.xml", 287 ], [ 12871, "doc/main.xml", 288 ], [ 12942, "doc/main.xml", 289 ], [ 13004, "doc/main.xml", 290 ], [ 13005, "doc/main.xml", 291 ], [ 13076, "doc/main.xml", 292 ], [ 13147, "doc/main.xml", 293 ], [ 13218, "doc/main.xml", 294 ], [ 13264, "doc/main.xml", 295 ], [ 13265, "doc/main.xml", 296 ], [ 13275, "doc/main.xml", 297 ], [ 13313, "doc/main.xml", 298 ], [ 13384, "doc/main.xml", 299 ], [ 13389, "doc/main.xml", 300 ], [ 13450, "doc/main.xml", 301 ], [ 13454, "doc/main.xml", 302 ], [ 13528, "doc/main.xml", 303 ], [ 13535, "doc/main.xml", 304 ], [ 13546, "doc/main.xml", 305 ], [ 13561, "doc/main.xml", 306 ], [ 13575, "doc/main.xml", 307 ], [ 13576, "doc/main.xml", 308 ], [ 13587, "doc/main.xml", 309 ], [ 13588, "doc/main.xml", 310 ], [ 13658, "doc/main.xml", 311 ], [ 13659, "doc/main.xml", 312 ], [ 13691, "doc/main.xml", 313 ], [ 13754, "doc/main.xml", 314 ], [ 13755, "doc/main.xml", 315 ], [ 13826, "doc/main.xml", 316 ], [ 13897, "doc/main.xml", 317 ], [ 13968, "doc/main.xml", 318 ], [ 14002, "doc/main.xml", 319 ], [ 14003, "doc/main.xml", 320 ], [ 14016, "doc/main.xml", 321 ], [ 14068, "doc/main.xml", 322 ], [ 14089, "doc/main.xml", 323 ], [ 14090, "doc/main.xml", 324 ], [ 14104, "doc/main.xml", 325 ], [ 14175, "doc/main.xml", 326 ], [ 14204, "doc/main.xml", 327 ], [ 14207, "doc/main.xml", 328 ], [ 14278, "doc/main.xml", 329 ], [ 14349, "doc/main.xml", 330 ], [ 14420, "doc/main.xml", 331 ], [ 14491, "doc/main.xml", 332 ], [ 14500, "doc/main.xml", 333 ], [ 14501, "doc/main.xml", 334 ], [ 14572, "doc/main.xml", 335 ], [ 14599, "doc/main.xml", 336 ], [ 14600, "doc/main.xml", 337 ], [ 14670, "doc/main.xml", 338 ], [ 14741, "doc/main.xml", 339 ], [ 14778, "doc/main.xml", 340 ], [ 14779, "doc/main.xml", 341 ], [ 14850, "doc/main.xml", 342 ], [ 14921, "doc/main.xml", 343 ], [ 14992, "doc/main.xml", 344 ], [ 15063, "doc/main.xml", 345 ], [ 15134, "doc/main.xml", 346 ], [ 15205, "doc/main.xml", 347 ], [ 15248, "doc/main.xml", 348 ], [ 15249, "doc/main.xml", 349 ], [ 15259, "doc/main.xml", 350 ], [ 15326, "doc/main.xml", 351 ], [ 15395, "doc/main.xml", 352 ], [ 15453, "doc/main.xml", 353 ], [ 15485, "doc/main.xml", 354 ], [ 15496, "doc/main.xml", 355 ], [ 15500, "doc/main.xml", 356 ], [ 15572, "doc/main.xml", 357 ], [ 15577, "doc/main.xml", 358 ], [ 15588, "doc/main.xml", 359 ], [ 15593, "doc/main.xml", 360 ], [ 15604, "doc/main.xml", 361 ], [ 15619, "doc/main.xml", 362 ], [ 15633, "doc/main.xml", 363 ], [ 15634, "doc/main.xml", 364 ], [ 15704, "doc/main.xml", 365 ], [ 15705, "doc/main.xml", 366 ], [ 15718, "doc/main.xml", 367 ], [ 15767, "doc/main.xml", 368 ], [ 15798, "doc/main.xml", 369 ], [ 15799, "doc/main.xml", 370 ], [ 15813, "doc/main.xml", 371 ], [ 15884, "doc/main.xml", 372 ], [ 15913, "doc/main.xml", 373 ], [ 15914, "doc/main.xml", 374 ], [ 15985, "doc/main.xml", 375 ], [ 16056, "doc/main.xml", 376 ], [ 16109, "doc/main.xml", 377 ], [ 16110, "doc/main.xml", 378 ], [ 16181, "doc/main.xml", 379 ], [ 16227, "doc/main.xml", 380 ], [ 16228, "doc/main.xml", 381 ], [ 16299, "doc/main.xml", 382 ], [ 16370, "doc/main.xml", 383 ], [ 16441, "doc/main.xml", 384 ], [ 16512, "doc/main.xml", 385 ], [ 16583, "doc/main.xml", 386 ], [ 16644, "doc/main.xml", 387 ], [ 16645, "doc/main.xml", 388 ], [ 16655, "doc/main.xml", 389 ], [ 16693, "doc/main.xml", 390 ], [ 16764, "doc/main.xml", 391 ], [ 16769, "doc/main.xml", 392 ], [ 16789, "doc/main.xml", 393 ], [ 16853, "doc/main.xml", 394 ], [ 16896, "doc/main.xml", 395 ], [ 16901, "doc/main.xml", 396 ], [ 16906, "doc/main.xml", 397 ], [ 16917, "doc/main.xml", 398 ], [ 16932, "doc/main.xml", 399 ], [ 16946, "doc/main.xml", 400 ], [ 16947, "doc/main.xml", 401 ], [ 16958, "doc/main.xml", 402 ], [ 16959, "doc/main.xml", 403 ], [ 17029, "doc/main.xml", 404 ], [ 17030, "doc/main.xml", 405 ], [ 17065, "doc/main.xml", 406 ], [ 17115, "doc/main.xml", 407 ], [ 17116, "doc/main.xml", 408 ], [ 17187, "doc/main.xml", 409 ], [ 17258, "doc/main.xml", 410 ], [ 17329, "doc/main.xml", 411 ], [ 17400, "doc/main.xml", 412 ], [ 17418, "doc/main.xml", 413 ], [ 17419, "doc/main.xml", 414 ], [ 17490, "doc/main.xml", 415 ], [ 17561, "doc/main.xml", 416 ], [ 17635, "doc/main.xml", 417 ], [ 17706, "doc/main.xml", 418 ], [ 17764, "doc/main.xml", 419 ], [ 17765, "doc/main.xml", 420 ], [ 17780, "doc/main.xml", 421 ], [ 17781, "doc/main.xml", 422 ], [ 17794, "doc/main.xml", 423 ], [ 17819, "doc/main.xml", 424 ], [ 17849, "doc/main.xml", 425 ], [ 17850, "doc/main.xml", 426 ], [ 17866, "doc/main.xml", 427 ], [ 17939, "doc/main.xml", 428 ], [ 18012, "doc/main.xml", 429 ], [ 18085, "doc/main.xml", 430 ], [ 18144, "doc/main.xml", 431 ], [ 18145, "doc/main.xml", 432 ], [ 18155, "doc/main.xml", 433 ], [ 18228, "doc/main.xml", 434 ], [ 18268, "doc/main.xml", 435 ], [ 18279, "doc/main.xml", 436 ], [ 18294, "doc/main.xml", 437 ], [ 18308, "doc/main.xml", 438 ], [ 18309, "doc/main.xml", 439 ], [ 18379, "doc/main.xml", 440 ], [ 18380, "doc/main.xml", 441 ], [ 18393, "doc/main.xml", 442 ], [ 18423, "doc/main.xml", 443 ], [ 18441, "doc/main.xml", 444 ], [ 18442, "doc/main.xml", 445 ], [ 18513, "doc/main.xml", 446 ], [ 18584, "doc/main.xml", 447 ], [ 18599, "doc/main.xml", 448 ], [ 18613, "doc/main.xml", 449 ], [ 18614, "doc/main.xml", 450 ], [ 18684, "doc/main.xml", 451 ], [ 18685, "doc/main.xml", 452 ], [ 18698, "doc/main.xml", 453 ], [ 18733, "doc/main.xml", 454 ], [ 18754, "doc/main.xml", 455 ], [ 18755, "doc/main.xml", 456 ], [ 18770, "doc/main.xml", 457 ], [ 18841, "doc/main.xml", 458 ], [ 18912, "doc/main.xml", 459 ], [ 18982, "doc/main.xml", 460 ], [ 18983, "doc/main.xml", 461 ], [ 18993, "doc/main.xml", 462 ], [ 19032, "doc/main.xml", 463 ], [ 19103, "doc/main.xml", 464 ], [ 19108, "doc/main.xml", 465 ], [ 19185, "doc/main.xml", 466 ], [ 19189, "doc/main.xml", 467 ], [ 19262, "doc/main.xml", 468 ], [ 19267, "doc/main.xml", 469 ], [ 19278, "doc/main.xml", 470 ], [ 19293, "doc/main.xml", 471 ], [ 19307, "doc/main.xml", 472 ], [ 19308, "doc/main.xml", 473 ], [ 19378, "doc/main.xml", 474 ], [ 19379, "doc/main.xml", 475 ], [ 19392, "doc/main.xml", 476 ], [ 19420, "doc/main.xml", 477 ], [ 19441, "doc/main.xml", 478 ], [ 19442, "doc/main.xml", 479 ], [ 19457, "doc/main.xml", 480 ], [ 19528, "doc/main.xml", 481 ], [ 19587, "doc/main.xml", 482 ], [ 19602, "doc/main.xml", 483 ], [ 19616, "doc/main.xml", 484 ], [ 19617, "doc/main.xml", 485 ], [ 19687, "doc/main.xml", 486 ], [ 19688, "doc/main.xml", 487 ], [ 19701, "doc/main.xml", 488 ], [ 19734, "doc/main.xml", 489 ], [ 19755, "doc/main.xml", 490 ], [ 19756, "doc/main.xml", 491 ], [ 19770, "doc/main.xml", 492 ], [ 19841, "doc/main.xml", 493 ], [ 19901, "doc/main.xml", 494 ], [ 19902, "doc/main.xml", 495 ], [ 19973, "doc/main.xml", 496 ], [ 20044, "doc/main.xml", 497 ], [ 20115, "doc/main.xml", 498 ], [ 20144, "doc/main.xml", 499 ], [ 20145, "doc/main.xml", 500 ], [ 20155, "doc/main.xml", 501 ], [ 20194, "doc/main.xml", 502 ], [ 20265, "doc/main.xml", 503 ], [ 20270, "doc/main.xml", 504 ], [ 20309, "doc/main.xml", 505 ], [ 20348, "doc/main.xml", 506 ], [ 20353, "doc/main.xml", 507 ], [ 20364, "doc/main.xml", 508 ], [ 20379, "doc/main.xml", 509 ], [ 20393, "doc/main.xml", 510 ], [ 20394, "doc/main.xml", 511 ], [ 20405, "doc/main.xml", 512 ], [ 20406, "doc/main.xml", 513 ], [ 20407, "doc/main.xml", 514 ], [ 20477, "doc/main.xml", 515 ], [ 20478, "doc/main.xml", 516 ], [ 20506, "doc/main.xml", 517 ], [ 20507, "doc/main.xml", 518 ], [ 20585, "doc/main.xml", 519 ], [ 20586, "doc/main.xml", 520 ], [ 20599, "doc/main.xml", 521 ], [ 20633, "doc/main.xml", 522 ], [ 20660, "doc/main.xml", 523 ], [ 20661, "doc/main.xml", 524 ], [ 20675, "doc/main.xml", 525 ], [ 20740, "doc/main.xml", 526 ], [ 20771, "doc/main.xml", 527 ], [ 20772, "doc/main.xml", 528 ], [ 20843, "doc/main.xml", 529 ], [ 20914, "doc/main.xml", 530 ], [ 20985, "doc/main.xml", 531 ], [ 21056, "doc/main.xml", 532 ], [ 21127, "doc/main.xml", 533 ], [ 21198, "doc/main.xml", 534 ], [ 21269, "doc/main.xml", 535 ], [ 21340, "doc/main.xml", 536 ], [ 21367, "doc/main.xml", 537 ], [ 21382, "doc/main.xml", 538 ], [ 21396, "doc/main.xml", 539 ], [ 21397, "doc/main.xml", 540 ], [ 21467, "doc/main.xml", 541 ], [ 21468, "doc/main.xml", 542 ], [ 21481, "doc/main.xml", 543 ], [ 21511, "doc/main.xml", 544 ], [ 21533, "doc/main.xml", 545 ], [ 21534, "doc/main.xml", 546 ], [ 21548, "doc/main.xml", 547 ], [ 21619, "doc/main.xml", 548 ], [ 21652, "doc/main.xml", 549 ], [ 21653, "doc/main.xml", 550 ], [ 21724, "doc/main.xml", 551 ], [ 21795, "doc/main.xml", 552 ], [ 21866, "doc/main.xml", 553 ], [ 21937, "doc/main.xml", 554 ], [ 21965, "doc/main.xml", 555 ], [ 21966, "doc/main.xml", 556 ], [ 22037, "doc/main.xml", 557 ], [ 22038, "doc/main.xml", 558 ], [ 22097, "doc/main.xml", 559 ], [ 22112, "doc/main.xml", 560 ], [ 22126, "doc/main.xml", 561 ], [ 22127, "doc/main.xml", 562 ], [ 22197, "doc/main.xml", 563 ], [ 22198, "doc/main.xml", 564 ], [ 22211, "doc/main.xml", 565 ], [ 22244, "doc/main.xml", 566 ], [ 22263, "doc/main.xml", 567 ], [ 22264, "doc/main.xml", 568 ], [ 22278, "doc/main.xml", 569 ], [ 22349, "doc/main.xml", 570 ], [ 22420, "doc/main.xml", 571 ], [ 22490, "doc/main.xml", 572 ], [ 22505, "doc/main.xml", 573 ], [ 22519, "doc/main.xml", 574 ], [ 22520, "doc/main.xml", 575 ], [ 22590, "doc/main.xml", 576 ], [ 22591, "doc/main.xml", 577 ], [ 22604, "doc/main.xml", 578 ], [ 22633, "doc/main.xml", 579 ], [ 22658, "doc/main.xml", 580 ], [ 22659, "doc/main.xml", 581 ], [ 22673, "doc/main.xml", 582 ], [ 22744, "doc/main.xml", 583 ], [ 22815, "doc/main.xml", 584 ], [ 22886, "doc/main.xml", 585 ], [ 22897, "doc/main.xml", 586 ], [ 22898, "doc/main.xml", 587 ], [ 22971, "doc/main.xml", 588 ], [ 23044, "doc/main.xml", 589 ], [ 23088, "doc/main.xml", 590 ], [ 23104, "doc/main.xml", 591 ], [ 23118, "doc/main.xml", 592 ], [ 23119, "doc/main.xml", 593 ], [ 23189, "doc/main.xml", 594 ], [ 23190, "doc/main.xml", 595 ], [ 23203, "doc/main.xml", 596 ], [ 23224, "doc/main.xml", 597 ], [ 23245, "doc/main.xml", 598 ], [ 23246, "doc/main.xml", 599 ], [ 23260, "doc/main.xml", 600 ], [ 23331, "doc/main.xml", 601 ], [ 23402, "doc/main.xml", 602 ], [ 23473, "doc/main.xml", 603 ], [ 23522, "doc/main.xml", 604 ], [ 23523, "doc/main.xml", 605 ], [ 23594, "doc/main.xml", 606 ], [ 23665, "doc/main.xml", 607 ], [ 23736, "doc/main.xml", 608 ], [ 23806, "doc/main.xml", 609 ], [ 23850, "doc/main.xml", 610 ], [ 23851, "doc/main.xml", 611 ], [ 23922, "doc/main.xml", 612 ], [ 23993, "doc/main.xml", 613 ], [ 24041, "doc/main.xml", 614 ], [ 24042, "doc/main.xml", 615 ], [ 24052, "doc/main.xml", 616 ], [ 24090, "doc/main.xml", 617 ], [ 24161, "doc/main.xml", 618 ], [ 24166, "doc/main.xml", 619 ], [ 24188, "doc/main.xml", 620 ], [ 24192, "doc/main.xml", 621 ], [ 24224, "doc/main.xml", 622 ], [ 24267, "doc/main.xml", 623 ], [ 24278, "doc/main.xml", 624 ], [ 24293, "doc/main.xml", 625 ], [ 24307, "doc/main.xml", 626 ], [ 24308, "doc/main.xml", 627 ], [ 24319, "doc/main.xml", 628 ], [ 24320, "doc/main.xml", 629 ], [ 24390, "doc/main.xml", 630 ], [ 24391, "doc/main.xml", 631 ], [ 24427, "doc/main.xml", 632 ], [ 24476, "doc/main.xml", 633 ], [ 24477, "doc/main.xml", 634 ], [ 24478, "doc/main.xml", 635 ], [ 24549, "doc/main.xml", 636 ], [ 24620, "doc/main.xml", 637 ], [ 24693, "doc/main.xml", 638 ], [ 24764, "doc/main.xml", 639 ], [ 24775, "doc/main.xml", 640 ], [ 24776, "doc/main.xml", 641 ], [ 24847, "doc/main.xml", 642 ], [ 24918, "doc/main.xml", 643 ], [ 24932, "doc/main.xml", 644 ], [ 24933, "doc/main.xml", 645 ], [ 25004, "doc/main.xml", 646 ], [ 25075, "doc/main.xml", 647 ], [ 25146, "doc/main.xml", 648 ], [ 25217, "doc/main.xml", 649 ], [ 25288, "doc/main.xml", 650 ], [ 25335, "doc/main.xml", 651 ], [ 25336, "doc/main.xml", 652 ], [ 25407, "doc/main.xml", 653 ], [ 25478, "doc/main.xml", 654 ], [ 25549, "doc/main.xml", 655 ], [ 25620, "doc/main.xml", 656 ], [ 25691, "doc/main.xml", 657 ], [ 25762, "doc/main.xml", 658 ], [ 25822, "doc/main.xml", 659 ], [ 25823, "doc/main.xml", 660 ], [ 25894, "doc/main.xml", 661 ], [ 25965, "doc/main.xml", 662 ], [ 26036, "doc/main.xml", 663 ], [ 26101, "doc/main.xml", 664 ], [ 26112, "doc/main.xml", 665 ], [ 26113, "doc/main.xml", 666 ], [ 26184, "doc/main.xml", 667 ], [ 26255, "doc/main.xml", 668 ], [ 26326, "doc/main.xml", 669 ], [ 26397, "doc/main.xml", 670 ], [ 26468, "doc/main.xml", 671 ], [ 26539, "doc/main.xml", 672 ], [ 26559, "doc/main.xml", 673 ], [ 26560, "doc/main.xml", 674 ], [ 26631, "doc/main.xml", 675 ], [ 26702, "doc/main.xml", 676 ], [ 26773, "doc/main.xml", 677 ], [ 26844, "doc/main.xml", 678 ], [ 26915, "doc/main.xml", 679 ], [ 26929, "doc/main.xml", 680 ], [ 26930, "doc/main.xml", 681 ], [ 27001, "doc/main.xml", 682 ], [ 27072, "doc/main.xml", 683 ], [ 27143, "doc/main.xml", 684 ], [ 27214, "doc/main.xml", 685 ], [ 27285, "doc/main.xml", 686 ], [ 27342, "doc/main.xml", 687 ], [ 27343, "doc/main.xml", 688 ], [ 27414, "doc/main.xml", 689 ], [ 27485, "doc/main.xml", 690 ], [ 27556, "doc/main.xml", 691 ], [ 27599, "doc/main.xml", 692 ], [ 27600, "doc/main.xml", 693 ], [ 27671, "doc/main.xml", 694 ], [ 27742, "doc/main.xml", 695 ], [ 27813, "doc/main.xml", 696 ], [ 27884, "doc/main.xml", 697 ], [ 27955, "doc/main.xml", 698 ], [ 28026, "doc/main.xml", 699 ], [ 28097, "doc/main.xml", 700 ], [ 28112, "doc/main.xml", 701 ], [ 28113, "doc/main.xml", 702 ], [ 28184, "doc/main.xml", 703 ], [ 28255, "doc/main.xml", 704 ], [ 28326, "doc/main.xml", 705 ], [ 28397, "doc/main.xml", 706 ], [ 28468, "doc/main.xml", 707 ], [ 28539, "doc/main.xml", 708 ], [ 28610, "doc/main.xml", 709 ], [ 28681, "doc/main.xml", 710 ], [ 28752, "doc/main.xml", 711 ], [ 28786, "doc/main.xml", 712 ], [ 28787, "doc/main.xml", 713 ], [ 28825, "doc/main.xml", 714 ], [ 28867, "doc/main.xml", 715 ], [ 28868, "doc/main.xml", 716 ], [ 28941, "doc/main.xml", 717 ], [ 28983, "doc/main.xml", 718 ], [ 28984, "doc/main.xml", 719 ], [ 28991, "doc/main.xml", 720 ], [ 29064, "doc/main.xml", 721 ], [ 29090, "doc/main.xml", 722 ], [ 29163, "doc/main.xml", 723 ], [ 29236, "doc/main.xml", 724 ], [ 29309, "doc/main.xml", 725 ], [ 29382, "doc/main.xml", 726 ], [ 29449, "doc/main.xml", 727 ], [ 29522, "doc/main.xml", 728 ], [ 29555, "doc/main.xml", 729 ], [ 29628, "doc/main.xml", 730 ], [ 29701, "doc/main.xml", 731 ], [ 29720, "doc/main.xml", 732 ], [ 29728, "doc/main.xml", 733 ], [ 29729, "doc/main.xml", 734 ], [ 29802, "doc/main.xml", 735 ], [ 29875, "doc/main.xml", 736 ], [ 29948, "doc/main.xml", 737 ], [ 30021, "doc/main.xml", 738 ], [ 30034, "doc/main.xml", 739 ], [ 30035, "doc/main.xml", 740 ], [ 30049, "doc/main.xml", 741 ], [ 30050, "doc/main.xml", 742 ], [ 30061, "doc/main.xml", 743 ], [ 30062, "doc/main.xml", 744 ], [ 30073, "doc/main.xml", 745 ], [ 30074, "doc/edim.xml", 50 ], [ 30075, "doc/edim.xml", 51 ], [ 30083, "doc/edim.xml", 52 ], [ 30084, "doc/edim.xml", 53 ], [ 30118, "doc/edim.xml", 54 ], [ 30151, "doc/edim.xml", 55 ], [ 30152, "doc/edim.xml", 56 ], [ 30193, "doc/edim.xml", 57 ], [ 30205, "doc/edim.xml", 58 ], [ 30206, "doc/edim.xml", 59 ], [ 30214, "doc/edim.xml", 60 ] ], labels := rec( ("Chap-EDIM") := [ "1", "chap1_mj.html#X7AA826067CC8C395" ], CheapFactorsInt := [ "1.6-4", "chap1_mj.html#X7BAB977C7EB05067" ], ElementaryDivisorsIntMatDeterminant := [ "1.4-2", "chap1_mj.html#X821E30477A5DCE68" ], ElementaryDivisorsPPartHavasSterling := [ "1.2-2", "chap1_mj.html#X82EC4724865F4DF9" ], ElementaryDivisorsPPartRk := [ "1.2-1", "chap1_mj.html#X813B0D73868CD751" ], ElementaryDivisorsPPartRkExp := [ "1.2-1", "chap1_mj.html#X813B0D73868CD751" ], ElementaryDivisorsPPartRkExpSmall := [ "1.2-1", "chap1_mj.html#X813B0D73868CD751" ], ElementaryDivisorsPPartRkI := [ "1.2-1", "chap1_mj.html#X813B0D73868CD751" ], ElementaryDivisorsPPartRkII := [ "1.2-1", "chap1_mj.html#X813B0D73868CD751" ], ElementaryDivisorsSquareIntMatFullRank := [ "1.4-1", "chap1_mj.html#X7B6A3B8486872B0C" ], ExponentSquareIntMatFullRank := [ "1.3-3", "chap1_mj.html#X86DA61D978D2D889" ], GcdexIntLLL := [ "1.5-1", "chap1_mj.html#X799B1A5285D00859" ], HadamardBoundIntMat := [ "1.6-3", "chap1_mj.html#X7CDF3D2081207080" ], HermiteIntMatLLL := [ "1.5-2", "chap1_mj.html#X7C6AE6777B72F9D2" ], HermiteIntMatLLLTrans := [ "1.5-3", "chap1_mj.html#X862962B7878A284F" ], InfoEDIM := [ "1.1-1", "chap1_mj.html#X7AF83FEC7CD0311C" ], InverseIntMatMod := [ "1.6-2", "chap1_mj.html#X78518E1D81435762" ], InverseRatMat := [ "1.3-1", "chap1_mj.html#X7A9656D47C4D2D16" ], RankMod := [ "1.6-5", "chap1_mj.html#X8312EDA78209B4EA" ], RatNumberFromModular := [ "1.6-1", "chap1_mj.html#X7EC844F97C469C03" ], RationalSolutionIntMat := [ "1.3-2", "chap1_mj.html#X8302B31E86B3AFDB" ] , ("Sect-ElDivPad") := [ "1.4", "chap1_mj.html#X7A6548FA7C837D27" ], ("Sect-Install") := [ "1.1", "chap1_mj.html#X84D3F5E77E3BF046" ], ("Sect-InvRatMat") := [ "1.3", "chap1_mj.html#X80FF39C07E03D7EF" ], ("Sect-InvRatMatAlg") := [ "1.7", "chap1_mj.html#X83FD1AAB7EB2E934" ], ("Sect-NFIntMatLLL") := [ "1.5", "chap1_mj.html#X788047737FA04422" ], ("Sect-PPElDiv") := [ "1.2", "chap1_mj.html#X818BE04687230849" ], ("Sect-Util") := [ "1.6", "chap1_mj.html#X832582857EB36B23" ], SmithIntMatLLL := [ "1.5-4", "chap1_mj.html#X8626F15179C09798" ], SmithIntMatLLLTrans := [ "1.5-5", "chap1_mj.html#X86094B1B7C87EBF6" ], ("Ssect-rankintmat") := [ "1.7-1", "chap1_mj.html#X791ED7D97F87FDFD" ] ) , labeltexts := rec( ("Chap-EDIM") := "The EDIM\ -Package", ("Sect-ElDivPad") := "All Elementary Divisors Us\ ing p-adic Method", ("Sect-Install") := "Installation of the EDIM package", ("Sect-InvRatMat") := "Inverse of Rational Matri\ ces", ("Sect-InvRatMatAlg") := "InverseRatMat - the Al\ gorithm", ("Sect-NFIntMatLLL") := "Gcd and Normal Forms Us\ ing LLL", ("Sect-PPElDiv") := "\ \\(p\\)-Parts of Elementary Divisors", ("Sect-Util") := "Utility Functions from the EDIM-package", ("Ssect-rankintmat") := "Rank of Integer Matrix<\ /span>" ), linelength := 76, mathmode := "MathJax", name := "WHOLEDOCUMENT", next := 30231, root := ~, six := [ [ "Title page", ".", [ 0, 0, 0 ], 1, 1, "title page", "X7D2C85EC87DD46E5" ], [ "Copyright", ".-1", [ 0, 0, 1 ], 28, 2, "copyright", "X81488B807F2A1CF1" ], [ "Table of Contents", ".-2", [ 0, 0, 2 ], 39, 3, "table of contents", "X8537FEB07AF2BEC8" ], [ "\033[1X\033[33X\033[0;-2YThe \033[5XEDIM\033[105X\033[101X\027\033[1X\\ 027-Package\033[133X\033[101X", "1", [ 1, 0, 0 ], 1, 4, "the edim-package", "X7AA826067CC8C395" ], [ "\033[1X\033[33X\033[0;-2YInstallation of the \033[5XEDIM\033[105X\033[\ 101X\027\033[1X\027 package\033[133X\033[101X", "1.1", [ 1, 1, 0 ], 39, 4, "installation of the edim package", "X84D3F5E77E3BF046" ], [ "\033[1X\033[33X\033[0;-2Y\033[22Xp\033[122X\033[101X\027\033[1X\027-Pa\ rts of Elementary Divisors\033[133X\033[101X", "1.2", [ 1, 2, 0 ], 72, 5, "p-parts of elementary divisors", "X818BE04687230849" ], [ "\033[1X\033[33X\033[0;-2YInverse of Rational Matrices\033[133X\033[101\ X", "1.3", [ 1, 3, 0 ], 162, 6, "inverse of rational matrices", "X80FF39C07E03D7EF" ], [ "\033[1X\033[33X\033[0;-2YAll Elementary Divisors Using p-adic Method\\ 033[133X\033[101X", "1.4", [ 1, 4, 0 ], 232, 7, "all elementary divisors using p-adic method", "X7A6548FA7C837D27" ] , [ "\033[1X\033[33X\033[0;-2YGcd and Normal Forms Using LLL\033[133X\033[1\ 01X", "1.5", [ 1, 5, 0 ], 309, 8, "gcd and normal forms using lll", "X788047737FA04422" ], [ "\033[1X\033[33X\033[0;-2YUtility Functions from the \033[5XEDIM\033[10\ 5X\033[101X\027\033[1X\027-package\033[133X\033[101X", "1.6", [ 1, 6, 0 ], 390, 10, "utility functions from the edim-package", "X832582857EB36B23" ], [ "\033[1X\033[33X\033[0;-2YInverseRatMat - the Algorithm\033[133X\033[10\ 1X", "1.7", [ 1, 7, 0 ], 466, 11, "inverseratmat - the algorithm", "X83FD1AAB7EB2E934" ], [ "\033[1X\033[33X\033[0;-2YRank of Integer Matrix\033[133X\033[101X", "1.7-1", [ 1, 7, 1 ], 529, 12, "rank of integer matrix", "X791ED7D97F87FDFD" ], [ "Bibliography", "Bib", [ "Bib", 0, 0 ], 1, 13, "bibliography", "X7A6F98FD85F02BFE" ], [ "References", "Bib", [ "Bib", 0, 0 ], 1, 13, "references", "X7A6F98FD85F02BFE" ], [ "Index", "Ind", [ "Ind", 0, 0 ], 1, 14, "index", "X83A0356F839C696F" ] , [ "License", ".-1", [ 0, 0, 1 ], 28, 2, "license", "X81488B807F2A1CF1" ] , [ "\033[5XEDIM\033[105X", "1.", [ 1, 0, 0 ], 1, 4, "edim", "X7AA826067CC8C395" ], [ "\033[2XInfoEDIM\033[102X", "1.1-1", [ 1, 1, 1 ], 64, 5, "infoedim", "X7AF83FEC7CD0311C" ], [ "\033[2XElementaryDivisorsPPartRk\033[102X", "1.2-1", [ 1, 2, 1 ], 77, 5, "elementarydivisorsppartrk", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkI\033[102X", "1.2-1", [ 1, 2, 1 ], 77, 5, "elementarydivisorsppartrki", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkII\033[102X", "1.2-1", [ 1, 2, 1 ], 77, 5, "elementarydivisorsppartrkii", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkExp\033[102X", "1.2-1", [ 1, 2, 1 ], 77, 5, "elementarydivisorsppartrkexp", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkExpSmall\033[102X", "1.2-1", [ 1, 2, 1 ], 77, 5, "elementarydivisorsppartrkexpsmall", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartHavasSterling\033[102X", "1.2-2", [ 1, 2, 2 ], 134, 6, "elementarydivisorspparthavassterling", "X82EC4724865F4DF9" ], [ "\033[2XInverseRatMat\033[102X", "1.3-1", [ 1, 3, 1 ], 165, 6, "inverseratmat", "X7A9656D47C4D2D16" ], [ "\033[2XRationalSolutionIntMat\033[102X", "1.3-2", [ 1, 3, 2 ], 184, 7, "rationalsolutionintmat", "X8302B31E86B3AFDB" ], [ "\033[2XExponentSquareIntMatFullRank\033[102X", "1.3-3", [ 1, 3, 3 ], 200, 7, "exponentsquareintmatfullrank", "X86DA61D978D2D889" ], [ "\033[2XElementaryDivisorsSquareIntMatFullRank\033[102X", "1.4-1", [ 1, 4, 1 ], 240, 7, "elementarydivisorssquareintmatfullrank", "X7B6A3B8486872B0C" ], [ "\033[2XElementaryDivisorsIntMatDeterminant\033[102X", "1.4-2", [ 1, 4, 2 ], 279, 8, "elementarydivisorsintmatdeterminant", "X821E30477A5DCE68" ], [ "\033[2XGcdexIntLLL\033[102X", "1.5-1", [ 1, 5, 1 ], 325, 9, "gcdexintlll", "X799B1A5285D00859" ], [ "\033[2XHermiteIntMatLLL\033[102X", "1.5-2", [ 1, 5, 2 ], 338, 9, "hermiteintmatlll", "X7C6AE6777B72F9D2" ], [ "\033[2XHermiteIntMatLLLTrans\033[102X", "1.5-3", [ 1, 5, 3 ], 345, 9, "hermiteintmatllltrans", "X862962B7878A284F" ], [ "\033[2XSmithIntMatLLL\033[102X", "1.5-4", [ 1, 5, 4 ], 363, 9, "smithintmatlll", "X8626F15179C09798" ], [ "\033[2XSmithIntMatLLLTrans\033[102X", "1.5-5", [ 1, 5, 5 ], 370, 10, "smithintmatllltrans", "X86094B1B7C87EBF6" ], [ "\033[2XRatNumberFromModular\033[102X", "1.6-1", [ 1, 6, 1 ], 393, 10, "ratnumberfrommodular", "X7EC844F97C469C03" ], [ "\033[2XInverseIntMatMod\033[102X", "1.6-2", [ 1, 6, 2 ], 405, 10, "inverseintmatmod", "X78518E1D81435762" ], [ "\033[2XHadamardBoundIntMat\033[102X", "1.6-3", [ 1, 6, 3 ], 419, 10, "hadamardboundintmat", "X7CDF3D2081207080" ], [ "\033[2XCheapFactorsInt\033[102X", "1.6-4", [ 1, 6, 4 ], 427, 11, "cheapfactorsint", "X7BAB977C7EB05067" ], [ "\033[2XRankMod\033[102X", "1.6-5", [ 1, 6, 5 ], 439, 11, "rankmod", "X8312EDA78209B4EA" ] ], sixcount := [ [ 0, 0, 0 ], [ 0, 0, 1 ], [ 0, 0, 1 ], [ 0, 0, 2 ], [ 1, 0, 0 ], [ 1, 0, 0 ], [ 1, 1, 0 ], [ 1, 1, 1 ], [ 1, 2, 0 ], [ 1, 2, 1 ], [ 1, 2, 1 ], [ 1, 2, 1 ], [ 1, 2, 1 ], [ 1, 2, 1 ], [ 1, 2, 2 ], [ 1, 3, 0 ], [ 1, 3, 1 ], [ 1, 3, 2 ], [ 1, 3, 3 ], [ 1, 4, 0 ], [ 1, 4, 1 ], [ 1, 4, 2 ], [ 1, 5, 0 ], [ 1, 5, 1 ], [ 1, 5, 2 ], [ 1, 5, 3 ], [ 1, 5, 4 ], [ 1, 5, 5 ], [ 1, 6, 0 ], [ 1, 6, 1 ], [ 1, 6, 2 ], [ 1, 6, 3 ], [ 1, 6, 4 ], [ 1, 6, 5 ], [ 1, 7, 0 ], [ 1, 7, 1 ], [ "Bib", 0, 0 ], [ "Bib", 0, 0 ], [ "Ind", 0, 0 ] ], sixindex := [ 1, 2, 16, 3, 4, 17, 5, 18, 6, 23, 22, 21, 20, 19, 24, 7, 25, 26, 27, 8, 28, 29, 9, 30, 31, 32, 33, 34, 10, 35, 36, 37, 38, 39, 11, 12, 13, 14, 15 ], start := 0, stop := 30230, toctext := "
1 The EDIM-Package<\ /span>\n
 1.1 Installation of the EDIM package\n\n
\n
<\ span class=\"nocss\">  
1.1-1 InfoEDIM\n
\n\n\n\n\n\n\n
1 The\ EDIM-Package\n\n" ) gap> gap> gap> gap> ───────────────────────────────────────────────────────────────────────────── Loading EDIM 1.3.3 (Elementary Divisors of Integer Matrices) by Frank Lübeck (http://www.math.rwth-aachen.de/~Frank.Luebeck). Homepage: http://www.math.rwth-aachen.de/~Frank.Luebeck/EDIM ───────────────────────────────────────────────────────────────────────────── #I File: /builddir/build/BUILD/EDIM-1.3.3/../pkg/EDIM-1.3.3/doc/manual.lab written. gap> gap> gap> gap> Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.esI1Zp + umask 022 + cd /builddir/build/BUILD + '[' /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 '!=' / ']' + rm -rf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 BUILDSTDERR: ++ dirname /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 + mkdir -p /builddir/build/BUILDROOT + mkdir /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 + cd EDIM-1.3.3 + mkdir -p /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/bin/riscv64-redhat-linux-gnu-default64-kv3 + cp -p bin/riscv64-redhat-linux-gnu-default64-kv3/.libs/ediv.so /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/bin/riscv64-redhat-linux-gnu-default64-kv3 + cp -a doc lib tst VERSION PackageInfo.g init.g makedocrel.g read.g /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3 + rm -f /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/clean + rm -f /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.aux /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.bbl /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.blg /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.brf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.idx /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.ilg /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.ind /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.log /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.out /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/doc/edim.pnr + /usr/lib/rpm/find-debuginfo.sh -j4 --strict-build-id -m -i --build-id-seed 1.3.3-6.fc31 --unique-debug-suffix -1.3.3-6.fc31.riscv64 --unique-debug-src-base gap-pkg-edim-1.3.3-6.fc31.riscv64 --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 50000000 -S debugsourcefiles.list /builddir/build/BUILD/EDIM-1.3.3 BUILDSTDERR: 17 blocks + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-python-bytecompile /usr/bin/python 1 0 + /usr/lib/rpm/brp-python-hardlink + /usr/lib/rpm/redhat/brp-mangle-shebangs explicitly decompress any DWARF compressed ELF sections in /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/bin/riscv64-redhat-linux-gnu-default64-kv3/ediv.so extracting debug info from /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap/pkg/EDIM-1.3.3/bin/riscv64-redhat-linux-gnu-default64-kv3/ediv.so original debug info size: 84kB, size after compression: 88kB /usr/lib/rpm/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match. Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.eiePNo + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.3 + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + gap -q -l '/builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/lib/gap;/usr/lib/gap' + tee log + grep -Fq false log + rm -f log + RPM_EC=0 BUILDSTDERR: ++ jobs -p + exit 0 #I autpgrp package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I alnuth package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I crisp package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I ctbllib package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I factint package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I fga package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I irredsol package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I laguna package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I polenta package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I polycyclic package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I resclasses package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I sophus package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') #I tomlib package is not available. Check that the name is correct #I and it is present in one of the GAP root directories (see '??RootPaths') Reading 34x34 integer matrix 'mat2' with elementary divisors 'eldiv2'. true From here you should only see a sequence of `true' lines, until the session quits: (after a few minutes) true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true Processing files: gap-pkg-edim-1.3.3-6.fc31.riscv64 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.YP7K4n + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.3 + DOCDIR=/builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/doc/gap-pkg-edim + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/doc/gap-pkg-edim + cp -pr CHANGES /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/doc/gap-pkg-edim + cp -pr README /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/doc/gap-pkg-edim + cp -pr TODO /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/doc/gap-pkg-edim + RPM_EC=0 BUILDSTDERR: ++ jobs -p + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.xXhr6m + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.3 + LICENSEDIR=/builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/licenses/gap-pkg-edim + export LC_ALL=C + LC_ALL=C + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/licenses/gap-pkg-edim + cp -pr GPL /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64/usr/share/licenses/gap-pkg-edim + RPM_EC=0 BUILDSTDERR: ++ jobs -p + exit 0 Provides: gap-pkg-edim = 1.3.3-6.fc31 gap-pkg-edim(riscv-64) = 1.3.3-6.fc31 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.27)(64bit) rtld(GNU_HASH) Processing files: gap-pkg-edim-doc-1.3.3-6.fc31.noarch Provides: gap-pkg-edim-doc = 1.3.3-6.fc31 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Processing files: gap-pkg-edim-debugsource-1.3.3-6.fc31.riscv64 Provides: gap-pkg-edim-debugsource = 1.3.3-6.fc31 gap-pkg-edim-debugsource(riscv-64) = 1.3.3-6.fc31 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Processing files: gap-pkg-edim-debuginfo-1.3.3-6.fc31.riscv64 Provides: debuginfo(build-id) = 2d7a56d745ecd60de2fa0b3eb2f7a8e18083d14d gap-pkg-edim-debuginfo = 1.3.3-6.fc31 gap-pkg-edim-debuginfo(riscv-64) = 1.3.3-6.fc31 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Recommends: gap-pkg-edim-debugsource(riscv-64) = 1.3.3-6.fc31 Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 Wrote: /builddir/build/RPMS/gap-pkg-edim-debugsource-1.3.3-6.fc31.riscv64.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-debuginfo-1.3.3-6.fc31.riscv64.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-1.3.3-6.fc31.riscv64.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-doc-1.3.3-6.fc31.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.HS3v4n + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.3 + /usr/bin/rm -rf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.3-6.fc31.riscv64 + RPM_EC=0 BUILDSTDERR: ++ jobs -p + exit 0 Child return code was: 0