aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/si.spad.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/si.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/si.spad.pamphlet')
-rw-r--r--src/algebra/si.spad.pamphlet1557
1 files changed, 1557 insertions, 0 deletions
diff --git a/src/algebra/si.spad.pamphlet b/src/algebra/si.spad.pamphlet
new file mode 100644
index 00000000..b7be18aa
--- /dev/null
+++ b/src/algebra/si.spad.pamphlet
@@ -0,0 +1,1557 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra si.spad}
+\author{Stephen M. Watt, Michael Monagan, James Davenport, Barry Trager}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{category INS IntegerNumberSystem}
+<<category INS IntegerNumberSystem>>=
+)abbrev category INS IntegerNumberSystem
+++ Author: Stephen M. Watt
+++ Date Created:
+++ January 1988
+++ Change History:
+++ Basic Operations:
+++ addmod, base, bit?, copy, dec, even?, hash, inc, invmod, length, mask,
+++ positiveRemainder, symmetricRemainder, multiplicativeValuation, mulmod,
+++ odd?, powmod, random, rational, rational?, rationalIfCan, shift, submod
+++ Description: An \spad{IntegerNumberSystem} is a model for the integers.
+IntegerNumberSystem(): Category ==
+ Join(UniqueFactorizationDomain, EuclideanDomain, OrderedIntegralDomain,
+ DifferentialRing, ConvertibleTo Integer, RetractableTo Integer,
+ LinearlyExplicitRingOver Integer, ConvertibleTo InputForm,
+ ConvertibleTo Pattern Integer, PatternMatchable Integer,
+ CombinatorialFunctionCategory, RealConstant,
+ CharacteristicZero, StepThrough) with
+ odd? : % -> Boolean
+ ++ odd?(n) returns true if and only if n is odd.
+ even? : % -> Boolean
+ ++ even?(n) returns true if and only if n is even.
+ multiplicativeValuation
+ ++ euclideanSize(a*b) returns \spad{euclideanSize(a)*euclideanSize(b)}.
+ base : () -> %
+ ++ base() returns the base for the operations of \spad{IntegerNumberSystem}.
+ length : % -> %
+ ++ length(a) length of \spad{a} in digits.
+ shift : (%, %) -> %
+ ++ shift(a,i) shift \spad{a} by i digits.
+ bit? : (%, %) -> Boolean
+ ++ bit?(n,i) returns true if and only if i-th bit of n is a 1.
+ positiveRemainder : (%, %) -> %
+ ++ positiveRemainder(a,b) (where \spad{b > 1}) yields r
+ ++ where \spad{0 <= r < b} and \spad{r == a rem b}.
+ symmetricRemainder : (%, %) -> %
+ ++ symmetricRemainder(a,b) (where \spad{b > 1}) yields r
+ ++ where \spad{ -b/2 <= r < b/2 }.
+ rational?: % -> Boolean
+ ++ rational?(n) tests if n is a rational number
+ ++ (see \spadtype{Fraction Integer}).
+ rational : % -> Fraction Integer
+ ++ rational(n) creates a rational number (see \spadtype{Fraction Integer})..
+ rationalIfCan: % -> Union(Fraction Integer, "failed")
+ ++ rationalIfCan(n) creates a rational number, or returns "failed" if this is not possible.
+ random : () -> %
+ ++ random() creates a random element.
+ random : % -> %
+ ++ random(a) creates a random element from 0 to \spad{n-1}.
+ hash : % -> %
+ ++ hash(n) returns the hash code of n.
+ copy : % -> %
+ ++ copy(n) gives a copy of n.
+ inc : % -> %
+ ++ inc(x) returns \spad{x + 1}.
+ dec : % -> %
+ ++ dec(x) returns \spad{x - 1}.
+ mask : % -> %
+ ++ mask(n) returns \spad{2**n-1} (an n bit mask).
+ addmod : (%,%,%) -> %
+ ++ addmod(a,b,p), \spad{0<=a,b<p>1}, means \spad{a+b mod p}.
+ submod : (%,%,%) -> %
+ ++ submod(a,b,p), \spad{0<=a,b<p>1}, means \spad{a-b mod p}.
+ mulmod : (%,%,%) -> %
+ ++ mulmod(a,b,p), \spad{0<=a,b<p>1}, means \spad{a*b mod p}.
+ powmod : (%,%,%) -> %
+ ++ powmod(a,b,p), \spad{0<=a,b<p>1}, means \spad{a**b mod p}.
+ invmod : (%,%) -> %
+ ++ invmod(a,b), \spad{0<=a<b>1}, \spad{(a,b)=1} means \spad{1/a mod b}.
+ canonicalUnitNormal
+-- commutative("*") -- follows from the above
+
+ add
+ characteristic() == 0
+ differentiate x == 0
+ even? x == not odd? x
+ positive? x == x > 0
+ copy x == x
+ bit?(x, i) == odd? shift(x, -i)
+ mask n == dec shift(1, n)
+ rational? x == true
+ euclideanSize(x) ==
+ x=0 => error "euclideanSize called on zero"
+ x<0 => (-convert(x)@Integer)::NonNegativeInteger
+ convert(x)@Integer::NonNegativeInteger
+ convert(x:%):Float == (convert(x)@Integer)::Float
+ convert(x:%):DoubleFloat == (convert(x)@Integer)::DoubleFloat
+ convert(x:%):InputForm == convert(convert(x)@Integer)
+ retract(x:%):Integer == convert(x)@Integer
+ convert(x:%):Pattern(Integer)== convert(x)@Integer ::Pattern(Integer)
+ factor x == factor(x)$IntegerFactorizationPackage(%)
+ squareFree x == squareFree(x)$IntegerFactorizationPackage(%)
+ prime? x == prime?(x)$IntegerPrimesPackage(%)
+ factorial x == factorial(x)$IntegerCombinatoricFunctions(%)
+ binomial(n, m) == binomial(n, m)$IntegerCombinatoricFunctions(%)
+ permutation(n, m) == permutation(n,m)$IntegerCombinatoricFunctions(%)
+ retractIfCan(x:%):Union(Integer, "failed") == convert(x)@Integer
+
+ init() == 0
+
+ -- iterates in order 0,1,-1,2,-2,3,-3,...
+ nextItem(n) ==
+ zero? n => 1
+ n>0 => -n
+ 1-n
+
+ patternMatch(x, p, l) ==
+ patternMatch(x, p, l)$PatternMatchIntegerNumberSystem(%)
+
+ rational(x:%):Fraction(Integer) ==
+ (convert(x)@Integer)::Fraction(Integer)
+
+ rationalIfCan(x:%):Union(Fraction Integer, "failed") ==
+ (convert(x)@Integer)::Fraction(Integer)
+
+ symmetricRemainder(x, n) ==
+ r := x rem n
+ r = 0 => r
+ if n < 0 then n:=-n
+ r > 0 =>
+ 2 * r > n => r - n
+ r
+ 2*r + n <= 0 => r + n
+ r
+
+ invmod(a, b) ==
+ if negative? a then a := positiveRemainder(a, b)
+ c := a; c1:% := 1
+ d := b; d1:% := 0
+ while not zero? d repeat
+ q := c quo d
+ r := c-q*d
+ r1 := c1-q*d1
+ c := d; c1 := d1
+ d := r; d1 := r1
+-- not one? c => error "inverse does not exist"
+ not (c = 1) => error "inverse does not exist"
+ negative? c1 => c1 + b
+ c1
+
+ powmod(x, n, p) ==
+ if negative? x then x := positiveRemainder(x, p)
+ zero? x => 0
+ zero? n => 1
+ y:% := 1
+ z := x
+ repeat
+ if odd? n then y := mulmod(y, z, p)
+ zero?(n := shift(n, -1)) => return y
+ z := mulmod(z, z, p)
+
+@
+\section{INS.lsp BOOTSTRAP}
+{\bf INS} depends on itself. We need to break this cycle to build
+the algebra. So we keep a cached copy of the translated {\bf INS}
+category which we can write into the {\bf MID} directory. We compile
+the lisp code and copy the {\bf INS.o} file to the {\bf OUT} directory.
+This is eventually forcibly replaced by a recompiled version.
+<<INS.lsp BOOTSTRAP>>=
+
+(/VERSIONCHECK 2)
+
+(SETQ |IntegerNumberSystem;AL| (QUOTE NIL))
+
+(DEFUN |IntegerNumberSystem| NIL
+ (LET (#:G1068)
+ (COND
+ (|IntegerNumberSystem;AL|)
+ (T (SETQ |IntegerNumberSystem;AL| (|IntegerNumberSystem;|))))))
+
+(DEFUN |IntegerNumberSystem;| NIL (PROG (#0=#:G1066)
+ (RETURN
+ (PROG1
+ (LETT #0#
+ (|sublisV|
+ (PAIR
+ (QUOTE (#1=#:G1060 #2=#:G1061 #3=#:G1062
+ #4=#:G1063 #5=#:G1064 #6=#:G1065))
+ (LIST
+ (QUOTE (|Integer|))
+ (QUOTE (|Integer|))
+ (QUOTE (|Integer|))
+ (QUOTE (|InputForm|))
+ (QUOTE (|Pattern| (|Integer|)))
+ (QUOTE (|Integer|))))
+ (|Join|
+ (|UniqueFactorizationDomain|)
+ (|EuclideanDomain|)
+ (|OrderedIntegralDomain|)
+ (|DifferentialRing|)
+ (|ConvertibleTo| (QUOTE #1#))
+ (|RetractableTo| (QUOTE #2#))
+ (|LinearlyExplicitRingOver| (QUOTE #3#))
+ (|ConvertibleTo| (QUOTE #4#))
+ (|ConvertibleTo| (QUOTE #5#))
+ (|PatternMatchable| (QUOTE #6#))
+ (|CombinatorialFunctionCategory|)
+ (|RealConstant|)
+ (|CharacteristicZero|)
+ (|StepThrough|)
+ (|mkCategory|
+ (QUOTE |domain|)
+ (QUOTE (
+ ((|odd?| ((|Boolean|) $)) T)
+ ((|even?| ((|Boolean|) $)) T)
+ ((|base| ($)) T)
+ ((|length| ($ $)) T)
+ ((|shift| ($ $ $)) T)
+ ((|bit?| ((|Boolean|) $ $)) T)
+ ((|positiveRemainder| ($ $ $)) T)
+ ((|symmetricRemainder| ($ $ $)) T)
+ ((|rational?| ((|Boolean|) $)) T)
+ ((|rational| ((|Fraction| (|Integer|)) $)) T)
+ ((|rationalIfCan|
+ ((|Union| (|Fraction| (|Integer|)) "failed") $)) T)
+ ((|random| ($)) T)
+ ((|random| ($ $)) T)
+ ((|hash| ($ $)) T)
+ ((|copy| ($ $)) T)
+ ((|inc| ($ $)) T)
+ ((|dec| ($ $)) T)
+ ((|mask| ($ $)) T)
+ ((|addmod| ($ $ $ $)) T)
+ ((|submod| ($ $ $ $)) T)
+ ((|mulmod| ($ $ $ $)) T)
+ ((|powmod| ($ $ $ $)) T)
+ ((|invmod| ($ $ $)) T)))
+ (QUOTE ((|multiplicativeValuation| T) (|canonicalUnitNormal| T)))
+ (QUOTE ((|Fraction| (|Integer|)) (|Boolean|))) NIL)))
+ |IntegerNumberSystem|)
+ (SETELT #0# 0 (QUOTE (|IntegerNumberSystem|)))))))
+
+(MAKEPROP (QUOTE |IntegerNumberSystem|) (QUOTE NILADIC) T)
+
+@
+\section{INS-.lsp BOOTSTRAP}
+{\bf INS-} depends on {\bf INS}. We need to break this cycle to build
+the algebra. So we keep a cached copy of the translated {\bf INS-}
+category which we can write into the {\bf MID} directory. We compile
+the lisp code and copy the {\bf INS-.o} file to the {\bf OUT} directory.
+This is eventually forcibly replaced by a recompiled version.
+<<INS-.lsp BOOTSTRAP>>=
+
+(/VERSIONCHECK 2)
+
+(PUT
+ (QUOTE |INS-;characteristic;Nni;1|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL 0)))
+
+(DEFUN |INS-;characteristic;Nni;1| ($) 0)
+
+(DEFUN |INS-;differentiate;2S;2| (|x| $)
+ (|spadConstant| $ 9))
+
+(DEFUN |INS-;even?;SB;3| (|x| $)
+ (COND
+ ((SPADCALL |x| (QREFELT $ 12)) (QUOTE NIL))
+ ((QUOTE T) (QUOTE T))))
+
+(DEFUN |INS-;positive?;SB;4| (|x| $)
+ (SPADCALL (|spadConstant| $ 9) |x| (QREFELT $ 14)))
+
+(PUT
+ (QUOTE |INS-;copy;2S;5|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM (|x|) |x|)))
+
+(DEFUN |INS-;copy;2S;5| (|x| $) |x|)
+
+(DEFUN |INS-;bit?;2SB;6| (|x| |i| $)
+ (SPADCALL
+ (SPADCALL |x|
+ (SPADCALL |i| (QREFELT $ 17))
+ (QREFELT $ 18))
+ (QREFELT $ 12)))
+
+(DEFUN |INS-;mask;2S;7| (|n| $)
+ (SPADCALL
+ (SPADCALL (|spadConstant| $ 20) |n| (QREFELT $ 18))
+ (QREFELT $ 21)))
+
+(PUT
+ (QUOTE |INS-;rational?;SB;8|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM (|x|) (QUOTE T))))
+
+(DEFUN |INS-;rational?;SB;8| (|x| $)
+ (QUOTE T))
+
+(DEFUN |INS-;euclideanSize;SNni;9| (|x| $)
+ (PROG (#0=#:G1078 #1=#:G1079)
+ (RETURN
+ (COND
+ ((SPADCALL |x| (|spadConstant| $ 9) (QREFELT $ 24))
+ (|error| "euclideanSize called on zero"))
+ ((SPADCALL |x| (|spadConstant| $ 9) (QREFELT $ 14))
+ (PROG1
+ (LETT #0#
+ (- (SPADCALL |x| (QREFELT $ 26)))
+ |INS-;euclideanSize;SNni;9|)
+ (|check-subtype|
+ (>= #0# 0)
+ (QUOTE (|NonNegativeInteger|))
+ #0#)))
+ ((QUOTE T)
+ (PROG1
+ (LETT #1#
+ (SPADCALL |x| (QREFELT $ 26))
+ |INS-;euclideanSize;SNni;9|)
+ (|check-subtype|
+ (>= #1# 0)
+ (QUOTE (|NonNegativeInteger|))
+ #1#)))))))
+
+(DEFUN |INS-;convert;SF;10| (|x| $)
+ (SPADCALL (SPADCALL |x| (QREFELT $ 26)) (QREFELT $ 29)))
+
+(DEFUN |INS-;convert;SDf;11| (|x| $)
+ (FLOAT (SPADCALL |x| (QREFELT $ 26)) MOST-POSITIVE-LONG-FLOAT))
+
+(DEFUN |INS-;convert;SIf;12| (|x| $)
+ (SPADCALL (SPADCALL |x| (QREFELT $ 26)) (QREFELT $ 34)))
+
+(DEFUN |INS-;retract;SI;13| (|x| $)
+ (SPADCALL |x| (QREFELT $ 26)))
+
+(DEFUN |INS-;convert;SP;14| (|x| $)
+ (SPADCALL (SPADCALL |x| (QREFELT $ 26)) (QREFELT $ 38)))
+
+(DEFUN |INS-;factor;SF;15| (|x| $)
+ (SPADCALL |x| (QREFELT $ 42)))
+
+(DEFUN |INS-;squareFree;SF;16| (|x| $)
+ (SPADCALL |x| (QREFELT $ 45)))
+
+(DEFUN |INS-;prime?;SB;17| (|x| $)
+ (SPADCALL |x| (QREFELT $ 48)))
+
+(DEFUN |INS-;factorial;2S;18| (|x| $)
+ (SPADCALL |x| (QREFELT $ 51)))
+
+(DEFUN |INS-;binomial;3S;19| (|n| |m| $)
+ (SPADCALL |n| |m| (QREFELT $ 53)))
+
+(DEFUN |INS-;permutation;3S;20| (|n| |m| $)
+ (SPADCALL |n| |m| (QREFELT $ 55)))
+
+(DEFUN |INS-;retractIfCan;SU;21| (|x| $)
+ (CONS 0 (SPADCALL |x| (QREFELT $ 26))))
+
+(DEFUN |INS-;init;S;22| ($)
+ (|spadConstant| $ 9))
+
+(DEFUN |INS-;nextItem;SU;23| (|n| $)
+ (COND
+ ((SPADCALL |n| (QREFELT $ 60))
+ (CONS 0 (|spadConstant| $ 20)))
+ ((SPADCALL (|spadConstant| $ 9) |n| (QREFELT $ 14))
+ (CONS 0 (SPADCALL |n| (QREFELT $ 17))))
+ ((QUOTE T)
+ (CONS 0 (SPADCALL (|spadConstant| $ 20) |n| (QREFELT $ 61))))))
+
+(DEFUN |INS-;patternMatch;SP2Pmr;24| (|x| |p| |l| $)
+ (SPADCALL |x| |p| |l| (QREFELT $ 66)))
+
+(DEFUN |INS-;rational;SF;25| (|x| $)
+ (SPADCALL (SPADCALL |x| (QREFELT $ 26)) (QREFELT $ 70)))
+
+(DEFUN |INS-;rationalIfCan;SU;26| (|x| $)
+ (CONS 0 (SPADCALL (SPADCALL |x| (QREFELT $ 26)) (QREFELT $ 70))))
+
+(DEFUN |INS-;symmetricRemainder;3S;27| (|x| |n| $)
+ (PROG (|r|)
+ (RETURN
+ (SEQ
+ (LETT |r|
+ (SPADCALL |x| |n| (QREFELT $ 74))
+ |INS-;symmetricRemainder;3S;27|)
+ (EXIT
+ (COND
+ ((SPADCALL |r| (|spadConstant| $ 9) (QREFELT $ 24)) |r|)
+ ((QUOTE T)
+ (SEQ
+ (COND
+ ((SPADCALL |n| (|spadConstant| $ 9) (QREFELT $ 14))
+ (LETT |n|
+ (SPADCALL |n| (QREFELT $ 17))
+ |INS-;symmetricRemainder;3S;27|)))
+ (EXIT
+ (COND
+ ((SPADCALL (|spadConstant| $ 9) |r| (QREFELT $ 14))
+ (COND
+ ((SPADCALL |n|
+ (SPADCALL 2 |r| (QREFELT $ 76))
+ (QREFELT $ 14))
+ (SPADCALL |r| |n| (QREFELT $ 61)))
+ ((QUOTE T) |r|)))
+ ((NULL
+ (SPADCALL
+ (|spadConstant| $ 9)
+ (SPADCALL
+ (SPADCALL 2 |r| (QREFELT $ 76))
+ |n|
+ (QREFELT $ 77))
+ (QREFELT $ 14)))
+ (SPADCALL |r| |n| (QREFELT $ 77)))
+ ((QUOTE T) |r|)))))))))))
+
+(DEFUN |INS-;invmod;3S;28| (|a| |b| $)
+ (PROG (|q| |r| |r1| |c| |c1| |d| |d1|)
+ (RETURN
+ (SEQ
+ (COND
+ ((SPADCALL |a| (QREFELT $ 79))
+ (LETT |a| (SPADCALL |a| |b| (QREFELT $ 80)) |INS-;invmod;3S;28|)))
+ (LETT |c| |a| |INS-;invmod;3S;28|)
+ (LETT |c1| (|spadConstant| $ 20) |INS-;invmod;3S;28|)
+ (LETT |d| |b| |INS-;invmod;3S;28|)
+ (LETT |d1| (|spadConstant| $ 9) |INS-;invmod;3S;28|)
+ (SEQ G190
+ (COND
+ ((NULL
+ (COND
+ ((SPADCALL |d| (QREFELT $ 60)) (QUOTE NIL))
+ ((QUOTE T) (QUOTE T))))
+ (GO G191)))
+ (SEQ
+ (LETT |q| (SPADCALL |c| |d| (QREFELT $ 81)) |INS-;invmod;3S;28|)
+ (LETT |r|
+ (SPADCALL |c| (SPADCALL |q| |d| (QREFELT $ 82)) (QREFELT $ 61))
+ |INS-;invmod;3S;28|)
+ (LETT |r1|
+ (SPADCALL |c1| (SPADCALL |q| |d1| (QREFELT $ 82)) (QREFELT $ 61))
+ |INS-;invmod;3S;28|)
+ (LETT |c| |d| |INS-;invmod;3S;28|)
+ (LETT |c1| |d1| |INS-;invmod;3S;28|)
+ (LETT |d| |r| |INS-;invmod;3S;28|)
+ (EXIT (LETT |d1| |r1| |INS-;invmod;3S;28|)))
+ NIL
+ (GO G190)
+ G191
+ (EXIT NIL))
+ (COND
+ ((NULL (SPADCALL |c| (QREFELT $ 83)))
+ (EXIT (|error| "inverse does not exist"))))
+ (EXIT
+ (COND
+ ((SPADCALL |c1| (QREFELT $ 79)) (SPADCALL |c1| |b| (QREFELT $ 77)))
+ ((QUOTE T) |c1|)))))))
+
+(DEFUN |INS-;powmod;4S;29| (|x| |n| |p| $)
+ (PROG (|y| #0=#:G1137 |z|)
+ (RETURN
+ (SEQ
+ (EXIT
+ (SEQ
+ (COND
+ ((SPADCALL |x| (QREFELT $ 79))
+ (LETT |x|
+ (SPADCALL |x| |p| (QREFELT $ 80))
+ |INS-;powmod;4S;29|)))
+ (EXIT
+ (COND
+ ((SPADCALL |x| (QREFELT $ 60)) (|spadConstant| $ 9))
+ ((SPADCALL |n| (QREFELT $ 60)) (|spadConstant| $ 20))
+ ((QUOTE T)
+ (SEQ
+ (LETT |y| (|spadConstant| $ 20) |INS-;powmod;4S;29|)
+ (LETT |z| |x| |INS-;powmod;4S;29|)
+ (EXIT
+ (SEQ G190
+ NIL
+ (SEQ
+ (COND
+ ((SPADCALL |n| (QREFELT $ 12))
+ (LETT |y|
+ (SPADCALL |y| |z| |p| (QREFELT $ 85))
+ |INS-;powmod;4S;29|)))
+ (EXIT
+ (COND
+ ((SPADCALL
+ (LETT |n|
+ (SPADCALL |n|
+ (SPADCALL
+ (|spadConstant| $ 20)
+ (QREFELT $ 17))
+ (QREFELT $ 18))
+ |INS-;powmod;4S;29|)
+ (QREFELT $ 60))
+ (PROGN
+ (LETT #0# |y| |INS-;powmod;4S;29|)
+ (GO #0#)))
+ ((QUOTE T)
+ (LETT |z|
+ (SPADCALL |z| |z| |p| (QREFELT $ 85))
+ |INS-;powmod;4S;29|)))))
+ NIL
+ (GO G190)
+ G191
+ (EXIT NIL)))))))))
+ #0#
+ (EXIT #0#)))))
+
+(DEFUN |IntegerNumberSystem&| (|#1|)
+ (PROG (DV$1 |dv$| $ |pv$|)
+ (RETURN
+ (PROGN
+ (LETT DV$1 (|devaluate| |#1|) . #0=(|IntegerNumberSystem&|))
+ (LETT |dv$| (LIST (QUOTE |IntegerNumberSystem&|) DV$1) . #0#)
+ (LETT $ (GETREFV 87) . #0#)
+ (QSETREFV $ 0 |dv$|)
+ (QSETREFV $ 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #0#))
+ (|stuffDomainSlots| $)
+ (QSETREFV $ 6 |#1|)
+ $))))
+
+(MAKEPROP
+ (QUOTE |IntegerNumberSystem&|)
+ (QUOTE |infovec|)
+ (LIST
+ (QUOTE
+ #(NIL NIL NIL NIL NIL NIL
+ (|local| |#1|)
+ (|NonNegativeInteger|)
+ |INS-;characteristic;Nni;1|
+ (0 . |Zero|)
+ |INS-;differentiate;2S;2|
+ (|Boolean|)
+ (4 . |odd?|)
+ |INS-;even?;SB;3|
+ (9 . <)
+ |INS-;positive?;SB;4|
+ |INS-;copy;2S;5|
+ (15 . -)
+ (20 . |shift|)
+ |INS-;bit?;2SB;6|
+ (26 . |One|)
+ (30 . |dec|)
+ |INS-;mask;2S;7|
+ |INS-;rational?;SB;8|
+ (35 . =)
+ (|Integer|)
+ (41 . |convert|)
+ |INS-;euclideanSize;SNni;9|
+ (|Float|)
+ (46 . |coerce|)
+ |INS-;convert;SF;10|
+ (|DoubleFloat|)
+ |INS-;convert;SDf;11|
+ (|InputForm|)
+ (51 . |convert|)
+ |INS-;convert;SIf;12|
+ |INS-;retract;SI;13|
+ (|Pattern| 25)
+ (56 . |coerce|)
+ |INS-;convert;SP;14|
+ (|Factored| 6)
+ (|IntegerFactorizationPackage| 6)
+ (61 . |factor|)
+ (|Factored| $)
+ |INS-;factor;SF;15|
+ (66 . |squareFree|)
+ |INS-;squareFree;SF;16|
+ (|IntegerPrimesPackage| 6)
+ (71 . |prime?|)
+ |INS-;prime?;SB;17|
+ (|IntegerCombinatoricFunctions| 6)
+ (76 . |factorial|)
+ |INS-;factorial;2S;18|
+ (81 . |binomial|)
+ |INS-;binomial;3S;19|
+ (87 . |permutation|)
+ |INS-;permutation;3S;20|
+ (|Union| 25 (QUOTE "failed"))
+ |INS-;retractIfCan;SU;21|
+ |INS-;init;S;22|
+ (93 . |zero?|)
+ (98 . -)
+ (|Union| $ (QUOTE "failed"))
+ |INS-;nextItem;SU;23|
+ (|PatternMatchResult| 25 6)
+ (|PatternMatchIntegerNumberSystem| 6)
+ (104 . |patternMatch|)
+ (|PatternMatchResult| 25 $)
+ |INS-;patternMatch;SP2Pmr;24|
+ (|Fraction| 25)
+ (111 . |coerce|)
+ |INS-;rational;SF;25|
+ (|Union| 69 (QUOTE "failed"))
+ |INS-;rationalIfCan;SU;26|
+ (116 . |rem|)
+ (|PositiveInteger|)
+ (122 . *)
+ (128 . +)
+ |INS-;symmetricRemainder;3S;27|
+ (134 . |negative?|)
+ (139 . |positiveRemainder|)
+ (145 . |quo|)
+ (151 . *)
+ (157 . |one?|)
+ |INS-;invmod;3S;28|
+ (162 . |mulmod|)
+ |INS-;powmod;4S;29|))
+ (QUOTE
+ #(|symmetricRemainder| 169 |squareFree| 175 |retractIfCan| 180
+ |retract| 185 |rationalIfCan| 190 |rational?| 195 |rational| 200
+ |prime?| 205 |powmod| 210 |positive?| 217 |permutation| 222
+ |patternMatch| 228 |nextItem| 235 |mask| 240 |invmod| 245 |init| 251
+ |factorial| 255 |factor| 260 |even?| 265 |euclideanSize| 270
+ |differentiate| 275 |copy| 280 |convert| 285 |characteristic| 305
+ |bit?| 309 |binomial| 315))
+ (QUOTE NIL)
+ (CONS
+ (|makeByteWordVec2| 1 (QUOTE NIL))
+ (CONS
+ (QUOTE #())
+ (CONS
+ (QUOTE #())
+ (|makeByteWordVec2| 86
+ (QUOTE
+ (0 6 0 9 1 6 11 0 12 2 6 11 0 0 14 1 6 0 0 17 2 6 0 0 0 18 0 6
+ 0 20 1 6 0 0 21 2 6 11 0 0 24 1 6 25 0 26 1 28 0 25 29 1 33 0
+ 25 34 1 37 0 25 38 1 41 40 6 42 1 41 40 6 45 1 47 11 6 48 1 50
+ 6 6 51 2 50 6 6 6 53 2 50 6 6 6 55 1 6 11 0 60 2 6 0 0 0 61 3
+ 65 64 6 37 64 66 1 69 0 25 70 2 6 0 0 0 74 2 6 0 75 0 76 2 6 0
+ 0 0 77 1 6 11 0 79 2 6 0 0 0 80 2 6 0 0 0 81 2 6 0 0 0 82 1 6
+ 11 0 83 3 6 0 0 0 0 85 2 0 0 0 0 78 1 0 43 0 46 1 0 57 0 58 1
+ 0 25 0 36 1 0 72 0 73 1 0 11 0 23 1 0 69 0 71 1 0 11 0 49 3 0
+ 0 0 0 0 86 1 0 11 0 15 2 0 0 0 0 56 3 0 67 0 37 67 68 1 0 62
+ 0 63 1 0 0 0 22 2 0 0 0 0 84 0 0 0 59 1 0 0 0 52 1 0 43 0 44
+ 1 0 11 0 13 1 0 7 0 27 1 0 0 0 10 1 0 0 0 16 1 0 31 0 32 1 0
+ 28 0 30 1 0 37 0 39 1 0 33 0 35 0 0 7 8 2 0 11 0 0 19 2 0 0
+ 0 0 54))))))
+ (QUOTE |lookupComplete|)))
+
+@
+\section{domain SINT SingleInteger}
+The definition of {\bf one?} has been rewritten
+as it relies on calling {\bf ONEP} which is a function specific
+to Codemist Common Lisp but is not defined in Common Lisp.
+<<domain SINT SingleInteger>>=
+)abbrev domain SINT SingleInteger
+
+-- following patch needed to deal with *:(I,%) -> %
+-- affects behavior of SourceLevelSubset
+--)bo $noSubsets := true
+-- No longer - JHD !! still needed 5/3/91 BMT
+
+++ Author: Michael Monagan
+++ Date Created:
+++ January 1988
+++ Change History:
+++ Basic Operations: max, min,
+++ not, and, or, xor, Not, And, Or
+++ Related Constructors:
+++ Keywords: single integer
+++ Description: SingleInteger is intended to support machine integer
+++ arithmetic.
+
+-- MAXINT, BASE (machine integer constants)
+-- MODULUS, MULTIPLIER (random number generator constants)
+
+
+-- Lisp dependencies
+-- EQ, ABSVAL, TIMES, INTEGER-LENGTH, HASHEQ, REMAINDER
+-- QSLESSP, QSGREATERP, QSADD1, QSSUB1, QSMINUS, QSPLUS, QSDIFFERENCE
+-- QSTIMES, QSREMAINDER, QSODDP, QSZEROP, QSMAX, QSMIN, QSNOT, QSAND
+-- QSOR, QSXOR, QSLEFTSHIFT, QSADDMOD, QSDIFMOD, QSMULTMOD
+
+
+SingleInteger(): Join(IntegerNumberSystem,Logic,OpenMath) with
+ canonical
+ ++ \spad{canonical} means that mathematical equality is implied by data structure equality.
+ canonicalsClosed
+ ++ \spad{canonicalClosed} means two positives multiply to give positive.
+ noetherian
+ ++ \spad{noetherian} all ideals are finitely generated (in fact principal).
+
+ max : () -> %
+ ++ max() returns the largest single integer.
+ min : () -> %
+ ++ min() returns the smallest single integer.
+
+ -- bit operations
+ "not": % -> %
+ ++ not(n) returns the bit-by-bit logical {\em not} of the single integer n.
+ "~" : % -> %
+ ++ ~ n returns the bit-by-bit logical {\em not } of the single integer n.
+ "/\": (%, %) -> %
+ ++ n /\ m returns the bit-by-bit logical {\em and} of
+ ++ the single integers n and m.
+ "\/" : (%, %) -> %
+ ++ n \/ m returns the bit-by-bit logical {\em or} of
+ ++ the single integers n and m.
+ "xor": (%, %) -> %
+ ++ xor(n,m) returns the bit-by-bit logical {\em xor} of
+ ++ the single integers n and m.
+ Not : % -> %
+ ++ Not(n) returns the bit-by-bit logical {\em not} of the single integer n.
+ And : (%,%) -> %
+ ++ And(n,m) returns the bit-by-bit logical {\em and} of
+ ++ the single integers n and m.
+ Or : (%,%) -> %
+ ++ Or(n,m) returns the bit-by-bit logical {\em or} of
+ ++ the single integers n and m.
+
+ == add
+
+ seed : % := 1$Lisp -- for random()
+ MAXINT ==> MOST_-POSITIVE_-FIXNUM$Lisp
+ MININT ==> MOST_-NEGATIVE_-FIXNUM$Lisp
+ BASE ==> 67108864$Lisp -- 2**26
+ MULTIPLIER ==> 314159269$Lisp -- from Knuth's table
+ MODULUS ==> 2147483647$Lisp -- 2**31-1
+
+ writeOMSingleInt(dev: OpenMathDevice, x: %): Void ==
+ if x < 0 then
+ OMputApp(dev)
+ OMputSymbol(dev, "arith1", "unary_minus")
+ OMputInteger(dev, convert(-x))
+ OMputEndApp(dev)
+ else
+ OMputInteger(dev, convert(x))
+
+ OMwrite(x: %): String ==
+ s: String := ""
+ sp := OM_-STRINGTOSTRINGPTR(s)$Lisp
+ dev: OpenMathDevice := OMopenString(sp pretend String, OMencodingXML)
+ OMputObject(dev)
+ writeOMSingleInt(dev, x)
+ OMputEndObject(dev)
+ OMclose(dev)
+ s := OM_-STRINGPTRTOSTRING(sp)$Lisp pretend String
+ s
+
+ OMwrite(x: %, wholeObj: Boolean): String ==
+ s: String := ""
+ sp := OM_-STRINGTOSTRINGPTR(s)$Lisp
+ dev: OpenMathDevice := OMopenString(sp pretend String, OMencodingXML)
+ if wholeObj then
+ OMputObject(dev)
+ writeOMSingleInt(dev, x)
+ if wholeObj then
+ OMputEndObject(dev)
+ OMclose(dev)
+ s := OM_-STRINGPTRTOSTRING(sp)$Lisp pretend String
+ s
+
+ OMwrite(dev: OpenMathDevice, x: %): Void ==
+ OMputObject(dev)
+ writeOMSingleInt(dev, x)
+ OMputEndObject(dev)
+
+ OMwrite(dev: OpenMathDevice, x: %, wholeObj: Boolean): Void ==
+ if wholeObj then
+ OMputObject(dev)
+ writeOMSingleInt(dev, x)
+ if wholeObj then
+ OMputEndObject(dev)
+
+ reducedSystem m == m pretend Matrix(Integer)
+ coerce(x):OutputForm == (convert(x)@Integer)::OutputForm
+ convert(x:%):Integer == x pretend Integer
+ i:Integer * y:% == i::% * y
+ 0 == 0$Lisp
+ 1 == 1$Lisp
+ base() == 2$Lisp
+ max() == MAXINT
+ min() == MININT
+ x = y == EQL(x,y)$Lisp
+ _~ x == LOGNOT(x)$Lisp
+ not(x) == LOGNOT(x)$Lisp
+ _/_\(x,y) == LOGAND(x,y)$Lisp
+ _\_/(x,y) == LOGIOR(x,y)$Lisp
+ Not(x) == LOGNOT(x)$Lisp
+ And(x,y) == LOGAND(x,y)$Lisp
+ Or(x,y) == LOGIOR(x,y)$Lisp
+ xor(x,y) == LOGXOR(x,y)$Lisp
+ x < y == QSLESSP(x,y)$Lisp
+ inc x == QSADD1(x)$Lisp
+ dec x == QSSUB1(x)$Lisp
+ - x == QSMINUS(x)$Lisp
+ x + y == QSPLUS(x,y)$Lisp
+ x:% - y:% == QSDIFFERENCE(x,y)$Lisp
+ x:% * y:% == QSTIMES(x,y)$Lisp
+ x:% ** n:NonNegativeInteger == ((EXPT(x, n)$Lisp) pretend Integer)::%
+ x quo y == QSQUOTIENT(x,y)$Lisp
+ x rem y == QSREMAINDER(x,y)$Lisp
+ divide(x, y) == CONS(QSQUOTIENT(x,y)$Lisp,QSREMAINDER(x,y)$Lisp)$Lisp
+ gcd(x,y) == GCD(x,y)$Lisp
+ abs(x) == QSABSVAL(x)$Lisp
+ odd?(x) == QSODDP(x)$Lisp
+ zero?(x) == QSZEROP(x)$Lisp
+-- one?(x) == ONEP(x)$Lisp
+ one?(x) == x = 1
+ max(x,y) == QSMAX(x,y)$Lisp
+ min(x,y) == QSMIN(x,y)$Lisp
+ hash(x) == HASHEQ(x)$Lisp
+ length(x) == INTEGER_-LENGTH(x)$Lisp
+ shift(x,n) == QSLEFTSHIFT(x,n)$Lisp
+ mulmod(a,b,p) == QSMULTMOD(a,b,p)$Lisp
+ addmod(a,b,p) == QSADDMOD(a,b,p)$Lisp
+ submod(a,b,p) == QSDIFMOD(a,b,p)$Lisp
+ negative?(x) == QSMINUSP$Lisp x
+
+
+ reducedSystem(m, v) ==
+ [m pretend Matrix(Integer), v pretend Vector(Integer)]
+
+ positiveRemainder(x,n) ==
+ r := QSREMAINDER(x,n)$Lisp
+ QSMINUSP(r)$Lisp =>
+ QSMINUSP(n)$Lisp => QSDIFFERENCE(x, n)$Lisp
+ QSPLUS(r, n)$Lisp
+ r
+
+ coerce(x:Integer):% ==
+ (x <= max pretend Integer) and (x >= min pretend Integer) =>
+ x pretend %
+ error "integer too large to represent in a machine word"
+
+ random() ==
+ seed := REMAINDER(TIMES(MULTIPLIER,seed)$Lisp,MODULUS)$Lisp
+ REMAINDER(seed,BASE)$Lisp
+
+ random(n) == RANDOM(n)$Lisp
+
+ UCA ==> Record(unit:%,canonical:%,associate:%)
+ unitNormal x ==
+ x < 0 => [-1,-x,-1]$UCA
+ [1,x,1]$UCA
+
+)bo $noSubsets := false
+
+@
+\section{SINT.lsp BOOTSTRAP}
+<<SINT.lsp BOOTSTRAP>>=
+
+(/VERSIONCHECK 2)
+
+(DEFUN |SINT;writeOMSingleInt| (|dev| |x| $)
+ (SEQ
+ (COND
+ ((QSLESSP |x| 0)
+ (SEQ
+ (SPADCALL |dev| (QREFELT $ 9))
+ (SPADCALL |dev| "arith1" "unaryminus" (QREFELT $ 11))
+ (SPADCALL |dev| (QSMINUS |x|) (QREFELT $ 13))
+ (EXIT (SPADCALL |dev| (QREFELT $ 14)))))
+ ((QUOTE T) (SPADCALL |dev| |x| (QREFELT $ 13))))))
+
+(DEFUN |SINT;OMwrite;$S;2| (|x| $)
+ (PROG (|sp| |dev| |s|)
+ (RETURN
+ (SEQ
+ (LETT |s| "" |SINT;OMwrite;$S;2|)
+ (LETT |sp| (OM-STRINGTOSTRINGPTR |s|) |SINT;OMwrite;$S;2|)
+ (LETT |dev|
+ (SPADCALL |sp| (SPADCALL (QREFELT $ 16)) (QREFELT $ 17))
+ |SINT;OMwrite;$S;2|)
+ (SPADCALL |dev| (QREFELT $ 18))
+ (|SINT;writeOMSingleInt| |dev| |x| $)
+ (SPADCALL |dev| (QREFELT $ 19))
+ (SPADCALL |dev| (QREFELT $ 20))
+ (LETT |s| (OM-STRINGPTRTOSTRING |sp|) |SINT;OMwrite;$S;2|)
+ (EXIT |s|)))))
+
+(DEFUN |SINT;OMwrite;$BS;3| (|x| |wholeObj| $)
+ (PROG (|sp| |dev| |s|)
+ (RETURN
+ (SEQ
+ (LETT |s| "" |SINT;OMwrite;$BS;3|)
+ (LETT |sp| (OM-STRINGTOSTRINGPTR |s|) |SINT;OMwrite;$BS;3|)
+ (LETT |dev|
+ (SPADCALL |sp| (SPADCALL (QREFELT $ 16)) (QREFELT $ 17))
+ |SINT;OMwrite;$BS;3|)
+ (COND (|wholeObj| (SPADCALL |dev| (QREFELT $ 18))))
+ (|SINT;writeOMSingleInt| |dev| |x| $)
+ (COND (|wholeObj| (SPADCALL |dev| (QREFELT $ 19))))
+ (SPADCALL |dev| (QREFELT $ 20))
+ (LETT |s| (OM-STRINGPTRTOSTRING |sp|) |SINT;OMwrite;$BS;3|)
+ (EXIT |s|)))))
+
+(DEFUN |SINT;OMwrite;Omd$V;4| (|dev| |x| $)
+ (SEQ
+ (SPADCALL |dev| (QREFELT $ 18))
+ (|SINT;writeOMSingleInt| |dev| |x| $)
+ (EXIT (SPADCALL |dev| (QREFELT $ 19)))))
+
+(DEFUN |SINT;OMwrite;Omd$BV;5| (|dev| |x| |wholeObj| $)
+ (SEQ
+ (COND (|wholeObj| (SPADCALL |dev| (QREFELT $ 18))))
+ (|SINT;writeOMSingleInt| |dev| |x| $)
+ (EXIT (COND (|wholeObj| (SPADCALL |dev| (QREFELT $ 19)))))))
+
+(PUT
+ (QUOTE |SINT;reducedSystem;MM;6|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM (|m|) |m|)))
+
+(DEFUN |SINT;reducedSystem;MM;6| (|m| $) |m|)
+
+(DEFUN |SINT;coerce;$Of;7| (|x| $)
+ (SPADCALL |x| (QREFELT $ 30)))
+
+(PUT
+ (QUOTE |SINT;convert;$I;8|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM (|x|) |x|)))
+
+(DEFUN |SINT;convert;$I;8| (|x| $) |x|)
+
+(DEFUN |SINT;*;I2$;9| (|i| |y| $)
+ (QSTIMES (SPADCALL |i| (QREFELT $ 33)) |y|))
+
+(PUT
+ (QUOTE |SINT;Zero;$;10|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL 0)))
+
+(DEFUN |SINT;Zero;$;10| ($) 0)
+
+(PUT
+ (QUOTE |SINT;One;$;11|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL 1)))
+
+(DEFUN |SINT;One;$;11| ($) 1)
+
+(PUT
+ (QUOTE |SINT;base;$;12|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL 2)))
+
+(DEFUN |SINT;base;$;12| ($) 2)
+
+(PUT
+ (QUOTE |SINT;max;$;13|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL MOST-POSITIVE-FIXNUM)))
+
+(DEFUN |SINT;max;$;13| ($) MOST-POSITIVE-FIXNUM)
+
+(PUT
+ (QUOTE |SINT;min;$;14|)
+ (QUOTE |SPADreplace|)
+ (QUOTE (XLAM NIL MOST-NEGATIVE-FIXNUM)))
+
+(DEFUN |SINT;min;$;14| ($) MOST-NEGATIVE-FIXNUM)
+
+(PUT
+ (QUOTE |SINT;=;2$B;15|)
+ (QUOTE |SPADreplace|)
+ (QUOTE EQL))
+
+(DEFUN |SINT;=;2$B;15| (|x| |y| $)
+ (EQL |x| |y|))
+
+(PUT
+ (QUOTE |SINT;~;2$;16|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGNOT))
+
+(DEFUN |SINT;~;2$;16| (|x| $)
+ (LOGNOT |x|))
+
+(PUT
+ (QUOTE |SINT;not;2$;17|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGNOT))
+
+(DEFUN |SINT;not;2$;17| (|x| $)
+ (LOGNOT |x|))
+
+(PUT
+ (QUOTE |SINT;/\\;3$;18|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGAND))
+
+(DEFUN |SINT;/\\;3$;18| (|x| |y| $)
+ (LOGAND |x| |y|))
+
+(PUT
+ (QUOTE |SINT;\\/;3$;19|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGIOR))
+
+(DEFUN |SINT;\\/;3$;19| (|x| |y| $)
+ (LOGIOR |x| |y|))
+
+(PUT
+ (QUOTE |SINT;Not;2$;20|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGNOT))
+
+(DEFUN |SINT;Not;2$;20| (|x| $)
+ (LOGNOT |x|))
+
+(PUT
+ (QUOTE |SINT;And;3$;21|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGAND))
+
+(DEFUN |SINT;And;3$;21| (|x| |y| $)
+ (LOGAND |x| |y|))
+
+(PUT
+ (QUOTE |SINT;Or;3$;22|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGIOR))
+
+(DEFUN |SINT;Or;3$;22| (|x| |y| $)
+ (LOGIOR |x| |y|))
+
+(PUT
+ (QUOTE |SINT;xor;3$;23|)
+ (QUOTE |SPADreplace|)
+ (QUOTE LOGXOR))
+
+(DEFUN |SINT;xor;3$;23| (|x| |y| $)
+ (LOGXOR |x| |y|))
+
+(PUT
+ (QUOTE |SINT;<;2$B;24|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSLESSP))
+
+(DEFUN |SINT;<;2$B;24| (|x| |y| $)
+ (QSLESSP |x| |y|))
+
+(PUT
+ (QUOTE |SINT;inc;2$;25|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSADD1))
+
+(DEFUN |SINT;inc;2$;25| (|x| $)
+ (QSADD1 |x|))
+
+(PUT
+ (QUOTE |SINT;dec;2$;26|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSSUB1))
+
+(DEFUN |SINT;dec;2$;26| (|x| $)
+ (QSSUB1 |x|))
+
+(PUT
+ (QUOTE |SINT;-;2$;27|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSMINUS))
+
+(DEFUN |SINT;-;2$;27| (|x| $)
+ (QSMINUS |x|))
+
+(PUT
+ (QUOTE |SINT;+;3$;28|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSPLUS))
+
+(DEFUN |SINT;+;3$;28| (|x| |y| $)
+ (QSPLUS |x| |y|))
+
+(PUT
+ (QUOTE |SINT;-;3$;29|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSDIFFERENCE))
+
+(DEFUN |SINT;-;3$;29| (|x| |y| $)
+ (QSDIFFERENCE |x| |y|))
+
+(PUT
+ (QUOTE |SINT;*;3$;30|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSTIMES))
+
+(DEFUN |SINT;*;3$;30| (|x| |y| $)
+ (QSTIMES |x| |y|))
+
+(DEFUN |SINT;**;$Nni$;31| (|x| |n| $)
+ (SPADCALL (EXPT |x| |n|) (QREFELT $ 33)))
+
+(PUT
+ (QUOTE |SINT;quo;3$;32|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSQUOTIENT))
+
+(DEFUN |SINT;quo;3$;32| (|x| |y| $)
+ (QSQUOTIENT |x| |y|))
+
+(PUT
+ (QUOTE |SINT;rem;3$;33|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSREMAINDER))
+
+(DEFUN |SINT;rem;3$;33| (|x| |y| $)
+ (QSREMAINDER |x| |y|))
+
+(DEFUN |SINT;divide;2$R;34| (|x| |y| $)
+ (CONS (QSQUOTIENT |x| |y|) (QSREMAINDER |x| |y|)))
+
+(PUT (QUOTE |SINT;gcd;3$;35|)
+ (QUOTE |SPADreplace|) (QUOTE GCD))
+
+(DEFUN |SINT;gcd;3$;35| (|x| |y| $)
+ (GCD |x| |y|))
+
+(PUT
+ (QUOTE |SINT;abs;2$;36|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSABSVAL))
+
+(DEFUN |SINT;abs;2$;36| (|x| $)
+ (QSABSVAL |x|))
+
+(PUT
+ (QUOTE |SINT;odd?;$B;37|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSODDP))
+
+(DEFUN |SINT;odd?;$B;37| (|x| $)
+ (QSODDP |x|))
+
+(PUT
+ (QUOTE |SINT;zero?;$B;38|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSZEROP))
+
+(DEFUN |SINT;zero?;$B;38| (|x| $)
+ (QSZEROP |x|))
+
+(PUT
+ (QUOTE |SINT;max;3$;39|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSMAX))
+
+(DEFUN |SINT;max;3$;39| (|x| |y| $)
+ (QSMAX |x| |y|))
+
+(PUT
+ (QUOTE |SINT;min;3$;40|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSMIN))
+
+(DEFUN |SINT;min;3$;40| (|x| |y| $)
+ (QSMIN |x| |y|))
+
+(PUT
+ (QUOTE |SINT;hash;2$;41|)
+ (QUOTE |SPADreplace|)
+ (QUOTE HASHEQ))
+
+(DEFUN |SINT;hash;2$;41| (|x| $)
+ (HASHEQ |x|))
+
+(PUT
+ (QUOTE |SINT;length;2$;42|)
+ (QUOTE |SPADreplace|)
+ (QUOTE INTEGER-LENGTH))
+
+(DEFUN |SINT;length;2$;42| (|x| $)
+ (INTEGER-LENGTH |x|))
+
+(PUT
+ (QUOTE |SINT;shift;3$;43|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSLEFTSHIFT))
+
+(DEFUN |SINT;shift;3$;43| (|x| |n| $)
+ (QSLEFTSHIFT |x| |n|))
+
+(PUT
+ (QUOTE |SINT;mulmod;4$;44|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSMULTMOD))
+
+(DEFUN |SINT;mulmod;4$;44| (|a| |b| |p| $)
+ (QSMULTMOD |a| |b| |p|))
+
+(PUT
+ (QUOTE |SINT;addmod;4$;45|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSADDMOD))
+
+(DEFUN |SINT;addmod;4$;45| (|a| |b| |p| $)
+ (QSADDMOD |a| |b| |p|))
+
+(PUT
+ (QUOTE |SINT;submod;4$;46|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSDIFMOD))
+
+(DEFUN |SINT;submod;4$;46| (|a| |b| |p| $)
+ (QSDIFMOD |a| |b| |p|))
+
+(PUT
+ (QUOTE |SINT;negative?;$B;47|)
+ (QUOTE |SPADreplace|)
+ (QUOTE QSMINUSP))
+
+(DEFUN |SINT;negative?;$B;47| (|x| $)
+ (QSMINUSP |x|))
+
+(PUT
+ (QUOTE |SINT;reducedSystem;MVR;48|)
+ (QUOTE |SPADreplace|)
+ (QUOTE CONS))
+
+(DEFUN |SINT;reducedSystem;MVR;48| (|m| |v| $)
+ (CONS |m| |v|))
+
+(DEFUN |SINT;positiveRemainder;3$;49| (|x| |n| $)
+ (PROG (|r|)
+ (RETURN
+ (SEQ
+ (LETT |r| (QSREMAINDER |x| |n|) |SINT;positiveRemainder;3$;49|)
+ (EXIT
+ (COND
+ ((QSMINUSP |r|)
+ (COND
+ ((QSMINUSP |n|) (QSDIFFERENCE |x| |n|))
+ ((QUOTE T) (QSPLUS |r| |n|))))
+ ((QUOTE T) |r|)))))))
+
+(DEFUN |SINT;coerce;I$;50| (|x| $)
+ (SEQ
+ (COND
+ ((NULL (< MOST-POSITIVE-FIXNUM |x|))
+ (COND ((NULL (< |x| MOST-NEGATIVE-FIXNUM)) (EXIT |x|)))))
+ (EXIT (|error| "integer too large to represent in a machine word"))))
+
+(DEFUN |SINT;random;$;51| ($)
+ (SEQ
+ (SETELT $ 6 (REMAINDER (TIMES 314159269 (QREFELT $ 6)) 2147483647))
+ (EXIT (REMAINDER (QREFELT $ 6) 67108864))))
+
+(PUT
+ (QUOTE |SINT;random;2$;52|)
+ (QUOTE |SPADreplace|)
+ (QUOTE RANDOM))
+
+(DEFUN |SINT;random;2$;52| (|n| $)
+ (RANDOM |n|))
+
+(DEFUN |SINT;unitNormal;$R;53| (|x| $)
+ (COND
+ ((QSLESSP |x| 0) (VECTOR -1 (QSMINUS |x|) -1))
+ ((QUOTE T) (VECTOR 1 |x| 1))))
+
+(DEFUN |SingleInteger| NIL
+ (PROG NIL
+ (RETURN
+ (PROG (#0=#:G1358)
+ (RETURN
+ (COND
+ ((LETT #0#
+ (HGET |$ConstructorCache| (QUOTE |SingleInteger|))
+ |SingleInteger|)
+ (|CDRwithIncrement| (CDAR #0#)))
+ ((QUOTE T)
+ (UNWIND-PROTECT
+ (PROG1
+ (CDDAR
+ (HPUT
+ |$ConstructorCache|
+ (QUOTE |SingleInteger|)
+ (LIST (CONS NIL (CONS 1 (|SingleInteger;|))))))
+ (LETT #0# T |SingleInteger|))
+ (COND
+ ((NOT #0#)
+ (HREM |$ConstructorCache|
+ (QUOTE |SingleInteger|))))))))))))
+
+(DEFUN |SingleInteger;| NIL
+ (PROG (|dv$| $ |pv$|)
+ (RETURN
+ (PROGN
+ (LETT |dv$| (QUOTE (|SingleInteger|)) . #0=(|SingleInteger|))
+ (LETT $ (GETREFV 103) . #0#)
+ (QSETREFV $ 0 |dv$|)
+ (QSETREFV $ 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #0#))
+ (|haddProp| |$ConstructorCache| (QUOTE |SingleInteger|) NIL (CONS 1 $))
+ (|stuffDomainSlots| $) (QSETREFV $ 6 1) $))))
+
+(MAKEPROP
+ (QUOTE |SingleInteger|)
+ (QUOTE |infovec|)
+ (LIST
+ (QUOTE
+ #(NIL NIL NIL NIL NIL NIL
+ (QUOTE |seed|)
+ (|Void|)
+ (|OpenMathDevice|)
+ (0 . |OMputApp|)
+ (|String|)
+ (5 . |OMputSymbol|)
+ (|Integer|)
+ (12 . |OMputInteger|)
+ (18 . |OMputEndApp|)
+ (|OpenMathEncoding|)
+ (23 . |OMencodingXML|)
+ (27 . |OMopenString|)
+ (33 . |OMputObject|)
+ (38 . |OMputEndObject|)
+ (43 . |OMclose|)
+ |SINT;OMwrite;$S;2|
+ (|Boolean|)
+ |SINT;OMwrite;$BS;3|
+ |SINT;OMwrite;Omd$V;4|
+ |SINT;OMwrite;Omd$BV;5|
+ (|Matrix| 12)
+ (|Matrix| $)
+ |SINT;reducedSystem;MM;6|
+ (|OutputForm|)
+ (48 . |coerce|)
+ |SINT;coerce;$Of;7|
+ |SINT;convert;$I;8|
+ (53 . |coerce|)
+ |SINT;*;I2$;9|
+ (CONS IDENTITY (FUNCALL (|dispatchFunction| |SINT;Zero;$;10|) $))
+ (CONS IDENTITY (FUNCALL (|dispatchFunction| |SINT;One;$;11|) $))
+ |SINT;base;$;12|
+ |SINT;max;$;13|
+ |SINT;min;$;14|
+ |SINT;=;2$B;15|
+ |SINT;~;2$;16|
+ |SINT;not;2$;17|
+ |SINT;/\\;3$;18|
+ |SINT;\\/;3$;19|
+ |SINT;Not;2$;20|
+ |SINT;And;3$;21|
+ |SINT;Or;3$;22|
+ |SINT;xor;3$;23|
+ |SINT;<;2$B;24|
+ |SINT;inc;2$;25|
+ |SINT;dec;2$;26|
+ |SINT;-;2$;27|
+ |SINT;+;3$;28|
+ |SINT;-;3$;29|
+ |SINT;*;3$;30|
+ (|NonNegativeInteger|)
+ |SINT;**;$Nni$;31|
+ |SINT;quo;3$;32|
+ |SINT;rem;3$;33|
+ (|Record| (|:| |quotient| $) (|:| |remainder| $))
+ |SINT;divide;2$R;34|
+ |SINT;gcd;3$;35|
+ |SINT;abs;2$;36|
+ |SINT;odd?;$B;37|
+ |SINT;zero?;$B;38|
+ |SINT;max;3$;39|
+ |SINT;min;3$;40|
+ |SINT;hash;2$;41|
+ |SINT;length;2$;42|
+ |SINT;shift;3$;43|
+ |SINT;mulmod;4$;44|
+ |SINT;addmod;4$;45|
+ |SINT;submod;4$;46|
+ |SINT;negative?;$B;47|
+ (|Record| (|:| |mat| 26) (|:| |vec| (|Vector| 12)))
+ (|Vector| $)
+ |SINT;reducedSystem;MVR;48|
+ |SINT;positiveRemainder;3$;49|
+ |SINT;coerce;I$;50|
+ |SINT;random;$;51|
+ |SINT;random;2$;52|
+ (|Record| (|:| |unit| $) (|:| |canonical| $) (|:| |associate| $))
+ |SINT;unitNormal;$R;53|
+ (|Union| 85 (QUOTE "failed"))
+ (|Fraction| 12)
+ (|Union| $ (QUOTE "failed"))
+ (|Float|)
+ (|DoubleFloat|)
+ (|Pattern| 12)
+ (|PatternMatchResult| 12 $)
+ (|InputForm|)
+ (|Union| 12 (QUOTE "failed"))
+ (|Record| (|:| |coef| 94) (|:| |generator| $))
+ (|List| $)
+ (|Union| 94 (QUOTE "failed"))
+ (|Record| (|:| |coef1| $) (|:| |coef2| $) (|:| |generator| $))
+ (|Record| (|:| |coef1| $) (|:| |coef2| $))
+ (|Union| 97 (QUOTE "failed"))
+ (|Factored| $)
+ (|SparseUnivariatePolynomial| $)
+ (|PositiveInteger|)
+ (|SingleInteger|)))
+ (QUOTE
+ #(~= 58 ~ 64 |zero?| 69 |xor| 74 |unitNormal| 80 |unitCanonical| 85
+ |unit?| 90 |symmetricRemainder| 95 |subtractIfCan| 101 |submod| 107
+ |squareFreePart| 114 |squareFree| 119 |sizeLess?| 124 |sign| 130
+ |shift| 135 |sample| 141 |retractIfCan| 145 |retract| 150 |rem| 155
+ |reducedSystem| 161 |recip| 172 |rationalIfCan| 177 |rational?| 182
+ |rational| 187 |random| 192 |quo| 201 |principalIdeal| 207
+ |prime?| 212 |powmod| 217 |positiveRemainder| 224 |positive?| 230
+ |permutation| 235 |patternMatch| 241 |one?| 248 |odd?| 253 |not| 258
+ |nextItem| 263 |negative?| 268 |multiEuclidean| 273 |mulmod| 279
+ |min| 286 |max| 296 |mask| 306 |length| 311 |lcm| 316 |latex| 327
+ |invmod| 332 |init| 338 |inc| 342 |hash| 347 |gcdPolynomial| 357
+ |gcd| 363 |factorial| 374 |factor| 379 |extendedEuclidean| 384
+ |exquo| 397 |expressIdealMember| 403 |even?| 409 |euclideanSize| 414
+ |divide| 419 |differentiate| 425 |dec| 436 |copy| 441 |convert| 446
+ |coerce| 471 |characteristic| 491 |bit?| 495 |binomial| 501
+ |base| 507 |associates?| 511 |addmod| 517 |abs| 524 ^ 529 |\\/| 541
+ |Zero| 547 |Or| 551 |One| 557 |OMwrite| 561 |Not| 585 D 590
+ |And| 601 >= 607 > 613 = 619 <= 625 < 631 |/\\| 637 - 643 + 654
+ ** 660 * 672))
+ (QUOTE (
+ (|noetherian| . 0)
+ (|canonicalsClosed| . 0)
+ (|canonical| . 0)
+ (|canonicalUnitNormal| . 0)
+ (|multiplicativeValuation| . 0)
+ (|noZeroDivisors| . 0)
+ ((|commutative| "*") . 0)
+ (|rightUnitary| . 0)
+ (|leftUnitary| . 0)
+ (|unitsKnown| . 0)))
+ (CONS
+ (|makeByteWordVec2| 1
+ (QUOTE (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
+ (CONS
+ (QUOTE
+ #(|IntegerNumberSystem&| |EuclideanDomain&|
+ |UniqueFactorizationDomain&| NIL NIL |GcdDomain&|
+ |IntegralDomain&| |Algebra&| |Module&| NIL |Module&| NIL NIL
+ |Module&| NIL |DifferentialRing&| |OrderedRing&| NIL |Module&|
+ NIL |Module&| NIL NIL NIL NIL NIL NIL |Ring&| NIL NIL NIL NIL
+ NIL NIL NIL NIL NIL NIL NIL NIL NIL |AbelianGroup&| NIL NIL
+ |AbelianMonoid&| |Monoid&| NIL NIL NIL NIL |OrderedSet&|
+ |AbelianSemiGroup&| |SemiGroup&| |Logic&| NIL |SetCategory&| NIL
+ NIL NIL NIL |RetractableTo&| NIL NIL NIL |RetractableTo&| NIL NIL
+ NIL NIL NIL NIL |RetractableTo&| NIL |BasicType&| NIL))
+ (CONS
+ (QUOTE
+ #((|IntegerNumberSystem|) (|EuclideanDomain|)
+ (|UniqueFactorizationDomain|) (|PrincipalIdealDomain|)
+ (|OrderedIntegralDomain|) (|GcdDomain|) (|IntegralDomain|)
+ (|Algebra| $$) (|Module| 12) (|LinearlyExplicitRingOver| 12)
+ (|Module| #0=#:G1062) (|LinearlyExplicitRingOver| #0#)
+ (|CharacteristicZero|) (|Module| #1=#:G106217)
+ (|LinearlyExplicitRingOver| #1#) (|DifferentialRing|)
+ (|OrderedRing|) (|CommutativeRing|) (|Module| |t#1|)
+ (|EntireRing|) (|Module| $$) (|BiModule| 12 12)
+ (|BiModule| #0# #0#) (|BiModule| #1# #1#)
+ (|OrderedAbelianGroup|) (|BiModule| |t#1| |t#1|)
+ (|BiModule| $$ $$) (|Ring|) (|RightModule| 12)
+ (|LeftModule| 12) (|RightModule| #0#) (|LeftModule| #0#)
+ (|RightModule| #1#) (|LeftModule| #1#)
+ (|OrderedCancellationAbelianMonoid|) (|RightModule| |t#1|)
+ (|LeftModule| |t#1|) (|LeftModule| $$) (|Rng|)
+ (|RightModule| $$) (|OrderedAbelianMonoid|) (|AbelianGroup|)
+ (|OrderedAbelianSemiGroup|) (|CancellationAbelianMonoid|)
+ (|AbelianMonoid|) (|Monoid|) (|PatternMatchable| 12)
+ (|PatternMatchable| #:G1065) (|StepThrough|)
+ (|PatternMatchable| #:G106220) (|OrderedSet|)
+ (|AbelianSemiGroup|) (|SemiGroup|) (|Logic|) (|RealConstant|)
+ (|SetCategory|) (|OpenMath|) (|CoercibleTo| #:G82356)
+ (|ConvertibleTo| 89) (|ConvertibleTo| 91) (|RetractableTo| 12)
+ (|ConvertibleTo| 12) (|ConvertibleTo| #:G1064)
+ (|ConvertibleTo| #:G1063) (|RetractableTo| #:G1061)
+ (|ConvertibleTo| #:G1060) (|ConvertibleTo| 87)
+ (|ConvertibleTo| 88) (|CombinatorialFunctionCategory|)
+ (|ConvertibleTo| #:G106219) (|ConvertibleTo| #:G106218)
+ (|RetractableTo| #:G106216) (|ConvertibleTo| #:G106215)
+ (|BasicType|) (|CoercibleTo| 29)))
+ (|makeByteWordVec2| 102
+ (QUOTE
+ (1 8 7 0 9 3 8 7 0 10 10 11 2 8 7 0 12 13 1 8 7 0 14 0 15 0
+ 16 2 8 0 10 15 17 1 8 7 0 18 1 8 7 0 19 1 8 7 0 20 1 12 29
+ 0 30 1 0 0 12 33 2 0 22 0 0 1 1 0 0 0 41 1 0 22 0 65 2 0 0
+ 0 0 48 1 0 82 0 83 1 0 0 0 1 1 0 22 0 1 2 0 0 0 0 1 2 0 86
+ 0 0 1 3 0 0 0 0 0 73 1 0 0 0 1 1 0 99 0 1 2 0 22 0 0 1 1 0
+ 12 0 1 2 0 0 0 0 70 0 0 0 1 1 0 92 0 1 1 0 12 0 1 2 0 0 0 0
+ 59 1 0 26 27 28 2 0 75 27 76 77 1 0 86 0 1 1 0 84 0 1 1 0
+ 22 0 1 1 0 85 0 1 1 0 0 0 81 0 0 0 80 2 0 0 0 0 58 1 0 93
+ 94 1 1 0 22 0 1 3 0 0 0 0 0 1 2 0 0 0 0 78 1 0 22 0 1 2 0 0
+ 0 0 1 3 0 90 0 89 90 1 1 0 22 0 1 1 0 22 0 64 1 0 0 0 42 1
+ 0 86 0 1 1 0 22 0 74 2 0 95 94 0 1 3 0 0 0 0 0 71 0 0 0 39
+ 2 0 0 0 0 67 0 0 0 38 2 0 0 0 0 66 1 0 0 0 1 1 0 0 0 69 1 0
+ 0 94 1 2 0 0 0 0 1 1 0 10 0 1 2 0 0 0 0 1 0 0 0 1 1 0 0 0 50
+ 1 0 0 0 68 1 0 102 0 1 2 0 100 100 100 1 1 0 0 94 1 2 0 0 0
+ 0 62 1 0 0 0 1 1 0 99 0 1 2 0 96 0 0 1 3 0 98 0 0 0 1 2 0 86
+ 0 0 1 2 0 95 94 0 1 1 0 22 0 1 1 0 56 0 1 2 0 60 0 0 61 1 0
+ 0 0 1 2 0 0 0 56 1 1 0 0 0 51 1 0 0 0 1 1 0 87 0 1 1 0 88 0
+ 1 1 0 89 0 1 1 0 91 0 1 1 0 12 0 32 1 0 0 12 79 1 0 0 0 1 1
+ 0 0 12 79 1 0 29 0 31 0 0 56 1 2 0 22 0 0 1 2 0 0 0 0 1 0 0
+ 0 37 2 0 22 0 0 1 3 0 0 0 0 0 72 1 0 0 0 63 2 0 0 0 56 1 2 0
+ 0 0 101 1 2 0 0 0 0 44 0 0 0 35 2 0 0 0 0 47 0 0 0 36 3 0 7
+ 8 0 22 25 2 0 10 0 22 23 2 0 7 8 0 24 1 0 10 0 21 1 0 0 0 45
+ 1 0 0 0 1 2 0 0 0 56 1 2 0 0 0 0 46 2 0 22 0 0 1 2 0 22 0 0
+ 1 2 0 22 0 0 40 2 0 22 0 0 1 2 0 22 0 0 49 2 0 0 0 0 43 1 0
+ 0 0 52 2 0 0 0 0 54 2 0 0 0 0 53 2 0 0 0 56 57 2 0 0 0 101 1
+ 2 0 0 0 0 55 2 0 0 12 0 34 2 0 0 56 0 1 2 0 0 101 0 1))))))
+ (QUOTE |lookupComplete|)))
+
+(MAKEPROP (QUOTE |SingleInteger|) (QUOTE NILADIC) T)
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@
+<<*>>=
+<<license>>
+
+<<category INS IntegerNumberSystem>>
+<<domain SINT SingleInteger>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}