Mock Version: 1.4.21 Mock Version: 1.4.21 Mock Version: 1.4.21 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target i686 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'], chrootPath='/var/lib/mock/f32-build-19989870-1415338/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': 'C.UTF-8'}shell=Falselogger=timeout=201600uid=1000gid=425user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target i686 --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': 'C.UTF-8'} and shell False Building target platforms: i686 Building for target i686 setting SOURCE_DATE_EPOCH=1583884800 Wrote: /builddir/build/SRPMS/gap-pkg-edim-1.3.5-4.fc32.src.rpm Child return code was: 0 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target i686 --nodeps /builddir/build/SPECS/gap-pkg-edim.spec'], chrootPath='/var/lib/mock/f32-build-19989870-1415338/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': 'C.UTF-8'}shell=Falselogger=timeout=201600uid=1000gid=425user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target i686 --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': 'C.UTF-8'} and shell False Building target platforms: i686 Building for target i686 setting SOURCE_DATE_EPOCH=1583884800 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.CtJmNE + umask 022 + cd /builddir/build/BUILD + cd /builddir/build/BUILD + rm -rf EDIM-1.3.5 + /usr/bin/bzip2 -dc /builddir/build/SOURCES/EDIM-1.3.5.tar.bz2 + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd EDIM-1.3.5 + /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 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.aOxyBI + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.5 + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + ./configure /usr/lib/gap Using /usr/lib/gap as GAP build directory. Using config in /usr/lib/gap/sysinfo.gap-default32 Created ./Makefile-default32 with link from ./Makefile + make -j48 if test ! -d bin; then mkdir bin; fi if test ! -d bin/i686-redhat-linux-gnu-default32-kv7; then mkdir -p bin/i686-redhat-linux-gnu-default32-kv7; fi /usr/lib/gap/bin/i686-redhat-linux-gnu-default32-kv7/gac -d -o bin/i686-redhat-linux-gnu-default32-kv7/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 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -o /tmp/gac44o4KIN/2693684_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 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-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/gac44o4KIN/.libs/2693684_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 -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fcf-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/gac44o4KIN/2693684_ediv.o >/dev/null 2>&1 /bin/sh /usr/bin/libtool --mode=link gcc -module -avoid-version -rpath /usr/lib -Wl,-z,relro -Wl,--as-needed -o bin/i686-redhat-linux-gnu-default32-kv7/ediv.so /tmp/gac44o4KIN/2693684_ediv.lo libtool: link: gcc -shared -fPIC -DPIC /tmp/gac44o4KIN/.libs/2693684_ediv.o -Wl,-z -Wl,relro -Wl,--as-needed -Wl,-soname -Wl,ediv.so -o bin/i686-redhat-linux-gnu-default32-kv7/.libs/ediv.so libtool: link: ar cru bin/i686-redhat-linux-gnu-default32-kv7/.libs/ediv.a /tmp/gac44o4KIN/2693684_ediv.o libtool: link: ranlib bin/i686-redhat-linux-gnu-default32-kv7/.libs/ediv.a libtool: link: ( cd "bin/i686-redhat-linux-gnu-default32-kv7/.libs" && rm -f "ediv.la" && ln -s "../ediv.la" "ediv.la" ) rm -f /tmp/gac44o4KIN/2693684_ediv.lo + ln -s /usr/lib/gap/doc ../../doc + mkdir ../pkg + ln -s ../EDIM-1.3.5 ../pkg + gap -l '/builddir/build/BUILD/EDIM-1.3.5/..;/usr/lib/gap' ┌───────┐ GAP 4.11.0 of 29-Feb-2020 │ GAP │ https://www.gap-system.org └───────┘ Architecture: i686-redhat-linux-gnu-default32-kv7 Configuration: gmp 6.1.2, GASMAN, 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.4.0, SmallGrp 1.4.1, TransGrp 2.0.5 Try '??help' for help. See also '?copyright', '?cite' and '?authors' gap> gap> gap> gap> gap> gap> > > > > gap> true 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.5\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 := "August 2019", count := [ 0, 0, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 0, 0, 0, 3 ], name := "Date", next := 723, root := ~, start := 699, stop := 722 ), 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 := 762, root := ~, start := 740, stop := 761 ), 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 := 820, root := ~, start := 816, stop := 819 ), 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 := 858, root := ~, start := 835, stop := 857 ), 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 := 1066, root := ~, start := 971, stop := 1065 ), 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 := 1242, root := ~, start := 728, stop := 1241 ) ], count := [ 0, 0, 0, 1 ], mathmode := "Text", name := "TitlePage", next := 1256, root := ~, start := 254, stop := 1255 ), 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 := 1347, root := ~, start := 1329, stop := 1346 ), 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 := 1668, root := ~, start := 1645, stop := 1667 ), rec( content := "-Package", count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 2 ], mathmode := "Text", name := "Heading", next := 1686, root := ~, start := 1632, stop := 1685 ), 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 := 1717, root := ~, start := 1694, stop := 1716 ) ], count := [ 1, 0, 0, 3 ], mathmode := "Text", name := "Index", next := 1725, root := ~, start := 1687, stop := 1724 ), 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 := 1813, root := ~, start := 1727, stop := 1812 ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 4 ], mathmode := "Text", name := "P", next := 1817, root := ~, start := 1813, stop := 1816 ), 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 := 1915, root := ~, start := 1892, stop := 1914 ), 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 := 2015, root := ~, start := 2007, stop := 2014 ), 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 := 2028, root := ~, start := 2020, stop := 2027 ), 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 := 2122, root := ~, start := 2114, stop := 2121 ), 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 := 2195, root := ~, start := 2178, stop := 2194 ), 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 := 2240, root := ~, start := 2201, stop := 2239 ), 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 := 2246, root := ~, start := 2242, stop := 2245 ), 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 := 2346, root := ~, start := 2334, stop := 2345 ), 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 := 2440, root := ~, start := 2436, stop := 2439 ), 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 := 2650, root := ~, start := 2608, stop := 2649 ), 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 := 2683, root := ~, start := 2655, stop := 2682 ), 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 := 2720, root := ~, start := 2712, stop := 2719 ), 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 := 2786, root := ~, start := 2755, stop := 2785 ), 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 := 2791, root := ~, start := 2787, stop := 2790 ), 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 := 2943, root := ~, start := 2935, stop := 2942 ), 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 := 3018, root := ~, start := 3000, stop := 3017 ), 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 := 3075, root := ~, start := 3025, stop := 3074 ), 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 := 3187, root := ~, start := 3162, stop := 3186 ), 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 := 3315, root := ~, start := 3285, stop := 3314 ), 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 := 3321, root := ~, start := 3317, stop := 3320 ), rec( content := "\n\nPlease, send \ me an e-mail\n(", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "Frank.Luebeck@Math.RWTH-A\ achen.De", count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 8 ], mathmode := "Text", name := "Email", next := 3443, root := ~, start := 3395, stop := 3442 ), 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, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 0, 0, 9 ], mathmode := "Text", name := "P", next := 3602, root := ~, start := 3598, stop := 3601 ), rec( content := "\n\nFrank Lübeck \n\n", count := [ 1, 0, 0, 9 ], 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 := 3703, root := ~, start := 3680, stop := 3702 ), rec( content := " package", count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 2 ], mathmode := "Text", name := "Heading", next := 3721, root := ~, start := 3651, stop := 3720 ), rec( content := "\n\nTo install this pack\ age first unpack it inside some GAP root directory\nin the subdirectory ", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "pkg", count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 3 ], mathmode := "Text", name := "F", next := 3824, root := ~, start := 3814, stop := 3823 ), 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 := 3890, root := ~, start := 3831, stop := 3889 ), 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 := 3925, root := ~, start := 3902, stop := 3924 ), 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 := 4124, root := ~, start := 4077, stop := 4123 ), 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 := 4152, root := ~, start := 4148, stop := 4151 ), 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 := 4228, root := ~, start := 4209, stop := 4227 ), 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 := 4276, root := ~, start := 4272, stop := 4275 ), 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]", count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 5 ], mathmode := "Text", name := "C", next := 4311, root := ~, start := 4278, stop := 4310 ), rec( attributes := rec( ), content := 0, count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "P", next := 4315, root := ~, start := 4311, stop := 4314 ), 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 := 4334, root := ~, start := 4323, stop := 4333 ), 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 := 4382, root := ~, start := 4360, stop := 4381 ), 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 := 4437, root := ~, start := 4425, stop := 4436 ), rec( content := " is assumed). \n", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " Adjust later\nIf you \ have installed several GAP kernels you can compile the corresponding\nEDIM kernel function by specifying the CONFIGNAME\nthat was \ used to configure that kernel.

\n", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\nAfterwards call ", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "make", count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 6 ], mathmode := "Text", name := "C", next := 4700, root := ~, start := 4689, stop := 4699 ), rec( content := " to compile a binary \ file. ", 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 := 4734, root := ~, start := 4730, stop := 4733 ), rec( content := "\n\nIf you have installe\ d several GAP kernels repeat these two steps for each \nof them. ", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " , using the various val\ ues of CONFIGNAME.", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n\nYou can run a te\ st of the installation by typing ", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "make test", count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 7 ], mathmode := "Text", name := "C", next := 4952, root := ~, start := 4936, stop := 4951 ), rec( content := ".\n\n", count := [ 1, 1, 0, 7 ], 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 := 4998, root := ~, start := 4970, stop := 4997 ), 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 := 5042, root := ~, start := 5031, stop := 5041 ), 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 := 5080, root := ~, start := 5057, stop := 5079 ), 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 := 5126, root := ~, start := 5093, stop := 5125 ), 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 := 5255, root := ~, start := 5232, stop := 5254 ), 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 := 5283, root := ~, start := 5001, stop := 5282 ) ], count := [ 1, 1, 1, 1 ], mathmode := "Text", name := "ManSection", next := 5297, root := ~, start := 4955, stop := 5296 ), rec( content := "\n\n", count := [ 1, 1, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 1, 0, 1 ], mathmode := "Text", name := "Section", next := 5309, root := ~, start := 3620, stop := 5308 ), 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 := 5429, root := ~, start := 5421, stop := 5428 ), 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 := 5468, root := ~, start := 5412, stop := 5467 ), 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 := 5599, root := ~, start := 5535, stop := 5598 ), rec( attributes := rec( Arg := "A, p, rk", Name := "ElementaryDivis\ orsPPartRkI" ), content := 0, count := [ 1, 2, 1, 4 ], mathmode := "Text", name := "Func", next := 5662, root := ~, start := 5600, stop := 5661 ), rec( attributes := rec( Arg := "A, p, rk", Name := "ElementaryDivis\ orsPPartRkII" ), content := 0, count := [ 1, 2, 1, 6 ], mathmode := "Text", name := "Func", next := 5726, root := ~, start := 5663, stop := 5725 ), rec( attributes := rec( Arg := "A, p, rk, exp", Name := "ElementaryDivis\ orsPPartRkExp" ), content := 0, count := [ 1, 2, 1, 8 ], mathmode := "Text", name := "Func", next := 5796, root := ~, start := 5727, stop := 5795 ), rec( attributes := rec( Arg := "A, p, rk, exp, i\ l", Name := "ElementaryDivisorsPPartRkExpSmall" ), content := 0, count := [ 1, 2, 1, 10 ], mathmode := "Text", name := "Func", next := 5875, root := ~, start := 5797, stop := 5874 ), 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 := 5956, root := ~, start := 5925, stop := 5955 ), 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 := 5973, root := ~, start := 5963, stop := 5972 ), 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 := 6030, root := ~, start := 6022, stop := 6029 ), 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 := 6057, root := ~, start := 6049, stop := 6056 ), rec( content := "\ ^i", count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "M", next := 6063, root := ~, start := 6046, stop := 6062 ), 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 := 6122, root := ~, start := 6070, stop := 6121 ), 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 := 6175, root := ~, start := 6171, stop := 6174 ), 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 := 6259, root := ~, start := 6242, stop := 6258 ), 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 := 6264, root := ~, start := 6260, stop := 6263 ), 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 := 6274, root := ~, start := 6266, stop := 6273 ), 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 := 6323, root := ~, start := 6315, stop := 6322 ), 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 := 6346, root := ~, start := 6337, stop := 6345 ), 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 := 6369, root := ~, start := 6361, stop := 6368 ), 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 := 6440, root := ~, start := 6431, stop := 6439 ), 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 := 6478, root := ~, start := 6474, stop := 6477 ), 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 := 6598, root := ~, start := 6588, stop := 6597 ), 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 := 6615, root := ~, start := 6611, stop := 6614 ), 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 := 6714, root := ~, start := 6693, stop := 6713 ), 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 := 6795, root := ~, start := 6754, stop := 6794 ), 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 := 6937, root := ~, start := 6933, stop := 6936 ), 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 := 6968, root := ~, start := 6958, stop := 6967 ), 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 := 7027, root := ~, start := 7019, stop := 7026 ), 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 := 7079, root := ~, start := 7071, stop := 7078 ), 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 := 7163, root := ~, start := 7155, stop := 7162 ), rec( content := "\ ^{{", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp+1", count := [ 1, 2, 1, 16 ], math\ mode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := \ "Text", name := "A", next := 7178, root := ~, start := 7166, stop := 7177 ), rec( content := "\ }}", count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 16 ], mathmode := "Text", name := "M", next := 7184, root := ~, start := 7152, stop := 7183 ), 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 := 7213, root := ~, start := 7209, stop := 7212 ), 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 := 7228, root := ~, start := 7218, stop := 7227 ), 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 := 7265, root := ~, start := 7256, stop := 7264 ), rec( content := " is too\ large the\nfunction returns ", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "f\ ail", count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 17 ], mathmode := "Text", name := "K", next := 7312, root := ~, start := 7301, stop := 7311 ), rec( content := ". ", 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 := 7318, root := ~, start := 7314, stop := 7317 ), rec( content := "\n\nIf " , 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 := 7334, root := ~, start := 7326, stop := 7333 ), 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 := 7346, root := ~, start := 7336, stop := 7345 ), rec( content := "\ }", count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 18 ], mathmode := "Text", name := "M", next := 7351, root := ~, start := 7323, stop := 7350 ), rec( content := " is sma\ ll enough we use internally a\nkernel function which can also be used direc\ tly in the fifth form of\nthe 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 := 7490, root := ~, start := 7481, stop := 7489 ), 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 := 7507, root := ~, start := 7499, stop := 7506 ), rec( content := " or ", 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 := 7519, root := ~, start := 7511, stop := 7518 ), rec( content := " where i\ n the\nsecond case some information is printed during the 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 := 7600, root := ~, start := 7596, stop := 7599 ), rec( content := "\n\nMore\ precisely, ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Func := "Element\ aryDivisorsPPartRkExpSmall" ), content := 0, count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "Ref", next := 7668, root := ~, start := 7620, stop := 7667 ), rec( content := " is\nap\ plicable when ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( attributes :=\ rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 19 ], mathmode\ := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := \ "Text", name := "A", next := 7701, root := ~, start := 7693, stop := 7700 ), rec( content := "\ ^{{", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp", count := [ 1, 2, 1, 19 ], mathm\ ode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := \ "Text", name := "A", next := 7714, root := ~, start := 7704, stop := 7713 ), rec( content := "\ +1}} < 2^{{b-4}}", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "M", next := 7738, root := ~, start := 7690, stop := 7737 ), rec( content := " and\n" , count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "(\ ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) , rec( attributes :\ = rec( ), content := [ rec( content := "p", count := [ 1, 2, 1, 19 ], mathmod\ e := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := \ "Text", name := "A", next := 7756, root := ~, start := 7748, stop := 7755 ), rec( content := "\ ^{{", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes :\ = rec( ), content := [ rec( content := "exp", count := [ 1, 2, 1, 19 ], mathm\ ode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := \ "Text", name := "A", next := 7769, root := ~, start := 7759, stop := 7768 ), rec( content := "\ +1}} - 1)(p-1) < 2^b", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "M", next := 7796, root := ~, start := 7744, stop := 7795 ), rec( content := " where " , count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "b\ =32", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "M", next := 7814, root := ~, start := 7803, stop := 7813 ), rec( content := "\nin a \ 32-bit version of ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "G\ AP", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "Package", next := 23, root := ~, start := 1, stop := 22 ), rec( content := " and ", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "b\ =64", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "M", next := 7861, root := ~, start := 7850, stop := 7860 ), rec( content := " in a 6\ 4-bit version of\n", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "G\ AP", count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 19 ], mathmode := "Text", name := "Package", next := 23, root := ~, start := 1, stop := 22 ), 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 := 7896, root := ~, start := 7892, stop := 7895 ), 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, 20 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := [ rec( content := "1\ 1000", count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 20 ], mathmode := "Text", name := "M", next := 8010, root := ~, start := 7998, stop := 8009 ), rec( content := ".", 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 := 8015, root := ~, start := 8011, stop := 8014 ), rec( content := "\n\nNote\ that you have to compile a file (see ", count := [ 1, 2, 1, 21 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( Sect := "Sect-In\ stall" ), content := 0, count := [ 1, 2, 1, 21 ], mathmode := "Text", name := "Ref", next := 8086, root := ~, start := 8060, stop := 8085 ), rec( content := ")\nwhile\ installing this package, if you want to have this kernel\nfunction av\ ailable.", count := [ 1, 2, 1, 21 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( attributes := rec( ), content := 0, count := [ 1, 2, 1, 22 ], mathmode := "Text", name := "P", next := 8182, root := ~, start := 8178, stop := 8181 ), rec( content := " \n\n", count := [ 1, 2, 1, 22 ], 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, 23 ], name := "PCD\ ATA", root := ~ ) ], count := [ 1, 2, 1, 23 ], mathmode := "Text", name := "Example", next := 8542, root := ~, start := 8185, stop := 8541 ), rec( content := "\n", count := [ 1, 2, 1, 24 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 1, 11 ], mathmode := "Text", name := "Description", next := 8557, root := ~, start := 5877, stop := 8556 ) ], count := [ 1, 2, 1, 1 ], mathmode := "Text", name := "ManSection", next := 8571, root := ~, start := 5522, stop := 8570 ), rec( content := "\n\n", count := [ 1, 2, 1, 24 ], mathmode := "Text", name := "PCDATA", root := ~ ), rec( content := " #######################\ ##################################### ", count := [ 1, 2, 1, 24 ], mathmode := "Text", name := "XMLCOMMENT", root := ~ ), rec( content := "\n", count := [ 1, 2, 1, 24 ], 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 := 8767, root := ~, start := 8656, stop := 8766 ), 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 := 8816, root := ~, start := 8808, stop := 8815 ), 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 := 8838, root := ~, start := 8830, stop := 8837 ), 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 := 8901, root := ~, start := 8870, stop := 8900 ), 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 := 8918, root := ~, start := 8908, stop := 8917 ), 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 := 8982, root := ~, start := 8974, stop := 8981 ), 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 := 9008, root := ~, start := 9000, stop := 9007 ), rec( content := "\ ^i", count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "M", next := 9014, root := ~, start := 8997, stop := 9013 ), 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 := 9020, root := ~, start := 9016, stop := 9019 ), 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 := 9045, root := ~, start := 9037, stop := 9044 ), 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 := 9079, root := ~, start := 9071, stop := 9078 ), 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 := 9129, root := ~, start := 9121, stop := 9128 ), 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 := 9163, root := ~, start := 9155, stop := 9162 ), 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 := 9222, root := ~, start := 9218, stop := 9221 ), 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 := 9307, root := ~, start := 9289, stop := 9306 ), 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 := 9313, root := ~, start := 9309, stop := 9312 ), 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 := 9398, root := ~, start := 9390, stop := 9397 ), 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 := 9476, root := ~, start := 9468, stop := 9475 ), 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 := 9576, root := ~, start := 9572, stop := 9575 ), 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 := 9814, root := ~, start := 9578, stop := 9813 ), rec( content := "\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 2, 3 ], mathmode := "Text", name := "Description", next := 9829, root := ~, start := 8769, stop := 9828 ) ], count := [ 1, 2, 2, 1 ], mathmode := "Text", name := "ManSection", next := 9843, root := ~, start := 8643, stop := 9842 ), rec( content := "\n", count := [ 1, 2, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 2, 0, 1 ], mathmode := "Text", name := "Section", next := 9854, root := ~, start := 5381, stop := 9853 ), 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 := 10007, root := ~, start := 9960, stop := 10006 ), 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 := 10112, root := ~, start := 10022, stop := 10111 ), 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 := 10222, root := ~, start := 10218, stop := 10221 ), 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 := 10284, root := ~, start := 10276, stop := 10283 ), 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 := 10317, root := ~, start := 10309, stop := 10316 ), 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 := 10431, root := ~, start := 10423, stop := 10430 ), 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 := 10498, root := ~, start := 10467, stop := 10497 ), 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 := 10521, root := ~, start := 10517, stop := 10520 ), 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 := 10591, root := ~, start := 10569, stop := 10590 ), 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 := 10639, root := ~, start := 10628, stop := 10638 ), 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 := 10732, root := ~, start := 10693, stop := 10731 ), 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 := 10762, root := ~, start := 10737, stop := 10761 ), 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 := 10768, root := ~, start := 10764, stop := 10767 ), 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 := 10801, root := ~, start := 10793, stop := 10800 ), 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 := 10840, root := ~, start := 10832, stop := 10839 ), 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 := 10857, root := ~, start := 10849, stop := 10856 ), 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 := 10898, root := ~, start := 10890, stop := 10897 ) , rec( content := "\ =251", count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 6 ], mathmode := "Text", name := "M", next := 10906, root := ~, start := 10887, stop := 10905 ), 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 := 10920, root := ~, start := 10912, stop := 10919 ), 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 := 10963, root := ~, start := 10955, stop := 10962 ), 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 := 10978, root := ~, start := 10970, stop := 10977 ), 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 := 11028, root := ~, start := 11024, stop := 11027 ), rec( content := "\n", count := [ 1, 3, 1, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 1, 3 ], mathmode := "Text", name := "Description", next := 11043, root := ~, start := 10114, stop := 11042 ) ], count := [ 1, 3, 1, 1 ], mathmode := "Text", name := "ManSection", next := 11057, root := ~, start := 10009, stop := 11056 ), 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 := 11273, root := ~, start := 11142, stop := 11272 ), 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 := 11335, root := ~, start := 11327, stop := 11334 ), 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 := 11383, root := ~, start := 11375, stop := 11382 ) , 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 := 11394, root := ~, start := 11386, stop := 11393 ) ], count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "M", next := 11398, root := ~, start := 11370, stop := 11397 ), 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 := 11403, root := ~, start := 11399, stop := 11402 ), 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 := 11419, root := ~, start := 11411, stop := 11418 ), 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 := 11509, root := ~, start := 11501, stop := 11508 ), 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 := 11578, root := ~, start := 11574, stop := 11577 ), 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 := 11626, root := ~, start := 11618, stop := 11625 ), 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 := 11650, root := ~, start := 11642, stop := 11649 ) , 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 := 11663, root := ~, start := 11639, stop := 11662 ), 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 := 11709, root := ~, start := 11694, stop := 11708 ), 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 := 11749, root := ~, start := 11738, stop := 11748 ), 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 := 11764, root := ~, start := 11756, stop := 11763 ) , rec( content := "\ \\pmod{p}", count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 5 ], mathmode := "Text", name := "M", next := 11777, root := ~, start := 11753, stop := 11776 ), 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 := 11782, root := ~, start := 11778, stop := 11781 ), 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 := 11821, root := ~, start := 11813, stop := 11820 ), 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 := 11889, root := ~, start := 11858, stop := 11888 ), 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 := 11894, root := ~, start := 11890, stop := 11893 ), rec( content := "\n", count := [ 1, 3, 2, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 2, 3 ], mathmode := "Text", name := "Description", next := 11909, root := ~, start := 11275, stop := 11908 ) ], count := [ 1, 3, 2, 1 ], mathmode := "Text", name := "ManSection", next := 11923, root := ~, start := 11129, stop := 11922 ), 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 := 12094, root := ~, start := 12009, stop := 12093 ), 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 := 12205, root := ~, start := 12197, stop := 12204 ), 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 := 12223, root := ~, start := 12219, stop := 12222 ), 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 := 12253, root := ~, start := 12245, stop := 12252 ), 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 := 12357, root := ~, start := 12349, stop := 12356 ) , rec( content := "\ ^{-1}", count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 4 ], mathmode := "Text", name := "M", next := 12366, root := ~, start := 12346, stop := 12365 ), 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 := 12420, root := ~, start := 12412, stop := 12419 ), 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 := 12425, root := ~, start := 12421, stop := 12424 ), 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 := 12522, root := ~, start := 12495, stop := 12521 ), 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 := 12557, root := ~, start := 12548, stop := 12556 ), 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 := 12641, root := ~, start := 12632, stop := 12640 ), 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 := 12796, root := ~, start := 12787, stop := 12795 ) , rec( content := "\ =2", count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 5 ], mathmode := "Text", name := "M", next := 12802, root := ~, start := 12784, stop := 12801 ), 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 := 12814, root := ~, start := 12806, stop := 12813 ), 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 := 12916, root := ~, start := 12912, stop := 12915 ), 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 := 12949, root := ~, start := 12941, stop := 12948 ), 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 := 12988, root := ~, start := 12980, stop := 12987 ), 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 := 13004, root := ~, start := 12996, stop := 13003 ), 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 := 13046, root := ~, start := 13038, stop := 13045 ) , rec( content := "\ =251", count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 6 ], mathmode := "Text", name := "M", next := 13054, root := ~, start := 13035, stop := 13053 ), 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 := 13068, root := ~, start := 13060, stop := 13067 ), 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 := 13111, root := ~, start := 13103, stop := 13110 ), 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 := 13126, root := ~, start := 13118, stop := 13125 ), 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 := 13176, root := ~, start := 13172, stop := 13175 ), 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 := 13458, root := ~, start := 13178, stop := 13457 ), rec( content := "\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 3, 3 ], mathmode := "Text", name := "Description", next := 13473, root := ~, start := 12097, stop := 13472 ) ], count := [ 1, 3, 3, 1 ], mathmode := "Text", name := "ManSection", next := 13487, root := ~, start := 11996, stop := 13486 ), rec( content := "\n\n", count := [ 1, 3, 3, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 3, 0, 1 ], mathmode := "Text", name := "Section", next := 13499, root := ~, start := 9927, stop := 13498 ), 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 := 13666, root := ~, start := 13604, stop := 13665 ), 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 := 14000, root := ~, start := 13929, stop := 13999 ), 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 := 14111, root := ~, start := 14103, stop := 14110 ), 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 := 14116, root := ~, start := 14112, stop := 14115 ), 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 := 14228, root := ~, start := 14186, stop := 14227 ), 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 := 14279, root := ~, start := 14271, stop := 14278 ), 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 := 14412, root := ~, start := 14408, stop := 14411 ), 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 := 14480, root := ~, start := 14438, stop := 14479 ), 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 := 14506, root := ~, start := 14485, stop := 14505 ), 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 := 14511, root := ~, start := 14507, stop := 14510 ), 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 := 14690, root := ~, start := 14686, stop := 14689 ), 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 := 14856, root := ~, start := 14834, stop := 14855 ), 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 := 15023, root := ~, start := 14971, stop := 15022 ), 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 := 15516, root := ~, start := 15162, stop := 15515 ), rec( content := "\n", count := [ 1, 4, 1, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 1, 3 ], mathmode := "Text", name := "Description", next := 15531, root := ~, start := 14003, stop := 15530 ) ], count := [ 1, 4, 1, 1 ], mathmode := "Text", name := "ManSection", next := 15545, root := ~, start := 13916, stop := 15544 ), 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 := 15710, root := ~, start := 15631, stop := 15709 ), 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 := 15820, root := ~, start := 15812, stop := 15819 ), 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 := 15825, root := ~, start := 15821, stop := 15824 ), 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 := 15842, root := ~, start := 15832, stop := 15841 ), 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 := 15929, root := ~, start := 15921, stop := 15928 ), 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 := 15997, root := ~, start := 15988, stop := 15996 ), 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 := 16021, root := ~, start := 16017, stop := 16020 ), 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 := 16052, root := ~, start := 16042, stop := 16051 ), 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 := 16128, root := ~, start := 16118, stop := 16127 ) , rec( content := "\ ))", count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 5 ], mathmode := "Text", name := "C", next := 16134, root := ~, start := 16094, stop := 16133 ), 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 := 16139, root := ~, start := 16135, stop := 16138 ), 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 := 16192, root := ~, start := 16182, stop := 16191 ), 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 := 16279, root := ~, start := 16271, stop := 16278 ), 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 := 16342, root := ~, start := 16298, stop := 16341 ), 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 := 16364, root := ~, start := 16354, stop := 16363 ), 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 := 16409, root := ~, start := 16401, stop := 16408 ), 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 := 16423, root := ~, start := 16413, stop := 16422 ), 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 := 16474, root := ~, start := 16466, stop := 16473 ), 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 := 16556, root := ~, start := 16552, stop := 16555 ), 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 := 16829, root := ~, start := 16558, stop := 16828 ), rec( content := "\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 2, 3 ], mathmode := "Text", name := "Description", next := 16844, root := ~, start := 15712, stop := 16843 ) ], count := [ 1, 4, 2, 1 ], mathmode := "Text", name := "ManSection", next := 16858, root := ~, start := 15618, stop := 16857 ), rec( content := "\n\n", count := [ 1, 4, 2, 9 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 4, 0, 1 ], mathmode := "Text", name := "Section", next := 16870, root := ~, start := 13572, stop := 16869 ), 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 := 17027, root := ~, start := 16978, stop := 17026 ), 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 := 17056, root := ~, start := 17033, stop := 17055 ), 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 := 17293, root := ~, start := 17274, stop := 17292 ), 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 := 17330, root := ~, start := 17326, stop := 17329 ), 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 := 17515, root := ~, start := 17503, stop := 17514 ), 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 := 17676, root := ~, start := 17672, stop := 17675 ), 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 := 17692, root := ~, start := 17688, stop := 17691 ), 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 := 17760, root := ~, start := 17707, stop := 17759 ), 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 := 17826, root := ~, start := 17817, stop := 17825 ) , 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 := 17837, root := ~, start := 17828, stop := 17836 ) , rec( content := "\ , \\ldots", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 17849, root := ~, start := 17814, stop := 17848 ), 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 := 17891, root := ~, start := 17858, stop := 17890 ), 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 := 17921, root := ~, start := 17912, stop := 17920 ) , 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 := 17937, root := ~, start := 17928, stop := 17936 ) , rec( content := "\ + \\ldots", count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "M", next := 17952, root := ~, start := 17900, stop := 17951 ), 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 := 18007, root := ~, start := 17998, stop := 18006 ), 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 := 18032, root := ~, start := 18022, stop := 18031 ), 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 := 18191, root := ~, start := 18058, stop := 18190 ), rec( content := "\n", count := [ 1, 5, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 1, 3 ], mathmode := "Text", name := "Description", next := 18206, root := ~, start := 17763, stop := 18205 ) ], count := [ 1, 5, 1, 1 ], mathmode := "Text", name := "ManSection", next := 18220, root := ~, start := 17694, stop := 18219 ), 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 := 18353, root := ~, start := 18306, stop := 18352 ), 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 := 18442, root := ~, start := 18434, stop := 18441 ), 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 := 18511, root := ~, start := 18355, stop := 18510 ) ], count := [ 1, 5, 2, 1 ], mathmode := "Text", name := "ManSection", next := 18525, root := ~, start := 18293, stop := 18524 ), 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 := 18665, root := ~, start := 18611, stop := 18664 ), 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 := 18737, root := ~, start := 18724, stop := 18736 ), 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 := 18762, root := ~, start := 18754, stop := 18761 ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "M", next := 18766, root := ~, start := 18745, stop := 18765 ), 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 := 18823, root := ~, start := 18815, stop := 18822 ), 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 := 18857, root := ~, start := 18849, stop := 18856 ), 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 := 19190, root := ~, start := 18896, stop := 19189 ), rec( content := "\n", count := [ 1, 5, 3, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 3, 3 ], mathmode := "Text", name := "Description", next := 19205, root := ~, start := 18668, stop := 19204 ) ], count := [ 1, 5, 3, 1 ], mathmode := "Text", name := "ManSection", next := 19219, root := ~, start := 18598, stop := 19218 ), 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 := 19352, root := ~, start := 19305, stop := 19351 ), 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 := 19449, root := ~, start := 19441, stop := 19448 ), 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 := 19514, root := ~, start := 19355, stop := 19513 ) ], count := [ 1, 5, 4, 1 ], mathmode := "Text", name := "ManSection", next := 19528, root := ~, start := 19292, stop := 19527 ), 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 := 19667, root := ~, start := 19614, stop := 19666 ), 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 := 19722, root := ~, start := 19706, stop := 19721 ), 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 := 19747, root := ~, start := 19739, stop := 19746 ) , rec( content := "\ R", count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "M", next := 19753, root := ~, start := 19730, stop := 19752 ), 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 := 19808, root := ~, start := 19800, stop := 19807 ), 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 := 19813, root := ~, start := 19809, stop := 19812 ), 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 := 19970, root := ~, start := 19951, stop := 19969 ), 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 := 20056, root := ~, start := 20052, stop := 20055 ), 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 := 20276, root := ~, start := 20058, stop := 20275 ), rec( content := "\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 5, 3 ], mathmode := "Text", name := "Description", next := 20291, root := ~, start := 19669, stop := 20290 ) ], count := [ 1, 5, 5, 1 ], mathmode := "Text", name := "ManSection", next := 20305, root := ~, start := 19601, stop := 20304 ), rec( content := "\n\n", count := [ 1, 5, 5, 7 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 5, 0, 1 ], mathmode := "Text", name := "Section", next := 20317, root := ~, start := 16943, stop := 20316 ), 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 := 20479, root := ~, start := 20456, stop := 20478 ), rec( content := "-package", count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 0, 2 ], mathmode := "Text", name := "Heading", next := 20497, root := ~, start := 20420, stop := 20496 ), 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 := 20572, root := ~, start := 20512, stop := 20571 ), 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 := 20628, root := ~, start := 20620, stop := 20627 ) , 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 := 20643, root := ~, start := 20635, stop := 20642 ) , rec( content := "\ }", count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "M", next := 20648, root := ~, start := 20610, stop := 20647 ), 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 := 20683, root := ~, start := 20679, stop := 20682 ), 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 := 20693, root := ~, start := 20685, stop := 20692 ), 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 := 20705, root := ~, start := 20697, stop := 20704 ), 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 := 20716, root := ~, start := 20708, stop := 20715 ), 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 := 20768, root := ~, start := 20760, stop := 20767 ) , 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 := 20776, root := ~, start := 20768, stop := 20775 ) , 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 := 20791, root := ~, start := 20783, stop := 20790 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 20795, root := ~, start := 20756, stop := 20794 ), 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 := 20809, root := ~, start := 20801, stop := 20808 ), 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 := 20839, root := ~, start := 20831, stop := 20838 ) , 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 := 20857, root := ~, start := 20849, stop := 20856 ) , 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 := 20874, root := ~, start := 20866, stop := 20873 ) , rec( content := "\ /2", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 20880, root := ~, start := 20827, stop := 20879 ), 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 := 20951, root := ~, start := 20941, stop := 20950 ), 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 := 20986, root := ~, start := 20978, stop := 20985 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 20990, root := ~, start := 20958, stop := 20989 ), 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 := 21013, root := ~, start := 21005, stop := 21012 ) , rec( content := "\ ) = 1", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21024, root := ~, start := 20993, stop := 21023 ), 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 := 21039, root := ~, start := 21031, stop := 21038 ) , 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 := 21062, root := ~, start := 21054, stop := 21061 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21066, root := ~, start := 21027, stop := 21065 ), 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 := 21083, root := ~, start := 21073, stop := 21082 ), 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 := 21110, root := ~, start := 21102, stop := 21109 ) , 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 := 21125, root := ~, start := 21117, stop := 21124 ) , rec( content := "\ }", count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21130, root := ~, start := 21099, stop := 21129 ), 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 := 21149, root := ~, start := 21141, stop := 21148 ) , 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 := 21170, root := ~, start := 21162, stop := 21169 ) ], count := [ 1, 6, 1, 4 ], mathmode := "Text", name := "M", next := 21174, root := ~, start := 21138, stop := 21173 ), 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 := 21195, root := ~, start := 21185, stop := 21194 ), 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 := 21241, root := ~, start := 21230, stop := 21240 ), 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 := 21279, root := ~, start := 21275, stop := 21278 ), rec( content := "\n", count := [ 1, 6, 1, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 1, 3 ], mathmode := "Text", name := "Description", next := 21294, root := ~, start := 20574, stop := 21293 ) ], count := [ 1, 6, 1, 1 ], mathmode := "Text", name := "ManSection", next := 21308, root := ~, start := 20499, stop := 21307 ), 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 := 21444, root := ~, start := 21394, stop := 21443 ), 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 := 21528, root := ~, start := 21520, stop := 21527 ), 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 := 21543, root := ~, start := 21532, stop := 21542 ), 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 := 21564, root := ~, start := 21560, stop := 21563 ), 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 := 21574, root := ~, start := 21566, stop := 21573 ), 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 := 21618, root := ~, start := 21610, stop := 21617 ), 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 := 21645, root := ~, start := 21637, stop := 21644 ), 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 := 21678, root := ~, start := 21670, stop := 21677 ), 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 := 21733, root := ~, start := 21723, stop := 21732 ), 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 := 21776, root := ~, start := 21768, stop := 21775 ) , 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 := 21794, root := ~, start := 21786, stop := 21793 ) , rec( content := "\ /2]", count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 2, 4 ], mathmode := "Text", name := "M", next := 21801, root := ~, start := 21763, stop := 21800 ), 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 := 21823, root := ~, start := 21813, stop := 21822 ), 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 := 21831, root := ~, start := 21823, stop := 21830 ), 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 := 21877, root := ~, start := 21873, stop := 21876 ), 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 := 21901, root := ~, start := 21890, stop := 21900 ), 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 := 21933, root := ~, start := 21925, stop := 21932 ), 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 := 22024, root := ~, start := 21447, stop := 22023 ) ], count := [ 1, 6, 2, 1 ], mathmode := "Text", name := "ManSection", next := 22038, root := ~, start := 21381, stop := 22037 ), 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 := 22174, root := ~, start := 22124, stop := 22173 ), 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 := 22246, root := ~, start := 22238, stop := 22245 ), 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 := 22325, root := ~, start := 22317, stop := 22324 ), 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 := 22401, root := ~, start := 22393, stop := 22400 ), rec( content := ".\n", count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 3, 3 ], mathmode := "Text", name := "Description", next := 22417, root := ~, start := 22177, stop := 22416 ) ], count := [ 1, 6, 3, 1 ], mathmode := "Text", name := "ManSection", next := 22431, root := ~, start := 22111, stop := 22430 ), 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 := 22569, root := ~, start := 22517, stop := 22568 ), 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 := 22655, root := ~, start := 22647, stop := 22654 ), 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 := 22680, root := ~, start := 22668, stop := 22679 ), 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 := 22737, root := ~, start := 22728, stop := 22736 ), 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 := 22809, root := ~, start := 22805, stop := 22808 ), 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 := 22918, root := ~, start := 22879, stop := 22917 ), 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 := 22999, root := ~, start := 22995, stop := 22998 ), rec( content := " \n", count := [ 1, 6, 4, 5 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 4, 3 ], mathmode := "Text", name := "Description", next := 23015, root := ~, start := 22572, stop := 23014 ) ], count := [ 1, 6, 4, 1 ], mathmode := "Text", name := "ManSection", next := 23030, root := ~, start := 22504, stop := 23029 ), 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 := 23157, root := ~, start := 23116, stop := 23156 ), 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 := 23235, root := ~, start := 23227, stop := 23234 ), 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 := 23252, root := ~, start := 23244, stop := 23251 ), 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 := 23267, root := ~, start := 23259, stop := 23266 ), 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 := 23394, root := ~, start := 23386, stop := 23393 ), 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 := 23429, root := ~, start := 23421, stop := 23428 ), 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 := 23434, root := ~, start := 23430, stop := 23433 ), 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 := 23497, root := ~, start := 23489, stop := 23496 ), 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 := 23586, root := ~, start := 23578, stop := 23585 ), 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 := 23667, root := ~, start := 23657, stop := 23666 ), 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 := 23679, root := ~, start := 23671, stop := 23678 ), 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 := 23757, root := ~, start := 23719, stop := 23756 ), 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 := 23762, root := ~, start := 23758, stop := 23761 ), 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 := 23899, root := ~, start := 23891, stop := 23898 ), 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 := 23953, root := ~, start := 23949, stop := 23952 ), 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 := 24190, root := ~, start := 23955, stop := 24189 ), rec( content := "\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 5, 3 ], mathmode := "Text", name := "Description", next := 24205, root := ~, start := 23159, stop := 24204 ) ], count := [ 1, 6, 5, 1 ], mathmode := "Text", name := "ManSection", next := 24219, root := ~, start := 23103, stop := 24218 ), rec( content := "\n\n", count := [ 1, 6, 5, 8 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 6, 0, 1 ], mathmode := "Text", name := "Section", next := 24231, root := ~, start := 20391, stop := 24230 ), 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 := 24388, root := ~, start := 24340, stop := 24387 ), 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 := 24456, root := ~, start := 24448, stop := 24455 ), 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 := 24499, root := ~, start := 24491, stop := 24498 ), 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 := 24673, root := ~, start := 24656, stop := 24672 ), 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 := 24687, root := ~, start := 24683, stop := 24686 ), 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 := 24701, root := ~, start := 24693, stop := 24700 ), 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 := 24844, root := ~, start := 24840, stop := 24843 ), 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 := 24894, root := ~, start := 24886, stop := 24893 ), 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 := 24930, root := ~, start := 24917, stop := 24929 ), 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 := 24954, root := ~, start := 24946, stop := 24953 ), 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 := 24973, root := ~, start := 24965, stop := 24972 ), 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 := 25003, root := ~, start := 24995, stop := 25002 ), 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 := 25020, root := ~, start := 25012, stop := 25019 ), 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 := 25101, root := ~, start := 25073, stop := 25100 ), 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 := 25125, root := ~, start := 25116, stop := 25124 ), 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 := 25183, root := ~, start := 25175, stop := 25182 ), 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 := 25247, root := ~, start := 25243, stop := 25246 ), 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 := 25278, root := ~, start := 25258, stop := 25277 ), 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 := 25330, root := ~, start := 25320, stop := 25329 ), 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 := 25345, root := ~, start := 25335, stop := 25344 ), 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 := 25379, root := ~, start := 25366, stop := 25378 ), 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 := 25411, root := ~, start := 25384, stop := 25410 ), 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 := 25431, root := ~, start := 25414, stop := 25430 ), 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 := 25457, root := ~, start := 25441, stop := 25456 ), 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 := 25472, root := ~, start := 25462, stop := 25471 ), 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 := 25524, root := ~, start := 25506, stop := 25523 ), 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 := 25541, root := ~, start := 25533, stop := 25540 ), 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 := 25602, root := ~, start := 25573, stop := 25601 ), 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 := 25647, root := ~, start := 25625, stop := 25646 ), 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 := 25674, root := ~, start := 25666, stop := 25673 ), 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 := 25729, root := ~, start := 25686, stop := 25728 ), 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 := 25734, root := ~, start := 25730, stop := 25733 ), 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 := 25803, root := ~, start := 25762, stop := 25802 ), 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 := 25840, root := ~, start := 25812, stop := 25839 ), 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 := 25865, root := ~, start := 25850, stop := 25864 ), 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 := 25898, root := ~, start := 25888, stop := 25897 ), 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 := 25921, root := ~, start := 25903, stop := 25920 ), 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 := 25943, root := ~, start := 25935, stop := 25942 ), 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 := 25997, root := ~, start := 25978, stop := 25996 ), 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 := 26019, root := ~, start := 26004, stop := 26018 ), 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 := 26024, root := ~, start := 26020, stop := 26023 ), 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 := 26096, root := ~, start := 26088, stop := 26095 ), 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 := 26149, root := ~, start := 26139, stop := 26148 ), 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 := 26190, root := ~, start := 26180, stop := 26189 ), 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 := 26231, root := ~, start := 26213, stop := 26230 ), 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 := 26261, root := ~, start := 26253, stop := 26260 ), 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 := 26328, root := ~, start := 26310, stop := 26327 ), 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 := 26408, root := ~, start := 26400, stop := 26407 ), 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 := 26466, root := ~, start := 26437, stop := 26465 ), 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 := 26471, root := ~, start := 26467, stop := 26470 ), 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 := 26518, root := ~, start := 26497, stop := 26517 ), 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 := 26539, root := ~, start := 26524, stop := 26538 ), 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 := 26555, root := ~, start := 26544, stop := 26554 ), 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 := 26605, root := ~, start := 26588, stop := 26604 ), 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 := 26634, root := ~, start := 26626, stop := 26633 ), 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 := 26662, root := ~, start := 26645, stop := 26661 ), 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 := 26700, root := ~, start := 26668, stop := 26699 ), 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 := 26734, root := ~, start := 26706, stop := 26733 ), 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 := 26749, root := ~, start := 26741, stop := 26748 ), 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 := 26823, root := ~, start := 26815, stop := 26822 ), 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 := 26836, root := ~, start := 26828, stop := 26835 ), 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 := 26841, root := ~, start := 26837, stop := 26840 ), 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 := 26884, root := ~, start := 26851, stop := 26883 ), 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 := 26919, root := ~, start := 26890, stop := 26918 ), 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 := 27047, root := ~, start := 26934, stop := 27046 ), 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 := 27069, root := ~, start := 27049, stop := 27068 ), 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 := 27125, root := ~, start := 27115, stop := 27124 ), 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 := 27139, root := ~, start := 27127, stop := 27138 ), 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 := 27210, root := ~, start := 27170, stop := 27209 ), 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 := 27248, root := ~, start := 27226, stop := 27247 ), 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 := 27254, root := ~, start := 27250, stop := 27253 ), 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 := 27324, root := ~, start := 27289, stop := 27323 ), 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 := 27384, root := ~, start := 27376, stop := 27383 ), 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 := 27397, root := ~, start := 27389, stop := 27396 ), 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 := 27419, root := ~, start := 27411, stop := 27418 ), 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 := 27493, root := ~, start := 27483, stop := 27492 ), 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 := 27511, root := ~, start := 27507, stop := 27510 ), 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 := 27594, root := ~, start := 27584, stop := 27593 ), 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 := 27641, root := ~, start := 27625, stop := 27640 ), 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 := 27669, root := ~, start := 27643, stop := 27668 ), 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 := 27697, root := ~, start := 27674, stop := 27696 ), 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 := 27752, root := ~, start := 27744, stop := 27751 ), 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 := 27817, root := ~, start := 27807, stop := 27816 ), 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 := 27833, root := ~, start := 27823, stop := 27832 ), 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 := 27926, root := ~, start := 27918, stop := 27925 ), 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 := 27975, root := ~, start := 27967, stop := 27974 ), 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 := 27991, root := ~, start := 27981, stop := 27990 ), 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 := 28019, root := ~, start := 27996, stop := 28018 ), 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 := 28024, root := ~, start := 28020, stop := 28023 ), 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 := 28052, root := ~, start := 28044, stop := 28051 ), 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 := 28139, root := ~, start := 28126, stop := 28138 ), 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 := 28210, root := ~, start := 28202, stop := 28209 ), 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 := 28301, root := ~, start := 28286, stop := 28300 ), 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 := 28374, root := ~, start := 28361, stop := 28373 ), 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 := 28416, root := ~, start := 28401, stop := 28415 ), 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 := 28451, root := ~, start := 28434, stop := 28450 ), 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 := 28577, root := ~, start := 28564, stop := 28576 ), 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 := 28626, root := ~, start := 28612, stop := 28625 ), 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 := 28664, root := ~, start := 28654, stop := 28663 ), 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 := 28692, root := ~, start := 28683, stop := 28691 ), 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 := 28698, root := ~, start := 28694, stop := 28697 ), 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 := 28779, root := ~, start := 28738, stop := 28778 ), 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 := 28895, root := ~, start := 28891, stop := 28894 ), 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 := 2899\ 3, root := ~, start := 28972, stop := 28992 ), rec( content := ". ", count := [ 1, 7, 1, 6 ], mathmode := \ "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 6 ], name := "Item", next := 29002, root := ~, start := 28904, stop := 29001 ), 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 := 2908\ 4, root := ~, start := 29076, stop := 29083 ), 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 := 2915\ 7, root := ~, start := 29149, stop := 29156 ), 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 := 29361, root := ~, start := 29003, stop := 29360 ), 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 := 29467, root := ~, start := 29362, stop := 29466 ), 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 := 29520, root := ~, start := 29483, stop := 29519\ ), 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 := 29632, root := ~, start := 29468, stop := 29631 ) ], count := [ 1, 7, 1, 5 ], mathmode := "Text", name := "List", next := 29640, root := ~, start := 28897, stop := 29639 ), 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 := 29850, root := ~, start := 29813, stop := 29849 ), 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 := 29946, root := ~, start := 29942, stop := 29945 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 1, 1 ], mathmode := "Text", name := "Subsection", next := 29961, root := ~, start := 28700, stop := 29960 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 7, 0, 1 ], mathmode := "Text", name := "Section", next := 29973, root := ~, start := 24304, stop := 29972 ), rec( content := "\n\n", count := [ 1, 7, 1, 15 ], mathmode := "Text", name := "PCDATA", root := ~ ) ], count := [ 1, 0, 0, 1 ], mathmode := "Text", name := "Chapter", next := 29985, root := ~, start := 1604, stop := 29984 ), 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 := 29995, root := ~, start := 1390, stop := 29994 ), 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 := 30063, root := ~, start := 30031, stop := 30062 ), 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 := 30117, root := ~, start := 30106, stop := 30116 ) ], count := [ 0, 0, 0, 1 ], name := "Book", next := 30126, root := ~, start := 234, stop := 30125 ) ], 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.5\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 August 2019\n \ License\n ©right; 2000-2018 by Fra\ nk Lübeck

\n EDIM \n is fre\ e software; you can redistribute it\n and/or modify it under the \ terms of the http://ww\ w.fsf.org/licenses/gpl.html as published by the Free Softwa\ re Foundation;\n either version 2 of the License, or (at your opt\ ion) any\n later version.\n \n\n\n\n\n\n\n \n\n\n\n\n\ The EDIM-Package\nEDIM\n\n(Elementary Divisors and Integer Matrices, \ by Frank\nLübeck)

\n\nThis chapter describes the functions d\ efined in the &GAP;4 package\nEDIM. The main functions\ implement variants of an\nalgorithm for computing for a given prime p the p-parts of\nthe elementary divisors of an integer matrix. Th\ ese algorithms use\na p-adic method and are described by the au\ thor in (see )\ .

\n\nThese functions were already applied to integer matrices of dimensio\ n\ngreater than 11000 (which had many non-trivial elementary\ndiv\ isors which were products of small primes).

\n\nFurthermore there are fun\ ctions for finding the biggest elementary\ndivisor of an invertible integer \ 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 other \ algorithms for\nfinding elementary divisors or normal forms of integer m\ atrices: A\np-modular algorithm by Havas and Sterling from <\ Cite\nKey=\"HS79\"/> (see )\nand LLL-based algorithms for extended greatest common divisors of\nin\ tegers (see ) and for Hermite normal forms\nof int\ eger matrices with (very nice) transforming matrices (see ).

\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-pac\ kage.\nAlso, I would like to hear about applications of this package.

\n\nF\ rank Lübeck \n\n

\nInstallation of th\ e EDIM package\n\nTo install this package first u\ npack it inside some GAP root directory\nin the subdirectory pkg (see \ \n). Then\nthe \ EDIM package can already be loaded and used.\nBut we strong\ ly recommend to compile a kernel function as well during\ninstallation, otherw\ ise \nthe function \nwill\ not be available.

\n\nTo install the kernel function go to the director\ y pkg/EDIM-... to\nwhich the package was extracted and call

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

\n\nwhere path is a path to the ma\ in GAP root\ndirectory (if not given, the default ../..<\ /F> is assumed). \n\n\nAfterwards call make to compile a binary file.

\n\nI\ f you have installed several GAP kernels repeat these two steps for each \nof \ them. \n\nYou can r\ un a test of the installation by typing make test.\n\n \n\n \n\n \nThis is an Inf\ o class for the EDIM-package.\nBy SetInfoLevel(InfoE\ DIM, 1); you can switch on the printing of\nsome information during \ the computations of certain\nEDIM-functions. \ \n\n\n\n

\n\n\n
\np-Parts of Elementary Divisors\n\nHere we explain the \ main functions 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 e\ lementary divisors\nof A divisible by p^i (see for a definition of the \ elementary\ndivisors).

\n\nThe algorithms for these functions are \ described in .

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

\n\nThe first version of the command delegates i\ ts job to the fourth\nversion by trying growing values for exp, see b\ elow.

\n\nThe second and third versions implement the main algorithm des\ cribed\nin and a variation. Here has a bit more overhead, but can\n\ be advantageous because the intermediate entries during the\ncomput\ ation can be much smaller.

\n\nIn the fourth form exp must be an up\ per bound for the highest\npower of p appearing in an elementary di\ visor of A.\nThis information allows reduction of matrix en\ tries modulo\np^{{exp+1}} during the computation.

\ \n\nIf exp is too small or the given rk is too large the\nfunc\ tion returns fail.

\n\nIf p^{exp} is small e\ nough we use internally a\nkernel function which can also be used directly i\ n the fifth form of\nthe command. There il can be 0 or 1 where in the\nsecond case some information is printed during the computation\ .

\n\nMore precisely, \ is\napplicable when p^{{exp+1}} < 2^{{b-4}} and\n<\ M>(p^{{exp+1}} - 1)(p-1) < 2^b where b=32\nin a 3\ 2-bit version of &GAP; and b=64 in a 64-bit version of\n&GAP;.

\n\ \nThis last form of the function was already succesfully applied to\ndens\ e matrices of rank up to 11000.

\n\nNote that you have to 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 matrix 'mat' w\ ith elementary divisors 'eldiv'.\ntrue\ngap> ElementaryDivisorsPPartRkI(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 i\ nteger matrix A and a prime p this function\nreturns 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 appearing in\nan \ elementary divisor of A must be given. Smaller d\nimprove th\ e performance of the algorithm considerably.

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

\n\nWe added\ a slight improvement: we divide the considered submatrices by\nthe p-p\ art of the greatest common divisor of all entries (and\nlower the d \ appropriately). This reduces the size of the\nentries and often 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 Rational Matrices<\ /Heading>\n\n\n\n\n \nThis func\ tion returns the inverse of an invertible matrix over the\nrational numbers\ .

\n\nIt first computes the inverse modulo some prime p, compute\ s\nfrom this a p-adic approximation to the inverse and finally\ncon\ structs the rational entries from their p-adic\napproxima\ tions. See section for more\ndetails.

\ \n\nThis seems to be better than GAP's\nst\ andard Gauß algorithm (A^-1) already for small\nmatrice\ s. (Try, e.g., RandomMat(20,20,[-10000..10000]) or\nRandomMat(\ 100,100).)

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

\n\n\n\n\n<\ ManSection>\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 rationals and \ v must be a vector with integer entries of\nthe appropriate length.

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

\n\nThe solution is comput\ ed via p-adic approximation as explained in \n.

\n\n\n\n\n\n\n \n\n<\ Description>\nThis function returns the biggest elementary divisor of a \ square\ninteger matrix A of full rank.

\n\nFor such a matrix A<\ /A> the least common multiple of the\ndenominators of all entries of \ the inverse matrix A^{-1}\nis exactly the biggest elementary div\ isor of A.

\n \nThis function is implemented by a slight modi\ fication of . The third argument nr tells the\nfunction to return the least common multiple of the first \ nr\nrows of the rational inverse matrix only. Very often the funct\ ion\nwill already return the biggest elementary divisor with\n<\ M>nr=2 or 3 (and the command without this argument\nwould s\ pend most time in checking, that this is correct).

\n\nThe optional argumen\ t p should be a prime such that A\nmodulo p is invert\ ible (default is p=251). If\nA is not invertible \ modulo p then p is\nautomatically replaced by the next pri\ me.

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x2\ 42 integer matrix 'mat' with elementary divisors 'eldiv'.\ntrue\ngap> inv := I\ nverseRatMat(mat);; time; \n840\ngap> ExponentSquareIntMa\ tFullRank(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 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<\ ManSection>\n \n\n\nThis function returns a list of nonzero ele\ mentary 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 singula\ r modulo a choosen prime (it starts by\ndefault with 251) then the prime is\ automatically replaced by the next\none.

\n\nThe rest is done using and\n.

\n\nT\ he function fails if the biggest elementary divisor cannot be\ncomplete\ ly factored and the non-factored part is not a divisor of the\nbiggest elemen\ tary 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 i\ nstead\nof this function. Nevertheless remember for hard and big\nex\ amples. It is particularly good when the largest elementary divisor\nis a ver\ y small factor of the determinant.\n\n\ngap> Collected(ElementaryDivi\ sorsSquareIntMatFullRank(mat)); \n[ [ 1, 49 ], [ 3, 99 ], [ 6, 7 ], [ 30,\ 9 ], [ 60, 9 ], [ 120, 2 ], \n [ 360, 10 ], [ 720, 22 ], [ 3600, 12 ], [ 144\ 00, 14 ], \n [ 28800, 7 ], [ 115200, 2 ] ]\ngap> time;\n860\ngap> last2 = Col\ lected(DiagonalOfMat(NormalFormIntMat(mat, 1).normal));\ntrue\ngap> time;\n517\ 0\n\n\n\n\n\n\n\n\n\n\nThis function returns a list of nonzero elementary divisors of an\nin\ teger matrix A.

\n\nHere det must be an integer which is a m\ ultiple of the biggest\ndeterminant divisor of A. If the matrix does\ not have full\nrank then its rank rk must be given, too.

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

\n\nThis function handles prime divisors o\ f det with multiplicity\nsmaller than 4 specially, for the other pr\ ime 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 has actuall\ y a much\nsmaller multiplicity in the largest elementary divisor.)

\n\n\ngap> ReadPackage(\"edim\", \"tst/mat\");\nReading 242x242 integer mat\ rix 'mat' with elementary divisors 'eldiv'.\ntrue\ngap> # not so good:\ngap> E\ lementaryDivisorsIntMatDeterminant(mat,Product(eldiv)) = \n> Concatenation([1.\ .49]*0+1, eldiv); time;\ntrue\n5490\n\n\n\ \n\n

\n\n\n\n
\nGcd and Normal For\ ms Using LLL\n\nThe EDIM-mini package also contai\ ns implementations\nof an extended Gcd-algorithm for integers and a Hermit\ e and Smith\nnormal form algorithm for integer matrices using LLL-techiques\ . They\nare well described in the paper by Havas, Majews\ ki\nand Matthews.

\n\nThey are particularly useful if one wants to have \ the normal forms\ntogether with transforming matrices. These transforming ma\ trices have\nspectacularly nice (i.e., small) 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).

\n\nIn detail:

\n\n\n \ \n\n \nThis function returns for integers n1, n2, \\ldots a\nlist [g, [c_1, c_2, \\ldots]], where g = c_\ 1n1 +\nc_2n2 + \\ldots is the greatest common diviso\ r 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 \nThis function returns a pair of matrices [H, \ L] where H = L\nA is the Hermite normal form of an integer \ matrix A.\nThe transforming matrix L can have surprisingly small\ entries.\n\n\ngap> ReadPackage(\"edim\", \"tst/mat2\");\nReading 34\ x34 integer matrix 'mat2' with elementary divisors 'eldiv2'.\ntrue\ngap> tr :=\ HermiteIntMatLLLTrans(mat2);; Maximum(List(Flat(tr[2]), AbsInt));\n606\ngap> \ tr[2]*mat2 = tr[1]; \ntrue\n\n\n\n\n\n\n\n \n\n \nThis function returns the Smi\ th normal form of an integer matrix\nA using the LLL-algorithm to av\ oid entry explosion.\n\n\n\n\n\n\n\n\n\nThis function \ returns [S, L, R] where S = L A R\nis the Smith normal f\ orm of an integer matrix A.

\n\nWe apply the algorithm for Hermite \ normal form several times to get\nthe Smith normal form, that is n\ ot in the paper . The transforming matrices need\ not be as nice as for\nthe Hermite normal form.

\n\n\ngap> Read\ Package(\"edim\", \"tst/mat2\");\nReading 34x34 integer matrix 'mat2' with el\ ementary divisors 'eldiv2'.\ntrue\ngap> tr := SmithIntMatLLLTrans(mat2);;\ngap\ > tr[2] * mat2 * tr[3] = tr[1]; \ntrue\n\n\n\n\n

\n\n\n\n\n
\n\nUtility Functio\ ns from the EDIM-package\n\n\n\n\n\nT\ his function returns r/s = x \\pmod{n}, if\nit exists. M\ ore precisely:

\n\nn, k, l must be positive i\ ntegers with\n2kl \\leq n and x an int\ eger with\n-n/2 < x \\leq n/2. If it ex\ ists\nthis function returns a rational number r/s with 0 <\n\ s < l, \\gcd(s, n) = 1, -k\n< \ r < k and r/s congruent to x\n\\pmod{n\ } (i.e., n \\mid r - s x). Such\nan r/s \ is unique. The function returns fail if such a\nnumber does not exist\ .

\n\n\n\n\n\n\n \n\n\nThis function returns an inver\ se matrix modulo a prime p or\nfail. More precisely:

\n\nA must be an integer matrix and p a prime such that\nA\ is invertible modulo p. This function returns an\ninteger matrix\ inv with entries in the range ]-p/2\n\\ldots p/2]<\ /M> 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 integer 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 determinant 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 of iterations for \ `FactorsRho' (default is\n2000).

\n\nThis is only a slight modificati\ on of the library function w\ hich avoids an error message when\nthe number is not completely factored.

\n \n\n\n\n\n\n\n\n\nThis function returns the rank of an integ\ er matrix A modulo\np. Here p must not necessarily be a\ prime. If it is not\nand this function returns an integer, 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 pi\ vot entry has nontrivial greatest common divisor with\np) then the fun\ ction 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], ...]<\ /C>.

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

\n\n\ngap> ReadPackage\ (\"edim\", \"tst/mat\");\nReading 242x242 integer matrix 'mat' with elementar\ y 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
\n\ InverseRatMat - the Algorithm\n\n\nThe idea is to recover a rati\ onal matrix from an l-adic\napproximation for some prime l. \ This description came out of\ndiscussions with Jürgen Müller. I thank J\ ohn Cannon for pointing out\nthat the basic idea already appeared in the paper\ of\nDixon.

\n\nLet A be an invertible matrix o\ ver the rational numbers. By\nmultiplying with a constant we may assume tha\ t its entries are in fact\nintegers.

\n\n(1) We first describe how to find\ an l-adic approximation of\nA^{-1}. Find a prime l su\ ch that A is invertible\nmodulo l and let B be the intege\ r matrix with entries in\nthe range \\left]-l/2,l/2\\right] such \ that BA is\ncongruent to the identity matrix modulo 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 r\ ange \\left]-l/2, l/2\\right].\nThen all entries of 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 i \\geq 0. H\ ence the\nsequence y_i, i \\geq 0, gives an l-a\ dic\napproximation to the vector y \\in &QQ;^r with y A =\nv.\

\n\n(2) The second point is to show how we can get the vector y\ \nfrom a sufficiently good approximation y_i. Note that the\nsequ\ ence of y_i becomes constant for i \\geq i_0 if all\nentries \ of y are integers of absolute value smaller than\nl^{i_0} / 2<\ /M> because of our choice of representatives of residue\nclasses modulo l in the interval \\left]-l/2,\nl/2\\right].

\n\nMo\ re generally consider a / b \\in &QQ; with b > 0 and\na, b\ coprime. Then there is for each n \\in &NN; which is\ncoprime to <\ M>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\ncomputed via the ext\ ended Euclidean algorithm applied to b and\nn.

\n\nNow let <\ M>n, \\alpha, \\beta \\in &NN; with 2 \\alpha \\beta \\leq\nn. Th\ en 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,\na'/b' \ in the above set we have a b' - a' b \\equiv 0\n\\pmod{n} if a\ nd 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 Euclidean 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, \\alpha =\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\ncomputing y A. I\ f \\mu is the maximal absolute value of\nall numerators and denominato\ rs of the entries of y it is clear\nfrom (2) that we 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. Namely we can take as \ v the standard unit vectors\nmultiplied by the least common mul\ tiple \\epsilon of the\ndenominators of the already computed entri\ es of A^{-1}. In\nmany examples this \\epsilon actually equa\ ls \\epsilon_r\nafter the computation of the first or first few rows\ . Therefore we\nwill often find quickly the next row of A^{-1} alread\ y in (1),\nbecause we find a v_i = 0 such that the sequence of y_i<\ /M>\nbecomes constant (=y).

\n\n\nRank of Integer Matrix\n\nThe following strategy has s\ hown to be useful in proving that some very\nbig integer matrix is not invert\ ible.

\n\n\nCheck the rank modulo some small primes, s\ ay with . \nIf the rank seems less t\ han the number of rows choose a prime\np, a collection of lines wh\ ich is linearly independent modulo\np, and another line linearly dep\ endend on these. Guess that this\nlast line is also linearly dependend on the\ chosen collection over the\nrational numbers (maybe check modulo several sma\ ll primes).\nFind columns of the collection of lines which give\ an invertible\nmatrix modulo some prime.\nThen use with the invertible\nsubmatrix and corresponding e\ ntries of the linearly dependend row to\nprove this.\n\n\nGue\ ssing the rank of a matrix from the rank modulo several primes,\nchosing\ a maximal set of lines which are linearly independent modulo\nsome prime\ s, and using with the\nremaining lin\ es, one may also find the exact rank of a huge integer\nmatrix.

\n\n<\ /Subsection>\n\n

\n\n\n\n\n\n\n\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 ], [ 724, "doc/edim.xml", 33 ], [ 763, "doc/edim.xml", 34 ], [ 821, "doc/edim.xml", 35 ], [ 861, "doc/edim.xml", 36 ], [ 917, "doc/edim.xml", 37 ], [ 986, "doc/edim.xml", 38 ], [ 1126, "doc/edim.xml", 39 ], [ 1197, "doc/edim.xml", 40 ], [ 1226, "doc/edim.xml", 41 ], [ 1243, "doc/edim.xml", 42 ], [ 1244, "doc/edim.xml", 43 ], [ 1257, "doc/edim.xml", 44 ], [ 1258, "doc/edim.xml", 45 ], [ 1329, "doc/edim.xml", 46 ], [ 1348, "doc/edim.xml", 47 ], [ 1349, "doc/edim.xml", 48 ], [ 1390, "doc/edim.xml", 49 ], [ 1397, "doc/main.xml", 1 ], [ 1403, "doc/main.xml", 2 ], [ 1404, "doc/main.xml", 3 ], [ 1474, "doc/main.xml", 4 ], [ 1475, "doc/main.xml", 5 ], [ 1550, "doc/main.xml", 6 ], [ 1551, "doc/main.xml", 7 ], [ 1598, "doc/main.xml", 8 ], [ 1599, "doc/main.xml", 9 ], [ 1603, "doc/main.xml", 10 ], [ 1604, "doc/main.xml", 11 ], [ 1632, "doc/main.xml", 12 ], [ 1687, "doc/main.xml", 13 ], [ 1726, "doc/main.xml", 14 ], [ 1727, "doc/main.xml", 15 ], [ 1798, "doc/main.xml", 16 ], [ 1818, "doc/main.xml", 17 ], [ 1819, "doc/main.xml", 18 ], [ 1892, "doc/main.xml", 19 ], [ 1965, "doc/main.xml", 20 ], [ 2038, "doc/main.xml", 21 ], [ 2111, "doc/main.xml", 22 ], [ 2184, "doc/main.xml", 23 ], [ 2247, "doc/main.xml", 24 ], [ 2248, "doc/main.xml", 25 ], [ 2319, "doc/main.xml", 26 ], [ 2390, "doc/main.xml", 27 ], [ 2441, "doc/main.xml", 28 ], [ 2442, "doc/main.xml", 29 ], [ 2513, "doc/main.xml", 30 ], [ 2584, "doc/main.xml", 31 ], [ 2655, "doc/main.xml", 32 ], [ 2726, "doc/main.xml", 33 ], [ 2792, "doc/main.xml", 34 ], [ 2793, "doc/main.xml", 35 ], [ 2864, "doc/main.xml", 36 ], [ 2935, "doc/main.xml", 37 ], [ 3006, "doc/main.xml", 38 ], [ 3077, "doc/main.xml", 39 ], [ 3148, "doc/main.xml", 40 ], [ 3219, "doc/main.xml", 41 ], [ 3290, "doc/main.xml", 42 ], [ 3322, "doc/main.xml", 43 ], [ 3323, "doc/main.xml", 44 ], [ 3394, "doc/main.xml", 45 ], [ 3465, "doc/main.xml", 46 ], [ 3536, "doc/main.xml", 47 ], [ 3603, "doc/main.xml", 48 ], [ 3604, "doc/main.xml", 49 ], [ 3619, "doc/main.xml", 50 ], [ 3620, "doc/main.xml", 51 ], [ 3651, "doc/main.xml", 52 ], [ 3722, "doc/main.xml", 53 ], [ 3723, "doc/main.xml", 54 ], [ 3794, "doc/main.xml", 55 ], [ 3831, "doc/main.xml", 56 ], [ 3898, "doc/main.xml", 57 ], [ 3966, "doc/main.xml", 58 ], [ 4036, "doc/main.xml", 59 ], [ 4061, "doc/main.xml", 60 ], [ 4126, "doc/main.xml", 61 ], [ 4153, "doc/main.xml", 62 ], [ 4154, "doc/main.xml", 63 ], [ 4232, "doc/main.xml", 64 ], [ 4277, "doc/main.xml", 65 ], [ 4278, "doc/main.xml", 66 ], [ 4316, "doc/main.xml", 67 ], [ 4317, "doc/main.xml", 68 ], [ 4388, "doc/main.xml", 69 ], [ 4452, "doc/main.xml", 70 ], [ 4472, "doc/main.xml", 71 ], [ 4548, "doc/main.xml", 72 ], [ 4624, "doc/main.xml", 73 ], [ 4668, "doc/main.xml", 74 ], [ 4672, "doc/main.xml", 75 ], [ 4673, "doc/main.xml", 76 ], [ 4735, "doc/main.xml", 77 ], [ 4736, "doc/main.xml", 78 ], [ 4811, "doc/main.xml", 79 ], [ 4877, "doc/main.xml", 80 ], [ 4878, "doc/main.xml", 81 ], [ 4954, "doc/main.xml", 82 ], [ 4955, "doc/main.xml", 83 ], [ 4969, "doc/main.xml", 84 ], [ 4970, "doc/main.xml", 85 ], [ 5000, "doc/main.xml", 86 ], [ 5001, "doc/main.xml", 87 ], [ 5019, "doc/main.xml", 88 ], [ 5090, "doc/main.xml", 89 ], [ 5161, "doc/main.xml", 90 ], [ 5232, "doc/main.xml", 91 ], [ 5269, "doc/main.xml", 92 ], [ 5284, "doc/main.xml", 93 ], [ 5298, "doc/main.xml", 94 ], [ 5299, "doc/main.xml", 95 ], [ 5310, "doc/main.xml", 96 ], [ 5311, "doc/main.xml", 97 ], [ 5381, "doc/main.xml", 98 ], [ 5412, "doc/main.xml", 99 ], [ 5469, "doc/main.xml", 100 ], [ 5470, "doc/main.xml", 101 ], [ 5521, "doc/main.xml", 102 ], [ 5522, "doc/main.xml", 103 ], [ 5535, "doc/main.xml", 104 ], [ 5574, "doc/main.xml", 105 ], [ 5600, "doc/main.xml", 106 ], [ 5640, "doc/main.xml", 107 ], [ 5663, "doc/main.xml", 108 ], [ 5704, "doc/main.xml", 109 ], [ 5727, "doc/main.xml", 110 ], [ 5769, "doc/main.xml", 111 ], [ 5797, "doc/main.xml", 112 ], [ 5844, "doc/main.xml", 113 ], [ 5876, "doc/main.xml", 114 ], [ 5877, "doc/main.xml", 115 ], [ 5948, "doc/main.xml", 116 ], [ 6019, "doc/main.xml", 117 ], [ 6090, "doc/main.xml", 118 ], [ 6161, "doc/main.xml", 119 ], [ 6176, "doc/main.xml", 120 ], [ 6177, "doc/main.xml", 121 ], [ 6248, "doc/main.xml", 122 ], [ 6265, "doc/main.xml", 123 ], [ 6266, "doc/main.xml", 124 ], [ 6337, "doc/main.xml", 125 ], [ 6408, "doc/main.xml", 126 ], [ 6479, "doc/main.xml", 127 ], [ 6480, "doc/main.xml", 128 ], [ 6551, "doc/main.xml", 129 ], [ 6616, "doc/main.xml", 130 ], [ 6617, "doc/main.xml", 131 ], [ 6688, "doc/main.xml", 132 ], [ 6759, "doc/main.xml", 133 ], [ 6830, "doc/main.xml", 134 ], [ 6901, "doc/main.xml", 135 ], [ 6938, "doc/main.xml", 136 ], [ 6939, "doc/main.xml", 137 ], [ 7010, "doc/main.xml", 138 ], [ 7081, "doc/main.xml", 139 ], [ 7152, "doc/main.xml", 140 ], [ 7214, "doc/main.xml", 141 ], [ 7215, "doc/main.xml", 142 ], [ 7284, "doc/main.xml", 143 ], [ 7319, "doc/main.xml", 144 ], [ 7320, "doc/main.xml", 145 ], [ 7391, "doc/main.xml", 146 ], [ 7462, "doc/main.xml", 147 ], [ 7533, "doc/main.xml", 148 ], [ 7601, "doc/main.xml", 149 ], [ 7602, "doc/main.xml", 150 ], [ 7673, "doc/main.xml", 151 ], [ 7744, "doc/main.xml", 152 ], [ 7815, "doc/main.xml", 153 ], [ 7886, "doc/main.xml", 154 ], [ 7897, "doc/main.xml", 155 ], [ 7898, "doc/main.xml", 156 ], [ 7969, "doc/main.xml", 157 ], [ 8016, "doc/main.xml", 158 ], [ 8017, "doc/main.xml", 159 ], [ 8088, "doc/main.xml", 160 ], [ 8159, "doc/main.xml", 161 ], [ 8184, "doc/main.xml", 162 ], [ 8185, "doc/main.xml", 163 ], [ 8195, "doc/main.xml", 164 ], [ 8233, "doc/main.xml", 165 ], [ 8304, "doc/main.xml", 166 ], [ 8309, "doc/main.xml", 167 ], [ 8381, "doc/main.xml", 168 ], [ 8420, "doc/main.xml", 169 ], [ 8424, "doc/main.xml", 170 ], [ 8490, "doc/main.xml", 171 ], [ 8529, "doc/main.xml", 172 ], [ 8532, "doc/main.xml", 173 ], [ 8543, "doc/main.xml", 174 ], [ 8558, "doc/main.xml", 175 ], [ 8572, "doc/main.xml", 176 ], [ 8573, "doc/main.xml", 177 ], [ 8643, "doc/main.xml", 178 ], [ 8656, "doc/main.xml", 179 ], [ 8706, "doc/main.xml", 180 ], [ 8726, "doc/main.xml", 181 ], [ 8768, "doc/main.xml", 182 ], [ 8769, "doc/main.xml", 183 ], [ 8784, "doc/main.xml", 184 ], [ 8855, "doc/main.xml", 185 ], [ 8926, "doc/main.xml", 186 ], [ 8997, "doc/main.xml", 187 ], [ 9021, "doc/main.xml", 188 ], [ 9022, "doc/main.xml", 189 ], [ 9093, "doc/main.xml", 190 ], [ 9164, "doc/main.xml", 191 ], [ 9223, "doc/main.xml", 192 ], [ 9224, "doc/main.xml", 193 ], [ 9295, "doc/main.xml", 194 ], [ 9314, "doc/main.xml", 195 ], [ 9315, "doc/main.xml", 196 ], [ 9386, "doc/main.xml", 197 ], [ 9457, "doc/main.xml", 198 ], [ 9528, "doc/main.xml", 199 ], [ 9577, "doc/main.xml", 200 ], [ 9578, "doc/main.xml", 201 ], [ 9588, "doc/main.xml", 202 ], [ 9626, "doc/main.xml", 203 ], [ 9697, "doc/main.xml", 204 ], [ 9702, "doc/main.xml", 205 ], [ 9763, "doc/main.xml", 206 ], [ 9799, "doc/main.xml", 207 ], [ 9804, "doc/main.xml", 208 ], [ 9815, "doc/main.xml", 209 ], [ 9830, "doc/main.xml", 210 ], [ 9844, "doc/main.xml", 211 ], [ 9855, "doc/main.xml", 212 ], [ 9856, "doc/main.xml", 213 ], [ 9926, "doc/main.xml", 214 ], [ 9927, "doc/main.xml", 215 ], [ 9960, "doc/main.xml", 216 ], [ 10008, "doc/main.xml", 217 ], [ 10009, "doc/main.xml", 218 ], [ 10022, "doc/main.xml", 219 ], [ 10049, "doc/main.xml", 220 ], [ 10069, "doc/main.xml", 221 ], [ 10113, "doc/main.xml", 222 ], [ 10114, "doc/main.xml", 223 ], [ 10130, "doc/main.xml", 224 ], [ 10201, "doc/main.xml", 225 ], [ 10223, "doc/main.xml", 226 ], [ 10224, "doc/main.xml", 227 ], [ 10295, "doc/main.xml", 228 ], [ 10366, "doc/main.xml", 229 ], [ 10437, "doc/main.xml", 230 ], [ 10509, "doc/main.xml", 231 ], [ 10522, "doc/main.xml", 232 ], [ 10523, "doc/main.xml", 233 ], [ 10594, "doc/main.xml", 234 ], [ 10666, "doc/main.xml", 235 ], [ 10737, "doc/main.xml", 236 ], [ 10769, "doc/main.xml", 237 ], [ 10770, "doc/main.xml", 238 ], [ 10841, "doc/main.xml", 239 ], [ 10912, "doc/main.xml", 240 ], [ 10983, "doc/main.xml", 241 ], [ 11029, "doc/main.xml", 242 ], [ 11044, "doc/main.xml", 243 ], [ 11058, "doc/main.xml", 244 ], [ 11059, "doc/main.xml", 245 ], [ 11129, "doc/main.xml", 246 ], [ 11142, "doc/main.xml", 247 ], [ 11178, "doc/main.xml", 248 ], [ 11210, "doc/main.xml", 249 ], [ 11274, "doc/main.xml", 250 ], [ 11275, "doc/main.xml", 251 ], [ 11291, "doc/main.xml", 252 ], [ 11360, "doc/main.xml", 253 ], [ 11404, "doc/main.xml", 254 ], [ 11405, "doc/main.xml", 255 ], [ 11478, "doc/main.xml", 256 ], [ 11551, "doc/main.xml", 257 ], [ 11579, "doc/main.xml", 258 ], [ 11580, "doc/main.xml", 259 ], [ 11651, "doc/main.xml", 260 ], [ 11722, "doc/main.xml", 261 ], [ 11783, "doc/main.xml", 262 ], [ 11784, "doc/main.xml", 263 ], [ 11858, "doc/main.xml", 264 ], [ 11895, "doc/main.xml", 265 ], [ 11910, "doc/main.xml", 266 ], [ 11924, "doc/main.xml", 267 ], [ 11925, "doc/main.xml", 268 ], [ 11995, "doc/main.xml", 269 ], [ 11996, "doc/main.xml", 270 ], [ 12009, "doc/main.xml", 271 ], [ 12051, "doc/main.xml", 272 ], [ 12079, "doc/main.xml", 273 ], [ 12096, "doc/main.xml", 274 ], [ 12097, "doc/main.xml", 275 ], [ 12111, "doc/main.xml", 276 ], [ 12182, "doc/main.xml", 277 ], [ 12224, "doc/main.xml", 278 ], [ 12225, "doc/main.xml", 279 ], [ 12296, "doc/main.xml", 280 ], [ 12367, "doc/main.xml", 281 ], [ 12426, "doc/main.xml", 282 ], [ 12429, "doc/main.xml", 283 ], [ 12500, "doc/main.xml", 284 ], [ 12571, "doc/main.xml", 285 ], [ 12642, "doc/main.xml", 286 ], [ 12713, "doc/main.xml", 287 ], [ 12784, "doc/main.xml", 288 ], [ 12855, "doc/main.xml", 289 ], [ 12917, "doc/main.xml", 290 ], [ 12918, "doc/main.xml", 291 ], [ 12989, "doc/main.xml", 292 ], [ 13060, "doc/main.xml", 293 ], [ 13131, "doc/main.xml", 294 ], [ 13177, "doc/main.xml", 295 ], [ 13178, "doc/main.xml", 296 ], [ 13188, "doc/main.xml", 297 ], [ 13226, "doc/main.xml", 298 ], [ 13297, "doc/main.xml", 299 ], [ 13302, "doc/main.xml", 300 ], [ 13363, "doc/main.xml", 301 ], [ 13367, "doc/main.xml", 302 ], [ 13441, "doc/main.xml", 303 ], [ 13448, "doc/main.xml", 304 ], [ 13459, "doc/main.xml", 305 ], [ 13474, "doc/main.xml", 306 ], [ 13488, "doc/main.xml", 307 ], [ 13489, "doc/main.xml", 308 ], [ 13500, "doc/main.xml", 309 ], [ 13501, "doc/main.xml", 310 ], [ 13571, "doc/main.xml", 311 ], [ 13572, "doc/main.xml", 312 ], [ 13604, "doc/main.xml", 313 ], [ 13667, "doc/main.xml", 314 ], [ 13668, "doc/main.xml", 315 ], [ 13739, "doc/main.xml", 316 ], [ 13810, "doc/main.xml", 317 ], [ 13881, "doc/main.xml", 318 ], [ 13915, "doc/main.xml", 319 ], [ 13916, "doc/main.xml", 320 ], [ 13929, "doc/main.xml", 321 ], [ 13981, "doc/main.xml", 322 ], [ 14002, "doc/main.xml", 323 ], [ 14003, "doc/main.xml", 324 ], [ 14017, "doc/main.xml", 325 ], [ 14088, "doc/main.xml", 326 ], [ 14117, "doc/main.xml", 327 ], [ 14120, "doc/main.xml", 328 ], [ 14191, "doc/main.xml", 329 ], [ 14262, "doc/main.xml", 330 ], [ 14333, "doc/main.xml", 331 ], [ 14404, "doc/main.xml", 332 ], [ 14413, "doc/main.xml", 333 ], [ 14414, "doc/main.xml", 334 ], [ 14485, "doc/main.xml", 335 ], [ 14512, "doc/main.xml", 336 ], [ 14513, "doc/main.xml", 337 ], [ 14583, "doc/main.xml", 338 ], [ 14654, "doc/main.xml", 339 ], [ 14691, "doc/main.xml", 340 ], [ 14692, "doc/main.xml", 341 ], [ 14763, "doc/main.xml", 342 ], [ 14834, "doc/main.xml", 343 ], [ 14905, "doc/main.xml", 344 ], [ 14976, "doc/main.xml", 345 ], [ 15047, "doc/main.xml", 346 ], [ 15118, "doc/main.xml", 347 ], [ 15161, "doc/main.xml", 348 ], [ 15162, "doc/main.xml", 349 ], [ 15172, "doc/main.xml", 350 ], [ 15239, "doc/main.xml", 351 ], [ 15308, "doc/main.xml", 352 ], [ 15366, "doc/main.xml", 353 ], [ 15398, "doc/main.xml", 354 ], [ 15409, "doc/main.xml", 355 ], [ 15413, "doc/main.xml", 356 ], [ 15485, "doc/main.xml", 357 ], [ 15490, "doc/main.xml", 358 ], [ 15501, "doc/main.xml", 359 ], [ 15506, "doc/main.xml", 360 ], [ 15517, "doc/main.xml", 361 ], [ 15532, "doc/main.xml", 362 ], [ 15546, "doc/main.xml", 363 ], [ 15547, "doc/main.xml", 364 ], [ 15617, "doc/main.xml", 365 ], [ 15618, "doc/main.xml", 366 ], [ 15631, "doc/main.xml", 367 ], [ 15680, "doc/main.xml", 368 ], [ 15711, "doc/main.xml", 369 ], [ 15712, "doc/main.xml", 370 ], [ 15726, "doc/main.xml", 371 ], [ 15797, "doc/main.xml", 372 ], [ 15826, "doc/main.xml", 373 ], [ 15827, "doc/main.xml", 374 ], [ 15898, "doc/main.xml", 375 ], [ 15969, "doc/main.xml", 376 ], [ 16022, "doc/main.xml", 377 ], [ 16023, "doc/main.xml", 378 ], [ 16094, "doc/main.xml", 379 ], [ 16140, "doc/main.xml", 380 ], [ 16141, "doc/main.xml", 381 ], [ 16212, "doc/main.xml", 382 ], [ 16283, "doc/main.xml", 383 ], [ 16354, "doc/main.xml", 384 ], [ 16425, "doc/main.xml", 385 ], [ 16496, "doc/main.xml", 386 ], [ 16557, "doc/main.xml", 387 ], [ 16558, "doc/main.xml", 388 ], [ 16568, "doc/main.xml", 389 ], [ 16606, "doc/main.xml", 390 ], [ 16677, "doc/main.xml", 391 ], [ 16682, "doc/main.xml", 392 ], [ 16702, "doc/main.xml", 393 ], [ 16766, "doc/main.xml", 394 ], [ 16809, "doc/main.xml", 395 ], [ 16814, "doc/main.xml", 396 ], [ 16819, "doc/main.xml", 397 ], [ 16830, "doc/main.xml", 398 ], [ 16845, "doc/main.xml", 399 ], [ 16859, "doc/main.xml", 400 ], [ 16860, "doc/main.xml", 401 ], [ 16871, "doc/main.xml", 402 ], [ 16872, "doc/main.xml", 403 ], [ 16942, "doc/main.xml", 404 ], [ 16943, "doc/main.xml", 405 ], [ 16978, "doc/main.xml", 406 ], [ 17028, "doc/main.xml", 407 ], [ 17029, "doc/main.xml", 408 ], [ 17100, "doc/main.xml", 409 ], [ 17171, "doc/main.xml", 410 ], [ 17242, "doc/main.xml", 411 ], [ 17313, "doc/main.xml", 412 ], [ 17331, "doc/main.xml", 413 ], [ 17332, "doc/main.xml", 414 ], [ 17403, "doc/main.xml", 415 ], [ 17474, "doc/main.xml", 416 ], [ 17548, "doc/main.xml", 417 ], [ 17619, "doc/main.xml", 418 ], [ 17677, "doc/main.xml", 419 ], [ 17678, "doc/main.xml", 420 ], [ 17693, "doc/main.xml", 421 ], [ 17694, "doc/main.xml", 422 ], [ 17707, "doc/main.xml", 423 ], [ 17732, "doc/main.xml", 424 ], [ 17762, "doc/main.xml", 425 ], [ 17763, "doc/main.xml", 426 ], [ 17779, "doc/main.xml", 427 ], [ 17852, "doc/main.xml", 428 ], [ 17925, "doc/main.xml", 429 ], [ 17998, "doc/main.xml", 430 ], [ 18057, "doc/main.xml", 431 ], [ 18058, "doc/main.xml", 432 ], [ 18068, "doc/main.xml", 433 ], [ 18141, "doc/main.xml", 434 ], [ 18181, "doc/main.xml", 435 ], [ 18192, "doc/main.xml", 436 ], [ 18207, "doc/main.xml", 437 ], [ 18221, "doc/main.xml", 438 ], [ 18222, "doc/main.xml", 439 ], [ 18292, "doc/main.xml", 440 ], [ 18293, "doc/main.xml", 441 ], [ 18306, "doc/main.xml", 442 ], [ 18336, "doc/main.xml", 443 ], [ 18354, "doc/main.xml", 444 ], [ 18355, "doc/main.xml", 445 ], [ 18426, "doc/main.xml", 446 ], [ 18497, "doc/main.xml", 447 ], [ 18512, "doc/main.xml", 448 ], [ 18526, "doc/main.xml", 449 ], [ 18527, "doc/main.xml", 450 ], [ 18597, "doc/main.xml", 451 ], [ 18598, "doc/main.xml", 452 ], [ 18611, "doc/main.xml", 453 ], [ 18646, "doc/main.xml", 454 ], [ 18667, "doc/main.xml", 455 ], [ 18668, "doc/main.xml", 456 ], [ 18683, "doc/main.xml", 457 ], [ 18754, "doc/main.xml", 458 ], [ 18825, "doc/main.xml", 459 ], [ 18895, "doc/main.xml", 460 ], [ 18896, "doc/main.xml", 461 ], [ 18906, "doc/main.xml", 462 ], [ 18945, "doc/main.xml", 463 ], [ 19016, "doc/main.xml", 464 ], [ 19021, "doc/main.xml", 465 ], [ 19098, "doc/main.xml", 466 ], [ 19102, "doc/main.xml", 467 ], [ 19175, "doc/main.xml", 468 ], [ 19180, "doc/main.xml", 469 ], [ 19191, "doc/main.xml", 470 ], [ 19206, "doc/main.xml", 471 ], [ 19220, "doc/main.xml", 472 ], [ 19221, "doc/main.xml", 473 ], [ 19291, "doc/main.xml", 474 ], [ 19292, "doc/main.xml", 475 ], [ 19305, "doc/main.xml", 476 ], [ 19333, "doc/main.xml", 477 ], [ 19354, "doc/main.xml", 478 ], [ 19355, "doc/main.xml", 479 ], [ 19370, "doc/main.xml", 480 ], [ 19441, "doc/main.xml", 481 ], [ 19500, "doc/main.xml", 482 ], [ 19515, "doc/main.xml", 483 ], [ 19529, "doc/main.xml", 484 ], [ 19530, "doc/main.xml", 485 ], [ 19600, "doc/main.xml", 486 ], [ 19601, "doc/main.xml", 487 ], [ 19614, "doc/main.xml", 488 ], [ 19647, "doc/main.xml", 489 ], [ 19668, "doc/main.xml", 490 ], [ 19669, "doc/main.xml", 491 ], [ 19683, "doc/main.xml", 492 ], [ 19754, "doc/main.xml", 493 ], [ 19814, "doc/main.xml", 494 ], [ 19815, "doc/main.xml", 495 ], [ 19886, "doc/main.xml", 496 ], [ 19957, "doc/main.xml", 497 ], [ 20028, "doc/main.xml", 498 ], [ 20057, "doc/main.xml", 499 ], [ 20058, "doc/main.xml", 500 ], [ 20068, "doc/main.xml", 501 ], [ 20107, "doc/main.xml", 502 ], [ 20178, "doc/main.xml", 503 ], [ 20183, "doc/main.xml", 504 ], [ 20222, "doc/main.xml", 505 ], [ 20261, "doc/main.xml", 506 ], [ 20266, "doc/main.xml", 507 ], [ 20277, "doc/main.xml", 508 ], [ 20292, "doc/main.xml", 509 ], [ 20306, "doc/main.xml", 510 ], [ 20307, "doc/main.xml", 511 ], [ 20318, "doc/main.xml", 512 ], [ 20319, "doc/main.xml", 513 ], [ 20320, "doc/main.xml", 514 ], [ 20390, "doc/main.xml", 515 ], [ 20391, "doc/main.xml", 516 ], [ 20419, "doc/main.xml", 517 ], [ 20420, "doc/main.xml", 518 ], [ 20498, "doc/main.xml", 519 ], [ 20499, "doc/main.xml", 520 ], [ 20512, "doc/main.xml", 521 ], [ 20546, "doc/main.xml", 522 ], [ 20573, "doc/main.xml", 523 ], [ 20574, "doc/main.xml", 524 ], [ 20588, "doc/main.xml", 525 ], [ 20653, "doc/main.xml", 526 ], [ 20684, "doc/main.xml", 527 ], [ 20685, "doc/main.xml", 528 ], [ 20756, "doc/main.xml", 529 ], [ 20827, "doc/main.xml", 530 ], [ 20898, "doc/main.xml", 531 ], [ 20969, "doc/main.xml", 532 ], [ 21040, "doc/main.xml", 533 ], [ 21111, "doc/main.xml", 534 ], [ 21182, "doc/main.xml", 535 ], [ 21253, "doc/main.xml", 536 ], [ 21280, "doc/main.xml", 537 ], [ 21295, "doc/main.xml", 538 ], [ 21309, "doc/main.xml", 539 ], [ 21310, "doc/main.xml", 540 ], [ 21380, "doc/main.xml", 541 ], [ 21381, "doc/main.xml", 542 ], [ 21394, "doc/main.xml", 543 ], [ 21424, "doc/main.xml", 544 ], [ 21446, "doc/main.xml", 545 ], [ 21447, "doc/main.xml", 546 ], [ 21461, "doc/main.xml", 547 ], [ 21532, "doc/main.xml", 548 ], [ 21565, "doc/main.xml", 549 ], [ 21566, "doc/main.xml", 550 ], [ 21637, "doc/main.xml", 551 ], [ 21708, "doc/main.xml", 552 ], [ 21779, "doc/main.xml", 553 ], [ 21850, "doc/main.xml", 554 ], [ 21878, "doc/main.xml", 555 ], [ 21879, "doc/main.xml", 556 ], [ 21950, "doc/main.xml", 557 ], [ 21951, "doc/main.xml", 558 ], [ 22010, "doc/main.xml", 559 ], [ 22025, "doc/main.xml", 560 ], [ 22039, "doc/main.xml", 561 ], [ 22040, "doc/main.xml", 562 ], [ 22110, "doc/main.xml", 563 ], [ 22111, "doc/main.xml", 564 ], [ 22124, "doc/main.xml", 565 ], [ 22157, "doc/main.xml", 566 ], [ 22176, "doc/main.xml", 567 ], [ 22177, "doc/main.xml", 568 ], [ 22191, "doc/main.xml", 569 ], [ 22262, "doc/main.xml", 570 ], [ 22333, "doc/main.xml", 571 ], [ 22403, "doc/main.xml", 572 ], [ 22418, "doc/main.xml", 573 ], [ 22432, "doc/main.xml", 574 ], [ 22433, "doc/main.xml", 575 ], [ 22503, "doc/main.xml", 576 ], [ 22504, "doc/main.xml", 577 ], [ 22517, "doc/main.xml", 578 ], [ 22546, "doc/main.xml", 579 ], [ 22571, "doc/main.xml", 580 ], [ 22572, "doc/main.xml", 581 ], [ 22586, "doc/main.xml", 582 ], [ 22657, "doc/main.xml", 583 ], [ 22728, "doc/main.xml", 584 ], [ 22799, "doc/main.xml", 585 ], [ 22810, "doc/main.xml", 586 ], [ 22811, "doc/main.xml", 587 ], [ 22884, "doc/main.xml", 588 ], [ 22957, "doc/main.xml", 589 ], [ 23001, "doc/main.xml", 590 ], [ 23017, "doc/main.xml", 591 ], [ 23031, "doc/main.xml", 592 ], [ 23032, "doc/main.xml", 593 ], [ 23102, "doc/main.xml", 594 ], [ 23103, "doc/main.xml", 595 ], [ 23116, "doc/main.xml", 596 ], [ 23137, "doc/main.xml", 597 ], [ 23158, "doc/main.xml", 598 ], [ 23159, "doc/main.xml", 599 ], [ 23173, "doc/main.xml", 600 ], [ 23244, "doc/main.xml", 601 ], [ 23315, "doc/main.xml", 602 ], [ 23386, "doc/main.xml", 603 ], [ 23435, "doc/main.xml", 604 ], [ 23436, "doc/main.xml", 605 ], [ 23507, "doc/main.xml", 606 ], [ 23578, "doc/main.xml", 607 ], [ 23649, "doc/main.xml", 608 ], [ 23719, "doc/main.xml", 609 ], [ 23763, "doc/main.xml", 610 ], [ 23764, "doc/main.xml", 611 ], [ 23835, "doc/main.xml", 612 ], [ 23906, "doc/main.xml", 613 ], [ 23954, "doc/main.xml", 614 ], [ 23955, "doc/main.xml", 615 ], [ 23965, "doc/main.xml", 616 ], [ 24003, "doc/main.xml", 617 ], [ 24074, "doc/main.xml", 618 ], [ 24079, "doc/main.xml", 619 ], [ 24101, "doc/main.xml", 620 ], [ 24105, "doc/main.xml", 621 ], [ 24137, "doc/main.xml", 622 ], [ 24180, "doc/main.xml", 623 ], [ 24191, "doc/main.xml", 624 ], [ 24206, "doc/main.xml", 625 ], [ 24220, "doc/main.xml", 626 ], [ 24221, "doc/main.xml", 627 ], [ 24232, "doc/main.xml", 628 ], [ 24233, "doc/main.xml", 629 ], [ 24303, "doc/main.xml", 630 ], [ 24304, "doc/main.xml", 631 ], [ 24340, "doc/main.xml", 632 ], [ 24389, "doc/main.xml", 633 ], [ 24390, "doc/main.xml", 634 ], [ 24391, "doc/main.xml", 635 ], [ 24462, "doc/main.xml", 636 ], [ 24533, "doc/main.xml", 637 ], [ 24606, "doc/main.xml", 638 ], [ 24677, "doc/main.xml", 639 ], [ 24688, "doc/main.xml", 640 ], [ 24689, "doc/main.xml", 641 ], [ 24760, "doc/main.xml", 642 ], [ 24831, "doc/main.xml", 643 ], [ 24845, "doc/main.xml", 644 ], [ 24846, "doc/main.xml", 645 ], [ 24917, "doc/main.xml", 646 ], [ 24988, "doc/main.xml", 647 ], [ 25059, "doc/main.xml", 648 ], [ 25130, "doc/main.xml", 649 ], [ 25201, "doc/main.xml", 650 ], [ 25248, "doc/main.xml", 651 ], [ 25249, "doc/main.xml", 652 ], [ 25320, "doc/main.xml", 653 ], [ 25391, "doc/main.xml", 654 ], [ 25462, "doc/main.xml", 655 ], [ 25533, "doc/main.xml", 656 ], [ 25604, "doc/main.xml", 657 ], [ 25675, "doc/main.xml", 658 ], [ 25735, "doc/main.xml", 659 ], [ 25736, "doc/main.xml", 660 ], [ 25807, "doc/main.xml", 661 ], [ 25878, "doc/main.xml", 662 ], [ 25949, "doc/main.xml", 663 ], [ 26014, "doc/main.xml", 664 ], [ 26025, "doc/main.xml", 665 ], [ 26026, "doc/main.xml", 666 ], [ 26097, "doc/main.xml", 667 ], [ 26168, "doc/main.xml", 668 ], [ 26239, "doc/main.xml", 669 ], [ 26310, "doc/main.xml", 670 ], [ 26381, "doc/main.xml", 671 ], [ 26452, "doc/main.xml", 672 ], [ 26472, "doc/main.xml", 673 ], [ 26473, "doc/main.xml", 674 ], [ 26544, "doc/main.xml", 675 ], [ 26615, "doc/main.xml", 676 ], [ 26686, "doc/main.xml", 677 ], [ 26757, "doc/main.xml", 678 ], [ 26828, "doc/main.xml", 679 ], [ 26842, "doc/main.xml", 680 ], [ 26843, "doc/main.xml", 681 ], [ 26914, "doc/main.xml", 682 ], [ 26985, "doc/main.xml", 683 ], [ 27056, "doc/main.xml", 684 ], [ 27127, "doc/main.xml", 685 ], [ 27198, "doc/main.xml", 686 ], [ 27255, "doc/main.xml", 687 ], [ 27256, "doc/main.xml", 688 ], [ 27327, "doc/main.xml", 689 ], [ 27398, "doc/main.xml", 690 ], [ 27469, "doc/main.xml", 691 ], [ 27512, "doc/main.xml", 692 ], [ 27513, "doc/main.xml", 693 ], [ 27584, "doc/main.xml", 694 ], [ 27655, "doc/main.xml", 695 ], [ 27726, "doc/main.xml", 696 ], [ 27797, "doc/main.xml", 697 ], [ 27868, "doc/main.xml", 698 ], [ 27939, "doc/main.xml", 699 ], [ 28010, "doc/main.xml", 700 ], [ 28025, "doc/main.xml", 701 ], [ 28026, "doc/main.xml", 702 ], [ 28097, "doc/main.xml", 703 ], [ 28168, "doc/main.xml", 704 ], [ 28239, "doc/main.xml", 705 ], [ 28310, "doc/main.xml", 706 ], [ 28381, "doc/main.xml", 707 ], [ 28452, "doc/main.xml", 708 ], [ 28523, "doc/main.xml", 709 ], [ 28594, "doc/main.xml", 710 ], [ 28665, "doc/main.xml", 711 ], [ 28699, "doc/main.xml", 712 ], [ 28700, "doc/main.xml", 713 ], [ 28738, "doc/main.xml", 714 ], [ 28780, "doc/main.xml", 715 ], [ 28781, "doc/main.xml", 716 ], [ 28854, "doc/main.xml", 717 ], [ 28896, "doc/main.xml", 718 ], [ 28897, "doc/main.xml", 719 ], [ 28904, "doc/main.xml", 720 ], [ 28977, "doc/main.xml", 721 ], [ 29003, "doc/main.xml", 722 ], [ 29076, "doc/main.xml", 723 ], [ 29149, "doc/main.xml", 724 ], [ 29222, "doc/main.xml", 725 ], [ 29295, "doc/main.xml", 726 ], [ 29362, "doc/main.xml", 727 ], [ 29435, "doc/main.xml", 728 ], [ 29468, "doc/main.xml", 729 ], [ 29541, "doc/main.xml", 730 ], [ 29614, "doc/main.xml", 731 ], [ 29633, "doc/main.xml", 732 ], [ 29641, "doc/main.xml", 733 ], [ 29642, "doc/main.xml", 734 ], [ 29715, "doc/main.xml", 735 ], [ 29788, "doc/main.xml", 736 ], [ 29861, "doc/main.xml", 737 ], [ 29934, "doc/main.xml", 738 ], [ 29947, "doc/main.xml", 739 ], [ 29948, "doc/main.xml", 740 ], [ 29962, "doc/main.xml", 741 ], [ 29963, "doc/main.xml", 742 ], [ 29974, "doc/main.xml", 743 ], [ 29975, "doc/main.xml", 744 ], [ 29986, "doc/main.xml", 745 ], [ 29987, "doc/edim.xml", 50 ], [ 29988, "doc/edim.xml", 51 ], [ 29996, "doc/edim.xml", 52 ], [ 29997, "doc/edim.xml", 53 ], [ 30031, "doc/edim.xml", 54 ], [ 30064, "doc/edim.xml", 55 ], [ 30065, "doc/edim.xml", 56 ], [ 30106, "doc/edim.xml", 57 ], [ 30118, "doc/edim.xml", 58 ], [ 30119, "doc/edim.xml", 59 ], [ 30127, "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 := 30144, 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 ], 35, 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 ], 63, 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 ], 155, 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 ], 225, 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 ], 302, 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 ], 383, 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 ], 459, 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 ], 522, 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 ], 55, 5, "infoedim", "X7AF83FEC7CD0311C" ], [ "\033[2XElementaryDivisorsPPartRk\033[102X", "1.2-1", [ 1, 2, 1 ], 68, 5, "elementarydivisorsppartrk", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkI\033[102X", "1.2-1", [ 1, 2, 1 ], 68, 5, "elementarydivisorsppartrki", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkII\033[102X", "1.2-1", [ 1, 2, 1 ], 68, 5, "elementarydivisorsppartrkii", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkExp\033[102X", "1.2-1", [ 1, 2, 1 ], 68, 5, "elementarydivisorsppartrkexp", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartRkExpSmall\033[102X", "1.2-1", [ 1, 2, 1 ], 68, 5, "elementarydivisorsppartrkexpsmall", "X813B0D73868CD751" ], [ "\033[2XElementaryDivisorsPPartHavasSterling\033[102X", "1.2-2", [ 1, 2, 2 ], 127, 6, "elementarydivisorspparthavassterling", "X82EC4724865F4DF9" ], [ "\033[2XInverseRatMat\033[102X", "1.3-1", [ 1, 3, 1 ], 158, 6, "inverseratmat", "X7A9656D47C4D2D16" ], [ "\033[2XRationalSolutionIntMat\033[102X", "1.3-2", [ 1, 3, 2 ], 177, 6, "rationalsolutionintmat", "X8302B31E86B3AFDB" ], [ "\033[2XExponentSquareIntMatFullRank\033[102X", "1.3-3", [ 1, 3, 3 ], 193, 7, "exponentsquareintmatfullrank", "X86DA61D978D2D889" ], [ "\033[2XElementaryDivisorsSquareIntMatFullRank\033[102X", "1.4-1", [ 1, 4, 1 ], 233, 7, "elementarydivisorssquareintmatfullrank", "X7B6A3B8486872B0C" ], [ "\033[2XElementaryDivisorsIntMatDeterminant\033[102X", "1.4-2", [ 1, 4, 2 ], 272, 8, "elementarydivisorsintmatdeterminant", "X821E30477A5DCE68" ], [ "\033[2XGcdexIntLLL\033[102X", "1.5-1", [ 1, 5, 1 ], 318, 9, "gcdexintlll", "X799B1A5285D00859" ], [ "\033[2XHermiteIntMatLLL\033[102X", "1.5-2", [ 1, 5, 2 ], 331, 9, "hermiteintmatlll", "X7C6AE6777B72F9D2" ], [ "\033[2XHermiteIntMatLLLTrans\033[102X", "1.5-3", [ 1, 5, 3 ], 338, 9, "hermiteintmatllltrans", "X862962B7878A284F" ], [ "\033[2XSmithIntMatLLL\033[102X", "1.5-4", [ 1, 5, 4 ], 356, 9, "smithintmatlll", "X8626F15179C09798" ], [ "\033[2XSmithIntMatLLLTrans\033[102X", "1.5-5", [ 1, 5, 5 ], 363, 9, "smithintmatllltrans", "X86094B1B7C87EBF6" ], [ "\033[2XRatNumberFromModular\033[102X", "1.6-1", [ 1, 6, 1 ], 386, 10, "ratnumberfrommodular", "X7EC844F97C469C03" ], [ "\033[2XInverseIntMatMod\033[102X", "1.6-2", [ 1, 6, 2 ], 398, 10, "inverseintmatmod", "X78518E1D81435762" ], [ "\033[2XHadamardBoundIntMat\033[102X", "1.6-3", [ 1, 6, 3 ], 412, 10, "hadamardboundintmat", "X7CDF3D2081207080" ], [ "\033[2XCheapFactorsInt\033[102X", "1.6-4", [ 1, 6, 4 ], 420, 10, "cheapfactorsint", "X7BAB977C7EB05067" ], [ "\033[2XRankMod\033[102X", "1.6-5", [ 1, 6, 5 ], 432, 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 := 30143, 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> ───────────────────────────────────────────────────────────────────────────── Loading EDIM 1.3.5 (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.5/../pkg/EDIM-1.3.5/doc/manual.lab written. gap> gap> + rm -fr ../../doc ../pkg + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.gsSmvF + umask 022 + cd /builddir/build/BUILD + '[' /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 '!=' / ']' + rm -rf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 ++ dirname /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 + mkdir -p /builddir/build/BUILDROOT + mkdir /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 + cd EDIM-1.3.5 + mkdir -p /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/bin/i686-redhat-linux-gnu-default32-kv7 + cp -p bin/i686-redhat-linux-gnu-default32-kv7/.libs/ediv.so /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/bin/i686-redhat-linux-gnu-default32-kv7 + cp -a doc lib tst VERSION PackageInfo.g init.g makedocrel.g read.g /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5 + rm -f /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/clean + rm -f /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.aux /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.bbl /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.blg /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.brf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.idx /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.ilg /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.ind /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.log /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.out /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/doc/edim.pnr + /usr/lib/rpm/find-debuginfo.sh -j48 --strict-build-id -m -i --build-id-seed 1.3.5-4.fc32 --unique-debug-suffix -1.3.5-4.fc32.i386 --unique-debug-src-base gap-pkg-edim-1.3.5-4.fc32.i386 --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 50000000 -S debugsourcefiles.list /builddir/build/BUILD/EDIM-1.3.5 explicitly decompress any DWARF compressed ELF sections in /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/bin/i686-redhat-linux-gnu-default32-kv7/ediv.so extracting debug info from /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap/pkg/EDIM-1.3.5/bin/i686-redhat-linux-gnu-default32-kv7/ediv.so Exception caught while booting Guile. /usr/bin/gdb.minimal: warning: Could not complete Guile gdb module initialization from: /usr/share/gdb/guile/gdb/boot.scm. Limited Guile support is available. Suggest passing --data-directory=/path/to/gdb/data-directory. Error in function "open-file": No such file or directory: "/usr/share/gdb/guile/gdb/boot.scm"original debug info size: 76kB, size after compression: 76kB /usr/lib/rpm/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match. 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 Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.84N7xG + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.5 + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + gap -q -l '/builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/lib/gap;/usr/lib/gap' + tee log #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. 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 true true + grep -Fq false log + rm -f log + RPM_EC=0 ++ jobs -p + exit 0 Processing files: gap-pkg-edim-1.3.5-4.fc32.i686 Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.9KrzwG + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.5 + DOCDIR=/builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/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.5-4.fc32.i386/usr/share/doc/gap-pkg-edim + cp -pr CHANGES /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/share/doc/gap-pkg-edim + cp -pr README /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/share/doc/gap-pkg-edim + cp -pr TODO /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/share/doc/gap-pkg-edim + RPM_EC=0 ++ jobs -p + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.RG5avG + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.5 + LICENSEDIR=/builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/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.5-4.fc32.i386/usr/share/licenses/gap-pkg-edim + cp -pr GPL /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386/usr/share/licenses/gap-pkg-edim + RPM_EC=0 ++ jobs -p + exit 0 Provides: gap-pkg-edim = 1.3.5-4.fc32 gap-pkg-edim(x86-32) = 1.3.5-4.fc32 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.3.4) rtld(GNU_HASH) Processing files: gap-pkg-edim-doc-1.3.5-4.fc32.noarch Provides: gap-pkg-edim-doc = 1.3.5-4.fc32 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.5-4.fc32.i686 Provides: gap-pkg-edim-debugsource = 1.3.5-4.fc32 gap-pkg-edim-debugsource(x86-32) = 1.3.5-4.fc32 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.5-4.fc32.i686 Provides: debuginfo(build-id) = 343b79e85f1e0b5e01225a580b6406ca7ea98bb9 gap-pkg-edim-debuginfo = 1.3.5-4.fc32 gap-pkg-edim-debuginfo(x86-32) = 1.3.5-4.fc32 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Recommends: gap-pkg-edim-debugsource(x86-32) = 1.3.5-4.fc32 Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 Wrote: /builddir/build/RPMS/gap-pkg-edim-debugsource-1.3.5-4.fc32.i686.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-debuginfo-1.3.5-4.fc32.i686.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-1.3.5-4.fc32.i686.rpm Wrote: /builddir/build/RPMS/gap-pkg-edim-doc-1.3.5-4.fc32.noarch.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.93ZMHH + umask 022 + cd /builddir/build/BUILD + cd EDIM-1.3.5 + /usr/bin/rm -rf /builddir/build/BUILDROOT/gap-pkg-edim-1.3.5-4.fc32.i386 + RPM_EC=0 ++ jobs -p + exit 0 Child return code was: 0