axiom-commit Mailing List for Axiom Computer Algebra System
Brought to you by:
daly,
starseeker
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(12) |
Jun
(30) |
Jul
(5) |
Aug
(44) |
Sep
(54) |
Oct
(83) |
Nov
(138) |
Dec
(77) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(8) |
Feb
(19) |
Mar
(36) |
Apr
(57) |
May
(62) |
Jun
(95) |
Jul
(51) |
Aug
(79) |
Sep
(39) |
Oct
(25) |
Nov
(8) |
Dec
(33) |
2008 |
Jan
(35) |
Feb
(37) |
Mar
(41) |
Apr
(52) |
May
(42) |
Jun
(55) |
Jul
(42) |
Aug
(47) |
Sep
(45) |
Oct
(24) |
Nov
(53) |
Dec
(102) |
2009 |
Jan
(39) |
Feb
(58) |
Mar
(48) |
Apr
(77) |
May
(269) |
Jun
(111) |
Jul
(21) |
Aug
(102) |
Sep
(54) |
Oct
(73) |
Nov
(42) |
Dec
(26) |
2010 |
Jan
(45) |
Feb
(35) |
Mar
(15) |
Apr
(25) |
May
(80) |
Jun
(62) |
Jul
(28) |
Aug
(27) |
Sep
(31) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
2011 |
Jan
(21) |
Feb
(16) |
Mar
(12) |
Apr
(9) |
May
(23) |
Jun
(2) |
Jul
(19) |
Aug
(18) |
Sep
(20) |
Oct
(5) |
Nov
(19) |
Dec
(19) |
2012 |
Jan
(20) |
Feb
(21) |
Mar
(12) |
Apr
(19) |
May
(14) |
Jun
(3) |
Jul
|
Aug
(1) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
2013 |
Jan
(12) |
Feb
(16) |
Mar
(65) |
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
1
|
2
(4) |
3
|
4
(2) |
5
(2) |
6
(2) |
7
|
8
(4) |
9
(1) |
10
(2) |
11
(2) |
12
(2) |
13
(2) |
14
|
15
|
16
|
17
(3) |
18
(4) |
19
(1) |
20
(2) |
21
(2) |
22
(2) |
23
|
24
|
25
|
26
(2) |
27
(2) |
28
(2) |
29
|
30
(2) |
|
|
|
|
From: <da...@us...> - 2008-09-30 10:45:33
|
Revision: 984 http://axiom.svn.sourceforge.net/axiom/?rev=984&view=rev Author: daly Date: 2008-09-30 10:45:19 +0000 (Tue, 30 Sep 2008) Log Message: ----------- 20080928 tpd books/bookvol10.2 add trigcat categories 20080928 tpd books/ps/v102trigonometricfunctioncategory.ps 20080928 tpd books/ps/v102transcendentalfunctioncategory.ps 20080928 tpd books/ps/v102specialfunctioncategory.ps 20080928 tpd books/ps/v102primitivefunctioncategory.ps 20080928 tpd books/ps/v102liouvillianfunctioncategory.ps added 20080928 tpd books/ps/v102hyperbolicfunctioncategory.ps added 20080928 tpd books/ps/v102elementaryfunctioncategory.ps added 20080928 tpd books/ps/v102combinatorialfunctioncategory.ps added 20080928 tpd books/ps/v102arctrigonometricfunctioncategory.ps added 20080928 tpd books/ps/v102archyperbolicfunctioncategory.ps added 20080928 tpd src/algebra/Makefile remove trigcat 20080928 tpd src/algebra/trigcat.spad absorbed into bookvol10.2 Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/Makefile.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102archyperbolicfunctioncategory.ps trunk/axiom/books/ps/v102arctrigonometricfunctioncategory.ps trunk/axiom/books/ps/v102combinatorialfunctioncategory.ps trunk/axiom/books/ps/v102elementaryfunctioncategory.ps trunk/axiom/books/ps/v102hyperbolicfunctioncategory.ps trunk/axiom/books/ps/v102liouvillianfunctioncategory.ps trunk/axiom/books/ps/v102primitivefunctioncategory.ps trunk/axiom/books/ps/v102specialfunctioncategory.ps trunk/axiom/books/ps/v102transcendentalfunctioncategory.ps trunk/axiom/books/ps/v102trigonometricfunctioncategory.ps Removed Paths: ------------- trunk/axiom/src/algebra/trigcat.spad.pamphlet Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-28 22:36:41 UTC (rev 983) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-30 10:45:19 UTC (rev 984) @@ -286,13 +286,21 @@ This is the root of the category hierarchy and is not represented by code. {\bf See:}\\ +\pageto{ArcHyperbolicFunctionCategory}{AHYP} +\pageto{ArcTrigonometricFunctionCategory}{ATRIG} \pageto{BasicType}{BASTYPE} \pageto{CoercibleTo}{KOERCE} +\pageto{CombinatorialFunctionCategory}{CFCAT} \pageto{ConvertibleTo}{KONVERT} +\pageto{ElementaryFunctionCategory}{ELEMFUN} \pageto{Eltable}{ELTAB} +\pageto{HyperbolicFunctionCategory}{HYPCAT} \pageto{InnerEvalable}{IEVALAB} \pageto{Logic}{LOGIC} +\pageto{PrimitiveFunctionCategory}{PRIMCAT} \pageto{RetractableTo}{RETRACT} +\pageto{SpecialFunctionCategory}{SPFCAT} +\pageto{TrigonometricFunctionCategory}{TRIGCAT} \pageto{Type}{TYPE} <<CATEGORY.dotabb>>= @@ -316,6 +324,160 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ArcHyperbolicFunctionCategory}{AHYP} +\pagepic{ps/v102archyperbolicfunctioncategory.ps}{AHYP}{1.00} + +{\bf See:}\\ +\pageto{TranscendentalFunctionCategory}{TRANFUN} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{llllll} +\cross{AHYP}{acosh} & +\cross{AHYP}{acoth} & +\cross{AHYP}{acsch} & +\cross{AHYP}{asech} & +\cross{AHYP}{asinh} & +\cross{AHYP}{atanh} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + acosh : % -> % + acoth : % -> % + acsch : % -> % + asech : % -> % + asinh : % -> % + atanh : % -> % +\end{verbatim} + +<<category AHYP ArcHyperbolicFunctionCategory>>= +)abbrev category AHYP ArcHyperbolicFunctionCategory +++ Category for the inverse hyperbolic trigonometric functions +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ Category for the inverse hyperbolic trigonometric functions; +ArcHyperbolicFunctionCategory(): Category == with + acosh: $ -> $ ++ acosh(x) returns the hyperbolic arc-cosine of x. + acoth: $ -> $ ++ acoth(x) returns the hyperbolic arc-cotangent of x. + acsch: $ -> $ ++ acsch(x) returns the hyperbolic arc-cosecant of x. + asech: $ -> $ ++ asech(x) returns the hyperbolic arc-secant of x. + asinh: $ -> $ ++ asinh(x) returns the hyperbolic arc-sine of x. + atanh: $ -> $ ++ atanh(x) returns the hyperbolic arc-tangent of x. + +@ +<<AHYP.dotabb>>= +"AHYP" + [color=lightblue,href="bookvol10.2.pdf#nameddest=AHYP"]; +"AHYP" -> "CATEGORY" + +@ +<<AHYP.dotfull>>= +"ArcHyperbolicFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=AHYP"]; +"ArcHyperbolicFunctionCategory()" -> "Category" + +@ +<<AHYP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"ArcHyperbolicFunctionCategory()" [color=lightblue]; +"ArcHyperbolicFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ArcTrigonometricFunctionCategory}{ATRIG} +\pagepic{ps/v102arctrigonometricfunctioncategory.ps}{ATRIG}{1.00} + +The {\tt asec} and {\tt acsc} functions were modified to include an +intermediate test to check that the argument has a reciprocal values. + +{\bf See:}\\ +\pageto{TranscendentalFunctionCategory}{TRANFUN} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{llllll} +\cross{ATRIG}{acos} & +\cross{ATRIG}{acot} & +\cross{ATRIG}{acsc} & +\cross{ATRIG}{asec} & +\cross{ATRIG}{asin} & +\cross{ATRIG}{atan} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + acos : % -> % + acot : % -> % + asin : % -> % + atan : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + acsc : % -> % + asec : % -> % +\end{verbatim} + +<<category ATRIG ArcTrigonometricFunctionCategory>>= +)abbrev category ATRIG ArcTrigonometricFunctionCategory +++ Category for the inverse trigonometric functions +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the inverse trigonometric functions; +ArcTrigonometricFunctionCategory(): Category == with + acos: $ -> $ ++ acos(x) returns the arc-cosine of x. + acot: $ -> $ ++ acot(x) returns the arc-cotangent of x. + acsc: $ -> $ ++ acsc(x) returns the arc-cosecant of x. + asec: $ -> $ ++ asec(x) returns the arc-secant of x. + asin: $ -> $ ++ asin(x) returns the arc-sine of x. + atan: $ -> $ ++ atan(x) returns the arc-tangent of x. + add + if $ has Ring then + asec(x) == + (a := recip x) case "failed" => error "asec: no reciprocal" + acos(a::$) + acsc(x) == + (a := recip x) case "failed" => error "acsc: no reciprocal" + asin(a::$) + +@ +<<ATRIG.dotabb>>= +"ATRIG" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ATRIG"]; +"ATRIG" -> "CATEGORY" + +@ +<<ATRIG.dotfull>>= +"ArcTrigonometricFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ATRIG"]; +"ArcTrigonometricFunctionCategory()" -> "Category" + +@ +<<ATRIG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"ArcTrigonometricFunctionCategory()" [color=lightblue]; +"ArcTrigonometricFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{AttributeRegistry}{ATTREG} \pagepic{ps/v102attributeregistry.ps}{ATTREG}{1.00} @@ -610,6 +772,74 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CombinatorialFunctionCategory}{CFCAT} +\pagepic{ps/v102combinatorialfunctioncategory.ps}{CFCAT}{1.00} + +{\bf See:}\\ +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{CFCAT}{binomial} & +\cross{CFCAT}{factorial} & +\cross{CFCAT}{permutation} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + binomial : (%,%) -> % + factorial : % -> % + permutation : (%,%) -> % +\end{verbatim} + +<<category CFCAT CombinatorialFunctionCategory>>= +)abbrev category CFCAT CombinatorialFunctionCategory +++ Category for the usual combinatorial functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the usual combinatorial functions; +CombinatorialFunctionCategory(): Category == with + binomial : ($, $) -> $ + ++ binomial(n,r) returns the \spad{(n,r)} binomial coefficient + ++ (often denoted in the literature by \spad{C(n,r)}). + ++ Note: \spad{C(n,r) = n!/(r!(n-r)!)} where \spad{n >= r >= 0}. + factorial : $ -> $ + ++ factorial(n) computes the factorial of n + ++ (denoted in the literature by \spad{n!}) + ++ Note: \spad{n! = n (n-1)! when n > 0}; also, \spad{0! = 1}. + permutation: ($, $) -> $ + ++ permutation(n, m) returns the number of + ++ permutations of n objects taken m at a time. + ++ Note: \spad{permutation(n,m) = n!/(n-m)!}. + +@ +<<CFCAT.dotabb>>= +"CFCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CFCAT"]; +"CFCAT" -> "CATEGORY" + +@ +<<CFCAT.dotfull>>= +"CombinatorialFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CFCAT"]; +"CombinatorialFunctionCategory()" -> "Category" + +@ +<<CFCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"CombinatorialFunctionCategory()" [color=lightblue]; +"CombinatorialFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{ConvertibleTo}{KONVERT} \pagepic{ps/v102konvert.ps}{KONVERT}{1.00} @@ -728,6 +958,73 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ElementaryFunctionCategory}{ELEMFUN} +\pagepic{ps/v102elementaryfunctioncategory.ps}{ELEMFUN}{1.00} + +{\bf See:}\\ +\pageto{TranscendentalFunctionCategory}{TRANFUN} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{ELEMFUN}{?**?} & +\cross{ELEMFUN}{exp} & +\cross{ELEMFUN}{log} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + exp : % -> % + log : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + ?**? : (%,%) -> % +\end{verbatim} + +<<category ELEMFUN ElementaryFunctionCategory>>= +)abbrev category ELEMFUN ElementaryFunctionCategory +++ Category for the elementary functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the elementary functions; +ElementaryFunctionCategory(): Category == with + log : $ -> $ ++ log(x) returns the natural logarithm of x. + exp : $ -> $ ++ exp(x) returns %e to the power x. + "**": ($, $) -> $ ++ x**y returns x to the power y. + add + if $ has Monoid then + x ** y == exp(y * log x) + +@ +<<ELEMFUN.dotabb>>= +"ELEMFUN" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELEMFUN"]; +"ELEMFUN" -> "CATEGORY" + +@ +<<ELEMFUN.dotfull>>= +"ElementaryFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELEMFUN"]; +"ElementaryFunctionCategory()" -> "Category" + +@ +<<ELEMFUN.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"ElementaryFunctionCategory()" [color=lightblue]; +"ElementaryFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Eltable}{ELTAB} \pagepic{ps/v102eltab.ps}{ELTAB}{1.00} @@ -793,6 +1090,95 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{HyperbolicFunctionCategory}{HYPCAT} +\pagepic{ps/v102hyperbolicfunctioncategory.ps}{HYPCAT}{1.00} + +The {\tt csch} and {\tt sech} functions were modified to include an +intermediate test to check that the argument has a reciprocal values. + +{\bf See:}\\ +\pageto{TranscendentalFunctionCategory}{TRANFUN} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{llllll} +\cross{HYPCAT}{cosh} & +\cross{HYPCAT}{coth} & +\cross{HYPCAT}{csch} & +\cross{HYPCAT}{sech} & +\cross{HYPCAT}{sinh} & +\cross{HYPCAT}{tanh} +\end{tabular} + +These are implemented by this category: +\begin{verbatim} + cosh : % -> % + coth : % -> % + csch : % -> % + sech : % -> % + sinh : % -> % + tanh : % -> % +\end{verbatim} + +<<category HYPCAT HyperbolicFunctionCategory>>= +)abbrev category HYPCAT HyperbolicFunctionCategory +++ Category for the hyperbolic trigonometric functions +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the hyperbolic trigonometric functions; +HyperbolicFunctionCategory(): Category == with + cosh: $ -> $ ++ cosh(x) returns the hyperbolic cosine of x. + coth: $ -> $ ++ coth(x) returns the hyperbolic cotangent of x. + csch: $ -> $ ++ csch(x) returns the hyperbolic cosecant of x. + sech: $ -> $ ++ sech(x) returns the hyperbolic secant of x. + sinh: $ -> $ ++ sinh(x) returns the hyperbolic sine of x. + tanh: $ -> $ ++ tanh(x) returns the hyperbolic tangent of x. + add + if $ has Ring then + csch x == + (a := recip(sinh x)) case "failed" => error "csch: no reciprocal" + a::$ + sech x == + (a := recip(cosh x)) case "failed" => error "sech: no reciprocal" + a::$ + tanh x == sinh x * sech x + coth x == cosh x * csch x + if $ has ElementaryFunctionCategory then + cosh x == + e := exp x + (e + recip(e)::$) * recip(2::$)::$ + sinh(x):$ == + e := exp x + (e - recip(e)::$) * recip(2::$)::$ + +@ +<<HYPCAT.dotabb>>= +"HYPCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=HYPCAT"]; +"HYPCAT" -> "CATEGORY" + +@ +<<HYPCAT.dotfull>>= +"HyperbolicFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=HYPCAT"]; +"HyperbolicFunctionCategory()" -> "Category" + +@ +<<HYPCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"HyperbolicFunctionCategory()" [color=lightblue]; +"HyperbolicFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{InnerEvalable}{IEVALAB} \pagepic{ps/v102innerevalable.ps}{IEVALAB}{1.00} @@ -884,6 +1270,65 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{PrimitiveFunctionCategory}{PRIMCAT} +\pagepic{ps/v102primitivefunctioncategory.ps}{PRIMCAT}{1.00} + +{\bf See:}\\ +\pageto{LiouvillianFunctionCategory}{LFCAT} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{l} +\cross{PRIMCAT}{integral} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + integral : (%,Symbol) -> % + integral : (%,SegmentBinding %) -> % +\end{verbatim} + +<<category PRIMCAT PrimitiveFunctionCategory>>= +)abbrev category PRIMCAT PrimitiveFunctionCategory +++ Category for the integral functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the functions defined by integrals; +PrimitiveFunctionCategory(): Category == with + integral: ($, Symbol) -> $ + ++ integral(f, x) returns the formal integral of f dx. + integral: ($, SegmentBinding $) -> $ + ++ integral(f, x = a..b) returns the formal definite integral + ++ of f dx for x between \spad{a} and b. + +@ +<<PRIMCAT.dotabb>>= +"PRIMCAT" -> "CATEGORY" + [color=lightblue,href="bookvol10.2.pdf#nameddest=PRIMCAT"]; +"PRIMCAT" -> "CATEGORY" + +@ +<<PRIMCAT.dotfull>>= +"PrimitiveFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=PRIMCAT"]; +"PrimitiveFunctionCategory()" -> "Category" + +@ +<<PRIMCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"PrimitiveFunctionCategory()" [color=lightblue]; +"PrimitiveFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{RetractableTo}{RETRACT} \pagepic{ps/v102retractableto.ps}{RETRACT}{1.00} @@ -993,6 +1438,195 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{SpecialFunctionCategory}{SPFCAT} +\pagepic{ps/v102specialfunctioncategory.ps}{SPFCAT}{1.00} + +{\bf See:}\\ +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{SPFCAT}{abs} & +\cross{SPFCAT}{airyAi} & +\cross{SPFCAT}{airyBi} & +\cross{SPFCAT}{besselI} & +\cross{SPFCAT}{besselJ} \\ +\cross{SPFCAT}{besselK} & +\cross{SPFCAT}{besselY} & +\cross{SPFCAT}{Beta} & +\cross{SPFCAT}{digamma} & +\cross{SPFCAT}{Gamma} \\ +\cross{SPFCAT}{polygamma} & +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + abs : % -> % + airyAi : % -> % + airyBi : % -> % + besselI : (%,%) -> % + besselJ : (%,%) -> % + besselK : (%,%) -> % + besselY : (%,%) -> % + Beta : (%,%) -> % + digamma : % -> % + Gamma : % -> % + Gamma : (%,%) -> % + polygamma : (%,%) -> % +\end{verbatim} + +<<category SPFCAT SpecialFunctionCategory>>= +)abbrev category SPFCAT SpecialFunctionCategory +++ Category for the other special functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 11 May 1993 +++ Description: Category for the other special functions; +SpecialFunctionCategory(): Category == with + abs : $ -> $ + ++ abs(x) returns the absolute value of x. + Gamma: $ -> $ + ++ Gamma(x) is the Euler Gamma function. + Beta: ($,$)->$ + ++ Beta(x,y) is \spad{Gamma(x) * Gamma(y)/Gamma(x+y)}. + digamma: $ -> $ + ++ digamma(x) is the logarithmic derivative of \spad{Gamma(x)} + ++ (often written \spad{psi(x)} in the literature). + polygamma: ($, $) -> $ + ++ polygamma(k,x) is the \spad{k-th} derivative of \spad{digamma(x)}, + ++ (often written \spad{psi(k,x)} in the literature). + Gamma: ($, $) -> $ + ++ Gamma(a,x) is the incomplete Gamma function. + besselJ: ($,$) -> $ + ++ besselJ(v,z) is the Bessel function of the first kind. + besselY: ($,$) -> $ + ++ besselY(v,z) is the Bessel function of the second kind. + besselI: ($,$) -> $ + ++ besselI(v,z) is the modified Bessel function of the first kind. + besselK: ($,$) -> $ + ++ besselK(v,z) is the modified Bessel function of the second kind. + airyAi: $ -> $ + ++ airyAi(x) is the Airy function \spad{Ai(x)}. + airyBi: $ -> $ + ++ airyBi(x) is the Airy function \spad{Bi(x)}. + +@ +<<SPFCAT.dotabb>>= +"SPFCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=SPFCAT"]; +"SPFCAT" -> "CATEGORY" + +@ +<<SPFCAT.dotfull>>= +"SpecialFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=SPFCAT"]; +"SpecialFunctionCategory()" -> "Category" + +@ +<<SPFCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"SpecialFunctionCategory()" [color=lightblue]; +"SpecialFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{TrigonometricFunctionCategory}{TRIGCAT} +\pagepic{ps/v102trigonometricfunctioncategory.ps}{TRIGCAT}{1.00} + +The {\tt csc} and {\tt sec} functions were modified to include an +intermediate test to check that the argument has a reciprocal values. + +{\bf See:}\\ +\pageto{TranscendentalFunctionCategory}{TRANFUN} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{llllll} +\cross{TRIGCAT}{cos} & +\cross{TRIGCAT}{cot} & +\cross{TRIGCAT}{csc} & +\cross{TRIGCAT}{sec} & +\cross{TRIGCAT}{sin} & +\cross{TRIGCAT}{tan} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + cos : % -> % + sin : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + cot : % -> % + csc : % -> % + sec : % -> % + tan : % -> % +\end{verbatim} + +<<category TRIGCAT TrigonometricFunctionCategory>>= +)abbrev category TRIGCAT TrigonometricFunctionCategory +++ Category for the trigonometric functions +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the trigonometric functions; +TrigonometricFunctionCategory(): Category == with + cos: $ -> $ ++ cos(x) returns the cosine of x. + cot: $ -> $ ++ cot(x) returns the cotangent of x. + csc: $ -> $ ++ csc(x) returns the cosecant of x. + sec: $ -> $ ++ sec(x) returns the secant of x. + sin: $ -> $ ++ sin(x) returns the sine of x. + tan: $ -> $ ++ tan(x) returns the tangent of x. + add + if $ has Ring then + csc x == + (a := recip(sin x)) case "failed" => error "csc: no reciprocal" + a::$ + sec x == + (a := recip(cos x)) case "failed" => error "sec: no reciprocal" + a::$ + tan x == sin x * sec x + cot x == cos x * csc x + +@ +<<TRIGCAT.dotabb>>= +"TRIGCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=TRIGCAT"]; +"TRIGCAT" -> "CATEGORY" + +@ +<<TRIGCAT.dotfull>>= +"TrigonometricFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=TRIGCAT"]; +"TrigonometricFunctionCategory()" -> "Category" + +@ +<<TRIGCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"TrigonometricFunctionCategory()" [color=lightblue]; +"TrigonometricFunctionCategory()" -> "Category" + +"Category" [color=lightblue]; +} + + + + + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Type}{TYPE} \pagepic{ps/v102type.ps}{TYPE}{1.00} @@ -1665,6 +2299,201 @@ } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{TranscendentalFunctionCategory}{TRANFUN} +\pagepic{ps/v102transcendentalfunctioncategory.ps}{TRANFUN}{0.75} + +The {\tt acsch}, {\tt asech}, and {\tt acoth} functions were modified to +include an intermediate test to check that the argument has a +reciprocal values. + +{\bf See:}\\ +\pageto{LiouvillianFunctionCategory}{LFCAT} +\pagefrom{ArcHyperbolicFunctionCategory}{AHYP} +\pagefrom{ArcTrigonometricFunctionCategory}{ATRIG} +\pagefrom{ElementaryFunctionCategory}{ELEMFUN} +\pagefrom{HyperbolicFunctionCategory}{HYPCAT} +\pagefrom{TrigonometricFunctionCategory}{TRIGCAT} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{TRANFUN}{?**?} & +\cross{TRANFUN}{acos} & +\cross{TRANFUN}{acosh} & +\cross{TRANFUN}{acot} & +\cross{TRANFUN}{acoth} \\ +\cross{TRANFUN}{acsc} & +\cross{TRANFUN}{acsch} & +\cross{TRANFUN}{asec} & +\cross{TRANFUN}{asech} & +\cross{TRANFUN}{asin} \\ +\cross{TRANFUN}{asinh} & +\cross{TRANFUN}{atan} & +\cross{TRANFUN}{atanh} & +\cross{TRANFUN}{cos} & +\cross{TRANFUN}{cosh} \\ +\cross{TRANFUN}{cot} & +\cross{TRANFUN}{coth} & +\cross{TRANFUN}{csc} & +\cross{TRANFUN}{csch} & +\cross{TRANFUN}{exp} \\ +\cross{TRANFUN}{log} & +\cross{TRANFUN}{pi} & +\cross{TRANFUN}{sec} & +\cross{TRANFUN}{sech} & +\cross{TRANFUN}{sin} \\ +\cross{TRANFUN}{sinh} & +\cross{TRANFUN}{tan} & +\cross{TRANFUN}{tanh} && +\end{tabular} + +These are implemented by this category: +\begin{verbatim} + pi : () -> % +\end{verbatim} + +These exports come from TrigonometricFunctionCategory(): +\begin{verbatim} + cos : % -> % + cot : % -> % + csc : % -> % + sec : % -> % + sin : % -> % + tan : % -> % +\end{verbatim} + +These exports come from ArcTrigonometricFunctionCategory(): +\begin{verbatim} + acos : % -> % + acot : % -> % + acsc : % -> % + asec : % -> % + asin : % -> % + atan : % -> % +\end{verbatim} + +These exports come from HyperbolicFunctionCategory(): +\begin{verbatim} + cosh : % -> % + coth : % -> % + csch : % -> % + sech : % -> % + sinh : % -> % + tanh : % -> % +\end{verbatim} + +These exports come from ArcHyperbolicFunctionCategory(): +\begin{verbatim} + acosh : % -> % + acoth : % -> % + acsch : % -> % + asech : % -> % + asinh : % -> % + atanh : % -> % +\end{verbatim} + +These exports come from ElementaryFunctionCategory(): +\begin{verbatim} + ?**? : (%,%) -> % + exp : % -> % + log : % -> % +\end{verbatim} + +<<category TRANFUN TranscendentalFunctionCategory>>= +)abbrev category TRANFUN TranscendentalFunctionCategory +++ Category for the transcendental elementary functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the transcendental elementary functions; +TranscendentalFunctionCategory(): Category == + Join(TrigonometricFunctionCategory,ArcTrigonometricFunctionCategory, + HyperbolicFunctionCategory,ArcHyperbolicFunctionCategory, + ElementaryFunctionCategory) with + pi : () -> $ ++ pi() returns the constant pi. + add + if $ has Ring then + pi() == 2*asin(1) + acsch x == + (a := recip x) case "failed" => error "acsch: no reciprocal" + asinh(a::$) + asech x == + (a := recip x) case "failed" => error "asech: no reciprocal" + acosh(a::$) + acoth x == + (a := recip x) case "failed" => error "acoth: no reciprocal" + atanh(a::$) + if $ has Field and $ has sqrt: $ -> $ then + asin x == atan(x/sqrt(1-x**2)) + acos x == pi()/2::$ - asin x + acot x == pi()/2::$ - atan x + asinh x == log(x + sqrt(x**2 + 1)) + acosh x == 2*log(sqrt((x+1)/2::$) + sqrt((x-1)/2::$)) + atanh x == (log(1+x)-log(1-x))/2::$ + +@ +<<TRANFUN.dotabb>>= +"TRANFUN" -> "TRIGCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=TRANFUN"]; +"TRANFUN" -> "TRIGCAT" +"TRANFUN" -> "ATRIG" +"TRANFUN" -> "HYPCAT" +"TRANFUN" -> "AHYP" +"TRANFUN" -> "ELEMFUN" + +@ +<<TRANFUN.dotfull>>= +"TranscendentalFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=TRANFUN"]; +"TranscendentalFunctionCategory()" -> + "TrigonometricFunctionCategory()" +"TranscendentalFunctionCategory()" -> + "ArcTrigonometricFunctionCategory()" +"TranscendentalFunctionCategory()" -> + "HyperbolicFunctionCategory()" +"TranscendentalFunctionCategory()" -> + "ArcHyperbolicFunctionCategory()" +"TranscendentalFunctionCategory()" -> + "ElementaryFunctionCategory()" + +@ +<<TRANFUN.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"TranscendentalFunctionCategory()" [color=lightblue]; +"TranscendentalFunctionCategory()" -> + "TRIGCAT" +"TranscendentalFunctionCategory()" -> + "ATRIG" +"TranscendentalFunctionCategory()" -> + "HYPCAT" +"TranscendentalFunctionCategory()" -> + "AHYP" +"TranscendentalFunctionCategory()" -> + "ELEMFUN" + +"TRIGCAT" [color=lightblue]; +"TRIGCAT" -> "Category" + +"ATRIG" [color=lightblue]; +"ATRIG" -> "Category" + +"HYPCAT" [color=lightblue]; +"HYPCAT" -> "Category" + +"AHYP" [color=lightblue]; +"AHYP" -> "Category" + +"ELEMFUN" [color=lightblue]; +"ELEMFUN" -> "Category" + +"Category" [color=lightblue]; +} + +@ \chapter{Category Layer 3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{AbelianSemiGroup}{ABELSG} @@ -2264,6 +3093,189 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{LiouvillianFunctionCategory}{LFCAT} +\pagepic{ps/v102liouvillianfunctioncategory.ps}{LFCAT}{0.60} + +{\bf See:}\\ +\pagefrom{PrimitiveFunctionCategory}{PRIMCAT} +\pagefrom{TranscendentalFunctionCategory}{TRANFUN} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{LFCAT}{?**?} & +\cross{LFCAT}{Ci} & +\cross{LFCAT}{Ei} & +\cross{LFCAT}{Si} & +\cross{LFCAT}{acos} \\ +\cross{LFCAT}{acosh} & +\cross{LFCAT}{acot} & +\cross{LFCAT}{acoth} & +\cross{LFCAT}{acsc} & +\cross{LFCAT}{acsch} \\ +\cross{LFCAT}{asec} & +\cross{LFCAT}{asech} & +\cross{LFCAT}{asin} & +\cross{LFCAT}{asinh} & +\cross{LFCAT}{atan} \\ +\cross{LFCAT}{atanh} & +\cross{LFCAT}{cos} & +\cross{LFCAT}{cosh} & +\cross{LFCAT}{cot} & +\cross{LFCAT}{coth} \\ +\cross{LFCAT}{csc} & +\cross{LFCAT}{csch} & +\cross{LFCAT}{dilog} & +\cross{LFCAT}{erf} & +\cross{LFCAT}{exp} \\ +\cross{LFCAT}{integral} & +\cross{LFCAT}{integral} & +\cross{LFCAT}{li} & +\cross{LFCAT}{log} & +\cross{LFCAT}{pi} \\ +\cross{LFCAT}{sec} & +\cross{LFCAT}{sech} & +\cross{LFCAT}{sin} & +\cross{LFCAT}{sinh} & +\cross{LFCAT}{tan} \\ +\cross{LFCAT}{tanh} &&&& +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + Ci : % -> % + dilog : % -> % + Ei : % -> % + erf : % -> % + li : % -> % + Si : % -> % +\end{verbatim} + +These exports come from PrimitiveFunctionCategory() +\begin{verbatim} + integral : (%,Symbol) -> % + integral : (%,SegmentBinding %) -> % +\end{verbatim} + +These exports come from TranscendentalFunctionCategory(): +\begin{verbatim} + ?**? : (%,%) -> % + acos : % -> % + acosh : % -> % + acot : % -> % + acoth : % -> % + acsc : % -> % + acsch : % -> % + asec : % -> % + asech : % -> % + asin : % -> % + asinh : % -> % + atan : % -> % + atanh : % -> % + cos : % -> % + cosh : % -> % + cot : % -> % + coth : % -> % + csc : % -> % + csch : % -> % + exp : % -> % + log : % -> % + pi : () -> % + sec : % -> % + sech : % -> % + sin : % -> % + sinh : % -> % + tan : % -> % + tanh : % -> % +\end{verbatim} + +<<category LFCAT LiouvillianFunctionCategory>>= +)abbrev category LFCAT LiouvillianFunctionCategory +++ Category for the transcendental Liouvillian functions +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: Category for the transcendental Liouvillian functions; +LiouvillianFunctionCategory(): Category == + Join(PrimitiveFunctionCategory, TranscendentalFunctionCategory) with + Ei : $ -> $ + ++ Ei(x) returns the exponential integral of x, i.e. + ++ the integral of \spad{exp(x)/x dx}. + Si : $ -> $ + ++ Si(x) returns the sine integral of x, i.e. + ++ the integral of \spad{sin(x) / x dx}. + Ci : $ -> $ + ++ Ci(x) returns the cosine integral of x, i.e. + ++ the integral of \spad{cos(x) / x dx}. + li : $ -> $ + ++ li(x) returns the logarithmic integral of x, i.e. + ++ the integral of \spad{dx / log(x)}. + dilog : $ -> $ + ++ dilog(x) returns the dilogarithm of x, i.e. + ++ the integral of \spad{log(x) / (1 - x) dx}. + erf : $ -> $ + ++ erf(x) returns the error function of x, i.e. + ++ \spad{2 / sqrt(%pi)} times the integral of \spad{exp(-x**2) dx}. + +@ +<<LFCAT.dotabb>>= +"LFCAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LFCAT"]; +"LFCAT" -> "PRIMCAT" +"LFCAT" -> "TRANFUN" + +@ +<<LFCAT.dotfull>>= +"LiouvillianFunctionCategory()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LFCAT"]; +"LiouvillianFunctionCategory()" -> "PrimitiveFunctionCategory()" +"LiouvillianFunctionCategory()" -> "TranscendentalFunctionCategory()" + +@ +<<LFCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"LiouvillianFunctionCategory()" [color=lightblue]; +"LiouvillianFunctionCategory()" -> "PrimitiveFunctionCategory()" +"LiouvillianFunctionCategory()" -> "TranscendentalFunctionCategory()" + +"PrimitiveFunctionCategory()" [color=lightblue]; +"PrimitiveFunctionCategory()" -> "Category" + +"TranscendentalFunctionCategory()" [color=lightblue]; +"TranscendentalFunctionCategory()" -> + "TRIGCAT" +"TranscendentalFunctionCategory()" -> + "ATRIG" +"TranscendentalFunctionCategory()" -> + "HYPCAT" +"TranscendentalFunctionCategory()" -> + "AHYP" +"TranscendentalFunctionCategory()" -> + "ELEMFUN" + +"TRIGCAT" [color=lightblue]; +"TRIGCAT" -> "Category" + +"ATRIG" [color=lightblue]; +"ATRIG" -> "Category" + +"HYPCAT" [color=lightblue]; +"HYPCAT" -> "Category" + +"AHYP" [color=lightblue]; +"AHYP" -> "Category" + +"ELEMFUN" [color=lightblue]; +"ELEMFUN" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Monad}{MONAD} \pagepic{ps/v102monad.ps}{MONAD}{0.70} @@ -28110,9 +29122,11 @@ <<category ABELMON AbelianMonoid>> <<category ABELSG AbelianSemiGroup>> <<category AGG Aggregate>> +<<category AHYP ArcHyperbolicFunctionCategory>> <<category ALAGG AssociationListAggregate>> <<category ALGEBRA Algebra>> <<category ARR2CAT TwoDimensionalArrayCategory>> +<<category ATRIG ArcTrigonometricFunctionCategory>> <<category ATTREG AttributeRegistry>> <<category A1AGG OneDimensionalArrayAggregate>> <<category BASTYPE BasicType>> @@ -28121,6 +29135,7 @@ <<category BRAGG BinaryRecursiveAggregate>> <<category BTAGG BitAggregate>> <<category CABMON CancellationAbelianMonoid>> +<<category CFCAT CombinatorialFunctionCategory>> <<category CHARNZ CharacteristicNonZero>> <<category CHARZ CharacteristicZero>> <<category CLAGG Collection>> @@ -28133,6 +29148,7 @@ <<category DLAGG DoublyLinkedAggregate>> <<category DQAGG DequeueAggregate>> <<category ELAGG ExtensibleLinearAggregate>> +<<category ELEMFUN ElementaryFunctionCategory>> <<category ELTAB Eltable>> <<category ELTAGG EltableAggregate>> <<category ENTIRER EntireRing>> @@ -28154,12 +29170,14 @@ <<category GRMOD GradedModule>> <<category GROUP Group>> <<category HOAGG HomogeneousAggregate>> +<<category HYPCAT HyperbolicFunctionCategory>> <<category IEVALAB InnerEvalable>> <<category INTDOM IntegralDomain>> <<category IXAGG IndexedAggregate>> <<category KDAGG KeyedDictionary>> <<category KOERCE CoercibleTo>> <<category KONVERT ConvertibleTo>> +<<category LFCAT LiouvillianFunctionCategory>> <<category LINEXP LinearlyExplicitRingOver>> <<category LMODULE LeftModule>> <<category LNAGG LinearAggregate>> @@ -28189,6 +29207,7 @@ <<category PDRING PartialDifferentialRing>> <<category PFECAT PolynomialFactorizationExplicit>> <<category PID PrincipalIdealDomain>> +<<category PRIMCAT PrimitiveFunctionCategory>> <<category PRQAGG PriorityQueueAggregate>> <<category QUAGG QueueAggregate>> <<category RCAGG RecursiveAggregate>> @@ -28200,9 +29219,12 @@ <<category SETCAT SetCategory>> <<category SGROUP SemiGroup>> <<category SKAGG StackAggregate>> +<<category SPFCAT SpecialFunctionCategory>> <<category SRAGG StringAggregate>> <<category STAGG StreamAggregate>> <<category STEP StepThrough>> +<<category TRANFUN TranscendentalFunctionCategory>> +<<category TRIGCAT TrigonometricFunctionCategory>> <<category TYPE Type>> <<category TBAGG TableAggregate>> <<category UFD UniqueFactorizationDomain>> @@ -28220,9 +29242,11 @@ <<ABELMON.dotabb>> <<ABELSG.dotabb>> <<AGG.dotabb>> +<<AHYP.dotabb>> <<ALAGG.dotabb>> <<ALGEBRA.dotabb>> <<ARR2CAT.dotabb>> +<<ATRIG.dotabb>> <<ATTREG.dotabb>> <<A1AGG.dotabb>> <<BASTYPE.dotabb>> @@ -28231,6 +29255,7 @@ <<BRAGG.dotabb>> <<BTAGG.dotabb>> <<CABMON.dotabb>> +<<CFCAT.dotabb>> <<CHARNZ.dotabb>> <<CHARZ.dotabb>> <<CLAGG.dotabb>> @@ -28242,6 +29267,7 @@ <<DLAGG.dotabb>> <<DQAGG.dotabb>> <<ELAGG.dotabb>> +<<ELEMFUN.dotabb>> <<ELTAB.dotabb>> <<ELTAGG.dotabb>> <<ENTIRER.dotabb>> @@ -28262,12 +29288,14 @@ <<GRALG.dotabb>> <<GRMOD.dotabb>> <<HOAGG.dotabb>> +<<HYPCAT.dotabb>> <<IEVALAB.dotabb>> <<INTDOM.dotabb>> <<IXAGG.dotabb>> <<KDAGG.dotabb>> <<KOERCE.dotabb>> <<KONVERT.dotabb>> +<<LFCAT.dotabb>> <<LINEXP.dotabb>> <<LMODULE.dotabb>> <<LNAGG.dotabb>> @@ -28297,6 +29325,7 @@ <<PDRING.dotabb>> <<PFECAT.dotabb>> <<PID.dotabb>> +<<PRIMCAT.dotabb>> <<PRQAGG.dotabb>> <<QUAGG.dotabb>> <<RCAGG.dotabb>> @@ -28308,9 +29337,12 @@ <<SETCAT.dotabb>> <<SGROUP.dotabb>> <<SKAGG.dotabb>> +<<SPFCAT.dotabb>> <<SRAGG.dotabb>> <<STAGG.dotabb>> <<STEP.dotabb>> +<<TRANFUN.dotabb>> +<<TRIGCAT.dotabb>> <<TYPE.dotabb>> <<TBAGG.dotabb>> <<UFD.dotabb>> @@ -28331,9 +29363,11 @@ <<ABELMON.dotfull>> <<ABELSG.dotfull>> <<AGG.dotfull>> +<<AHYP.dotfull>> <<ALAGG.dotfull>> <<ALGEBRA.dotfull>> <<ARR2CAT.dotfull>> +<<ATRIG.dotfull>> <<ATTREG.dotfull>> <<A1AGG.dotfull>> <<BASTYPE.dotfull>> @@ -28342,6 +29376,7 @@ <<BRAGG.dotfull>> <<BTAGG.dotfull>> <<CABMON.dotfull>> +<<CFCAT.dotfull>> <<CHARNZ.dotfull>> <<CHARZ.dotfull>> <<CLAGG.dotfull>> @@ -28353,6 +29388,7 @@ <<DLAGG.dotfull>> <<DQAGG.dotfull>> <<ELAGG.dotfull>> +<<ELEMFUN.dotfull>> <<ELTAB.dotfull>> <<ELTAGG.dotfull>> <<ENTIRER.dotfull>> @@ -28373,12 +29409,14 @@ <<GRALG.dotfull>> <<GRMOD.dotfull>> <<HOAGG.dotfull>> +<<HYPCAT.dotfull>> <<IEVALAB.dotfull>> <<INTDOM.dotfull>> <<IXAGG.dotfull>> <<KDAGG.dotfull>> <<KOERCE.dotfull>> <<KONVERT.dotfull>> +<<LFCAT.dotfull>> <<LINEXP.dotfull>> <<LMODULE.dotfull>> <<LNAGG.dotfull>> @@ -28408,6 +29446,7 @@ <<PDRING.dotfull>> <<PFECAT.dotfull>> <<PID.dotfull>> +<<PRIMCAT.dotfull>> <<PRQAGG.dotfull>> <<QUAGG.dotfull>> <<RCAGG.dotfull>> @@ -28419,9 +29458,12 @@ <<SETCAT.dotfull>> <<SGROUP.dotfull>> <<SKAGG.dotfull>> +<<SPFCAT.dotfull>> <<SRAGG.dotfull>> <<STAGG.dotfull>> <<STEP.dotfull>> +<<TRANFUN.dotfull>> +<<TRIGCAT.dotfull>> <<TYPE.dotfull>> <<TBAGG.dotfull>> <<UFD.dotfull>> Added: trunk/axiom/books/ps/v102archyperbolicfunctioncategory.ps =================================================================== --- trunk/axiom/books/ps/v102archyperbolicfunctioncategory.ps (rev 0) +++ trunk/axiom/books/ps/v102archyperbolicfunctioncategory.ps 2008-09-30 10:45:19 UTC (rev 984) @@ -0,0 +1,289 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 256 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 256 152 +%%PageOrientation: Portrait +gsave +36 36 220 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +218 114 lineto +218 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +218 114 lineto +218 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ArcHyperbolicFunctionCategory() +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 212 108 moveto +0 108 lineto +0 72 lineto +212 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 212 108 moveto +0 108 lineto +0 72 lineto +212 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 85 moveto +(ArcHyperbolicFunctionCategory\(\)) +[10.08 4.8 6.24 10.08 6.96 6.96 6.24 4.8 6.96 6.96 3.84 3.84 6.24 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% Category +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +72 36 lineto +72 0 lineto +140 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +72 36 lineto +72 0 lineto +140 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +80 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% ArcHyperbolicFunctionCategory()->Category +newpath 106 72 moveto +106 64 106 55 106 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 110 46 moveto +106 36 lineto +103 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 110 46 moveto +106 36 lineto +103 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF Added: trunk/axiom/books/ps/v102arctrigonometricfunctioncategory.ps =================================================================== --- trunk/axiom/books/ps/v102arctrigonometricfunctioncategory.ps (rev 0) +++ trunk/axiom/books/ps/v102arctrigonometricfunctioncategory.ps 2008-09-30 10:45:19 UTC (rev 984) @@ -0,0 +1,289 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 272 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 272 152 +%%PageOrientation: Portrait +gsave +36 36 236 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +234 114 lineto +234 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +234 114 lineto +234 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ArcTrigonometricFunctionCategory() +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 228 108 moveto +0 108 lineto +0 72 lineto +228 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 228 108 moveto +0 108 lineto +0 72 lineto +228 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(ArcTrigonometricFunctionCategory\(\)) +[10.08 4.8 6.24 7.92 5.04 3.84 6.96 6.96 6.96 6.96 10.8 6 3.84 5.04 3.84 6.24 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% Category +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +80 36 lineto +80 0 lineto +148 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +80 36 lineto +80 0 lineto +148 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +88 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% ArcTrigonometricFunctionCategory()->Category +newpath 114 72 moveto +114 64 114 55 114 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 118 46 moveto +114 36 lineto +111 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 118 46 moveto +114 36 lineto +111 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF Added: trunk/axiom/books/ps/v102combinatorialfunctioncategory.ps =================================================================== --- trunk/axiom/books/ps/v102combinatorialfunctioncategory.ps (rev 0) +++ trunk/axiom/books/ps/v102combinatorialfunctioncategory.ps 2008-09-30 10:45:19 UTC (rev 984) @@ -0,0 +1,289 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 250 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 250 152 +%%PageOrientation: Portrait +gsave +36 36 214 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +212 114 lineto +212 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +212 114 lineto +212 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% CombinatorialFunctionCategory() +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 206 108 moveto +0 108 lineto +0 72 lineto +206 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 206 108 moveto +0 108 lineto +0 72 lineto +206 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 85 moveto +(CombinatorialFunctionCategory\(\)) +[9.36 6.96 10.8 6.96 3.84 6.96 6.24 3.84 6.96 5.04 3.84 6.24 3.84 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56] +xshow +end grestore +end grestore +% Category +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 137 36 moveto +69 36 lineto +69 0 lineto +137 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 137 36 moveto +69 36 lineto +69 0 lineto +137 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +77 13 moveto +(Category) +[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96] +xshow +end grestore +end grestore +% CombinatorialFunctionCategory()->Category +newpath 103 72 moveto +103 64 103 55 103 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 107 46 moveto +103 36 lineto +100 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 107 46 moveto +103 36 lineto +100 46 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF Added: trunk/axiom/books/ps/v102elementaryfunctioncategory.ps =================================================================== --- trunk/axiom/books/ps/v102elementaryfunctioncategory.ps (rev 0) +++ trunk/axiom/books/ps/v102elementaryfunctioncategory.ps 2008-09-30 10:45:19 UTC (rev 984) @@ -0,0 +1,289 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 236 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix ... [truncated message content] |
From: <gi...@ax...> - 2008-09-30 10:43:21
|
books/bookvol10.2.pamphlet | 1042 ++++++++++++++++++++++ books/ps/v102archyperbolicfunctioncategory.ps | 289 ++++++ books/ps/v102arctrigonometricfunctioncategory.ps | 289 ++++++ books/ps/v102combinatorialfunctioncategory.ps | 289 ++++++ books/ps/v102elementaryfunctioncategory.ps | 289 ++++++ books/ps/v102hyperbolicfunctioncategory.ps | 289 ++++++ books/ps/v102liouvillianfunctioncategory.ps | 713 +++++++++++++++ books/ps/v102primitivefunctioncategory.ps | 289 ++++++ books/ps/v102specialfunctioncategory.ps | 289 ++++++ books/ps/v102transcendentalfunctioncategory.ps | 599 +++++++++++++ books/ps/v102trigonometricfunctioncategory.ps | 289 ++++++ changelog | 23 + src/algebra/Makefile.pamphlet | 6 +- src/algebra/trigcat.spad.pamphlet | 388 -------- 14 files changed, 4691 insertions(+), 392 deletions(-) New commits: commit 5ad7e4f55770bd413d0ff05645fa30358142f701 Author: Tim Daly <da...@ax...> Date: Sat Aug 2 19:29:49 2008 -0400 20080928 tpd books/bookvol10.2 add trigcat categories 20080928 tpd books/ps/v102trigonometricfunctioncategory.ps 20080928 tpd books/ps/v102transcendentalfunctioncategory.ps 20080928 tpd books/ps/v102specialfunctioncategory.ps 20080928 tpd books/ps/v102primitivefunctioncategory.ps 20080928 tpd books/ps/v102liouvillianfunctioncategory.ps added 20080928 tpd books/ps/v102hyperbolicfunctioncategory.ps added 20080928 tpd books/ps/v102elementaryfunctioncategory.ps added 20080928 tpd books/ps/v102combinatorialfunctioncategory.ps added 20080928 tpd books/ps/v102arctrigonometricfunctioncategory.ps added 20080928 tpd books/ps/v102archyperbolicfunctioncategory.ps added 20080928 tpd src/algebra/Makefile remove trigcat 20080928 tpd src/algebra/trigcat.spad absorbed into bookvol10.2 |
From: <da...@us...> - 2008-09-28 22:36:52
|
Revision: 983 http://axiom.svn.sourceforge.net/axiom/?rev=983&view=rev Author: daly Date: 2008-09-28 22:36:41 +0000 (Sun, 28 Sep 2008) Log Message: ----------- 20080927 tpd books/ps/v102nonassociativerng.ps added 20080927 tpd books/ps/v102nonassociativering.ps added 20080927 tpd books/ps/v102nonassociativealgebra.ps added 20080927 tpd books/ps/v102monadwithunit.ps added 20080927 tpd books/ps/v102monad.ps added 20080927 tpd books/ps/v102gradedmodule.ps added 20080927 tpd books/ps/v102gradedalgebra.ps added 20080927 tpd books/ps/v102functionfieldcategory.ps added 20080927 tpd books/ps/v102framednonassociativealgebra.ps added 20080927 tpd books/ps/v102finiteranknonassociativealgebra.ps added 20080927 tpd src/algebra/Makefile remove naalgc 20080927 tpd books/bookvol10.2 add categories 20080927 tpd src/algebra/naalgc.spad absorbed into bookvol10.2 20080927 tpd src/algebra/curve.spad move categories to bookvol10.2 20080927 tpd src/algebra/carten.spad move categories to bookvol10.2 Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/Makefile.pamphlet trunk/axiom/src/algebra/carten.spad.pamphlet trunk/axiom/src/algebra/curve.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102finiteranknonassociativealgebra.ps trunk/axiom/books/ps/v102framednonassociativealgebra.ps trunk/axiom/books/ps/v102functionfieldcategory.ps trunk/axiom/books/ps/v102gradedalgebra.ps trunk/axiom/books/ps/v102gradedmodule.ps trunk/axiom/books/ps/v102monad.ps trunk/axiom/books/ps/v102monadwithunit.ps trunk/axiom/books/ps/v102nonassociativealgebra.ps trunk/axiom/books/ps/v102nonassociativering.ps trunk/axiom/books/ps/v102nonassociativerng.ps Removed Paths: ------------- trunk/axiom/src/algebra/naalgc.spad.pamphlet Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-27 16:25:03 UTC (rev 982) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-28 22:36:41 UTC (rev 983) @@ -889,6 +889,7 @@ {\bf See:}\\ \pageto{FullyRetractableTo}{FRETRCT} +\pageto{GradedAlgebra}{GRALG} \pagefrom{Category}{CATEGORY} {\bf Exports:}\\ @@ -976,6 +977,7 @@ "RetractableTo(CommutativeRing)" [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" + @ <<RETRACT.dotpic>>= digraph pic { @@ -1562,6 +1564,7 @@ {\bf See:}\\ \pageto{AbelianSemiGroup}{ABELSG} \pageto{Finite}{FINITE} +\pageto{GradedModule}{GRMOD} \pageto{HomogeneousAggregate}{HOAGG} \pageto{OrderedSet}{ORDSET} \pageto{SemiGroup}{SGROUP} @@ -1894,6 +1897,142 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{GradedModule}{GRMOD} +\pagepic{ps/v102gradedmodule.ps}{GRMOD}{1.00} + +{\bf See:}\\ +\pageto{GradedAlgebra}{GRALG} +\pagefrom{SetCategory}{SETCAT} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{GRMOD}{0} & +\cross{GRMOD}{coerce} & +\cross{GRMOD}{degree} & +\cross{GRMOD}{hash} & +\cross{GRMOD}{latex} \\ +\cross{GRMOD}{?\~{}=?} & +\cross{GRMOD}{?*?} & +\cross{GRMOD}{?+?} & +\cross{GRMOD}{?-?} & +\cross{GRMOD}{-?} \\ +\cross{GRMOD}{?=?} &&&& +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + 0 : () -> % + degree : % -> E + ?*? : (%,R) -> % + ?*? : (R,%) -> % + -? : % -> % + ?+? : (%,%) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + ?-? : (%,%) -> % +\end{verbatim} + +These exports come from SetCategory(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?~=? : (%,%) -> Boolean + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category GRMOD GradedModule>>= +)abbrev category GRMOD GradedModule +++ Author: Stephen M. Watt +++ Date Created: May 20, 1991 +++ Date Last Updated: May 20, 1991 +++ Basic Operations: +, *, degree +++ Related Domains: CartesianTensor(n,dim,R) +++ Also See: +++ AMS Classifications: +++ Keywords: graded module, tensor, multi-linear algebra +++ Examples: +++ References: Algebra 2d Edition, MacLane and Birkhoff, MacMillan 1979 +++ Description: +++ GradedModule(R,E) denotes ``E-graded R-module'', i.e. collection of +++ R-modules indexed by an abelian monoid E. +++ An element \spad{g} of \spad{G[s]} for some specific \spad{s} in \spad{E} +++ is said to be an element of \spad{G} with {\em degree} \spad{s}. +++ Sums are defined in each module \spad{G[s]} so two elements of \spad{G} +++ have a sum if they have the same degree. +++ +++ Morphisms can be defined and composed by degree to give the +++ mathematical category of graded modules. + +GradedModule(R: CommutativeRing, E: AbelianMonoid): Category == + SetCategory with + degree: % -> E + ++ degree(g) names the degree of g. The set of all elements + ++ of a given degree form an R-module. + 0: constant -> % + ++ 0 denotes the zero of degree 0. + _*: (R, %) -> % + ++ r*g is left module multiplication. + _*: (%, R) -> % + ++ g*r is right module multiplication. + + _-: % -> % + ++ -g is the additive inverse of g in the module of elements + ++ of the same grade as g. + _+: (%, %) -> % + ++ g+h is the sum of g and h in the module of elements of + ++ the same degree as g and h. Error: if g and h + ++ have different degrees. + _-: (%, %) -> % + ++ g-h is the difference of g and h in the module of elements of + ++ the same degree as g and h. Error: if g and h + ++ have different degrees. + add + (x: %) - (y: %) == x+(-y) + +@ +<<GRMOD.dotabb>>= +"GRMOD" + [color=lightblue,href="bookvol10.2.pdf#nameddest=GRMOD"]; +"GRMOD" -> "SETCAT" + +@ +<<GRMOD.dotfull>>= +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=GRMOD"]; +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" -> "SetCategory()" + +@ +<<GRMOD.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" [color=lightblue]; +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" -> "SetCategory()" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{HomogeneousAggregate}{HOAGG} \pagepic{ps/v102homogeneousaggregate.ps}{HOAGG}{1.00} @@ -2125,6 +2264,145 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Monad}{MONAD} +\pagepic{ps/v102monad.ps}{MONAD}{0.70} + +{\bf See:}\\ +\pageto{MonadWithUnit}{MONADWU} +\pageto{NonAssociativeRng}{NARNG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{MONAD}{coerce} & +\cross{MONAD}{hash} & +\cross{MONAD}{latex} & +\cross{MONAD}{leftPower} & +\cross{MONAD}{rightPower} \\ +\cross{MONAD}{?**?} & +\cross{MONAD}{?*?} & +\cross{MONAD}{?=?} & +\cross{MONAD}{?\~{}=?} & +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + ?*? : (%,%) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + leftPower : (%,PositiveInteger) -> % + rightPower : (%,PositiveInteger) -> % + ?**? : (%,PositiveInteger) -> % +\end{verbatim} + +These exports come from SetCategory(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category MONAD Monad>>= +)abbrev category MONAD Monad +++ Authors: J. Grabmeier, R. Wisbauer +++ Date Created: 01 March 1991 +++ Date Last Updated: 11 June 1991 +++ Basic Operations: *, ** +++ Related Constructors: SemiGroup, Monoid, MonadWithUnit +++ Also See: +++ AMS Classifications: +++ Keywords: Monad, binary operation +++ Reference: +++ N. Jacobson: Structure and Representations of Jordan Algebras +++ AMS, Providence, 1968 +++ Description: +++ Monad is the class of all multiplicative monads, i.e. sets +++ with a binary operation. +Monad(): Category == SetCategory with + "*": (%,%) -> % + ++ a*b is the product of \spad{a} and b in a set with + ++ a binary operation. + rightPower: (%,PositiveInteger) -> % + ++ rightPower(a,n) returns the \spad{n}-th right power of \spad{a}, + ++ i.e. \spad{rightPower(a,n) := rightPower(a,n-1) * a} and + ++ \spad{rightPower(a,1) := a}. + leftPower: (%,PositiveInteger) -> % + ++ leftPower(a,n) returns the \spad{n}-th left power of \spad{a}, + ++ i.e. \spad{leftPower(a,n) := a * leftPower(a,n-1)} and + ++ \spad{leftPower(a,1) := a}. + "**": (%,PositiveInteger) -> % + ++ a**n returns the \spad{n}-th power of \spad{a}, + ++ defined by repeated squaring. + add + import RepeatedSquaring(%) + x:% ** n:PositiveInteger == expt(x,n) + rightPower(a,n) == +-- one? n => a + (n = 1) => a + res := a + for i in 1..(n-1) repeat res := res * a + res + leftPower(a,n) == +-- one? n => a + (n = 1) => a + res := a + for i in 1..(n-1) repeat res := a * res + res + +@ +<<MONAD.dotabb>>= +"MONAD" + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONAD"]; +"MONAD" -> "SETCAT" + +@ +<<MONAD.dotfull>>= +"Monad()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONAD"]; +"Monad()" -> "SetCategory()" +"Monad()" -> "RepeatedSquaring(Monad)" + +@ +<<MONAD.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Monad()" [color=lightblue]; +"Monad()" -> "SetCategory()" +"Monad()" -> "RepeatedSquaring(Monad)" + +"RepeatedSquaring(Monad)" [color="#00EE00"]; +"RepeatedSquaring(Monad)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{OrderedSet}{ORDSET} \pagepic{ps/v102orderedset.ps}{ORDSET}{1.00} @@ -2626,552 +2904,6 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\pagehead{TwoDimensionalArrayCategory}{ARR2CAT} -\pagepic{ps/v102twodimensionalarraycategory.ps}{ARR2CAT}{0.60} - -TwoDimensionalArrayCategory is a general array category which -allows different representations and indexing schemes. -Rows and columns may be extracted with rows returned as objects -of type Row and columns returned as objects of type Col. -The index of the 'first' row may be obtained by calling the -function 'minRowIndex'. The index of the 'first' column may -be obtained by calling the function 'minColIndex'. The index of -the first element of a 'Row' is the same as the index of the -first column in an array and vice versa. - -{\bf See:}\\ -\pagefrom{HomogeneousAggregate}{HOAGG} - -{\bf Exports:}\\ -\begin{tabular}{lllll} -\cross{ARR2CAT}{any?} & -\cross{ARR2CAT}{column} & -\cross{ARR2CAT}{coerce} & -\cross{ARR2CAT}{copy} & -\cross{ARR2CAT}{count} \\ -\cross{ARR2CAT}{elt} & -\cross{ARR2CAT}{empty} & -\cross{ARR2CAT}{empty?} & -\cross{ARR2CAT}{eq?} & -\cross{ARR2CAT}{eval} \\ -\cross{ARR2CAT}{every?} & -\cross{ARR2CAT}{fill!} & -\cross{ARR2CAT}{hash} & -\cross{ARR2CAT}{latex} & -\cross{ARR2CAT}{less?} \\ -\cross{ARR2CAT}{map} & -\cross{ARR2CAT}{map!} & -\cross{ARR2CAT}{maxColIndex} & -\cross{ARR2CAT}{maxRowIndex} & -\cross{ARR2CAT}{member?} \\ -\cross{ARR2CAT}{members} & -\cross{ARR2CAT}{minColIndex} & -\cross{ARR2CAT}{minRowIndex} & -\cross{ARR2CAT}{more?} & -\cross{ARR2CAT}{ncols} \\ -\cross{ARR2CAT}{new} & -\cross{ARR2CAT}{nrows} & -\cross{ARR2CAT}{parts} & -\cross{ARR2CAT}{qelt} & -\cross{ARR2CAT}{qsetelt!} \\ -\cross{ARR2CAT}{row} & -\cross{ARR2CAT}{sample} & -\cross{ARR2CAT}{setColumn!} & -\cross{ARR2CAT}{setRow!} & -\cross{ARR2CAT}{setelt} \\ -\cross{ARR2CAT}{size?} & -\cross{ARR2CAT}{\#?} & -\cross{ARR2CAT}{?=?} & -\cross{ARR2CAT}{?\~{}=?} & -\end{tabular} - -{\bf Attributes Exported:} -\begin{itemize} -\item {\bf \cross{ARR2CAT}{finiteAggregate}} -is true if it is an aggregate with a finite number of elements. -\item {\bf \cross{ARR2CAT}{shallowlyMutable}} -is true if its values have immediate components that are -updateable (mutable). Note: the properties of any component -domain are irrevelant to the shallowlyMutable proper. -\end{itemize} - -{\bf Attributes Used:} -\begin{itemize} -\item {\bf \cross{ARR2CAT}{shallowlyMutable}} -is true if its values have immediate components that are -updateable (mutable). Note: the properties of any component -domain are irrevelant to the shallowlyMutable proper. -\end{itemize} - -These are directly exported but not implemented: -\begin{verbatim} - elt : (%,Integer,Integer) -> R - maxColIndex : % -> Integer - maxRowIndex : % -> Integer - minColIndex : % -> Integer - minRowIndex : % -> Integer - new : (NonNegativeInteger,NonNegativeInteger,R) -> % - ncols : % -> NonNegativeInteger - nrows : % -> NonNegativeInteger - qelt : (%,Integer,Integer) -> R - qsetelt! : (%,Integer,Integer,R) -> R - setelt : (%,Integer,Integer,R) -> R -\end{verbatim} - -These are implemented by this category: -\begin{verbatim} - any? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate - copy : % -> % - coerce : % -> OutputForm if R has SETCAT - column : (%,Integer) -> Col - count : ((R -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate - count : (R,%) -> NonNegativeInteger if R has SETCAT and $ has finiteAggregate - elt : (%,Integer,Integer,R) -> R - every? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate - fill! : (%,R) -> % - less? : (%,NonNegativeInteger) -> Boolean - map : ((R -> R),%) -> % - map : (((R,R) -> R),%,%) -> % - map : (((R,R) -> R),%,%,R) -> % - map! : ((R -> R),%) -> % - member? : (R,%) -> Boolean if R has SETCAT and $ has finiteAggregate - more? : (%,NonNegativeInteger) -> Boolean - parts : % -> List R - row : (%,Integer) -> Row - setColumn! : (%,Integer,Col) -> % - setRow! : (%,Integer,Row) -> % - size? : (%,NonNegativeInteger) -> Boolean - #? : % -> NonNegativeInteger if $ has finiteAggregate - ?=? : (%,%) -> Boolean if R has SETCAT -\end{verbatim} - -These exports come from HomogeneousAggregate(R:Type) -\begin{verbatim} - empty : () -> % - empty? : % -> Boolean - eq? : (%,%) -> Boolean - eval : (%,List R,List R) -> % if R has EVALAB R and R has SETCAT - eval : (%,R,R) -> % if R has EVALAB R and R has SETCAT - eval : (%,Equation R) -> % if R has EVALAB R and R has SETCAT - eval : (%,List Equation R) -> % if R has EVALAB R and R has SETCAT - hash : % -> SingleInteger if R has SETCAT - latex : % -> String if R has SETCAT - members : % -> List R if $ has finiteAggregate - sample : () -> % - ?~=? : (%,%) -> Boolean if R has SETCAT -\end{verbatim} - -<<category ARR2CAT TwoDimensionalArrayCategory>>= -)abbrev category ARR2CAT TwoDimensionalArrayCategory -++ Two dimensional array categories and domains -++ Author: -++ Date Created: 27 October 1989 -++ Date Last Updated: 27 June 1990 -++ Keywords: array, data structure -++ Examples: -++ References: -TwoDimensionalArrayCategory(R,Row,Col): Category == Definition where - R : Type - Row : FiniteLinearAggregate R - Col : FiniteLinearAggregate R - - Definition == HomogeneousAggregate(R) with - - shallowlyMutable - ++ one may destructively alter arrays - - finiteAggregate - ++ two-dimensional arrays are finite - ---% Array creation - - new: (NonNegativeInteger,NonNegativeInteger,R) -> % - ++ new(m,n,r) is an m-by-n array all of whose entries are r - ++ - ++X arr : ARRAY2 INT := new(5,4,0) - - fill_!: (%,R) -> % - ++ fill!(m,r) fills m with r's - ++ - ++X arr : ARRAY2 INT := new(5,4,0) - ++X fill!(arr,10) - ---% Size inquiries - - minRowIndex : % -> Integer - ++ minRowIndex(m) returns the index of the 'first' row of the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X minRowIndex(arr) - - maxRowIndex : % -> Integer - ++ maxRowIndex(m) returns the index of the 'last' row of the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X maxRowIndex(arr) - - minColIndex : % -> Integer - ++ minColIndex(m) returns the index of the 'first' column of the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X minColIndex(arr) - - maxColIndex : % -> Integer - ++ maxColIndex(m) returns the index of the 'last' column of the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X maxColIndex(arr) - - nrows : % -> NonNegativeInteger - ++ nrows(m) returns the number of rows in the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X nrows(arr) - - ncols : % -> NonNegativeInteger - ++ ncols(m) returns the number of columns in the array m - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X ncols(arr) - ---% Part extractions - - elt: (%,Integer,Integer) -> R - ++ elt(m,i,j) returns the element in the ith row and jth - ++ column of the array m - ++ error check to determine if indices are in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X elt(arr,1,1) - - qelt: (%,Integer,Integer) -> R - ++ qelt(m,i,j) returns the element in the ith row and jth - ++ column of the array m - ++ NO error check to determine if indices are in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X qelt(arr,1,1) - - elt: (%,Integer,Integer,R) -> R - ++ elt(m,i,j,r) returns the element in the ith row and jth - ++ column of the array m, if m has an ith row and a jth column, - ++ and returns r otherwise - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X elt(arr,1,1,6) - ++X elt(arr,1,10,6) - - row: (%,Integer) -> Row - ++ row(m,i) returns the ith row of m - ++ error check to determine if index is in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X row(arr,1) - - column: (%,Integer) -> Col - ++ column(m,j) returns the jth column of m - ++ error check to determine if index is in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X column(arr,1) - - parts: % -> List R - ++ parts(m) returns a list of the elements of m in row major order - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X parts(arr) - ---% Part assignments - - setelt: (%,Integer,Integer,R) -> R - -- will become setelt_! - ++ setelt(m,i,j,r) sets the element in the ith row and jth - ++ column of m to r - ++ error check to determine if indices are in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,0) - ++X setelt(arr,1,1,17) - - qsetelt_!: (%,Integer,Integer,R) -> R - ++ qsetelt!(m,i,j,r) sets the element in the ith row and jth - ++ column of m to r - ++ NO error check to determine if indices are in proper ranges - ++ - ++X arr : ARRAY2 INT := new(5,4,0) - ++X qsetelt!(arr,1,1,17) - - setRow_!: (%,Integer,Row) -> % - ++ setRow!(m,i,v) sets to ith row of m to v - ++ - ++X T1:=TwoDimensionalArray Integer - ++X arr:T1:= new(5,4,0) - ++X T2:=OneDimensionalArray Integer - ++X arow:=construct([1,2,3,4]::List(INT))$T2 - ++X setRow!(arr,1,arow)$T1 - - setColumn_!: (%,Integer,Col) -> % - ++ setColumn!(m,j,v) sets to jth column of m to v - ++ - ++X T1:=TwoDimensionalArray Integer - ++X arr:T1:= new(5,4,0) - ++X T2:=OneDimensionalArray Integer - ++X acol:=construct([1,2,3,4,5]::List(INT))$T2 - ++X setColumn!(arr,1,acol)$T1 - ---% Map and Zip - - map: (R -> R,%) -> % - ++ map(f,a) returns \spad{b}, where \spad{b(i,j) = f(a(i,j))} - ++ for all \spad{i, j} - ++ - ++X arr : ARRAY2 INT := new(5,4,10) - ++X map(-,arr) - ++X map((x +-> x + x),arr) - - map_!: (R -> R,%) -> % - ++ map!(f,a) assign \spad{a(i,j)} to \spad{f(a(i,j))} - ++ for all \spad{i, j} - ++X arr : ARRAY2 INT := new(5,4,10) - ++X map!(-,arr) - - map:((R,R) -> R,%,%) -> % - ++ map(f,a,b) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} - ++ for all \spad{i, j} - ++ - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X arr : ARRAY2 INT := new(5,4,10) - ++X map(adder,arr,arr) - - map:((R,R) -> R,%,%,R) -> % - ++ map(f,a,b,r) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} - ++ when both \spad{a(i,j)} and \spad{b(i,j)} exist; - ++ else \spad{c(i,j) = f(r, b(i,j))} when \spad{a(i,j)} does not exist; - ++ else \spad{c(i,j) = f(a(i,j),r)} when \spad{b(i,j)} does not exist; - ++ otherwise \spad{c(i,j) = f(r,r)}. - ++ - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X arr1 : ARRAY2 INT := new(5,4,10) - ++X arr2 : ARRAY2 INT := new(3,3,10) - ++X map(adder,arr1,arr2,17) - - add - ---% Predicates - - any?(f,m) == - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - f(qelt(m,i,j)) => return true - false - - every?(f,m) == - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - not f(qelt(m,i,j)) => return false - true - - size?(m,n) == nrows(m) * ncols(m) = n - less?(m,n) == nrows(m) * ncols(m) < n - more?(m,n) == nrows(m) * ncols(m) > n - ---% Size inquiries - - # m == nrows(m) * ncols(m) - ---% Part extractions - - elt(m,i,j,r) == - i < minRowIndex(m) or i > maxRowIndex(m) => r - j < minColIndex(m) or j > maxColIndex(m) => r - qelt(m,i,j) - - count(f:R -> Boolean,m:%) == - num : NonNegativeInteger := 0 - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - if f(qelt(m,i,j)) then num := num + 1 - num - - parts m == - entryList : List R := nil() - for i in maxRowIndex(m)..minRowIndex(m) by -1 repeat - for j in maxColIndex(m)..minColIndex(m) by -1 repeat - entryList := concat(qelt(m,i,j),entryList) - entryList - ---% Creation - - copy m == - ans := new(nrows m,ncols m,NIL$Lisp) - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qsetelt_!(ans,i,j,qelt(m,i,j)) - ans - - fill_!(m,r) == - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qsetelt_!(m,i,j,r) - m - - map(f,m) == - ans := new(nrows m,ncols m,NIL$Lisp) - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qsetelt_!(ans,i,j,f(qelt(m,i,j))) - ans - - map_!(f,m) == - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qsetelt_!(m,i,j,f(qelt(m,i,j))) - m - - map(f,m,n) == - (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => - error "map: arguments must have same dimensions" - ans := new(nrows m,ncols m,NIL$Lisp) - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qsetelt_!(ans,i,j,f(qelt(m,i,j),qelt(n,i,j))) - ans - - map(f,m,n,r) == - maxRow := max(maxRowIndex m,maxRowIndex n) - maxCol := max(maxColIndex m,maxColIndex n) - ans := new(max(nrows m,nrows n),max(ncols m,ncols n),NIL$Lisp) - for i in minRowIndex(m)..maxRow repeat - for j in minColIndex(m)..maxCol repeat - qsetelt_!(ans,i,j,f(elt(m,i,j,r),elt(n,i,j,r))) - ans - - setRow_!(m,i,v) == - i < minRowIndex(m) or i > maxRowIndex(m) => - error "setRow!: index out of range" - for j in minColIndex(m)..maxColIndex(m) _ - for k in minIndex(v)..maxIndex(v) repeat - qsetelt_!(m,i,j,v.k) - m - - setColumn_!(m,j,v) == - j < minColIndex(m) or j > maxColIndex(m) => - error "setColumn!: index out of range" - for i in minRowIndex(m)..maxRowIndex(m) _ - for k in minIndex(v)..maxIndex(v) repeat - qsetelt_!(m,i,j,v.k) - m - - if R has _= : (R,R) -> Boolean then - - m = n == - eq?(m,n) => true - (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => false - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - not (qelt(m,i,j) = qelt(n,i,j)) => return false - true - - member?(r,m) == - for i in minRowIndex(m)..maxRowIndex(m) repeat - for j in minColIndex(m)..maxColIndex(m) repeat - qelt(m,i,j) = r => return true - false - - count(r:R,m:%) == count(#1 = r,m) - - if Row has shallowlyMutable then - - row(m,i) == - i < minRowIndex(m) or i > maxRowIndex(m) => - error "row: index out of range" - v : Row := new(ncols m,NIL$Lisp) - for j in minColIndex(m)..maxColIndex(m) _ - for k in minIndex(v)..maxIndex(v) repeat - qsetelt_!(v,k,qelt(m,i,j)) - v - - if Col has shallowlyMutable then - - column(m,j) == - j < minColIndex(m) or j > maxColIndex(m) => - error "column: index out of range" - v : Col := new(nrows m,NIL$Lisp) - for i in minRowIndex(m)..maxRowIndex(m) _ - for k in minIndex(v)..maxIndex(v) repeat - qsetelt_!(v,k,qelt(m,i,j)) - v - - if R has CoercibleTo(OutputForm) then - - coerce(m:%) == - l : List List OutputForm - l := [[qelt(m,i,j) :: OutputForm _ - for j in minColIndex(m)..maxColIndex(m)] _ - for i in minRowIndex(m)..maxRowIndex(m)] - matrix l - -@ -<<ARR2CAT.dotabb>>= -"ARR2CAT" - [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; -"ARR2CAT" -> "HOAGG" - -@ -<<ARR2CAT.dotfull>>= -"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" - [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; -"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" - -> "HomogeneousAggregate(a:Type)" - -"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" - [color=seagreen,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; -"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" --> "TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" - -@ -<<ARR2CAT.dotpic>>= -digraph pic { - fontsize=10; - bgcolor="#FFFF66"; - node [shape=box, color=white, style=filled]; - -"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" - [color=lightblue]; -"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" - -> "HomogeneousAggregate(a:Type)" - -"HomogeneousAggregate(a:Type)" [color=lightblue]; -"HomogeneousAggregate(a:Type)" -> "Aggregate()" -"HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)" -"HomogeneousAggregate(a:Type)" -> "SetCategory()" - -"Evalable(a:Type)" [color="#00EE00"]; - -"SetCategory()" [color=lightblue]; -"SetCategory()" -> "BasicType()" -"SetCategory()" -> "CoercibleTo(OutputForm)" - -"BasicType()" [color=lightblue]; -"BasicType()" -> "Category" - -"CoercibleTo(OutputForm)" [color=seagreen]; -"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" - -"CoercibleTo(a:Type)" [color=lightblue]; -"CoercibleTo(a:Type)" -> "Category" - -"Aggregate()" [color=lightblue]; -"Aggregate()" -> "Type()" - -"Type()" [color=lightblue]; -"Type()" -> "Category" - -"Category" [color=lightblue]; - -} - -@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BagAggregate}{BGAGG} \pagepic{ps/v102bagaggregate.ps}{BGAGG}{1.00} @@ -3594,6 +3326,161 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{GradedAlgebra}{GRALG} +\pagepic{ps/v102gradedalgebra.ps}{GRALG}{0.75} + +{\bf See:}\\ +\pagefrom{GradedModule}{GRMOD} +\pagefrom{RetractableTo}{RETRACT} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{GRALG}{0} & +\cross{GRALG}{1} & +\cross{GRALG}{coerce} & +\cross{GRALG}{degree} & +\cross{GRALG}{hash} \\ +\cross{GRALG}{latex} & +\cross{GRALG}{product} & +\cross{GRALG}{retract} & +\cross{GRALG}{retractIfCan} & +\cross{GRALG}{?\~{}=?} \\ +\cross{GRALG}{?*?} & +\cross{GRALG}{?+?} & +\cross{GRALG}{?-?} & +\cross{GRALG}{-?} & +\cross{GRALG}{?=?} \\ +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + product : (%,%) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + 0 : () -> % + 1 : () -> % + ?*? : (%,R) -> % + ?*? : (R,%) -> % +\end{verbatim} + +These exports come from GradedModule(R, E)\\ +where R:CommutativeRing and E:AbelianMonoid: +\begin{verbatim} + coerce : % -> OutputForm + degree : % -> E + hash : % -> SingleInteger + latex : % -> String + ?~=? : (%,%) -> Boolean + ?=? : (%,%) -> Boolean + ?-? : (%,%) -> % + -? : % -> % + ?+? : (%,%) -> % +\end{verbatim} + +These exports come from ,RetractableTo(R:CommutativeRing): +\begin{verbatim} + coerce : R -> % + retract : % -> R + retractIfCan : % -> Union(R,"failed") +\end{verbatim} + +<<category GRALG GradedAlgebra>>= +)abbrev category GRALG GradedAlgebra +++ Author: Stephen M. Watt +++ Date Created: May 20, 1991 +++ Date Last Updated: May 20, 1991 +++ Basic Operations: +, *, degree +++ Related Domains: CartesianTensor(n,dim,R) +++ Also See: +++ AMS Classifications: +++ Keywords: graded module, tensor, multi-linear algebra +++ Examples: +++ References: Encyclopedic Dictionary of Mathematics, MIT Press, 1977 +++ Description: +++ GradedAlgebra(R,E) denotes ``E-graded R-algebra''. +++ A graded algebra is a graded module together with a degree preserving +++ R-linear map, called the {\em product}. +++ +++ The name ``product'' is written out in full so inner and outer products +++ with the same mapping type can be distinguished by name. + +GradedAlgebra(R: CommutativeRing, E: AbelianMonoid): Category == + Join(GradedModule(R, E),RetractableTo(R)) with + 1: constant -> % + ++ 1 is the identity for \spad{product}. + product: (%, %) -> % + ++ product(a,b) is the degree-preserving R-linear product: + ++ + ++ \spad{degree product(a,b) = degree a + degree b} + ++ \spad{product(a1+a2,b) = product(a1,b) + product(a2,b)} + ++ \spad{product(a,b1+b2) = product(a,b1) + product(a,b2)} + ++ \spad{product(r*a,b) = product(a,r*b) = r*product(a,b)} + ++ \spad{product(a,product(b,c)) = product(product(a,b),c)} + add + if not (R is %) then + 0: % == (0$R)::% + 1: % == 1$R::% + (r: R)*(x: %) == product(r::%, x) + (x: %)*(r: R) == product(x, r::%) + +@ +<<GRALG.dotabb>>= +"GRALG" + [color=lightblue,href="bookvol10.2.pdf#nameddest=GRALG"]; +"GRALG" -> "GRMOD" +"GRALG" -> "RETRACT" + +@ +<<GRALG.dotfull>>= +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=GRALG"]; +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" -> + "GradedModule(a:CommutativeRing,b:AbelianMonoid)" +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" -> + "RetractableTo(CommutativeRing)" +@ +<<GRALG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" [color=lightblue]; +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" -> + "GradedModule(a:CommutativeRing,b:AbelianMonoid)" +"GradedAlgebra(a:CommutativeRing,b:AbelianMonoid)" -> + "RetractableTo(CommutativeRing)" + +"RetractableTo(CommutativeRing)" [color=seagreen]; +"RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" + +"RetractableTo(a:Type)" [color=lightblue]; +"RetractableTo(a:Type)" -> "Category" + +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" [color=lightblue]; +"GradedModule(a:CommutativeRing,b:AbelianMonoid)" -> "SetCategory()" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{IndexedAggregate}{IXAGG} \pagepic{ps/v102indexedaggregate.ps}{IXAGG}{1.00} @@ -3867,6 +3754,181 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{MonadWithUnit}{MONADWU} +\pagepic{ps/v102monadwithunit.ps}{MONADWU}{0.75} + +{\bf See:}\\ +\pageto{NonAssociativeRing}{NASRING} +\pagefrom{Monad}{MONAD} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{MONADWU}{1} & +\cross{MONADWU}{coerce} & +\cross{MONADWU}{hash} & +\cross{MONADWU}{latex} & +\cross{MONADWU}{one?} \\ +\cross{MONADWU}{recip} & +\cross{MONADWU}{leftPower} & +\cross{MONADWU}{leftRecip} & +\cross{MONADWU}{rightPower} & +\cross{MONADWU}{rightRecip} \\ +\cross{MONADWU}{?*?} & +\cross{MONADWU}{?\~{}=?} & +\cross{MONADWU}{?**?} & +\cross{MONADWU}{?=?} & +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + 1 : () -> % + leftRecip : % -> Union(%,"failed") + recip : % -> Union(%,"failed") + rightRecip : % -> Union(%,"failed") +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + leftPower : (%,NonNegativeInteger) -> % + one? : % -> Boolean + rightPower : (%,NonNegativeInteger) -> % + ?**? : (%,NonNegativeInteger) -> % +\end{verbatim} + +These exports come from Monad(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + leftPower : (%,PositiveInteger) -> % + rightPower : (%,PositiveInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?~=? : (%,%) -> Boolean + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category MONADWU MonadWithUnit>>= +)abbrev category MONADWU MonadWithUnit +++ Authors: J. Grabmeier, R. Wisbauer +++ Date Created: 01 March 1991 +++ Date Last Updated: 11 June 1991 +++ Basic Operations: *, **, 1 +++ Related Constructors: SemiGroup, Monoid, Monad +++ Also See: +++ AMS Classifications: +++ Keywords: +++ Keywords: Monad with unit, binary operation +++ Reference: +++ N. Jacobson: Structure and Representations of Jordan Algebras +++ AMS, Providence, 1968 +++ Description: +++ MonadWithUnit is the class of multiplicative monads with unit, +++ i.e. sets with a binary operation and a unit element. +++ Axioms +++ leftIdentity("*":(%,%)->%,1) \tab{30} 1*x=x +++ rightIdentity("*":(%,%)->%,1) \tab{30} x*1=x +++ Common Additional Axioms +++ unitsKnown---if "recip" says "failed", that PROVES input wasn't a unit +MonadWithUnit(): Category == Monad with + 1: constant -> % + ++ 1 returns the unit element, denoted by 1. + one?: % -> Boolean + ++ one?(a) tests whether \spad{a} is the unit 1. + rightPower: (%,NonNegativeInteger) -> % + ++ rightPower(a,n) returns the \spad{n}-th right power of \spad{a}, + ++ i.e. \spad{rightPower(a,n) := rightPower(a,n-1) * a} and + ++ \spad{rightPower(a,0) := 1}. + leftPower: (%,NonNegativeInteger) -> % + ++ leftPower(a,n) returns the \spad{n}-th left power of \spad{a}, + ++ i.e. \spad{leftPower(a,n) := a * leftPower(a,n-1)} and + ++ \spad{leftPower(a,0) := 1}. + "**": (%,NonNegativeInteger) -> % + ++ \spad{a**n} returns the \spad{n}-th power of \spad{a}, + ++ defined by repeated squaring. + recip: % -> Union(%,"failed") + ++ recip(a) returns an element, which is both a left and a right + ++ inverse of \spad{a}, + ++ or \spad{"failed"} if such an element doesn't exist or cannot + ++ be determined (see unitsKnown). + leftRecip: % -> Union(%,"failed") + ++ leftRecip(a) returns an element, which is a left inverse of + ++ \spad{a}, or \spad{"failed"} if such an element doesn't exist + ++ or cannot be determined (see unitsKnown). + rightRecip: % -> Union(%,"failed") + ++ rightRecip(a) returns an element, which is a right inverse of + ++ \spad{a}, or \spad{"failed"} if such an element doesn't exist + ++ or cannot be determined (see unitsKnown). + add + import RepeatedSquaring(%) + one? x == x = 1 + x:% ** n:NonNegativeInteger == + zero? n => 1 + expt(x,n pretend PositiveInteger) + rightPower(a,n) == + zero? n => 1 + res := 1 + for i in 1..n repeat res := res * a + res + leftPower(a,n) == + zero? n => 1 + res := 1 + for i in 1..n repeat res := a * res + res + +@ +<<MONADWU.dotabb>>= +"MONADWU" + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONADWU"]; +"MONADWU" -> "MONAD" + +@ +<<MONADWU.dotfull>>= +"MonadWithUnit()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONADWU"]; +"MonadWithUnit()" -> "Monad()" + +@ +<<MONADWU.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"MonadWithUnit()" [color=lightblue]; +"MonadWithUnit()" -> "Monad()" + +"Monad()" [color=lightblue]; +"Monad()" -> "SetCategory()" +"Monad()" -> "RepeatedSquaring(Monad)" + +"RepeatedSquaring(Monad)" [color="#00EE00"]; +"RepeatedSquaring(Monad)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Monoid}{MONOID} \pagepic{ps/v102monoid.ps}{MONOID}{0.75} @@ -4349,6 +4411,552 @@ } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{TwoDimensionalArrayCategory}{ARR2CAT} +\pagepic{ps/v102twodimensionalarraycategory.ps}{ARR2CAT}{0.60} + +TwoDimensionalArrayCategory is a general array category which +allows different representations and indexing schemes. +Rows and columns may be extracted with rows returned as objects +of type Row and columns returned as objects of type Col. +The index of the 'first' row may be obtained by calling the +function 'minRowIndex'. The index of the 'first' column may +be obtained by calling the function 'minColIndex'. The index of +the first element of a 'Row' is the same as the index of the +first column in an array and vice versa. + +{\bf See:}\\ +\pagefrom{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{ARR2CAT}{any?} & +\cross{ARR2CAT}{column} & +\cross{ARR2CAT}{coerce} & +\cross{ARR2CAT}{copy} & +\cross{ARR2CAT}{count} \\ +\cross{ARR2CAT}{elt} & +\cross{ARR2CAT}{empty} & +\cross{ARR2CAT}{empty?} & +\cross{ARR2CAT}{eq?} & +\cross{ARR2CAT}{eval} \\ +\cross{ARR2CAT}{every?} & +\cross{ARR2CAT}{fill!} & +\cross{ARR2CAT}{hash} & +\cross{ARR2CAT}{latex} & +\cross{ARR2CAT}{less?} \\ +\cross{ARR2CAT}{map} & +\cross{ARR2CAT}{map!} & +\cross{ARR2CAT}{maxColIndex} & +\cross{ARR2CAT}{maxRowIndex} & +\cross{ARR2CAT}{member?} \\ +\cross{ARR2CAT}{members} & +\cross{ARR2CAT}{minColIndex} & +\cross{ARR2CAT}{minRowIndex} & +\cross{ARR2CAT}{more?} & +\cross{ARR2CAT}{ncols} \\ +\cross{ARR2CAT}{new} & +\cross{ARR2CAT}{nrows} & +\cross{ARR2CAT}{parts} & +\cross{ARR2CAT}{qelt} & +\cross{ARR2CAT}{qsetelt!} \\ +\cross{ARR2CAT}{row} & +\cross{ARR2CAT}{sample} & +\cross{ARR2CAT}{setColumn!} & +\cross{ARR2CAT}{setRow!} & +\cross{ARR2CAT}{setelt} \\ +\cross{ARR2CAT}{size?} & +\cross{ARR2CAT}{\#?} & +\cross{ARR2CAT}{?=?} & +\cross{ARR2CAT}{?\~{}=?} & +\end{tabular} + +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{ARR2CAT}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{ARR2CAT}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{ARR2CAT}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + +These are directly exported but not implemented: +\begin{verbatim} + elt : (%,Integer,Integer) -> R + maxColIndex : % -> Integer + maxRowIndex : % -> Integer + minColIndex : % -> Integer + minRowIndex : % -> Integer + new : (NonNegativeInteger,NonNegativeInteger,R) -> % + ncols : % -> NonNegativeInteger + nrows : % -> NonNegativeInteger + qelt : (%,Integer,Integer) -> R + qsetelt! : (%,Integer,Integer,R) -> R + setelt : (%,Integer,Integer,R) -> R +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + any? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate + copy : % -> % + coerce : % -> OutputForm if R has SETCAT + column : (%,Integer) -> Col + count : ((R -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate + count : (R,%) -> NonNegativeInteger if R has SETCAT and $ has finiteAggregate + elt : (%,Integer,Integer,R) -> R + every? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate + fill! : (%,R) -> % + less? : (%,NonNegativeInteger) -> Boolean + map : ((R -> R),%) -> % + map : (((R,R) -> R),%,%) -> % + map : (((R,R) -> R),%,%,R) -> % + map! : ((R -> R),%) -> % + member? : (R,%) -> Boolean if R has SETCAT and $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List R + row : (%,Integer) -> Row + setColumn! : (%,Integer,Col) -> % + setRow! : (%,Integer,Row) -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if R has SETCAT +\end{verbatim} + +These exports come from HomogeneousAggregate(R:Type) +\begin{verbatim} + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List R,List R) -> % if R has EVALAB R and R has SETCAT + eval : (%,R,R) -> % if R has EVALAB R and R has SETCAT + eval : (%,Equation R) -> % if R has EVALAB R and R has SETCAT + eval : (%,List Equation R) -> % if R has EVALAB R and R has SETCAT + hash : % -> SingleInteger if R has SETCAT + latex : % -> String if R has SETCAT + members : % -> List R if $ has finiteAggregate + sample : () -> % + ?~=? : (%,%) -> Boolean if R has SETCAT +\end{verbatim} + +<<category ARR2CAT TwoDimensionalArrayCategory>>= +)abbrev category ARR2CAT TwoDimensionalArrayCategory +++ Two dimensional array categories and domains +++ Author: +++ Date Created: 27 October 1989 +++ Date Last Updated: 27 June 1990 +++ Keywords: array, data structure +++ Examples: +++ References: +TwoDimensionalArrayCategory(R,Row,Col): Category == Definition where + R : Type + Row : FiniteLinearAggregate R + Col : FiniteLinearAggregate R + + Definition == HomogeneousAggregate(R) with + + shallowlyMutable + ++ one may destructively alter arrays + + finiteAggregate + ++ two-dimensional arrays are finite + +--% Array creation + + new: (NonNegativeInteger,NonNegativeInteger,R) -> % + ++ new(m,n,r) is an m-by-n array all of whose entries are r + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + + fill_!: (%,R) -> % + ++ fill!(m,r) fills m with r's + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X fill!(arr,10) + +--% Size inquiries + + minRowIndex : % -> Integer + ++ minRowIndex(m) returns the index of the 'first' row of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X minRowIndex(arr) + + maxRowIndex : % -> Integer + ++ maxRowIndex(m) returns the index of the 'last' row of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X maxRowIndex(arr) + + minColIndex : % -> Integer + ++ minColIndex(m) returns the index of the 'first' column of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X minColIndex(arr) + + maxColIndex : % -> Integer + ++ maxColIndex(m) returns the index of the 'last' column of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X maxColIndex(arr) + + nrows : % -> NonNegativeInteger + ++ nrows(m) returns the number of rows in the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X nrows(arr) + + ncols : % -> NonNegativeInteger + ++ ncols(m) returns the number of columns in the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X ncols(arr) + +--% Part extractions + + elt: (%,Integer,Integer) -> R + ++ elt(m,i,j) returns the element in the ith row and jth + ++ column of the array m + ++ error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X elt(arr,1,1) + + qelt: (%,Integer,Integer) -> R + ++ qelt(m,i,j) returns the element in the ith row and jth + ++ column of the array m + ++ NO error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X qelt(arr,1,1) + + elt: (%,Integer,Integer,R) -> R + ++ elt(m,i,j,r) returns the element in the ith row and jth + ++ column of the array m, if m has an ith row and a jth column, + ++ and returns r otherwise + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X elt(arr,1,1,6) + ++X elt(arr,1,10,6) + + row: (%,Integer) -> Row + ++ row(m,i) returns the ith row of m + ++ error check to determine if index is in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X row(arr,1) + + column: (%,Integer) -> Col + ++ column(m,j) returns the jth column of m + ++ error check to determine if index is in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X column(arr,1) + + parts: % -> List R + ++ parts(m) returns a list of the elements of m in row major order + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X parts(arr) + +--% Part assignments + + setelt: (%,Integer,Integer,R) -> R + -- will become setelt_! + ++ setelt(m,i,j,r) sets the element in the ith row and jth + ++ column of m to r + ++ error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X setelt(arr,1,1,17) + + qsetelt_!: (%,Integer,Integer,R) -> R + ++ qsetelt!(m,i,j,r) sets the element in the ith row and jth + ++ column of m to r + ++ NO error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X qsetelt!(arr,1,1,17) + + setRow_!: (%,Integer,Row) -> % + ++ setRow!(m,i,v) sets to ith row of m to v + ++ + ++X T1:=TwoDimensionalArray Integer + ++X arr:T1:= new(5,4,0) + ++X T2:=OneDimensionalArray Integer + ++X arow:=construct([1,2,3,4]::List(INT))$T2 + ++X setRow!(arr,1,arow)$T1 + + setColumn_!: (%,Integer,Col) -> % + ++ setColumn!(m,j,v) sets to jth column of m to v + ++ + ++X T1:=TwoDimensionalArray Integer + ++X arr:T1:= new(5,4,0) + ++X T2:=OneDimensionalArray Integer + ++X acol:=construct([1,2,3,4,5]::List(INT))$T2 + ++X setColumn!(arr,1,acol)$T1 + +--% Map and Zip + + map: (R -> R,%) -> % + ++ map(f,a) returns \spad{b}, where \spad{b(i,j) = f(a(i,j))} + ++ for all \spad{i, j} + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map(-,arr) + ++X map((x +-> x + x),arr) + + map_!: (R -> R,%) -> % + ++ map!(f,a) assign \spad{a(i,j)} to \spad{f(a(i,j))} + ++ for all \spad{i, j} + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map!(-,arr) + + map:((R,R) -> R,%,%) -> % + ++ map(f,a,b) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} + ++ for all \spad{i, j} + ++ + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map(adder,arr,arr) + + map:((R,R) -> R,%,%,R) -> % + ++ map(f,a,b,r) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} + ++ when both \spad{a(i,j)} and \spad{b(i,j)} exist; + ++ else \spad{c(i,j) = f(r, b(i,j))} when \spad{a(i,j)} does not exist; + ++ else \spad{c(i,j) = f(a(i,j),r)} when \spad{b(i,j)} does not exist; + ++ otherwise \spad{c(i,j) = f(r,r)}. + ++ + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X arr1 : ARRAY2 INT := new(5,4,10) + ++X arr2 : ARRAY2 INT := new(3,3,10) + ++X map(adder,arr1,arr2,17) + + add + +--% Predicates + + any?(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + f(qelt(m,i,j)) => return true + false + + every?(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + not f(qelt(m,i,j)) => return false + true + + size?(m,n) == nrows(m) * ncols(m) = n + less?(m,n) == nrows(m) * ncols(m) < n + more?(m,n) == nrows(m) * ncols(m) > n + +--% Size inquiries + + # m == nrows(m) * ncols(m) + +--% Part extractions + + elt(m,i,j,r) == + i < minRowIndex(m) or i > maxRowIndex(m) => r + j < minColIndex(m) or j > maxColIndex(m) => r + qelt(m,i,j) + + count(f:R -> Boolean,m:%) == + num : NonNegativeInteger := 0 + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + if f(qelt(m,i,j)) then num := num + 1 + num + + parts m == + entryList : List R := nil() + for i in maxRowIndex(m)..minRowIndex(m) by -1 repeat + for j in maxColIndex(m)..minColIndex(m) by -1 repeat + entryList := concat(qelt(m,i,j),entryList) + entryList + +--% Creation + + copy m == + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,qelt(m,i,j)) + ans + + fill_!(m,r) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(m,i,j,r) + m + + map(f,m) == + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,f(qelt(m,i,j))) + ans + + map_!(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(m,i,j,f(qelt(m,i,j))) + m + + map(f,m,n) == + (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => + error "map: arguments must have same dimensions" + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,f(qelt(m,i,j),qelt(n,i,j))) + ans + + map(f,m,n,r) == + maxRow := max(maxRowIndex m,maxRowIndex n) + maxCol := max(maxColIndex m,maxColIndex n) + ans := new(max(nrows m,nrows n),max(ncols m,ncols n),NIL$Lisp) + for i in minRowIndex(m)..maxRow repeat + for j in minColIndex(m)..maxCol repeat + qsetelt_!(ans,i,j,f(elt(m,i,j,r),elt(n,i,j,r))) + ans + + setRow_!(m,i,v) == + i < minRowIndex(m) or i > maxRowIndex(m) => + error "setRow!: index out of range" + for j in minColIndex(m)..maxColIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(m,i,j,v.k) + m + + setColumn_!(m,j,v) == + j < minColIndex(m) or j > maxColIndex(m) => + error "setColumn!: index out of range" + for i in minRowIndex(m)..maxRowIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(m,i,j,v.k) + m + + if R has _= : (R,R) -> Boolean then + + m = n == + eq?(m,n) => true + (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => false + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + not (qelt(m,i,j) = qelt(n,i,j)) => return false + true + + member?(r,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qelt(m,i,j) = r => return true + false + + count(r:R,m:%) == count(#1 = r,m) + + if Row has shallowlyMutable then + + row(m,i) == + i < minRowIndex(m) or i > maxRowIndex(m) => + error "row: index out of range" + v : Row := new(ncols m,NIL$Lisp) + for j in minColIndex(m)..maxColIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(v,k,qelt(m,i,j)) + v + + if Col has shallowlyMutable then + + column(m,j) == + j < minColIndex(m) or j > maxColIndex(m) => + error "column: index out of range" + v : Col := new(nrows m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(v,k,qelt(m,i,j)) + v + + if R has CoercibleTo(OutputForm) then + + coerce(m:%) == + l : List List OutputForm + l := [[qelt(m,i,j) :: OutputForm _ + for j in minColIndex(m)..maxColIndex(m)] _ + for i in minRowIndex(m)..maxRowIndex(m)] + matrix l + +@ +<<ARR2CAT.dotabb>>= +"ARR2CAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"ARR2CAT" -> "HOAGG" + +@ +<<ARR2CAT.dotfull>>= +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + -> "HomogeneousAggregate(a:Type)" + +"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" +-> "TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + +@ +<<ARR2CAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + [color=lightblue]; +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + -> "HomogeneousAggregate(a:Type)" + +"HomogeneousAggregate(a:Type)" [color=lightblue]; +"HomogeneousAggregate(a:Type)" -> "Aggregate()" +"HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)" +"HomogeneousAggregate(a:Type)" -> "SetCategory()" + +"Evalable(a:Type)" [color="#00EE00"]; + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Aggregate()" [color=lightblue]; +"Aggregate()" -> "Type()" + +"Type()" [color=lightblue]; +"Type()" -> "Category" + +"Category" [color=lightblue]; + +} + +@ \chapter{Category Layer 5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BinaryRecursiveAggregate}{BRAGG} @@ -7232,6 +7840,7 @@ {\bf See:}\\ \pageto{LeftModule}{LMODULE} +\pageto{NonAssociativeRng}{NARNG} \pageto{OrderedAbelianGroup}{OAGROUP} \pageto{RightModule}{RMODULE} \pageto{Rng}{RNG} @@ -7339,6 +7948,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; +"NonAssociativeRng()" [color=lightblue]; +"NonAssociativeRng()" -> "AbelianGroup()" +"NonAssociativeRng()" -> "Monad()" + +"Monad()" [color=lightblue]; +"Monad()" -> "SETCAT..." +"Monad()" -> "RepeatedSquaring(Monad)" + +"RepeatedSquaring(Monad)" [color="#00EE00"]; +"RepeatedSquaring(Monad)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + "AbelianGroup()" [color=lightblue]; "AbelianGroup()" -> "CancellationAbelianMonoid()" "AbelianGroup()" -> "RepeatedDoubling(AbelianGroup)" @@ -9143,6 +9768,155 @@ @ \chapter{Category Layer 7} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{NonAssociativeRng}{NARNG} +\pagepic{ps/v102nonassociativerng.ps}{NARNG}{1.00} + +{\bf See:}\\ +\pageto{NonAssociativeAlgebra}{NAALG} +\pageto{NonAssociativeRing}{NASRING} +\pagefrom{AbelianGroup}{ABELGRP} +\pagefrom{Monad}{MONAD} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{NARNG}{0} & +\cross{NARNG}{antiCommutator} & +\cross{NARNG}{associator} & +\cross{NARNG}{coerce} & +\cross{NARNG}{commutator} \\ +\cross{NARNG}{hash} & +\cross{NARNG}{latex} & +\cross{NARNG}{leftPower} & +\cross{NARNG}{rightPower} & +\cross{NARNG}{sample} \\ +\cross{NARNG}{subtractIfCan} & +\cross{NARNG}{zero?} & +\cross{NARNG}{?*?} & +\cross{NARNG}{?**?} & +\cross{NARNG}{?+?} \\ +\cross{NARNG}{?-?} & +\cross{NARNG}{-?} & +\cross{NARNG}{?=?} & +\cross{NARNG}{?~=?} & +\end{tabular} + +These are implemented by this category: +\begin{verbatim} + antiCommutator : (%,%) -> % + associator : (%,%,%) -> % + commutator : (%,%) -> % +\end{verbatim} + +These exports come from AbelianGroup(): +\begin{verbatim} + 0 : () -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (PositiveInteger,%) -> % + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?*? : (Integer,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?-? : (%,%) -> % + -? : % -> % +\end{verbatim} + +These exports come from Monad(): +\begin{verbatim} + leftPower : (%,PositiveInteger) -> % + rightPower : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?**? : (%,PositiveInteger) -> % +\end{verbatim} + +<<category NARNG NonAssociativeRng>>= +)abbrev category NARNG NonAssociativeRng +++ Author: J. Grabmeier, R. Wisbauer +++ Date Created: 01 March 1991 +++ Date Last Updated: 03 July 1991 +++ Basic Operations: +, *, -, ** +++ Related Constructors: Rng, Ring, NonAssociativeRing +++ Also See: +++ AMS Classifications: +++ Keywords: not associative ring +++ Reference: +++ R.D. Schafer: An Introduction to Nonassociative Algebras +++ Academic Pr... [truncated message content] |
From: <gi...@ax...> - 2008-09-28 22:34:56
|
books/bookvol10.2.pamphlet | 4687 ++++++++++++++++++++--- books/ps/v102finiteranknonassociativealgebra.ps | 884 +++++ books/ps/v102framednonassociativealgebra.ps | 930 +++++ books/ps/v102functionfieldcategory.ps | 575 +++ books/ps/v102gradedalgebra.ps | 654 ++++ books/ps/v102gradedmodule.ps | 494 +++ books/ps/v102monad.ps | 632 +++ books/ps/v102monadwithunit.ps | 678 ++++ books/ps/v102nonassociativealgebra.ps | 838 ++++ books/ps/v102nonassociativering.ps | 771 ++++ books/ps/v102nonassociativerng.ps | 653 ++++ changelog | 5 + src/algebra/Makefile.pamphlet | 5 +- src/algebra/carten.spad.pamphlet | 106 - src/algebra/curve.spad.pamphlet | 441 +-- src/algebra/naalgc.spad.pamphlet | 1260 ------ 16 files changed, 11275 insertions(+), 2338 deletions(-) New commits: commit 18be64be3f9d817475f519a66faa50bc8c0af35b Author: Tim Daly <da...@ax...> Date: Fri Aug 1 20:19:37 2008 -0400 20080927 tpd books/ps/v102nonassociativerng.ps added 20080927 tpd books/ps/v102nonassociativering.ps added 20080927 tpd books/ps/v102nonassociativealgebra.ps added 20080927 tpd books/ps/v102monadwithunit.ps added 20080927 tpd books/ps/v102monad.ps added 20080927 tpd books/ps/v102gradedmodule.ps added 20080927 tpd books/ps/v102gradedalgebra.ps added 20080927 tpd books/ps/v102functionfieldcategory.ps added 20080927 tpd books/ps/v102framednonassociativealgebra.ps added 20080927 tpd books/ps/v102finiteranknonassociativealgebra.ps added 20080927 tpd src/algebra/Makefile remove naalgc 20080927 tpd books/bookvol10.2 add categories 20080927 tpd src/algebra/naalgc.spad absorbed into bookvol10.2 20080927 tpd src/algebra/curve.spad move categories to bookvol10.2 20080927 tpd src/algebra/carten.spad move categories to bookvol10.2 |
From: <da...@us...> - 2008-09-27 16:25:11
|
Revision: 982 http://axiom.svn.sourceforge.net/axiom/?rev=982&view=rev Author: daly Date: 2008-09-27 16:25:03 +0000 (Sat, 27 Sep 2008) Log Message: ----------- 20080926 tpd books/bookvol10.2 add attributes 20080926 tpd src/algebra/Makefile remove attreg 20080926 tpd books/ps/v102twodimensionalarraycategory.ps added 20080926 tpd books/ps/v102monogenicalgebra.ps added 20080926 tpd books/ps/v102fullyretractableto.ps added 20080926 tpd books/ps/v102framedalgebra.ps added 20080926 tpd books/ps/v102finiterankalgebra.ps added 20080926 tpd books/ps/v102category.ps added 20080926 tpd books/ps/v102attributeregistry.ps added 20080926 tpd books/bookvol10.2 add categories 20080926 tpd src/algebra/attreg.spad deleted, absorbed by bookvol10.2 20080926 tpd src/algebra/array2.spad move ARR2CAT to bookvol10.2 20080926 tpd src/algebra/retract.spad move FRETRCT to bookvol10.2 20080926 tpd src/algebra/algcat.spad move categories to bookvol10.2 Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/Makefile.pamphlet trunk/axiom/src/algebra/array2.spad.pamphlet trunk/axiom/src/algebra/retract.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102attributeregistry.ps trunk/axiom/books/ps/v102category.ps trunk/axiom/books/ps/v102finiterankalgebra.ps trunk/axiom/books/ps/v102framedalgebra.ps trunk/axiom/books/ps/v102fullyretractableto.ps trunk/axiom/books/ps/v102monogenicalgebra.ps trunk/axiom/books/ps/v102twodimensionalarraycategory.ps Removed Paths: ------------- trunk/axiom/src/algebra/attreg.spad.pamphlet Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-26 06:32:53 UTC (rev 981) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-27 16:25:03 UTC (rev 982) @@ -279,7 +279,10 @@ can infer that this ``subsumption node'' matches the category. A ``yellow'' color indicates a domain. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Category}{CATEGORY} +\pagepic{ps/v102category.ps}{CATEGORY}{1.00} + This is the root of the category hierarchy and is not represented by code. {\bf See:}\\ @@ -292,7 +295,190 @@ \pageto{RetractableTo}{RETRACT} \pageto{Type}{TYPE} +<<CATEGORY.dotabb>>= +"CATEGORY" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CATEGORY"]; + +@ +<<CATEGORY.dotfull>>= +"Category" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CATEGORY"]; + +@ +<<CATEGORY.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Category" [color=lightblue]; +} + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{AttributeRegistry}{ATTREG} +\pagepic{ps/v102attributeregistry.ps}{ATTREG}{1.00} + +{\bf See:}\\ +\pagefrom{Category}{CATEGORY} + +{\bf Exports:} Nothing + +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{ATTREG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{ATTREG}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{ATTREG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf \cross{ATTREG}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{ATTREG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{ATTREG}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\item {\bf \cross{ATTREG}{noZeroDivisors}} +is true if $x * y ~= 0$ implies both x and y are non-zero. +\item {\bf \cross{ATTREG}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{ATTREG}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{ATTREG}{arbitraryPrecision}} +means the user can set the precision for subsequent calculations. +\item {\bf \cross{ATTREG}{partiallyOrderedSet}} +is true if a set with $<$ which is transitive, but +not($a < b$ or $a = b$) does not necessarily imply $b<a$. +\item {\bf \cross{ATTREG}{central}} +is true if, given an algebra over a ring R, the image of R is the center +of the algebra, i.e. the set of members of the algebra which commute +with all others is precisely the image of R in the algebra. +\item {\bf \cross{ATTREG}{noetherian}} +is true if all of its ideals are finitely generated. +\item {\bf \cross{ATTREG}{additiveValuation}} +implies\\ +{\tt euclideanSize(a*b)=euclideanSize(a)+euclideanSize(b)}. +\item {\bf \cross{ATTREG}{multiplicativeValuation}} +implies\\ +{\tt euclideanSize(a*b)=euclideanSize(a)*euclideanSize(b)}. +\item {\bf \cross{ATTREG}{NullSquare}} +means that $[x,x] = 0$ holds. See {\tt LieAlgebra}. +\item {\bf \cross{ATTREG}{JacobiIdentity}} +means that $[x,[y,z]]+[y,[z,x]]+[z,[x,y]] = 0$ holds. +See {\tt LieAlgebra}. +\item {\bf \cross{ATTREG}{canonical}} +is true if and only if distinct elements have distinct data structures. +For example, a domain of mathematical objects which has the +{\tt canonical} attribute means that two objects are mathematically +equal if and only if their data structures are equal. +\end{itemize} + +<<category ATTREG AttributeRegistry>>= +)abbrev category ATTREG AttributeRegistry + +++ This category exports the attributes in the AXIOM Library +AttributeRegistry(): Category == with + finiteAggregate + ++ \spad{finiteAggregate} is true if it is an aggregate with a + ++ finite number of elements. + commutative("*") + ++ \spad{commutative("*")} is true if it has an operation + ++ \spad{"*": (D,D) -> D} which is commutative. + shallowlyMutable + ++ \spad{shallowlyMutable} is true if its values + ++ have immediate components that are updateable (mutable). + ++ Note: the properties of any component domain are irrevelant to the + ++ \spad{shallowlyMutable} proper. + unitsKnown + ++ \spad{unitsKnown} is true if a monoid (a multiplicative semigroup + ++ with a 1) has \spad{unitsKnown} means that + ++ the operation \spadfun{recip} can only return "failed" + ++ if its argument is not a unit. + leftUnitary + ++ \spad{leftUnitary} is true if \spad{1 * x = x} for all x. + rightUnitary + ++ \spad{rightUnitary} is true if \spad{x * 1 = x} for all x. + noZeroDivisors + ++ \spad{noZeroDivisors} is true if \spad{x * y \~~= 0} implies + ++ both x and y are non-zero. + canonicalUnitNormal + ++ \spad{canonicalUnitNormal} is true if we can choose a canonical + ++ representative for each class of associate elements, that is + ++ \spad{associates?(a,b)} returns true if and only if + ++ \spad{unitCanonical(a) = unitCanonical(b)}. + canonicalsClosed + ++ \spad{canonicalsClosed} is true if + ++ \spad{unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. + arbitraryPrecision + ++ \spad{arbitraryPrecision} means the user can set the + ++ precision for subsequent calculations. + partiallyOrderedSet + ++ \spad{partiallyOrderedSet} is true if + ++ a set with \spadop{<} which is transitive, + ++ but \spad{not(a < b or a = b)} + ++ does not necessarily imply \spad{b<a}. + central + ++ \spad{central} is true if, given an algebra over a ring R, + ++ the image of R is the center + ++ of the algebra, i.e. the set of members of the algebra which commute + ++ with all others is precisely the image of R in the algebra. + noetherian + ++ \spad{noetherian} is true if all of its ideals are finitely generated. + additiveValuation + ++ \spad{additiveValuation} implies + ++ \spad{euclideanSize(a*b)=euclideanSize(a)+euclideanSize(b)}. + multiplicativeValuation + ++ \spad{multiplicativeValuation} implies + ++ \spad{euclideanSize(a*b)=euclideanSize(a)*euclideanSize(b)}. + NullSquare + ++ \axiom{NullSquare} means that \axiom{[x,x] = 0} holds. + ++ See \axiomType{LieAlgebra}. + JacobiIdentity + ++ \axiom{JacobiIdentity} means that + ++ \axiom{[x,[y,z]]+[y,[z,x]]+[z,[x,y]] = 0} holds. + ++ See \axiomType{LieAlgebra}. + canonical + ++ \spad{canonical} is true if and only if distinct elements have + ++ distinct data structures. For example, a domain of mathematical + ++ objects which has the \spad{canonical} attribute means that two + ++ objects are mathematically equal if and only if their data + ++ structures are equal. + +@ +<<ATTREG.dotabb>>= +"ATTREG" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ATTREG"]; +"ATTREG" -> "CATEGORY" + +@ +<<ATTREG.dotabb>>= +"AttributeRegistry()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ATTREG"]; +"AttributeRegistry()" -> "Category" + +@ +<<ATTREG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"AttributeRegistry()" [color=lightblue]; +"AttributeRegistry()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BasicType}{BASTYPE} \pagepic{ps/v102basictype.ps}{BASTYPE}{1.00} @@ -429,6 +615,7 @@ {\bf See:}\\ \pageto{Collection}{CLAGG} +\pageto{MonogenicAlgebra}{MONOGEN} \pagefrom{Category}{CATEGORY} {\bf Exports:}\\ @@ -525,6 +712,7 @@ [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> "ConvertibleTo(a:Type)" + @ <<KONVERT.dotpic>>= digraph pic { @@ -700,6 +888,7 @@ \pagepic{ps/v102retractableto.ps}{RETRACT}{1.00} {\bf See:}\\ +\pageto{FullyRetractableTo}{FRETRCT} \pagefrom{Category}{CATEGORY} {\bf Exports:}\\ @@ -860,6 +1049,12 @@ \cross{AGG}{size?} \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{AGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are implemented by this category: \begin{verbatim} empty? : % -> Boolean @@ -969,6 +1164,14 @@ \cross{ELTAGG}{?.?} \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{ELTAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are part of this category's direct exports: \begin{verbatim} elt : (%,Dom,Im) -> Im @@ -1159,6 +1362,116 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{FullyRetractableTo}{FRETRCT} +\pagepic{ps/v102fullyretractableto.ps}{FRETRCT}{1.00} + +{\bf See:}\\ +\pageto{MonogenicAlgebra}{MONOGEN} +\pagefrom{RetractableTo}{RETRACT} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{FRETRCT}{coerce} & +\cross{FRETRCT}{retract} & +\cross{FRETRCT}{retractIfCan} +\end{tabular} + +These are implemented by this category: +\begin{verbatim} + coerce : Integer -> % + if S has RETRACT INT + coerce : Fraction Integer -> % + if S has RETRACT FRAC INT + retract : % -> Integer + if S has RETRACT INT + retract : % -> Fraction Integer + if S has RETRACT FRAC INT + retractIfCan : % -> Union(Integer,"failed") + if S has RETRACT INT + retractIfCan : % -> Union(Fraction Integer,"failed") + if S has RETRACT FRAC INT +\end{verbatim} + +These exports come from RetractableTo(S:Type): +\begin{verbatim} + coerce : S -> % + retract : % -> S + retractIfCan : % -> Union(S,"failed") +\end{verbatim} + +<<category FRETRCT FullyRetractableTo>>= +)abbrev category FRETRCT FullyRetractableTo +++ Author: Manuel Bronstein +++ Description: +++ A is fully retractable to B means that A is retractable to B, and, +++ in addition, if B is retractable to the integers or rational +++ numbers then so is A. +++ In particular, what we are asserting is that there are no integers +++ (rationals) in A which don't retract into B. +++ Date Created: March 1990 +++ Date Last Updated: 9 April 1991 +FullyRetractableTo(S: Type): Category == RetractableTo(S) with + if (S has RetractableTo Integer) then RetractableTo Integer + if (S has RetractableTo Fraction Integer) then + RetractableTo Fraction Integer + add + if not(S is Integer) then + if (S has RetractableTo Integer) then -- induction + coerce(n:Integer):% == n::S::% + retract(r:%):Integer == retract(retract(r)@S) + + retractIfCan(r:%):Union(Integer, "failed") == + (u:= retractIfCan(r)@Union(S,"failed")) case "failed"=> "failed" + retractIfCan(u::S) + + if not(S is Fraction Integer) then + if (S has RetractableTo Fraction Integer) then -- induction + coerce(n:Fraction Integer):% == n::S::% + retract(r:%):Fraction(Integer) == retract(retract(r)@S) + + retractIfCan(r:%):Union(Fraction Integer, "failed") == + (u:=retractIfCan(r)@Union(S,"failed")) case "failed"=>"failed" + retractIfCan(u::S) + +@ +<<FRETRCT.dotabb>>= +"FRETRCT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=FRETRCT"]; +"FRETRCT" -> "RETRACT" + +@ +<<FRETRCT.dotfull>>= +"FullyRetractableTo(a:Type)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=FRETRCT"]; +"FullyRetractableTo(a:Type)" -> "RetractableTo(a:Type)" + + [color=seagreen,href="bookvol10.2.pdf#nameddest=FRETRCT"]; +"FullyRetractableTo(a:Ring)" -> "FullyRetractableTo(a:Type)" + + [color=seagreen,href="bookvol10.2.pdf#nameddest=FRETRCT"]; +"FullyRetractableTo(a:CommutativeRing)" -> "FullyRetractableTo(a:Type)" + + [color=seagreen,href="bookvol10.2.pdf#nameddest=FRETRCT"]; +"FullyRetractableTo(a:SetCategory)" -> "FullyRetractableTo(a:Type)" + +@ +<<FRETRCT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"FullyRetractableTo(a:Type)" [color=lightblue]; +"FullyRetractableTo(a:Type)" -> "RetractableTo(a:Type)" + +"RetractableTo(a:Type)" [color=lightblue]; +"RetractableTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Logic}{LOGIC} \pagepic{ps/v102logic.ps}{LOGIC}{1.00} @@ -1303,7 +1616,6 @@ ++ Conditional Attributes: ++ canonical\tab{15}data structure equality is the same as \spadop{=} SetCategory(): Category == Join(BasicType,CoercibleTo OutputForm) with - --operations hash: % -> SingleInteger ++ hash(s) calculates a hash code for s. latex: % -> String ++ latex(s) returns a LaTeX-printable output ++ representation of s. @@ -1408,7 +1720,6 @@ ++ \spad{associative("+":(%,%)->%)}\tab{30}\spad{ (x+y)+z = x+(y+z) } ++ \spad{commutative("+":(%,%)->%)}\tab{30}\spad{ x+y = y+x } AbelianSemiGroup(): Category == SetCategory with - --operations "+": (%,%) -> % ++ x+y computes the sum of x and y. "*": (PositiveInteger,%) -> % ++ n*x computes the left-multiplication of x by the positive @@ -1430,7 +1741,7 @@ "AbelianSemiGroup()" [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELSG"]; "AbelianSemiGroup()" -> "SetCategory()" -"AbelianSemiGroup()" -> "RepeatedDoubling(SetCategory)" +"AbelianSemiGroup()" -> "RepeatedDoubling(a:SetCategory)" <<ABELSG.dotpic>>= digraph pic { @@ -1528,7 +1839,6 @@ ++ \spad{index(lookup(s)) = s} Finite(): Category == SetCategory with - --operations size: () -> NonNegativeInteger ++ size() returns the number of elements in the set. index: PositiveInteger -> % @@ -1592,6 +1902,7 @@ \pageto{Collection}{CLAGG} \pageto{IndexedAggregate}{IXAGG} \pageto{RecursiveAggregate}{RCAGG} +\pageto{TwoDimensionalArrayCategory}{ARR2CAT} \pagefrom{Aggregate}{AGG} \pagefrom{Evalable}{EVALAB} \pagefrom{SetCategory}{SETCAT} @@ -1623,6 +1934,16 @@ \cross{HOAGG}{?\~{}=?} && \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{HOAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{HOAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} map : ((S -> S),%) -> % @@ -1869,7 +2190,6 @@ ++ exactly one of the following relations holds \spad{a<b or a=b or b<a} ++ and the relation is transitive, i.e. \spad{a<b and b<c => a<c}. OrderedSet(): Category == SetCategory with - --operations "<": (%,%) -> Boolean ++ x < y is a strict total ordering on the elements of the set. ">": (%, %) -> Boolean @@ -1878,15 +2198,12 @@ ++ x >= y is a greater than or equal test. "<=": (%, %) -> Boolean ++ x <= y is a less than or equal test. - max: (%,%) -> % ++ max(x,y) returns the maximum of x and y relative to "<". min: (%,%) -> % ++ min(x,y) returns the minimum of x and y relative to "<". add - --declarations x,y: % - --definitions -- These really ought to become some sort of macro max(x,y) == x > y => x @@ -2007,7 +2324,6 @@ ++ Conditional attributes: ++ \spad{commutative("*":(%,%)->%)}\tab{30}\spad{ x*y = y*x } SemiGroup(): Category == SetCategory with - --operations "*": (%,%) -> % ++ x*y returns the product of x and y. "**": (%,PositiveInteger) -> % ++ x**n returns the repeated product ++ of x n times, i.e. exponentiation. @@ -2029,7 +2345,7 @@ "SemiGroup()" [color=lightblue,href="bookvol10.2.pdf#nameddest=SGROUP"]; "SemiGroup()" -> "SetCategory()" -"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" +"SemiGroup()" -> "RepeatedSquaring(a:SemiGroup)" @ <<SGROUP.dotpic>>= @@ -2040,7 +2356,7 @@ "SemiGroup()" [color=lightblue]; "SemiGroup()" -> "SetCategory()" -"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" +"SemiGroup()" -> "RepeatedSquaring(a:SemiGroup)" "SetCategory()" [color=lightblue]; "SetCategory()" -> "BasicType()" @@ -2055,8 +2371,8 @@ "CoercibleTo(a:Type)" [color=lightblue]; "CoercibleTo(a:Type)" -> "Category" -"RepeatedSquaring(SemiGroup)" [color="#00EE00"]; -"RepeatedSquaring(SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" +"RepeatedSquaring(a:SemiGroup)" [color="#00EE00"]; +"RepeatedSquaring(a:SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" "RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; "RepeatedSquaring(a:SetCategory)" -> "Package" @@ -2125,11 +2441,11 @@ ++ Conditional attributes: ++ infinite\tab{15}repeated \spad{nextItem}'s are never "failed". StepThrough(): Category == SetCategory with - --operations init: constant -> % ++ init() chooses an initial object for stepping. nextItem: % -> Union(%,"failed") - ++ nextItem(x) returns the next item, or "failed" if domain is exhausted. + ++ nextItem(x) returns the next item, or "failed" + ++ if domain is exhausted. @ <<STEP.dotabb>>= @@ -2239,7 +2555,6 @@ -- following domain must be compiled with subsumption disabled -- define SourceLevelSubset to be EQUAL AbelianMonoid(): Category == AbelianSemiGroup with - --operations 0: constant -> % ++ 0 is the additive identity element. sample: constant -> % @@ -2311,6 +2626,552 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{TwoDimensionalArrayCategory}{ARR2CAT} +\pagepic{ps/v102twodimensionalarraycategory.ps}{ARR2CAT}{0.60} + +TwoDimensionalArrayCategory is a general array category which +allows different representations and indexing schemes. +Rows and columns may be extracted with rows returned as objects +of type Row and columns returned as objects of type Col. +The index of the 'first' row may be obtained by calling the +function 'minRowIndex'. The index of the 'first' column may +be obtained by calling the function 'minColIndex'. The index of +the first element of a 'Row' is the same as the index of the +first column in an array and vice versa. + +{\bf See:}\\ +\pagefrom{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{ARR2CAT}{any?} & +\cross{ARR2CAT}{column} & +\cross{ARR2CAT}{coerce} & +\cross{ARR2CAT}{copy} & +\cross{ARR2CAT}{count} \\ +\cross{ARR2CAT}{elt} & +\cross{ARR2CAT}{empty} & +\cross{ARR2CAT}{empty?} & +\cross{ARR2CAT}{eq?} & +\cross{ARR2CAT}{eval} \\ +\cross{ARR2CAT}{every?} & +\cross{ARR2CAT}{fill!} & +\cross{ARR2CAT}{hash} & +\cross{ARR2CAT}{latex} & +\cross{ARR2CAT}{less?} \\ +\cross{ARR2CAT}{map} & +\cross{ARR2CAT}{map!} & +\cross{ARR2CAT}{maxColIndex} & +\cross{ARR2CAT}{maxRowIndex} & +\cross{ARR2CAT}{member?} \\ +\cross{ARR2CAT}{members} & +\cross{ARR2CAT}{minColIndex} & +\cross{ARR2CAT}{minRowIndex} & +\cross{ARR2CAT}{more?} & +\cross{ARR2CAT}{ncols} \\ +\cross{ARR2CAT}{new} & +\cross{ARR2CAT}{nrows} & +\cross{ARR2CAT}{parts} & +\cross{ARR2CAT}{qelt} & +\cross{ARR2CAT}{qsetelt!} \\ +\cross{ARR2CAT}{row} & +\cross{ARR2CAT}{sample} & +\cross{ARR2CAT}{setColumn!} & +\cross{ARR2CAT}{setRow!} & +\cross{ARR2CAT}{setelt} \\ +\cross{ARR2CAT}{size?} & +\cross{ARR2CAT}{\#?} & +\cross{ARR2CAT}{?=?} & +\cross{ARR2CAT}{?\~{}=?} & +\end{tabular} + +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{ARR2CAT}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{ARR2CAT}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{ARR2CAT}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + +These are directly exported but not implemented: +\begin{verbatim} + elt : (%,Integer,Integer) -> R + maxColIndex : % -> Integer + maxRowIndex : % -> Integer + minColIndex : % -> Integer + minRowIndex : % -> Integer + new : (NonNegativeInteger,NonNegativeInteger,R) -> % + ncols : % -> NonNegativeInteger + nrows : % -> NonNegativeInteger + qelt : (%,Integer,Integer) -> R + qsetelt! : (%,Integer,Integer,R) -> R + setelt : (%,Integer,Integer,R) -> R +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + any? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate + copy : % -> % + coerce : % -> OutputForm if R has SETCAT + column : (%,Integer) -> Col + count : ((R -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate + count : (R,%) -> NonNegativeInteger if R has SETCAT and $ has finiteAggregate + elt : (%,Integer,Integer,R) -> R + every? : ((R -> Boolean),%) -> Boolean if $ has finiteAggregate + fill! : (%,R) -> % + less? : (%,NonNegativeInteger) -> Boolean + map : ((R -> R),%) -> % + map : (((R,R) -> R),%,%) -> % + map : (((R,R) -> R),%,%,R) -> % + map! : ((R -> R),%) -> % + member? : (R,%) -> Boolean if R has SETCAT and $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List R + row : (%,Integer) -> Row + setColumn! : (%,Integer,Col) -> % + setRow! : (%,Integer,Row) -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if R has SETCAT +\end{verbatim} + +These exports come from HomogeneousAggregate(R:Type) +\begin{verbatim} + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List R,List R) -> % if R has EVALAB R and R has SETCAT + eval : (%,R,R) -> % if R has EVALAB R and R has SETCAT + eval : (%,Equation R) -> % if R has EVALAB R and R has SETCAT + eval : (%,List Equation R) -> % if R has EVALAB R and R has SETCAT + hash : % -> SingleInteger if R has SETCAT + latex : % -> String if R has SETCAT + members : % -> List R if $ has finiteAggregate + sample : () -> % + ?~=? : (%,%) -> Boolean if R has SETCAT +\end{verbatim} + +<<category ARR2CAT TwoDimensionalArrayCategory>>= +)abbrev category ARR2CAT TwoDimensionalArrayCategory +++ Two dimensional array categories and domains +++ Author: +++ Date Created: 27 October 1989 +++ Date Last Updated: 27 June 1990 +++ Keywords: array, data structure +++ Examples: +++ References: +TwoDimensionalArrayCategory(R,Row,Col): Category == Definition where + R : Type + Row : FiniteLinearAggregate R + Col : FiniteLinearAggregate R + + Definition == HomogeneousAggregate(R) with + + shallowlyMutable + ++ one may destructively alter arrays + + finiteAggregate + ++ two-dimensional arrays are finite + +--% Array creation + + new: (NonNegativeInteger,NonNegativeInteger,R) -> % + ++ new(m,n,r) is an m-by-n array all of whose entries are r + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + + fill_!: (%,R) -> % + ++ fill!(m,r) fills m with r's + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X fill!(arr,10) + +--% Size inquiries + + minRowIndex : % -> Integer + ++ minRowIndex(m) returns the index of the 'first' row of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X minRowIndex(arr) + + maxRowIndex : % -> Integer + ++ maxRowIndex(m) returns the index of the 'last' row of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X maxRowIndex(arr) + + minColIndex : % -> Integer + ++ minColIndex(m) returns the index of the 'first' column of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X minColIndex(arr) + + maxColIndex : % -> Integer + ++ maxColIndex(m) returns the index of the 'last' column of the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X maxColIndex(arr) + + nrows : % -> NonNegativeInteger + ++ nrows(m) returns the number of rows in the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X nrows(arr) + + ncols : % -> NonNegativeInteger + ++ ncols(m) returns the number of columns in the array m + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X ncols(arr) + +--% Part extractions + + elt: (%,Integer,Integer) -> R + ++ elt(m,i,j) returns the element in the ith row and jth + ++ column of the array m + ++ error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X elt(arr,1,1) + + qelt: (%,Integer,Integer) -> R + ++ qelt(m,i,j) returns the element in the ith row and jth + ++ column of the array m + ++ NO error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X qelt(arr,1,1) + + elt: (%,Integer,Integer,R) -> R + ++ elt(m,i,j,r) returns the element in the ith row and jth + ++ column of the array m, if m has an ith row and a jth column, + ++ and returns r otherwise + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X elt(arr,1,1,6) + ++X elt(arr,1,10,6) + + row: (%,Integer) -> Row + ++ row(m,i) returns the ith row of m + ++ error check to determine if index is in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X row(arr,1) + + column: (%,Integer) -> Col + ++ column(m,j) returns the jth column of m + ++ error check to determine if index is in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X column(arr,1) + + parts: % -> List R + ++ parts(m) returns a list of the elements of m in row major order + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X parts(arr) + +--% Part assignments + + setelt: (%,Integer,Integer,R) -> R + -- will become setelt_! + ++ setelt(m,i,j,r) sets the element in the ith row and jth + ++ column of m to r + ++ error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X setelt(arr,1,1,17) + + qsetelt_!: (%,Integer,Integer,R) -> R + ++ qsetelt!(m,i,j,r) sets the element in the ith row and jth + ++ column of m to r + ++ NO error check to determine if indices are in proper ranges + ++ + ++X arr : ARRAY2 INT := new(5,4,0) + ++X qsetelt!(arr,1,1,17) + + setRow_!: (%,Integer,Row) -> % + ++ setRow!(m,i,v) sets to ith row of m to v + ++ + ++X T1:=TwoDimensionalArray Integer + ++X arr:T1:= new(5,4,0) + ++X T2:=OneDimensionalArray Integer + ++X arow:=construct([1,2,3,4]::List(INT))$T2 + ++X setRow!(arr,1,arow)$T1 + + setColumn_!: (%,Integer,Col) -> % + ++ setColumn!(m,j,v) sets to jth column of m to v + ++ + ++X T1:=TwoDimensionalArray Integer + ++X arr:T1:= new(5,4,0) + ++X T2:=OneDimensionalArray Integer + ++X acol:=construct([1,2,3,4,5]::List(INT))$T2 + ++X setColumn!(arr,1,acol)$T1 + +--% Map and Zip + + map: (R -> R,%) -> % + ++ map(f,a) returns \spad{b}, where \spad{b(i,j) = f(a(i,j))} + ++ for all \spad{i, j} + ++ + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map(-,arr) + ++X map((x +-> x + x),arr) + + map_!: (R -> R,%) -> % + ++ map!(f,a) assign \spad{a(i,j)} to \spad{f(a(i,j))} + ++ for all \spad{i, j} + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map!(-,arr) + + map:((R,R) -> R,%,%) -> % + ++ map(f,a,b) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} + ++ for all \spad{i, j} + ++ + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X arr : ARRAY2 INT := new(5,4,10) + ++X map(adder,arr,arr) + + map:((R,R) -> R,%,%,R) -> % + ++ map(f,a,b,r) returns \spad{c}, where \spad{c(i,j) = f(a(i,j),b(i,j))} + ++ when both \spad{a(i,j)} and \spad{b(i,j)} exist; + ++ else \spad{c(i,j) = f(r, b(i,j))} when \spad{a(i,j)} does not exist; + ++ else \spad{c(i,j) = f(a(i,j),r)} when \spad{b(i,j)} does not exist; + ++ otherwise \spad{c(i,j) = f(r,r)}. + ++ + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X arr1 : ARRAY2 INT := new(5,4,10) + ++X arr2 : ARRAY2 INT := new(3,3,10) + ++X map(adder,arr1,arr2,17) + + add + +--% Predicates + + any?(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + f(qelt(m,i,j)) => return true + false + + every?(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + not f(qelt(m,i,j)) => return false + true + + size?(m,n) == nrows(m) * ncols(m) = n + less?(m,n) == nrows(m) * ncols(m) < n + more?(m,n) == nrows(m) * ncols(m) > n + +--% Size inquiries + + # m == nrows(m) * ncols(m) + +--% Part extractions + + elt(m,i,j,r) == + i < minRowIndex(m) or i > maxRowIndex(m) => r + j < minColIndex(m) or j > maxColIndex(m) => r + qelt(m,i,j) + + count(f:R -> Boolean,m:%) == + num : NonNegativeInteger := 0 + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + if f(qelt(m,i,j)) then num := num + 1 + num + + parts m == + entryList : List R := nil() + for i in maxRowIndex(m)..minRowIndex(m) by -1 repeat + for j in maxColIndex(m)..minColIndex(m) by -1 repeat + entryList := concat(qelt(m,i,j),entryList) + entryList + +--% Creation + + copy m == + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,qelt(m,i,j)) + ans + + fill_!(m,r) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(m,i,j,r) + m + + map(f,m) == + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,f(qelt(m,i,j))) + ans + + map_!(f,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(m,i,j,f(qelt(m,i,j))) + m + + map(f,m,n) == + (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => + error "map: arguments must have same dimensions" + ans := new(nrows m,ncols m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qsetelt_!(ans,i,j,f(qelt(m,i,j),qelt(n,i,j))) + ans + + map(f,m,n,r) == + maxRow := max(maxRowIndex m,maxRowIndex n) + maxCol := max(maxColIndex m,maxColIndex n) + ans := new(max(nrows m,nrows n),max(ncols m,ncols n),NIL$Lisp) + for i in minRowIndex(m)..maxRow repeat + for j in minColIndex(m)..maxCol repeat + qsetelt_!(ans,i,j,f(elt(m,i,j,r),elt(n,i,j,r))) + ans + + setRow_!(m,i,v) == + i < minRowIndex(m) or i > maxRowIndex(m) => + error "setRow!: index out of range" + for j in minColIndex(m)..maxColIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(m,i,j,v.k) + m + + setColumn_!(m,j,v) == + j < minColIndex(m) or j > maxColIndex(m) => + error "setColumn!: index out of range" + for i in minRowIndex(m)..maxRowIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(m,i,j,v.k) + m + + if R has _= : (R,R) -> Boolean then + + m = n == + eq?(m,n) => true + (nrows(m) ^= nrows(n)) or (ncols(m) ^= ncols(n)) => false + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + not (qelt(m,i,j) = qelt(n,i,j)) => return false + true + + member?(r,m) == + for i in minRowIndex(m)..maxRowIndex(m) repeat + for j in minColIndex(m)..maxColIndex(m) repeat + qelt(m,i,j) = r => return true + false + + count(r:R,m:%) == count(#1 = r,m) + + if Row has shallowlyMutable then + + row(m,i) == + i < minRowIndex(m) or i > maxRowIndex(m) => + error "row: index out of range" + v : Row := new(ncols m,NIL$Lisp) + for j in minColIndex(m)..maxColIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(v,k,qelt(m,i,j)) + v + + if Col has shallowlyMutable then + + column(m,j) == + j < minColIndex(m) or j > maxColIndex(m) => + error "column: index out of range" + v : Col := new(nrows m,NIL$Lisp) + for i in minRowIndex(m)..maxRowIndex(m) _ + for k in minIndex(v)..maxIndex(v) repeat + qsetelt_!(v,k,qelt(m,i,j)) + v + + if R has CoercibleTo(OutputForm) then + + coerce(m:%) == + l : List List OutputForm + l := [[qelt(m,i,j) :: OutputForm _ + for j in minColIndex(m)..maxColIndex(m)] _ + for i in minRowIndex(m)..maxRowIndex(m)] + matrix l + +@ +<<ARR2CAT.dotabb>>= +"ARR2CAT" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"ARR2CAT" -> "HOAGG" + +@ +<<ARR2CAT.dotfull>>= +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + -> "HomogeneousAggregate(a:Type)" + +"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=ARR2CAT"]; +"TwoDimensionalArrayCategory(a:Type,d:IndexedOneDimensionalArray(a,b),e:IndexedOneDimensionalArray(a,c))" +-> "TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + +@ +<<ARR2CAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + [color=lightblue]; +"TwoDimensionalArrayCategory(a:Type,b:FiniteLinearAggregate(a),c:FiniteLinearAggregate(a))" + -> "HomogeneousAggregate(a:Type)" + +"HomogeneousAggregate(a:Type)" [color=lightblue]; +"HomogeneousAggregate(a:Type)" -> "Aggregate()" +"HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)" +"HomogeneousAggregate(a:Type)" -> "SetCategory()" + +"Evalable(a:Type)" [color="#00EE00"]; + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Aggregate()" [color=lightblue]; +"Aggregate()" -> "Type()" + +"Type()" [color=lightblue]; +"Type()" -> "Category" + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BagAggregate}{BGAGG} \pagepic{ps/v102bagaggregate.ps}{BGAGG}{1.00} @@ -2352,6 +3213,14 @@ \cross{BGAGG}{?\~{}=?} &&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{BGAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} extract! : % -> S @@ -2520,6 +3389,12 @@ \cross{CLAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{CLAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} construct: List S -> % @@ -2769,6 +3644,16 @@ \cross{IXAGG}{?=?} &&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{IXAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{IXAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} index? : (Index,%) -> Boolean @@ -3107,7 +3992,7 @@ "SemiGroup()" [color=lightblue]; "SemiGroup()" -> "SetCategory()" -"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" +"SemiGroup()" -> "RepeatedSquaring(a:SemiGroup)" "SetCategory()" [color=lightblue]; "SetCategory()" -> "BasicType()" @@ -3122,8 +4007,8 @@ "CoercibleTo(a:Type)" [color=lightblue]; "CoercibleTo(a:Type)" -> "Category" -"RepeatedSquaring(SemiGroup)" [color="#00EE00"]; -"RepeatedSquaring(SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" +"RepeatedSquaring(a:SemiGroup)" [color="#00EE00"]; +"RepeatedSquaring(a:SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" "RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; "RepeatedSquaring(a:SetCategory)" -> "Package" @@ -3299,6 +4184,14 @@ \cross{RCAGG}{?=?} &&&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{RCAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} children : % -> List % @@ -3510,6 +4403,16 @@ \cross{BRAGG}{?.value} &&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{BRAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{BRAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} left : % -> % @@ -3902,6 +4805,12 @@ \cross{DIOPS}{?\~{}=?} &&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{DIOPS}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} dictionary : List S -> % @@ -4130,6 +5039,14 @@ \cross{DLAGG}{?.value} && \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{DLAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} concat! : (%,%) -> % if $ has shallowlyMutable @@ -4305,6 +5222,14 @@ \cross{GROUP}{?\^{}?} &&&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{GROUP}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} inv : % -> % @@ -4515,6 +5440,16 @@ \cross{LNAGG}{?.?} &&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{LNAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{LNAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} concat : (%,%) -> % @@ -5057,6 +5992,12 @@ \cross{PRQAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{PRQAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} max : % -> S @@ -5224,6 +6165,12 @@ \cross{QUAGG}{?\~{}=?} && \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{QUAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are implemented by this category: \begin{verbatim} back : % -> S @@ -5408,6 +6355,13 @@ \cross{SETAGG}{?\~{}=?} && \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{SETAGG}{partiallyOrderedSet}} +is true if a set with $<$ which is transitive, but +not($a < b$ or $a = b$) does not necessarily imply $b<a$. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} brace : List S -> % @@ -5678,6 +6632,12 @@ \cross{SKAGG}{?\~{}=?} &&&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{SKAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} depth : % -> NonNegativeInteger @@ -5868,6 +6828,16 @@ \cross{URAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{URAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{URAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} concat : (S,%) -> % @@ -6448,6 +7418,12 @@ \cross{DIAGG}{?=?} &&& \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{DIAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are implemented by this category: \begin{verbatim} dictionary : List S -> % @@ -6899,6 +7875,14 @@ \cross{ELAGG}{?\~{}=? } \\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{ELAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} concat! : (%,S) -> % @@ -7195,6 +8179,20 @@ \cross{FLAGG}{?\~{}=?} && \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FLAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{FLAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} copyInto! : (%,%,Integer) -> % @@ -7846,6 +8844,14 @@ \cross{STAGG}{?\~{}=?} & \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{STAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are implemented by this category: \begin{verbatim} concat : (%,%) -> % @@ -8211,6 +9217,14 @@ \cross{A1AGG}{?$>=$?} &&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{A1AGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\end{itemize} + These are implemented by this category: \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean @@ -8686,6 +9700,12 @@ \cross{FSAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FSAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are implemented by this category: \begin{verbatim} brace : List S -> % @@ -8984,6 +10004,12 @@ \cross{KDAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{KDAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} remove! : (Key,%) -> Union(Entry,"failed") @@ -10712,20 +11738,18 @@ ++ replace(s,i..j,t) replaces the substring \axiom{s(i..j)} ++ of s by string t. position : (%, %, Integer) -> Integer - ++ position(s,t,i) returns the position j of the substring s in string t, - ++ where \axiom{j >= i} is required. + ++ position(s,t,i) returns the position j of the substring s in + ++ string t, where \axiom{j >= i} is required. position : (CharacterClass, %, Integer) -> Integer ++ position(cc,t,i) returns the position \axiom{j >= i} in t of ++ the first character belonging to cc. coerce : Character -> % ++ coerce(c) returns c as a string s with the character c. - split: (%, Character) -> List % ++ split(s,c) returns a list of substrings delimited by character c. split: (%, CharacterClass) -> List % ++ split(s,cc) returns a list of substrings delimited by ++ characters in cc. - trim: (%, Character) -> % ++ trim(s,c) returns s with all characters c deleted from right ++ and left ends. @@ -10759,7 +11783,6 @@ add trim(s: %, c: Character) == leftTrim(rightTrim(s, c), c) trim(s: %, cc: CharacterClass) == leftTrim(rightTrim(s, cc), cc) - lowerCase s == lowerCase_! copy s upperCase s == upperCase_! copy s prefix?(s, t) == substring?(s, t, minIndex t) @@ -10877,6 +11900,12 @@ \cross{TBAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{TBAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} setelt : (%,Key,Entry) -> Entry @@ -11068,7 +12097,6 @@ ++E Data:=Record(age:Integer,gender:String) ++E a1:AssociationList(String,Data):=table() ++E a1."tim":=[55,"male"]$Data - table: List Record(key:Key,entry:Entry) -> % ++ table([x,y,...,z]) creates a table consisting of entries ++ \axiom{x,y,...,z}. @@ -11776,6 +12804,14 @@ \cross{BMODULE}{?=?} && \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{BMODULE}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{BMODULE}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These exports come from LeftModule(R:Ring): \begin{verbatim} 0 : () -> % @@ -12756,6 +13792,14 @@ \cross{RING}{?=?} &&&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{RING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} characteristic : () -> NonNegativeInteger @@ -12894,6 +13938,7 @@ \pagepic{ps/v102characteristicnonzero.ps}{CHARNZ}{0.90} {\bf See:}\\ +\pageto{FiniteRankAlgebra}{FINRALG} \pagefrom{Ring}{RING} {\bf Exports:}\\ @@ -13032,6 +14077,7 @@ \pagepic{ps/v102characteristiczero.ps}{CHARZ}{0.90} {\bf See:}\\ +\pageto{FiniteRankAlgebra}{FINRALG} \pagefrom{Ring}{RING} {\bf Exports:}\\ @@ -13109,9 +14155,9 @@ @ <<CHARZ.dotfull>>= -"CharacteristicNonZero()" +"CharacteristicZero()" [color=lightblue,href="bookvol10.2.pdf#nameddest=CHARZ"]; -"CharacteristicNonZero()" -> "Ring()" +"CharacteristicZero()" -> "Ring()" @ <<CHARZ.dotpic>>= @@ -13162,6 +14208,7 @@ {\bf See:}\\ \pageto{IntegralDomain}{INTDOM} +\pageto{MonogenicAlgebra}{MONOGEN} \pagefrom{BiModule}{BMODULE} \pagefrom{Ring}{RING} @@ -13188,7 +14235,14 @@ \cross{COMRING}{?=?} & \end{tabular} +{\bf Attributes:} +\begin{itemize} +\item {\bf \cross{COMRING}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\end{itemize} + These exports come from Ring(): \begin{verbatim} 0 : () -> % @@ -13509,6 +14563,12 @@ \cross{ENTIRER}{?=?} \\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{ENTIRER}{noZeroDivisors}} +is true if $x * y ~= 0$ implies both x and y are non-zero. +\end{itemize} + These exports come from Ring(): \begin{verbatim} 0 : () -> % @@ -13633,6 +14693,7 @@ {\bf See:}\\ \pageto{FullyLinearlyExplicitRingOver}{FLINEXP} +\pageto{MonogenicAlgebra}{MONOGEN} \pagefrom{Ring}{RING} {\bf Exports:}\\ @@ -14700,6 +15761,7 @@ {\bf See:}\\ \pageto{DivisionRing}{DIVRING} +\pageto{FiniteRankAlgebra}{FINRALG} \pageto{IntegralDomain}{INTDOM} \pagefrom{Module}{MODULE} \pagefrom{Ring}{RING} @@ -15230,6 +16292,14 @@ \cross{INTDOM}{?=?} & \end{tabular} +{\bf Attributes Used:} +\begin{itemize} +\item {\bf \cross{INTDOM}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} exquo : (%,%) -> Union(%,"failed") @@ -16708,6 +17778,7 @@ \pagepic{ps/v102field.ps}{FIELD}{1.00} {\bf See:}\\ +\pageto{FiniteRankAlgebra}{FINRALG} \pagefrom{DivisionRing}{DIVRING} \pagefrom{EuclideanDomain}{EUCDOM} \pagefrom{UniqueFactorizationDomain}{UFD} @@ -16758,6 +17829,17 @@ \cross{FIELD}{?\~{}=?} &&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FIELD}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{FIELD}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\end{itemize} + These are implemented by this category: \begin{verbatim} associates? : (%,%) -> Boolean @@ -16920,14 +18002,652 @@ } @ -\chapter{Temporary Placeholders} -\pagehead{Evalable}{EVALAB} -\pageto{HomogeneousAggregate}{HOAGG} -<<EVALAB.dotfull>>= -"Evalable(a:Type)" - [color="#00EE00",href="bookvol10.2.pdf#nameddest=EVALAB"]; +\chapter{Category Layer 17} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{FiniteRankAlgebra}{FINRALG} +\pagepic{ps/v102finiterankalgebra.ps}{FINRALG}{0.45} + +{\bf See:}\\ +\pageto{FramedAlgebra}{FRAMALG} +\pagefrom{Algebra}{ALGEBRA} +\pagefrom{CharacteristicNonZero}{CHARNZ} +\pagefrom{CharacteristicZero}{CHARZ} +\pagefrom{Field}{FIELD} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{FINRALG}{0} & +\cross{FINRALG}{1} & +\cross{FINRALG}{characteristic} \\ +\cross{FINRALG}{characteristicPolynomial} & +\cross{FINRALG}{charthRoot} & +\cross{FINRALG}{coerce} \\ +\cross{FINRALG}{coordinates} & +\cross{FINRALG}{discriminant} & +\cross{FINRALG}{hash} \\ +\cross{FINRALG}{latex} & +\cross{FINRALG}{minimalPolynomial} & +\cross{FINRALG}{norm} \\ +\cross{FINRALG}{one?} & +\cross{FINRALG}{rank} & +\cross{FINRALG}{recip} \\ +\cross{FINRALG}{regularRepresentation} & +\cross{FINRALG}{represents} & +\cross{FINRALG}{sample} \\ +\cross{FINRALG}{subtractIfCan} & +\cross{FINRALG}{trace} & +\cross{FINRALG}{traceMatrix} \\ +\cross{FINRALG}{zero?} & +\cross{FINRALG}{?*?} & +\cross{FINRALG}{?**?} \\ +\cross{FINRALG}{?+?} & +\cross{FINRALG}{?-?} & +\cross{FINRALG}{-?} \\ +\cross{FINRALG}{?=?} & +\cross{FINRALG}{?\^{}?} & +\cross{FINRALG}{?\~{}=?} \\ +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + characteristicPolynomial : % -> UP + coordinates : (%,Vector %) -> Vector R + minimalPolynomial : % -> UP if R has FIELD + norm : % -> R + rank : () -> PositiveInteger + trace : % -> R +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + coordinates : (Vector %,Vector %) -> Matrix R + discriminant : Vector % -> R + regularRepresentation : (%,Vector %) -> Matrix R + represents : (Vector R,Vector %) -> % + traceMatrix : Vector % -> Matrix R +\end{verbatim} + +These exports come from Algebra(R:CommutativeRing): +\begin{verbatim} + 0 : () -> % + 1 : () -> % + characteristic : () -> NonNegativeInteger + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (%,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?**? : (%,PositiveInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % +\end{verbatim} + +These exports come from Field(): +\begin{verbatim} + ?*? : (R,%) -> % + ?*? : (%,R) -> % + coerce : R -> % +\end{verbatim} + +These exports come from CharacteristicNonZero(): +\begin{verbatim} + charthRoot : % -> Union(%,"failed") if R has CHARNZ +\end{verbatim} + +These exports come from CharacteristicZero(): +\begin{verbatim} +\end{verbatim} + +<<category FINRALG FiniteRankAlgebra>>= +)abbrev category FINRALG FiniteRankAlgebra +++ Author: Barry Trager +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A FiniteRankAlgebra is an algebra over a commutative ring R which +++ is a free R-module of finite rank. + +FiniteRankAlgebra(R:CommutativeRing, UP:UnivariatePolynomialCategory R): + Category == Algebra R with + rank : () -> PositiveInteger + ++ rank() returns the rank of the algebra. + regularRepresentation : (% , Vector %) -> Matrix R + ++ regularRepresentation(a,basis) returns the matrix of the + ++ linear map defined by left multiplication by \spad{a} with respect + ++ to the basis \spad{basis}. + trace : % -> R + ++ trace(a) returns the trace of the regular representation + ++ of \spad{a} with respect to any basis. + norm : % -> R + ++ norm(a) returns the determinant of the regular representation + ++ of \spad{a} with respect to any basis. + coordinates : (%, Vector %) -> Vector R + ++ coordinates(a,basis) returns the coordinates of \spad{a} with + ++ respect to the basis \spad{basis}. + coordinates : (Vector %, Vector %) -> Matrix R + ++ coordinates([v1,...,vm], basis) returns the coordinates of the + ++ vi's with to the basis \spad{basis}. The coordinates of vi are + ++ contained in the ith row of the matrix returned by this + ++ function. + represents : (Vector R, Vector %) -> % + ++ represents([a1,..,an],[v1,..,vn]) returns \spad{a1*v1+...+an*vn}. + discriminant : Vector % -> R + ++ discriminant([v1,..,vn]) returns + ++ \spad{determinant(traceMatrix([v1,..,vn]))}. + traceMatrix : Vector % -> Matrix R + ++ traceMatrix([v1,..,vn]) is the n-by-n matrix ( Tr(vi * vj) ) + characteristicPolynomial: % -> UP + ++ characteristicPolynomial(a) returns the characteristic + ++ polynomial of the regular representation of \spad{a} with respect + ++ to any basis. + if R has Field then minimalPolynomial : % -> UP + ++ minimalPolynomial(a) returns the minimal polynomial of \spad{a}. + if R has CharacteristicZero then CharacteristicZero + if R has CharacteristicNonZero then CharacteristicNonZero + + add + + discriminant v == determinant traceMatrix v + + coordinates(v:Vector %, b:Vector %) == + m := new(#v, #b, 0)$Matrix(R) + for i in minIndex v .. maxIndex v for j in minRowIndex m .. repeat + setRow_!(m, j, coordinates(qelt(v, i), b)) + m + + represents(v, b) == + m := minIndex v - 1 + _+/[v(i+m) * b(i+m) for i in 1..rank()] + + traceMatrix v == + matrix [[trace(v.i*v.j) for j in minIndex v..maxIndex v]$List(R) + for i in minIndex v .. maxIndex v]$List(List R) + + regularRepresentation(x, b) == + m := minIndex b - 1 + matrix + [parts coordinates(x*b(i+m),b) for i in 1..rank()]$List(List R) + @ +<<FINRALG.dotabb>>= +"FINRALG" + [color=lightblue,href="bookvol10.2.pdf#nameddest=FINRALG"]; +"FINRALG" -> "ALGEBRA" +"FINRALG" -> "FIELD" +"FINRALG" -> "CHARNZ" +"FINRALG" -> "CHARZ" +@ +<<FINRALG.dotfull>>= +"FiniteRankAlgebra(a:CommutativeRing,b:UnivariatePolynomialCategory(a))" + [color=lightblue,href="bookvol10.2.pdf#nameddest=FINRALG"]; +"FiniteRankAlgebra(a:CommutativeRing,b:UnivariatePolynomialCategory(a))" -> + "Algebra(a:CommutativeRing)" +"FiniteRankAlgebra(a:CommutativeRing,b:UnivariatePolynomialCategory(a))" -> + "Field()" +"FiniteRankAlgebra(a:CommutativeRing,b:UnivariatePolynomialCategory(a))" -> + "CharacteristicNonZero()" +"FiniteRankAlgebra(a:CommutativeRing,b:UnivariatePolynomialCategory(a))" -> + "CharacteristicZero()" + +@ +<<FINRALG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Finite... [truncated message content] |
From: <gi...@ax...> - 2008-09-27 16:18:16
|
books/bookvol10.2.pamphlet | 1812 ++++++++++++++++++++++++++- books/ps/v102attributeregistry.ps | 289 +++++ books/ps/v102category.ps | 243 ++++ books/ps/v102finiterankalgebra.ps | 702 +++++++++++ books/ps/v102framedalgebra.ps | 748 +++++++++++ books/ps/v102fullyretractableto.ps | 335 +++++ books/ps/v102monogenicalgebra.ps | 473 +++++++ books/ps/v102twodimensionalarraycategory.ps | 697 ++++++++++ changelog | 14 + src/algebra/Makefile.pamphlet | 5 +- src/algebra/array2.spad.pamphlet | 368 ------ src/algebra/attreg.spad.pamphlet | 131 -- src/algebra/retract.spad.pamphlet | 43 - 13 files changed, 5276 insertions(+), 584 deletions(-) New commits: commit e3f70d83d57a11785734965f8e36bfb961f87c51 Author: Tim Daly <da...@ax...> Date: Fri Aug 1 02:30:49 2008 -0400 20080926 tpd books/bookvol10.2 add attributes 20080926 tpd src/algebra/Makefile remove attreg 20080926 tpd books/ps/v102twodimensionalarraycategory.ps added 20080926 tpd books/ps/v102monogenicalgebra.ps added 20080926 tpd books/ps/v102fullyretractableto.ps added 20080926 tpd books/ps/v102framedalgebra.ps added 20080926 tpd books/ps/v102finiterankalgebra.ps added 20080926 tpd books/ps/v102category.ps added 20080926 tpd books/ps/v102attributeregistry.ps added 20080926 tpd books/bookvol10.2 add categories 20080926 tpd src/algebra/attreg.spad deleted, absorbed by bookvol10.2 20080926 tpd src/algebra/array2.spad move ARR2CAT to bookvol10.2 20080926 tpd src/algebra/retract.spad move FRETRCT to bookvol10.2 20080926 tpd src/algebra/algcat.spad move categories to bookvol10.2 |
From: <da...@us...> - 2008-09-26 06:33:06
|
Revision: 981 http://axiom.svn.sourceforge.net/axiom/?rev=981&view=rev Author: daly Date: 2008-09-26 06:32:53 +0000 (Fri, 26 Sep 2008) Log Message: ----------- 20080925 tpd books/ps/v102vectorspace.ps added 20080925 tpd books/ps/v102uniquefactorizationdomain.ps added 20080925 tpd books/ps/v102principalidealdomain.ps added 20080925 tpd books/ps/v102polynomialfactorizationexplicit.ps added 20080925 tpd books/ps/v102partialdifferentialring.ps added 20080925 tpd books/ps/v102orderedintegraldomain.ps added 20080925 tpd books/ps/v102module.ps added 20080925 tpd books/ps/v102logic.ps added 20080925 tpd books/ps/v102linearlyexplicitringover.ps added 20080925 tpd books/ps/v102integraldomain.ps added 20080925 tpd books/ps/v102innerevalable.ps added 20080925 tpd books/ps/v102gcddomain.ps added 20080925 tpd books/ps/v102fullylinearlyexplicitringover.ps added 20080925 tpd books/ps/v102field.ps added 20080925 tpd books/ps/v102evalable.ps added 20080925 tpd books/ps/v102euclideandomain.ps added 20080925 tpd books/ps/v102divisionring.ps added 20080925 tpd books/ps/v102differentialring.ps added 20080925 tpd books/ps/v102differentialextension.ps added 20080925 tpd books/ps/v102commutativering.ps added 20080925 tpd books/ps/v102characteristiczero.ps added 20080925 tpd books/ps/v102characteristicnonzero.ps added 20080925 tpd books/ps/v102bitaggregate.ps added 20080925 tpd books/ps/v102algebra.ps added 20080925 tpd books/ps/v102EntireRing.ps added 20080925 tpd books/ps/v102retractableto.ps added 20080925 tpd books/bookvol10.2 absorb equation1.spad 20080925 tpd src/algebra/Makefile remove equation1 20080925 tpd src/algebra/boolean.spad move LOGIC into bookvol10.2 20080925 tpd src/algebra/equation1.spad remove. merged into bookvol10.2 20080925 tpd src/algebra/Makefile remove catdef.spad 20080925 tpd books/bookvol10.2 absorb catdef.spad 20080925 tpd src/algebra/catdef.spad removed, moved to bookvol10.2 Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/books/ps/v102retractableto.ps trunk/axiom/changelog trunk/axiom/src/algebra/Makefile.pamphlet trunk/axiom/src/algebra/boolean.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102EntireRing.ps trunk/axiom/books/ps/v102algebra.ps trunk/axiom/books/ps/v102bitaggregate.ps trunk/axiom/books/ps/v102characteristicnonzero.ps trunk/axiom/books/ps/v102characteristiczero.ps trunk/axiom/books/ps/v102commutativering.ps trunk/axiom/books/ps/v102differentialextension.ps trunk/axiom/books/ps/v102differentialring.ps trunk/axiom/books/ps/v102divisionring.ps trunk/axiom/books/ps/v102euclideandomain.ps trunk/axiom/books/ps/v102evalable.ps trunk/axiom/books/ps/v102field.ps trunk/axiom/books/ps/v102fullylinearlyexplicitringover.ps trunk/axiom/books/ps/v102gcddomain.ps trunk/axiom/books/ps/v102innerevalable.ps trunk/axiom/books/ps/v102integraldomain.ps trunk/axiom/books/ps/v102linearlyexplicitringover.ps trunk/axiom/books/ps/v102logic.ps trunk/axiom/books/ps/v102module.ps trunk/axiom/books/ps/v102orderedintegraldomain.ps trunk/axiom/books/ps/v102partialdifferentialring.ps trunk/axiom/books/ps/v102polynomialfactorizationexplicit.ps trunk/axiom/books/ps/v102principalidealdomain.ps trunk/axiom/books/ps/v102uniquefactorizationdomain.ps trunk/axiom/books/ps/v102vectorspace.ps Removed Paths: ------------- trunk/axiom/src/algebra/catdef.spad.pamphlet trunk/axiom/src/algebra/equation1.spad.pamphlet Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-22 05:30:00 UTC (rev 980) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-26 06:32:53 UTC (rev 981) @@ -284,9 +284,11 @@ {\bf See:}\\ \pageto{BasicType}{BASTYPE} -\pageto{Eltable}{ELTAB} \pageto{CoercibleTo}{KOERCE} \pageto{ConvertibleTo}{KONVERT} +\pageto{Eltable}{ELTAB} +\pageto{InnerEvalable}{IEVALAB} +\pageto{Logic}{LOGIC} \pageto{RetractableTo}{RETRACT} \pageto{Type}{TYPE} @@ -603,6 +605,97 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{InnerEvalable}{IEVALAB} +\pagepic{ps/v102innerevalable.ps}{IEVALAB}{1.00} + +{\bf See:}\\ +\pageto{Evalable}{EVALAB} +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{l} +\cross{IEVALAB}{eval} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + eval : (%,A,B) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + eval : (%,List A,List B) -> % +\end{verbatim} + +<<category IEVALAB InnerEvalable>>= +)abbrev category IEVALAB InnerEvalable +-- FOR THE BENEFIT OF LIBAX0 GENERATION +++ Author: +++ Date Created: +++ Date Last Updated: June 3, 1991 +++ Basic Operations: +++ Related Domains: +++ Also See: Evalable +++ AMS Classifications: +++ Keywords: equation +++ Examples: +++ References: +++ Description: +++ This category provides \spadfun{eval} operations. +++ A domain may belong to this category if it is possible to make +++ ``evaluation'' substitutions. The difference between this +++ and \spadtype{Evalable} is that the operations in this category +++ specify the substitution as a pair of arguments rather than as +++ an equation. +InnerEvalable(A:SetCategory, B:Type): Category == with + eval: ($, A, B) -> $ + ++ eval(f, x, v) replaces x by v in f. + eval: ($, List A, List B) -> $ + ++ eval(f, [x1,...,xn], [v1,...,vn]) replaces xi by vi in f. + add + eval(f:$, x:A, v:B) == eval(f, [x], [v]) + +@ +<<IEVALAB.dotabb>>= +"IEVALAB" + [color=lightblue,href="bookvol10.2.pdf#nameddest=IEVALAB"]; +"IEVALAB" -> "CATEGORY" + +@ +<<IEVALAB.dotfull>>= +"InnerEvalable(a:SetCategory,b:Type)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=IEVALAB"]; +"InnerEvalable(a:SetCategory,b:Type)" -> "Category" + +"InnerEvalable(a:SetCategory,b:SetCategory)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=IEVALAB"]; +"InnerEvalable(a:SetCategory,b:SetCategory)" -> + "InnerEvalable(a:SetCategory,b:Type)" + +"InnerEvalable(a:Ring,MultivariateTaylorSeriesCategory(a:Ring,b:OrderedSet))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=IEVALAB"]; +"InnerEvalable(a:Ring,MultivariateTaylorSeriesCategory(a:Ring,b:OrderedSet))" + -> "InnerEvalable(a:SetCategory,b:Type)" + +"InnerEvalable(Kernal(ExpressionSpace),ExpressionSpace)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=IEVALAB"]; +"InnerEvalable(Kernal(ExpressionSpace),ExpressionSpace)" -> + "InnerEvalable(a:SetCategory,b:Type)" +@ +<<IEVALAB.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"InnerEvalable(a:SetCategory,b:Type)" [color=lightblue]; +"InnerEvalable(a:SetCategory,b:Type)" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{RetractableTo}{RETRACT} \pagepic{ps/v102retractableto.ps}{RETRACT}{1.00} @@ -972,6 +1065,184 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Evalable}{EVALAB} +\pagepic{ps/v102evalable.ps}{EVALAB}{1.00} + +{\bf See:}\\ +\pagefrom{InnerEvalable}{IEVALAB} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + eval : (%,List Equation R) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} +eval : (%,Equation R) -> % +eval : (%,List R,List R) -> % +\end{verbatim} + +These exports come from InnerEvalable(R:SetCategory,R:SetCategory): +\begin{verbatim} + eval : (%,R,R) -> % +\end{verbatim} + +<<category EVALAB Evalable>>= +)abbrev category EVALAB Evalable +++ Author: +++ Date Created: +++ Date Last Updated: June 3, 1991 +++ Basic Operations: +++ Related Domains: +++ Also See: FullyEvalable +++ AMS Classifications: +++ Keywords: equation +++ Examples: +++ References: +++ Description: +++ This category provides \spadfun{eval} operations. +++ A domain may belong to this category if it is possible to make +++ ``evaluation'' substitutions. +Evalable(R:SetCategory): Category == InnerEvalable(R,R) with + eval: ($, Equation R) -> $ + ++ eval(f,x = v) replaces x by v in f. + eval: ($, List Equation R) -> $ + ++ eval(f, [x1 = v1,...,xn = vn]) replaces xi by vi in f. + add + eval(f:$, eq:Equation R) == eval(f, [eq]) + eval(f:$, xs:List R,vs:List R) == eval(f,[x=v for x in xs for v in vs]) + +@ +<<EVALAB.dotabb>>= +"EVALAB" + [color=lightblue,href="bookvol10.2.pdf#nameddest=EVALAB"]; +"EVALAB" -> "IEVALAB" + +@ +<<EVALAB.dotfull>>= +"Evalable(a:SetCategory)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=EVALAB"]; +"Evalable(a:SetCategory)" -> "InnerEvalable(a:SetCategory,b:SetCategory)" + +"Evalable(MultivariateTaylorSeriesCategory(a:Ring,b:OrderedSet))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=EVALAB"]; +"Evalable(MultivariateTaylorSeriesCategory(a:Ring,b:OrderedSet))" -> + "Evalable(a:SetCategory)" + +"Evalable(ExpressionSpace)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=EVALAB"]; +"Evalable(ExpressionSpace)" -> "Evalable(a:SetCategory)" + +@ +<<EVALAB.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Evalable(a:SetCategory)" [color=lightblue]; +"Evalable(a:SetCategory)" -> "InnerEvalable(a:SetCategory,b:SetCategory)" + +"InnerEvalable(a:SetCategory,b:SetCategory)" [color=seagreen]; +"InnerEvalable(a:SetCategory,b:SetCategory)" -> + "InnerEvalable(a:SetCategory,b:Type)" + +"InnerEvalable(a:SetCategory,b:Type)" [color=lightblue]; +"InnerEvalable(a:SetCategory,b:Type)" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Logic}{LOGIC} +\pagepic{ps/v102logic.ps}{LOGIC}{1.00} + +{\bf See:}\\ +\pageto{BitAggregate}{BTAGG} +\pagefrom{BasicType}{BASTYPE} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{LOGIC}{?$/\backslash{}$?} +\cross{LOGIC}{?=?} +\cross{LOGIC}{?$\backslash{}/$?} +\cross{LOGIC}{\~{}?} +\cross{LOGIC}{?\~{}=?} +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + ~? : % -> % + ?/\? : (%,%) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + ?\/? : (%,%) -> % +\end{verbatim} + +These exports come from BasicType(): +\begin{verbatim} + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category LOGIC Logic>>= +)abbrev category LOGIC Logic +++ Author: +++ Date Created: +++ Change History: +++ Basic Operations: ~, /\, \/ +++ Related Constructors: +++ Keywords: boolean +++ Description: +++ `Logic' provides the basic operations for lattices, +++ e.g., boolean algebra. +Logic: Category == BasicType with + _~: % -> % + ++ ~(x) returns the logical complement of x. + _/_\: (%, %) -> % + ++ \spadignore { /\ }returns the logical `meet', e.g. `and'. + _\_/: (%, %) -> % + ++ \spadignore{ \/ } returns the logical `join', e.g. `or'. + add + _\_/(x: %,y: %) == _~( _/_\(_~(x), _~(y))) + +@ +<<LOGIC.dotabb>>= +"LOGIC" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LOGIC"]; +"LOGIC" -> "BASTYPE" + +@ +<<LOGIC.dotfull>>= +"Logic()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LOGIC"]; +"Logic()" -> "BasicType()" + +@ +<<LOGIC.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Logic()" [color=lightblue]; +"Logic()" -> "BasicType()" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{SetCategory}{SETCAT} \pagepic{ps/v102setcategory.ps}{SETCAT}{1.00} @@ -1082,7 +1353,7 @@ \chapter{Category Layer 3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{AbelianSemiGroup}{ABELSG} -\pagepic{ps/v102abeliansemigroup.ps}{ABELSG}{1.00} +\pagepic{ps/v102abeliansemigroup.ps}{ABELSG}{0.75} {\bf See:}\\ \pageto{AbelianMonoid}{ABELMON} @@ -1537,6 +1808,7 @@ \pagepic{ps/v102orderedset.ps}{ORDSET}{1.00} {\bf See:}\\ +\pageto{BitAggregate}{BTAGG} \pageto{OrderedAbelianSemiGroup}{OASGP} \pageto{OrderedFinite}{ORDFIN} \pageto{OrderedMonoid}{ORDMON} @@ -7869,6 +8141,7 @@ \pagepic{ps/v102onedimensionalarrayaggregate.ps}{A1AGG}{1.00} {\bf See:}\\ +\pageto{BitAggregate}{BTAGG} \pageto{StringAggregate}{SRAGG} \pagefrom{FiniteLinearAggregate}{FLAGG} @@ -8344,6 +8617,7 @@ "CLAGG..." [color=lightblue]; "IXAGG..." [color=lightblue]; } + @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{FiniteSetAggregate}{FSAGG} @@ -9639,11 +9913,14 @@ construct : List S -> % convert : % -> InputForm if S has KONVERT INFORM copy : % -> % - count : (S,%) -> NonNegativeInteger if S has SETCAT and $ has finiteAggregate - count : ((S -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate dictionary : List S -> % dictionary : () -> % - duplicates : % -> List Record(entry: S,count: NonNegativeInteger) + duplicates : % -> + List Record(entry: S,count: NonNegativeInteger) empty : () -> % empty? : % -> Boolean eq? : (%,%) -> Boolean @@ -9662,21 +9939,31 @@ less? : (%,NonNegativeInteger) -> Boolean map : ((S -> S),%) -> % map! : ((S -> S),%) -> % if $ has shallowlyMutable - member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate members : % -> List S if $ has finiteAggregate more? : (%,NonNegativeInteger) -> Boolean parts : % -> List S if $ has finiteAggregate - reduce : (((S,S) -> S),%) -> S if $ has finiteAggregate - reduce : (((S,S) -> S),%,S) -> S if $ has finiteAggregate - reduce : (((S,S) -> S),%,S,S) -> S if S has SETCAT and $ has finiteAggregate - remove : ((S -> Boolean),%) -> % if $ has finiteAggregate - remove : (S,%) -> % if S has SETCAT and $ has finiteAggregate - removeDuplicates : % -> % if S has SETCAT and $ has finiteAggregate + reduce : (((S,S) -> S),%) -> S + if $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S + if $ has finiteAggregate + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT and $ has finiteAggregate + remove : ((S -> Boolean),%) -> % + if $ has finiteAggregate + remove : (S,%) -> % + if S has SETCAT and $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT and $ has finiteAggregate removeDuplicates! : % -> % - remove! : ((S -> Boolean),%) -> % if $ has finiteAggregate + remove! : ((S -> Boolean),%) -> % + if $ has finiteAggregate remove! : (S,%) -> % if $ has finiteAggregate - select : ((S -> Boolean),%) -> % if $ has finiteAggregate - select! : ((S -> Boolean),%) -> % if $ has finiteAggregate + select : ((S -> Boolean),%) -> % + if $ has finiteAggregate + select! : ((S -> Boolean),%) -> % + if $ has finiteAggregate size? : (%,NonNegativeInteger) -> Boolean #? : % -> NonNegativeInteger if $ has finiteAggregate ?~=? : (%,%) -> Boolean @@ -10957,7 +11244,7 @@ \chapter{Category Layer 8} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{AssociationListAggregate}{ALAGG} -\pagepic{ps/v102associationlistaggregate.ps}{ALAGG}{0.50} +\pagepic{ps/v102associationlistaggregate.ps}{ALAGG}{0.45} {\bf See:}\\ \pagefrom{ListAggregate}{LSAGG} @@ -11466,6 +11753,9 @@ \pagepic{ps/v102bimodule.ps}{BMODULE}{1.00} {\bf See:}\\ +\pageto{CommutativeRing}{COMRING} +\pageto{EntireRing}{ENTIRER} +\pageto{Module}{MODULE} \pagefrom{LeftModule}{LMODULE} \pagefrom{RightModule}{RMODULE} @@ -11564,8 +11854,7 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"BiModule(a:Ring,b:Ring)" - [color=lightblue,href="bookvol10.2.pdf#nameddest=BMODULE"]; +"BiModule(a:Ring,b:Ring)" [color=lightblue]; "BiModule(a:Ring,b:Ring)" -> "LeftModule(a:Ring)" "BiModule(a:Ring,b:Ring)" -> "RightModule(a:Ring)" @@ -11592,16 +11881,349 @@ "REPDB..." [color="#00EE00"]; } +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BitAggregate}{BTAGG} +\pagepic{ps/v102bitaggregate.ps}{BTAGG}{0.65} +{\bf See:}\\ +\pagefrom{Logic}{LOGIC} +\pagefrom{OneDimensionalArrayAggregate}{A1AGG} +\pagefrom{OrderedSet}{ORDSET} +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{BTAGG}{any?} & +\cross{BTAGG}{coerce} & +\cross{BTAGG}{concat} & +\cross{BTAGG}{construct} & +\cross{BTAGG}{convert} \\ +\cross{BTAGG}{copy} & +\cross{BTAGG}{copyInto!} & +\cross{BTAGG}{count} & +\cross{BTAGG}{delete} & +\cross{BTAGG}{elt} \\ +\cross{BTAGG}{empty} & +\cross{BTAGG}{empty?} & +\cross{BTAGG}{entry?} & +\cross{BTAGG}{entries} & +\cross{BTAGG}{eq?} \\ +\cross{BTAGG}{eval} & +\cross{BTAGG}{every?} & +\cross{BTAGG}{fill!} & +\cross{BTAGG}{find} & +\cross{BTAGG}{first} \\ +\cross{BTAGG}{hash} & +\cross{BTAGG}{index?} & +\cross{BTAGG}{indices} & +\cross{BTAGG}{insert} & +\cross{BTAGG}{latex} \\ +\cross{BTAGG}{less?} & +\cross{BTAGG}{map} & +\cross{BTAGG}{map!} & +\cross{BTAGG}{max} & +\cross{BTAGG}{maxIndex} \\ +\cross{BTAGG}{member?} & +\cross{BTAGG}{members} & +\cross{BTAGG}{merge} & +\cross{BTAGG}{min} & +\cross{BTAGG}{minIndex} \\ +\cross{BTAGG}{more?} & +\cross{BTAGG}{nand} & +\cross{BTAGG}{new} & +\cross{BTAGG}{nor} & +\cross{BTAGG}{not?} \\ +\cross{BTAGG}{parts} & +\cross{BTAGG}{position} & +\cross{BTAGG}{qelt} & +\cross{BTAGG}{qsetelt!} & +\cross{BTAGG}{reduce} \\ +\cross{BTAGG}{remove} & +\cross{BTAGG}{removeDuplicates} & +\cross{BTAGG}{reverse} & +\cross{BTAGG}{reverse!} & +\cross{BTAGG}{sample} \\ +\cross{BTAGG}{select} & +\cross{BTAGG}{setelt} & +\cross{BTAGG}{size?} & +\cross{BTAGG}{sort} & +\cross{BTAGG}{sort!} \\ +\cross{BTAGG}{sorted?} & +\cross{BTAGG}{swap!} & +\cross{BTAGG}{xor} & +\cross{BTAGG}{\#?} & +\cross{BTAGG}{?$/\backslash{}$?} \\ +\cross{BTAGG}{?$<$?} & +\cross{BTAGG}{?$<=$?} & +\cross{BTAGG}{?=?} & +\cross{BTAGG}{?$>$?} & +\cross{BTAGG}{?$>=$?} \\ +\cross{BTAGG}{?$\backslash{}/$?} & +\cross{BTAGG}{\^{}?} & +\cross{BTAGG}{?and?} & +\cross{BTAGG}{?.?} & +\cross{BTAGG}{?or?} \\ +\cross{BTAGG}{\~{}?} & +\cross{BTAGG}{?\~{}=?} &&& +\end{tabular} +These are directly exported but not implemented: +\begin{verbatim} + ?and? : (%,%) -> % + ?or? : (%,%) -> % + xor : (%,%) -> % +\end{verbatim} +These are implemented by this category: +\begin{verbatim} + not? : % -> % + ^? : % -> % + ~? : % -> % + ?/\? : (%,%) -> % + ?\/? : (%,%) -> % + nand : (%,%) -> % + nor : (%,%) -> % +\end{verbatim} +These exports come from OrderedSet(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + max : (%,%) -> % + min : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?<? : (%,%) -> Boolean + ?>? : (%,%) -> Boolean + ?<=? : (%,%) -> Boolean + ?>=? : (%,%) -> Boolean +\end{verbatim} +TPDHERE: Note that none of the exports of Logic are needed. +Perhaps this can be eliminated. +These exports come from OneDimensionalArrayAggregate(Boolean): +\begin{verbatim} + any? : ((Boolean -> Boolean),%) -> Boolean + if $ has finiteAggregate + concat : (%,%) -> % + concat : List % -> % + concat : (%,Boolean) -> % + concat : (Boolean,%) -> % + construct : List Boolean -> % + convert : % -> InputForm + if Boolean has KONVERT INFORM + copy : % -> % + copyInto! : (%,%,Integer) -> % + if $ has shallowlyMutable + count : (Boolean,%) -> NonNegativeInteger + if Boolean has SETCAT and $ has finiteAggregate + count : ((Boolean -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + delete : (%,UniversalSegment Integer) -> % + delete : (%,Integer) -> % + elt : (%,Integer,Boolean) -> Boolean + empty : () -> % + empty? : % -> Boolean + entry? : (Boolean,%) -> Boolean + if $ has finiteAggregate and Boolean has SETCAT + entries : % -> List Boolean + eq? : (%,%) -> Boolean + eval : (%,List Equation Boolean) -> % + if Boolean has EVALAB BOOLEAN and Boolean has SETCAT + eval : (%,Equation Boolean) -> % + if Boolean has EVALAB BOOLEAN and Boolean has SETCAT + eval : (%,Boolean,Boolean) -> % + if Boolean has EVALAB BOOLEAN and Boolean has SETCAT + eval : (%,List Boolean,List Boolean) -> % + if Boolean has EVALAB BOOLEAN and Boolean has SETCAT + every? : ((Boolean -> Boolean),%) -> Boolean + if $ has finiteAggregate + fill! : (%,Boolean) -> % + if $ has shallowlyMutable + find : ((Boolean -> Boolean),%) -> Union(Boolean,"failed") + first : % -> Boolean if Integer has ORDSET + index? : (Integer,%) -> Boolean + indices : % -> List Integer + insert : (Boolean,%,Integer) -> % + insert : (%,%,Integer) -> % + less? : (%,NonNegativeInteger) -> Boolean + map : ((Boolean -> Boolean),%) -> % + map : (((Boolean,Boolean) -> Boolean),%,%) -> % + map! : ((Boolean -> Boolean),%) -> % + if $ has shallowlyMutable + maxIndex : % -> Integer if Integer has ORDSET + member? : (Boolean,%) -> Boolean + if Boolean has SETCAT and $ has finiteAggregate + members : % -> List Boolean if $ has finiteAggregate + merge : (%,%) -> % if Boolean has ORDSET + minIndex : % -> Integer if Integer has ORDSET + more? : (%,NonNegativeInteger) -> Boolean + new : (NonNegativeInteger,Boolean) -> % + merge : (((Boolean,Boolean) -> Boolean),%,%) -> % + parts : % -> List Boolean if $ has finiteAggregate + position : ((Boolean -> Boolean),%) -> Integer + position : (Boolean,%,Integer) -> Integer + if Boolean has SETCAT + position : (Boolean,%) -> Integer + if Boolean has SETCAT + qelt : (%,Integer) -> Boolean + qsetelt! : (%,Integer,Boolean) -> Boolean + if $ has shallowlyMutable + reverse : % -> % + reduce : (((Boolean,Boolean) -> Boolean),%) -> Boolean + if $ has finiteAggregate + reduce : (((Boolean,Boolean) -> Boolean),%,Boolean) -> Boolean + if $ has finiteAggregate + reduce : + (((Boolean,Boolean) -> Boolean),%,Boolean,Boolean) -> Boolean + if Boolean has SETCAT and $ has finiteAggregate + remove : (Boolean,%) -> % + if Boolean has SETCAT and $ has finiteAggregate + remove : ((Boolean -> Boolean),%) -> % + if $ has finiteAggregate + removeDuplicates : % -> % + if Boolean has SETCAT and $ has finiteAggregate + reverse! : % -> % if $ has shallowlyMutable + sample : () -> % + setelt : (%,UniversalSegment Integer,Boolean) -> Boolean + if $ has shallowlyMutable + select : ((Boolean -> Boolean),%) -> % + if $ has finiteAggregate + setelt : (%,Integer,Boolean) -> Boolean + if $ has shallowlyMutable + size? : (%,NonNegativeInteger) -> Boolean + sort : (((Boolean,Boolean) -> Boolean),%) -> % + sort : % -> % if Boolean has ORDSET + sort! : % -> % + if Boolean has ORDSET and $ has shallowlyMutable + sort! : (((Boolean,Boolean) -> Boolean),%) -> % + if $ has shallowlyMutable + sorted? : % -> Boolean if Boolean has ORDSET + sorted? : (((Boolean,Boolean) -> Boolean),%) -> Boolean + swap! : (%,Integer,Integer) -> Void if $ has shallowlyMutable + ?.? : (%,UniversalSegment Integer) -> % + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?.? : (%,Integer) -> Boolean +\end{verbatim} +<<category BTAGG BitAggregate>>= +)abbrev category BTAGG BitAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The bit aggregate category models aggregates representing large +++ quantities of Boolean data. +BitAggregate(): Category == + Join(OrderedSet, Logic, OneDimensionalArrayAggregate Boolean) with + "not": % -> % + ++ not(b) returns the logical {\em not} of bit aggregate + ++ \axiom{b}. + "^" : % -> % + ++ ^ b returns the logical {\em not} of bit aggregate + ++ \axiom{b}. + nand : (%, %) -> % + ++ nand(a,b) returns the logical {\em nand} of bit aggregates + ++ \axiom{a} and \axiom{b}. + nor : (%, %) -> % + ++ nor(a,b) returns the logical {\em nor} of bit aggregates + ++ \axiom{a} and \axiom{b}. + _and : (%, %) -> % + ++ a and b returns the logical {\em and} of bit aggregates + ++ \axiom{a} and \axiom{b}. + _or : (%, %) -> % + ++ a or b returns the logical {\em or} of bit aggregates + ++ \axiom{a} and \axiom{b}. + xor : (%, %) -> % + ++ xor(a,b) returns the logical {\em exclusive-or} of bit aggregates + ++ \axiom{a} and \axiom{b}. + add + not v == map(_not, v) + _^ v == map(_not, v) + _~(v) == map(_~, v) + _/_\(v, u) == map(_/_\, v, u) + _\_/(v, u) == map(_\_/, v, u) + nand(v, u) == map(nand, v, u) + nor(v, u) == map(nor, v, u) + @ +<<BTAGG.dotabb>>= +"BTAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=BTAGG"]; +"BTAGG" -> "ORDSET" +"BTAGG" -> "LOGIC" +"BTAGG" -> "A1AGG" + +@ +<<BTAGG.dotfull>>= +"BitAggregate()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=BTAGG"]; +"BitAggregate()" -> "OrderedSet()" +"BitAggregate()" -> "Logic()" +"BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)" + +@ +<<BTAGG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"BitAggregate()" [color=lightblue]; +"BitAggregate()" -> "OrderedSet()" +"BitAggregate()" -> "Logic()" +"BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)" + +"OneDimensionalArrayAggregate(Boolean)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=A1AGG"]; +"OneDimensionalArrayAggregate(Boolean)" -> + "OneDimensionalArrayAggregate(a:Type)" + +"OneDimensionalArrayAggregate(a:Type)" [color=lightblue]; +"OneDimensionalArrayAggregate(a:Type)" -> + "FiniteLinearAggregate(a:Type)" + +"FiniteLinearAggregate(a:Type)" [color=lightblue]; +"FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" + +"LinearAggregate(a:Type)" [color=lightblue]; +"LinearAggregate(a:Type)" -> "IXAGG..." +"LinearAggregate(a:Type)" -> "CLAGG..." + +"OrderedSet()" [color=lightblue]; +"OrderedSet()" -> "SetCategory()" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Logic()" [color=lightblue]; +"Logic()" -> "BasicType()" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"Category" [color=lightblue]; + +"CLAGG..." [color=lightblue]; +"IXAGG..." [color=lightblue]; +} + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{OrderedAbelianGroup}{OAGROUP} \pagepic{ps/v102orderedabeliangroup.ps}{OAGROUP}{1.00} @@ -11938,7 +12560,8 @@ dictionary : () -> % difference : (%,S) -> % difference : (%,%) -> % - duplicates : % -> List Record(entry: S,count: NonNegativeInteger) + duplicates : % -> + List Record(entry: S,count: NonNegativeInteger) empty : () -> % empty? : % -> Boolean eq? : (%,%) -> Boolean @@ -12094,7 +12717,16 @@ \pagepic{ps/v102ring.ps}{RING}{1.00} {\bf See:}\\ +\pageto{Algebra}{ALGEBRA} +\pageto{CharacteristicNonZero}{CHARNZ} +\pageto{CharacteristicZero}{CHARZ} +\pageto{CommutativeRing}{COMRING} +\pageto{DifferentialExtension}{DIFEXT} +\pageto{DifferentialRing}{DIFRING} +\pageto{EntireRing}{ENTIRER} +\pageto{LinearlyExplicitRingOver}{LINEXP} \pageto{OrderedRing}{ORDRING} +\pageto{PartialDifferentialRing}{PDRING} \pagefrom{LeftModule}{LMODULE} \pagefrom{Monoid}{MONOID} \pagefrom{Rng}{RNG} @@ -12168,10 +12800,6 @@ TPDHERE: Note that none of the exports of LeftModule are needed. Perhaps this can be eliminated. -These exports come from LeftModule(Ring): -\begin{verbatim} -\end{verbatim} - <<category RING Ring>>= )abbrev category RING Ring ++ Author: @@ -12262,10 +12890,902 @@ @ \chapter{Category Layer 9} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CharacteristicNonZero}{CHARNZ} +\pagepic{ps/v102characteristicnonzero.ps}{CHARNZ}{0.90} + +{\bf See:}\\ +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{CHARNZ}{1} & +\cross{CHARNZ}{0} & +\cross{CHARNZ}{coerce} & +\cross{CHARNZ}{hash} & +\cross{CHARNZ}{latex} \\ +\cross{CHARNZ}{one?} & +\cross{CHARNZ}{recip} & +\cross{CHARNZ}{sample} & +\cross{CHARNZ}{zero?} & +\cross{CHARNZ}{characteristic} \\ +\cross{CHARNZ}{charthRoot} & +\cross{CHARNZ}{subtractIfCan} & +\cross{CHARNZ}{?\~{}=?} & +\cross{CHARNZ}{?\^{}?} & +\cross{CHARNZ}{?*?} \\ +\cross{CHARNZ}{?**?} & +\cross{CHARNZ}{?+?} & +\cross{CHARNZ}{?-?} & +\cross{CHARNZ}{-?} & +\cross{CHARNZ}{?=?} \\ +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + charthRoot : % -> Union(%,"failed") +\end{verbatim} + +These exports come from Ring(): +\begin{verbatim} + 1 : () -> % + 0 : () -> % + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + zero? : % -> Boolean + characteristic : () -> NonNegativeInteger + subtractIfCan : (%,%) -> Union(%,"failed") + ?~=? : (%,%) -> Boolean + ?^? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?+? : (%,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category CHARNZ CharacteristicNonZero>>= +)abbrev category CHARNZ CharacteristicNonZero +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Rings of Characteristic Non Zero +CharacteristicNonZero():Category == Ring with + charthRoot: % -> Union(%,"failed") + ++ charthRoot(x) returns the pth root of x + ++ where p is the characteristic of the ring. + +@ +<<CHARNZ.dotabb>>= +"CHARNZ" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CHARNZ"]; +"CHARNZ" -> "RING" + +@ +<<CHARNZ.dotfull>>= +"CharacteristicNonZero()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CHARNZ"]; +"CharacteristicNonZero()" -> "Ring()" + +@ +<<CHARNZ.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"CharacteristicNonZero()" [color=lightblue]; +"CharacteristicNonZero()" -> "Ring()" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CABMON..." +"AbelianGroup()" -> "REPDB..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPDB..." [color="#00EE00"]; +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"CABMON..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CharacteristicZero}{CHARZ} +\pagepic{ps/v102characteristiczero.ps}{CHARZ}{0.90} + +{\bf See:}\\ +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{CHARZ}{1} & +\cross{CHARZ}{0} & +\cross{CHARZ}{coerce} & +\cross{CHARZ}{hash} & +\cross{CHARZ}{latex} \\ +\cross{CHARZ}{one?} & +\cross{CHARZ}{recip} & +\cross{CHARZ}{sample} & +\cross{CHARZ}{zero?} & +\cross{CHARZ}{characteristic} \\ +\cross{CHARZ}{subtractIfCan} & +\cross{CHARZ}{?\~{}=?} & +\cross{CHARZ}{?\^{}?} & +\cross{CHARZ}{?*?} \\ +\cross{CHARZ}{?**?} & +\cross{CHARZ}{?+?} & +\cross{CHARZ}{?-?} & +\cross{CHARZ}{-?} & +\cross{CHARZ}{?=?} \\ +\end{tabular} + +These exports come from Ring(): +\begin{verbatim} + 1 : () -> % + 0 : () -> % + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + zero? : % -> Boolean + characteristic : () -> NonNegativeInteger + subtractIfCan : (%,%) -> Union(%,"failed") + ?~=? : (%,%) -> Boolean + ?^? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?+? : (%,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category CHARZ CharacteristicZero>>= +)abbrev category CHARZ CharacteristicZero +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Rings of Characteristic Zero. +CharacteristicZero():Category == Ring + +@ +<<CHARZ.dotabb>>= +"CHARZ" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CHARZ"]; +"CHARZ" -> "RING" + +@ +<<CHARZ.dotfull>>= +"CharacteristicNonZero()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=CHARZ"]; +"CharacteristicNonZero()" -> "Ring()" + +@ +<<CHARZ.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"CharacteristicZero()" [color=lightblue]; +"CharacteristicZero()" -> "Ring()" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CABMON..." +"AbelianGroup()" -> "REPDB..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPDB..." [color="#00EE00"]; +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"CABMON..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CommutativeRing}{COMRING} +\pagepic{ps/v102commutativering.ps}{COMRING}{0.65} + +{\bf See:}\\ +\pageto{IntegralDomain}{INTDOM} +\pagefrom{BiModule}{BMODULE} +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{COMRING}{1} & +\cross{COMRING}{0} & +\cross{COMRING}{coerce} & +\cross{COMRING}{hash} & +\cross{COMRING}{latex} \\ +\cross{COMRING}{one?} & +\cross{COMRING}{recip} & +\cross{COMRING}{sample} & +\cross{COMRING}{zero?} & +\cross{COMRING}{characteristic} \\ +\cross{COMRING}{subtractIfCan} & +\cross{COMRING}{?\~{}=?} & +\cross{COMRING}{?\^{}?} & +\cross{COMRING}{?*?} & +\cross{COMRING}{?**?} \\ +\cross{COMRING}{?+?} & +\cross{COMRING}{?-?} & +\cross{COMRING}{-?} & +\cross{COMRING}{?=?} & +\end{tabular} + + +These exports come from Ring(): +\begin{verbatim} + 0 : () -> % + 1 : () -> % + characteristic : () -> NonNegativeInteger + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (%,%) -> % + ?*? : (Integer,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?*? : (PositiveInteger,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % +\end{verbatim} + +TPDHERE: Note that none of the exports of BiModule(a:Ring,b:Ring) +are needed. Perhaps this can be eliminated. + +<<category COMRING CommutativeRing>>= +)abbrev category COMRING CommutativeRing +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The category of commutative rings with unity, i.e. rings where +++ \spadop{*} is commutative, and which have a multiplicative identity. +++ element. +--CommutativeRing():Category == Join(Ring,BiModule(%:Ring,%:Ring)) with +CommutativeRing():Category == Join(Ring,BiModule(%,%)) with + commutative("*") ++ multiplication is commutative. + +@ +<<COMRING.dotabb>>= +"COMRING" + [color=lightblue,href="bookvol10.2.pdf#nameddest=COMRING"]; +"COMRING" -> "RING" +"COMRING" -> "BMODULE" + +@ +<<COMRING.dotfull>>= +"CommutativeRing()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=COMRING"]; +"CommutativeRing()" -> "Ring()" +"CommutativeRing()" -> "BiModule(a:Ring,b:Ring)" + +@ +<<COMRING.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"CommutativeRing()" [color=lightblue]; +"CommutativeRing()" -> "Ring()" +"CommutativeRing()" -> "BiModule(a:Ring,b:Ring)" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"BiModule(a:Ring,b:Ring)" [color=lightblue]; +"BiModule(a:Ring,b:Ring)" -> "LeftModule(a:Ring)" +"BiModule(a:Ring,b:Ring)" -> "RightModule(a:Ring)" + +"RightModule(a:Ring)" [color=seagreen]; +"RightModule(a:Ring)" -> "RightModule(a:Rng)" + +"RightModule(a:Rng)" [color=lightblue]; +"RightModule(a:Rng)" -> "AbelianGroup()" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CABMON..." +"AbelianGroup()" -> "REPDB..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPDB..." [color="#00EE00"]; +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"CABMON..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{DifferentialRing}{DIFRING} +\pagepic{ps/v102differentialring.ps}{DIFRING}{0.90} + +{\bf See:}\\ +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{DIFRING}{1} & +\cross{DIFRING}{0} & +\cross{DIFRING}{characteristic} & +\cross{DIFRING}{coerce} & +\cross{DIFRING}{D} \\ +\cross{DIFRING}{differentiate} & +\cross{DIFRING}{hash} & +\cross{DIFRING}{latex} & +\cross{DIFRING}{one?} & +\cross{DIFRING}{recip} \\ +\cross{DIFRING}{sample} & +\cross{DIFRING}{subtractIfCan} & +\cross{DIFRING}{zero?} & +\cross{DIFRING}{?\~{}=?} & +\cross{DIFRING}{?**?} \\ +\cross{DIFRING}{?\^{}?} & +\cross{DIFRING}{?*?} & +\cross{DIFRING}{?+?} & +\cross{DIFRING}{?-?} & +\cross{DIFRING}{-?} \\ +\cross{DIFRING}{?=?} & +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + differentiate : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + D : % -> % + D : (%,NonNegativeInteger) -> % + differentiate : (%,NonNegativeInteger) -> % +\end{verbatim} + +These exports come from Ring(): +\begin{verbatim} + 1 : () -> % + 0 : () -> % + characteristic : () -> NonNegativeInteger + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?~=? : (%,%) -> Boolean + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?+? : (%,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category DIFRING DifferentialRing>>= +)abbrev category DIFRING DifferentialRing +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An ordinary differential ring, that is, a ring with an operation +++ \spadfun{differentiate}. +++ +++ Axioms: +++ \spad{differentiate(x+y) = differentiate(x)+differentiate(y)} +++ \spad{differentiate(x*y) = x*differentiate(y) + differentiate(x)*y} + +DifferentialRing(): Category == Ring with + differentiate: % -> % + ++ differentiate(x) returns the derivative of x. + ++ This function is a simple differential operator + ++ where no variable needs to be specified. + D: % -> % + ++ D(x) returns the derivative of x. + ++ This function is a simple differential operator + ++ where no variable needs to be specified. + differentiate: (%, NonNegativeInteger) -> % + ++ differentiate(x, n) returns the n-th derivative of x. + D: (%, NonNegativeInteger) -> % + ++ D(x, n) returns the n-th derivative of x. + add + D r == differentiate r + differentiate(r, n) == + for i in 1..n repeat r := differentiate r + r + D(r,n) == differentiate(r,n) + +@ +<<DIFRING.dotabb>>= +"DIFRING" + [color=lightblue,href="bookvol10.2.pdf#nameddest=DIFRING"]; +"DIFRING" -> "RING" + +@ +<<DIFRING.dotfull>>= +"DifferentialRing()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=DIFRING"]; +"DifferentialRing()" -> "Ring()" + +@ +<<DIFRING.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"DifferentialRing()" [color=lightblue]; +"DifferentialRing()" -> "Ring()" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CABMON..." +"AbelianGroup()" -> "REPDB..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPDB..." [color="#00EE00"]; +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"CABMON..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{EntireRing}{ENTIRER} +\pagepic{ps/v102EntireRing.ps}{ENTIRER}{0.65} + +{\bf See:}\\ +\pageto{DivisionRing}{DIVRING} +\pageto{IntegralDomain}{INTDOM} +\pagefrom{BiModule}{BMODULE} +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{ENTIRER}{1} & +\cross{ENTIRER}{0} & +\cross{ENTIRER}{characteristic} & +\cross{ENTIRER}{coerce} & +\cross{ENTIRER}{hash} \\ +\cross{ENTIRER}{latex} & +\cross{ENTIRER}{one?} & +\cross{ENTIRER}{recip} & +\cross{ENTIRER}{sample} & +\cross{ENTIRER}{subtractIfCan} \\ +\cross{ENTIRER}{zero?} & +\cross{ENTIRER}{?\^{}?} & +\cross{ENTIRER}{?\~{}=?} & +\cross{ENTIRER}{?*?} & +\cross{ENTIRER}{?**?} \\ +\cross{ENTIRER}{?*?} & +\cross{ENTIRER}{?+?} & +\cross{ENTIRER}{?-?} & +\cross{ENTIRER}{-?} & +\cross{ENTIRER}{?=?} \\ +\end{tabular} + +These exports come from Ring(): +\begin{verbatim} + 0 : () -> % + 1 : () -> % + characteristic : () -> NonNegativeInteger + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (%,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % +\end{verbatim} + +TPDHERE: Note that none of the exports of BiModule(a:Ring,b:Ring) +are needed. Perhaps this can be eliminated. + +<<category ENTIRER EntireRing>>= +)abbrev category ENTIRER EntireRing +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Entire Rings (non-commutative Integral Domains), i.e. a ring +++ not necessarily commutative which has no zero divisors. +++ +++ Axioms: +++ \spad{ab=0 => a=0 or b=0} -- known as noZeroDivisors +++ \spad{not(1=0)} +--EntireRing():Category == Join(Ring,BiModule(%:Ring,%:Ring)) with +EntireRing():Category == Join(Ring,BiModule(%,%)) with + noZeroDivisors ++ if a product is zero then one of the factors + ++ must be zero. + +@ +<<ENTIRER.dotabb>>= +"ENTIRER" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ENTIRER"]; +"ENTIRER" -> "RING" +"ENTIRER" -> "BMODULE" + +@ +<<ENTIRER.dotfull>>= +"EntireRing()" + [color=lightblue,href="bookvol10.2.pdf#nameddest=ENTIRER"]; +"EntireRing()" -> "Ring()" +"EntireRing()" -> "BiModule(a:Ring,b:Ring)" + +@ +<<ENTIRER.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"EntireRing()" [color=lightblue]; +"EntireRing()" -> "Ring()" +"EntireRing()" -> "BiModule(a:Ring,b:Ring)" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "ABELGRP..." +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"BiModule(a:Ring,b:Ring)" [color=lightblue]; +"BiModule(a:Ring,b:Ring)" -> "LeftModule(a:Ring)" +"BiModule(a:Ring,b:Ring)" -> "RightModule(a:Ring)" + +"RightModule(a:Ring)" [color=seagreen]; +"RightModule(a:Ring)" -> "RightModule(a:Rng)" + +"RightModule(a:Rng)" [color=lightblue]; +"RightModule(a:Rng)" -> "ABELGRP..." + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "ABELGRP..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"ABELGRP..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{LinearlyExplicitRingOver}{LINEXP} +\pagepic{ps/v102linearlyexplicitringover.ps}{LINEXP}{0.90} + +{\bf See:}\\ +\pageto{FullyLinearlyExplicitRingOver}{FLINEXP} +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{LINEXP}{0} & +\cross{LINEXP}{1} & +\cross{LINEXP}{characteristic} & +\cross{LINEXP}{coerce} & +\cross{LINEXP}{hash} \\ +\cross{LINEXP}{latex} & +\cross{LINEXP}{one?} & +\cross{LINEXP}{recip} & +\cross{LINEXP}{reducedSystem} & +\cross{LINEXP}{subtractIfCan} \\ +\cross{LINEXP}{sample} & +\cross{LINEXP}{zero?} & +\cross{LINEXP}{?*?} & +\cross{LINEXP}{?**?} & +\cross{LINEXP}{?+?} \\ +\cross{LINEXP}{?-?} & +\cross{LINEXP}{-?} & +\cross{LINEXP}{?=?} & +\cross{LINEXP}{?\^{}?} & +\cross{LINEXP}{?\~{}=?} \\ +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + reducedSystem : (Matrix %,Vector %) -> + Record(mat: Matrix R,vec: Vector R) + reducedSystem : Matrix % -> Matrix R +\end{verbatim} + +These exports come from Ring(): +\begin{verbatim} + 0 : () -> % + 1 : () -> % + characteristic : () -> NonNegativeInteger + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (NonNegativeInteger,%) -> % + ?*? : (PositiveInteger,%) -> % + ?*? : (Integer,%) -> % + ?*? : (%,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?**? : (%,PositiveInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % +\end{verbatim} + +<<category LINEXP LinearlyExplicitRingOver>>= +)abbrev category LINEXP LinearlyExplicitRingOver +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An extension ring with an explicit linear dependence test. +LinearlyExplicitRingOver(R:Ring): Category == Ring with + reducedSystem: Matrix % -> Matrix R + ++ reducedSystem(A) returns a matrix B such that \spad{A x = 0} + ++ and \spad{B x = 0} have the same solutions in R. + reducedSystem: (Matrix %,Vector %) -> Record(mat:Matrix R,vec:Vector R) + ++ reducedSystem(A, v) returns a matrix B and a vector w such that + ++ \spad{A x = v} and \spad{B x = w} have the same solutions in R. + +@ +<<LINEXP.dotabb>>= +"LINEXP" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LINEXP"]; +"LINEXP" -> "RING" + +@ +<<LINEXP.dotfull>>= +"LinearlyExplicitRingOver(a:Ring)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=LINEXP"]; +"LinearlyExplicitRingOver(a:Ring)" -> "Ring()" + +"LinearlyExplicitRingOver(Integer)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=LINEXP"]; +"LinearlyExplicitRingOver(Integer)" -> "LinearlyExplicitRingOver(a:Ring)" + +"LinearlyExplicitRingOver(Fraction(Integer))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=LINEXP"]; +"LinearlyExplicitRingOver(Fraction(Integer))" -> + "LinearlyExplicitRingOver(a:Ring)" + +@ +<<LINEXP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"LinearlyExplicitRingOver(a:Ring)" [color=lightblue]; +"LinearlyExplicitRingOver(a:Ring)" -> "Ring()" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CABMON..." +"AbelianGroup()" -> "REPDB..." + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SETCAT..." +"SemiGroup()" -> "REPSQ..." + +"REPDB..." [color="#00EE00"]; +"REPSQ..." [color="#00EE00"]; +"SETCAT..." [color=lightblue]; +"CABMON..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{OrderedRing}{ORDRING} \pagepic{ps/v102orderedring.ps}{ORDRING}{0.65} {\bf See:}\\ +\pageto{OrderedIntegralDomain}{OINTDOM} \pagefrom{Monoid}{MONOID} \pagefrom{OrderedAbelianGroup}{OAGROUP} \pagefrom{Ring}{RING} @@ -12460,71 +13980,2946 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\chapter{Category Layers} -\section{category BTAGG BitAggregate} -<<category BTAGG BitAggregate>>= -)abbrev category BTAGG BitAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: +\pagehead{PartialDifferentialRing}{PDRING} +\pagepic{ps/v102partialdifferentialring.ps}{PDRING}{1.00} + +{\bf See:}\\ +\pageto{DifferentialExtension}{DIFEXT} +\pagefrom{Ring}{RING} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{PDRING}{1} & +\cross{PDRING}{0} & +\cross{PDRING}{characteristic} & +\cross{PDRING}{coerce} & +\cross{PDRING}{D} \\ +\cross{PDRING}{differentiate} & +\cross{PDRING}{hash} & +\cross{PDRING}{latex} & +\cross{PDRING}{one?} & +\cross{PDRING}{recip} \\ +\cross{PDRING}{sample} & +\cross{PDRING}{subtractIfCan} & +\cross{PDRING}{zero?} & +\cross{PDRING}{?\^{}?} & +\cross{PDRING}{?*?} \\ +\cross{PDRING}{?\~{}=?} & +\cross{PDRING}{?**?} & +\cross{PDRING}{?+?} & +\cross{PDRING}{?-?} & +\cross{PDRING}{-?} \\ +\cross{PDRING}{?=?} & +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + differentiate : (%,S) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + differentiate : (%,List S) -> % + differentiate : (%,S,NonNegativeInteger) -> % + differentiate : (%,List S,List NonNegativeInteger) -> % + D : (%,S) -> % + D : (%,List S) -> % + D : (%,S,NonNegativeInteger) -> % + D : (%,List S,List NonNegativeInteger) -> % +\end{verbatim} + +These exports come from Ring(): +\begin{verbatim} + characteristic : () -> NonNegativeInteger + 0 : () -> % + 1 : () -> % + coerce : Integer -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + subtractIfCan : (%,%) -> Union(%,"failed") + zero? : % -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (%,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?-? : (%,%) -> % + -? : % -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % +\end{verbatim} + +These exports come from Evalable(a:Type): +\begin{verbatim} +\end{verbatim} + +These exports come from SetCategory: +\begin{verbatim} +\end{verbatim} + +<<category PDRING PartialDifferentialRing>>= +)abbrev category PDRING PartialDifferentialRing +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: ++ Related Constructors: ++ Also See: ++ AMS Classifications: ++ Keywords: ++ References: ++ Description: -++ The bit aggregate category models aggregates representing large -++ quantities of Boolean data. -BitAggregate(): Category == - Join(OrderedSet, Logic, OneDimensionalArrayAggregate Boolean) with - "not": % -> % - ++ not(b) returns the logical {\em not} of bit aggregate - ++ \axiom{b}. - "^" : % -> % - ++ ^ b returns the logical {\em not} of bit aggregate - ++ \axiom{b}. - nand : (%, %) -> % - ++ nand(a,b) returns the logical {\em nand} of bit aggregates - ++ \axiom{a} and \axiom{b}. - nor : (%, %) -> % - ++ nor(a,b) returns the logical {\em nor} of bit aggregates - ++ \axiom{a} and \axiom{b}. - _and : (%, %) -> % - ++ a and b returns the logical {\em and} of bit aggregates - ++ \axiom{a} and \axiom{b}. - _or : (%, %) -> % - ++ a or b returns the logical {\em or} of bit aggregates - ++ \axiom{a} and \axiom{b}. - xor : (%, %) -> % - ++ xor(a,b) returns the logical {\em exclusive-or} of bit aggregates - ++ \axiom{a} and \axiom{b}. +++ A partial differential ring with differentiations indexed by a +++ parameter type S. +++ +++ Axioms: +++ \spad{differentiate(x+y,e) = differentiate(x,e)+differentiate(y,e)} +++ \spad{differentiate(x*y,e) = x*differentiate(y,e)+differentiate(x,e)*y} +PartialDifferentialRing(S:SetCategory): Category == Ring with + differentiate: (%, S) -> % + ++ differentiate(x,v) computes the partial derivative of x + ++ with respect to v. + differentiate: (%, List S) -> % + ++ differentiate(x,[s1,...sn]) computes successive partial + ++ derivatives, + ++ i.e. \spad{differentiate(...differentiate(x, s1)..., sn)}. + differentiate: (%, S, NonNegativeInteger) -> % + ++ differentiate(x, s, n) computes multiple partial derivatives, i.e. + ++ n-th derivative of x with respect to s. + differentiate: (%, List S, List NonNegativeInteger) -> % + ++ differentiate(x, [s1,...,sn], [n1,...,nn]) computes + ++ multiple partial derivatives, i.e. + D: (%, S) -> % + ++ D(x,v) computes the partial derivative of x + ++ with respect to v. + D: (%, List S) -> % + ++ D(x,[s1,...sn]) computes successive partial derivatives, + ++ i.e. \spad{D(...D(x, s1)..., sn)}. + D: (%, S, NonNegativeInteger) -> % + ++ D(x, s, n) computes multiple partial derivatives, i.e. + ++ n-th derivative of x with respect to s. + D: (%, List S, List NonNegativeInteger) -> % + ++ D(x, [s1,...,sn], [n1,...,nn]) computes + ++ multiple partial derivatives, i.e. + ++ \spad{D(...D(x, s1, n1)..., sn, nn)}. + add + differentiate(r:%, l:List S) == + for s in l repeat r := differentiate(r, s) + r + + differentiate(r:%, s:S, n:NonNegativeInteger) == + for i in 1..n repeat r := differentiate(r, s) + r + + differentiate(r:%, ls:List S, ln:List NonNegativeInteger) == + for s in ls for n in ln repeat r := differentiate(r, s, n) + r + + D(r:%, v:S) == differentiate(r,v) + D(r:%, lv:List S) == differentiate(r,lv) + D(r:%, v:S, n:NonNegativeInteger) == differentiate(r,v,n) + D(r:%, lv:List S, ln:List NonNegativeInteger) == differentiate(r, lv, ln) + +@ +<<PDRING.dotabb>>= +"PDRING" + [color=lightblue,href="bookvol10.2.pdf#nameddest=PDRING"]; +"PDRING" -> "RING" + +@ +<<PDRING.dotfull>>= +"PartialDifferentialRing(a:SetCategory)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=PDRING"]; +"PartialDifferentialRing(a:SetCategory)" -> "Ring()" + +"PartialDifferentialRing(a:OrderedSet)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=PDRING"]; +"PartialDifferentialRing(a:OrderedSet)" -> + "PartialDifferentialRing(a:SetCategory)" + +"PartialDifferentialRing(Symbol)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=PDRING"]; +"PartialDifferentialRing(Symbol)" -> + "PartialDifferentialRing(a:SetCategory)" + +@ +<<PDRING.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"PartialDifferentialRing(a:SetCategory)" [color=lightblue]; +"PartialDifferentialRing(a:SetCategory)" -> "Ring()" + +"Ring()" [color=lightblue]; +"Ring()" -> "Rng()" +"Ring()" -> "Monoid()" +"Ring()" -> "LeftModule(a:Ring)" + +"Rng()" [color=lightblue]; +"Rng()" -> "AbelianGroup()" +"Rng()" -> "SemiGroup()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"LeftModule(a:Ring)" [color=seagreen]; +"LeftModule(a:Ring)" -> "LeftModule(a:Rng)" + +"LeftModule(a:Rng)" [color=lightblue]; +"LeftModule(a:Rng)" -> "AbelianGroup()" + +"AbelianGroup()" [colo... [truncated message content] |
From: <gi...@ax...> - 2008-09-26 06:29:29
|
books/bookvol10.2.pamphlet | 6332 ++++++++++++++++++++++- books/ps/v102EntireRing.ps | 876 ++++ books/ps/v102algebra.ps | 969 ++++ books/ps/v102bitaggregate.ps | 886 ++++ books/ps/v102characteristicnonzero.ps | 790 +++ books/ps/v102characteristiczero.ps | 790 +++ books/ps/v102commutativering.ps | 968 ++++ books/ps/v102differentialextension.ps | 775 +++ books/ps/v102differentialring.ps | 790 +++ books/ps/v102divisionring.ps | 745 +++ books/ps/v102euclideandomain.ps | 738 +++ books/ps/v102evalable.ps | 381 ++ books/ps/v102field.ps | 493 ++ books/ps/v102fullylinearlyexplicitringover.ps | 836 +++ books/ps/v102gcddomain.ps | 692 +++ books/ps/v102innerevalable.ps | 289 ++ books/ps/v102integraldomain.ps | 646 +++ books/ps/v102linearlyexplicitringover.ps | 790 +++ books/ps/v102logic.ps | 335 ++ books/ps/v102module.ps | 585 +++ books/ps/v102orderedintegraldomain.ps | 856 +++ books/ps/v102partialdifferentialring.ps | 790 +++ books/ps/v102polynomialfactorizationexplicit.ps | 738 +++ books/ps/v102principalidealdomain.ps | 738 +++ books/ps/v102retractableto.ps | 10 - books/ps/v102uniquefactorizationdomain.ps | 738 +++ books/ps/v102vectorspace.ps | 677 +++ changelog | 50 + src/algebra/Makefile.pamphlet | 17 +- src/algebra/boolean.spad.pamphlet | 28 - src/algebra/catdef.spad.pamphlet | 2818 ---------- src/algebra/equation1.spad.pamphlet | 129 - 32 files changed, 24222 insertions(+), 3073 deletions(-) New commits: commit cee2c100dbcff19e0071969f443b35d0bc5c5f1e Author: Tim Daly <da...@ax...> Date: Thu Jul 31 04:21:07 2008 -0400 20080925 tpd books/ps/v102vectorspace.ps added 20080925 tpd books/ps/v102uniquefactorizationdomain.ps added 20080925 tpd books/ps/v102principalidealdomain.ps added 20080925 tpd books/ps/v102polynomialfactorizationexplicit.ps added 20080925 tpd books/ps/v102partialdifferentialring.ps added 20080925 tpd books/ps/v102orderedintegraldomain.ps added 20080925 tpd books/ps/v102module.ps added 20080925 tpd books/ps/v102logic.ps added 20080925 tpd books/ps/v102linearlyexplicitringover.ps added 20080925 tpd books/ps/v102integraldomain.ps added 20080925 tpd books/ps/v102innerevalable.ps added 20080925 tpd books/ps/v102gcddomain.ps added 20080925 tpd books/ps/v102fullylinearlyexplicitringover.ps added 20080925 tpd books/ps/v102field.ps added 20080925 tpd books/ps/v102evalable.ps added 20080925 tpd books/ps/v102euclideandomain.ps added 20080925 tpd books/ps/v102divisionring.ps added 20080925 tpd books/ps/v102differentialring.ps added 20080925 tpd books/ps/v102differentialextension.ps added 20080925 tpd books/ps/v102commutativering.ps added 20080925 tpd books/ps/v102characteristiczero.ps added 20080925 tpd books/ps/v102characteristicnonzero.ps added 20080925 tpd books/ps/v102bitaggregate.ps added 20080925 tpd books/ps/v102algebra.ps added 20080925 tpd books/ps/v102EntireRing.ps added 20080925 tpd books/ps/v102retractableto.ps added 20080925 tpd books/bookvol10.2 absorb equation1.spad 20080925 tpd src/algebra/Makefile remove equation1 20080925 tpd src/algebra/boolean.spad move LOGIC into bookvol10.2 20080925 tpd src/algebra/equation1.spad remove. merged into bookvol10.2 20080925 tpd src/algebra/Makefile remove catdef.spad 20080925 tpd books/bookvol10.2 absorb catdef.spad 20080925 tpd src/algebra/catdef.spad removed, moved to bookvol10.2 |
From: <da...@us...> - 2008-09-22 05:30:24
|
Revision: 980 http://axiom.svn.sourceforge.net/axiom/?rev=980&view=rev Author: daly Date: 2008-09-22 05:30:00 +0000 (Mon, 22 Sep 2008) Log Message: ----------- 20080921 tpd books/bookvol10.2 use .pdf rather than .pamphlet in URL 20080921 tpd books/ps/v71sept2008.eps add new image for sept 2008 20080921 tpd books/ps/v71releasenotes.eps update image to include sept2008 20080921 tpd books/bookvol7.1 add september release notes 20080921 tpd Makefile.pamphlet September 2008 release number 20080921 tpd Makefile September 2008 release number Modified Paths: -------------- trunk/axiom/Makefile trunk/axiom/Makefile.pamphlet trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/books/bookvol7.1.pamphlet trunk/axiom/books/ps/v71releasenotes.eps Added Paths: ----------- trunk/axiom/books/ps/v71sept2008.eps Modified: trunk/axiom/Makefile =================================================================== --- trunk/axiom/Makefile 2008-09-21 16:15:34 UTC (rev 979) +++ trunk/axiom/Makefile 2008-09-22 05:30:00 UTC (rev 980) @@ -1,4 +1,4 @@ -VERSION="Axiom (July 2008)" +VERSION="Axiom (September 2008)" SPD=$(shell pwd) SYS=$(notdir $(AXIOM)) SPAD=${SPD}/mnt/${SYS} Modified: trunk/axiom/Makefile.pamphlet =================================================================== --- trunk/axiom/Makefile.pamphlet 2008-09-21 16:15:34 UTC (rev 979) +++ trunk/axiom/Makefile.pamphlet 2008-09-22 05:30:00 UTC (rev 980) @@ -292,7 +292,7 @@ to the document command. This will allow it to be changed on the command line. <<environment>>= -VERSION="Axiom (July 2008)" +VERSION="Axiom (September 2008)" SPD=$(shell pwd) SYS=$(notdir $(AXIOM)) SPAD=${SPD}/mnt/${SYS} Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-21 16:15:34 UTC (rev 979) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-22 05:30:00 UTC (rev 980) @@ -338,13 +338,13 @@ @ <<BASTYPE.dotabb>>= "BASTYPE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BASTYPE"]; "BASTYPE" -> "CATEGORY" @ <<BASTYPE.dotfull>>= "BasicType()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BASTYPE"]; "BasicType()" -> "Category" @ @@ -393,17 +393,17 @@ @ <<KOERCE.dotabb>>= "KOERCE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=KOERCE"]; "KOERCE" -> "CATEGORY" @ <<KOERCE.dotfull>>= "CoercibleTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=KOERCE"]; "CoercibleTo(a:Type)" -> "Category" "CoercibleTo(OutputForm)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KOERCE"]; "CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" @@ -454,73 +454,73 @@ @ <<KONVERT.dotabb>>= "KONVERT" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=KONVERT"]; "KONVERT" -> "CATEGORY" @ <<KONVERT.dotfull>>= "ConvertibleTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(a:Type)" -> "Category" "ConvertibleTo(DoubleFloat)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Float)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(InputForm)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Integer)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Float))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Complex(Float))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Complex(Float))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Complex(DoubleFloat))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Complex(DoubleFloat))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(String)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(String)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Symbol)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Symbol)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(SExpression)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(SExpression)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Base))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Base))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(List(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(List(Integer))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(List(Character))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(List(Character))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=KONVERT"]; "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> "ConvertibleTo(a:Type)" @ @@ -579,13 +579,13 @@ @ <<ELTAB.dotabb>>= -"ELTAB" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"]; +"ELTAB" [color=lightblue,href="bookvol10.2.pdf#nameddest=ELTAB"]; "ELTAB" -> "CATEGORY" @ <<ELTAB.dotfull>>= "Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELTAB"]; "Eltable(a:SetCategory,b:Type)" -> "Category" @ @@ -654,45 +654,45 @@ @ <<RETRACT.dotabb>>= "RETRACT" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RETRACT" -> "CATEGORY" @ <<RETRACT.dotfull>>= "RetractableTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(a:Type)" -> "Category" "RetractableTo(SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(SetCategory)" -> "RetractableTo(a:Type)" "RetractableTo(Symbol)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(Symbol)" -> "RetractableTo(a:Type)" "RetractableTo(Integer)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(Integer)" -> "RetractableTo(a:Type)" "RetractableTo(NonNegativeInteger)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)" "RetractableTo(Fraction(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)" "RetractableTo(Float)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(Float)" -> "RetractableTo(a:Type)" "RetractableTo(Kernel(ExpressionSpace))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)" "RetractableTo(CommutativeRing)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"]; "RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" @ <<RETRACT.dotpic>>= @@ -726,12 +726,12 @@ @ <<TYPE.dotabb>>= -"TYPE" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"]; +"TYPE" [color=lightblue,href="bookvol10.2.pdf#nameddest=TYPE"]; "TYPE" -> "CATEGORY" @ <<TYPE.dotfull>>= -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"]; +"Type()" [color=lightblue,href="bookvol10.2.pdf#nameddest=TYPE"]; "Type()" -> "Category" @ @@ -833,13 +833,13 @@ @ <<AGG.dotabb>>= -"AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"]; +"AGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=AGG"]; "AGG" -> "TYPE" @ <<AGG.dotfull>>= "Aggregate()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=AGG"]; "Aggregate()" -> "Type()" @ @@ -945,13 +945,13 @@ @ <<ELTAGG.dotabb>>= "ELTAGG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELTAGG"]; "ELTAGG" -> "ELTAB" @ <<ELTAGG.dotfull>>= "EltableAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELTAGG"]; "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" @ @@ -1043,14 +1043,14 @@ @ <<SETCAT.dotabb>>= "SETCAT" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SETCAT"]; "SETCAT" -> "BASTYPE" "SETCAT" -> "KOERCE" @ <<SETCAT.dotfull>>= "SetCategory()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SETCAT"]; "SetCategory()" -> "BasicType()" "SetCategory()" -> "CoercibleTo(OutputForm)" @@ -1150,14 +1150,14 @@ @ <<ABELSG.dotabb>>= "ABELSG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELSG"]; "ABELSG" -> "SETCAT" "ABELSG" -> "REPDB" @ <<ABELSG.dotfull>>= "AbelianSemiGroup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELSG"]; "AbelianSemiGroup()" -> "SetCategory()" "AbelianSemiGroup()" -> "RepeatedDoubling(SetCategory)" @@ -1275,13 +1275,13 @@ @ <<FINITE.dotabb>>= "FINITE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FINITE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=FINITE"]; "FINITE" -> "SETCAT" @ <<FINITE.dotfull>>= "Finite()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FINITE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=FINITE"]; "Finite()" -> "SetCategory()" @ @@ -1485,13 +1485,13 @@ @ <<HOAGG.dotabb>>= -"HOAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"]; +"HOAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=HOAGG"]; "HOAGG" -> "AGG" @ <<HOAGG.dotfull>>= "HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=HOAGG"]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" @ @@ -1629,13 +1629,13 @@ @ <<ORDSET.dotabb>>= "ORDSET" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDSET"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDSET"]; "ORDSET" -> "SETCAT" @ <<ORDSET.dotfull>>= "OrderedSet()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDSET"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDSET"]; "OrderedSet()" -> "SetCategory()" @ @@ -1749,13 +1749,13 @@ @ <<SGROUP.dotabb>>= "SGROUP" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SGROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SGROUP"]; "SGROUP" -> "SETCAT" @ <<SGROUP.dotfull>>= "SemiGroup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SGROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SGROUP"]; "SemiGroup()" -> "SetCategory()" "SemiGroup()" -> "RepeatedSquaring(SemiGroup)" @@ -1861,13 +1861,13 @@ @ <<STEP.dotabb>>= -"STEP" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STEP"]; +"STEP" [color=lightblue,href="bookvol10.2.pdf#nameddest=STEP"]; "STEP" -> "SETCAT" @ <<STEP.dotfull>>= "StepThrough()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STEP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=STEP"]; "StepThrough()" -> "SetCategory()" @ @@ -1989,13 +1989,13 @@ @ <<ABELMON.dotabb>>= "ABELMON" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELMON"]; "ABELMON" -> "ABELSG" @ <<ABELMON.dotfull>>= "AbelianMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELMON"]; "AbelianMonoid()" -> "AbelianSemiGroup()" @ @@ -2167,17 +2167,17 @@ @ <<BGAGG.dotabb>>= -"BGAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; +"BGAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=BGAGG"]; "BGAGG" -> "HOAGG" @ <<BGAGG.dotfull>>= "BagAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BGAGG"]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" "BagAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=BGAGG"]; "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" @ @@ -2403,17 +2403,17 @@ @ <<CLAGG.dotabb>>= -"CLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; +"CLAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=CLAGG"]; "CLAGG" -> "HOAGG" @ <<CLAGG.dotfull>>= "Collection(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=CLAGG"]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" "Collection(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=CLAGG"]; "Collection(a:SetCategory)" -> "Collection(a:Type)" @ @@ -2654,26 +2654,26 @@ @ <<IXAGG.dotabb>>= -"IXAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; +"IXAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=IXAGG"]; "IXAGG" -> "HOAGG" "IXAGG" -> "ELTAGG" @ <<IXAGG.dotfull>>= "IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=IXAGG"]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" "IndexedAggregate(a:SetCategory,b:Type)" -> "EltableAggregate(a:SetCategory,b:Type)" "IndexedAggregate(a:SetCategory,b:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=IXAGG"]; "IndexedAggregate(a:SetCategory,b:SetCategory)" -> "IndexedAggregate(a:SetCategory,b:Type)" "IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=IXAGG"]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" @@ -2814,13 +2814,13 @@ @ <<MONOID.dotabb>>= "MONOID" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MONOID"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONOID"]; "MONOID" -> "SGROUP" @ <<MONOID.dotfull>>= "Monoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MONOID"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=MONOID"]; "Monoid()" -> "SemiGroup()" @ @@ -2932,14 +2932,14 @@ @ <<ORDFIN.dotabb>>= "ORDFIN" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDFIN"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDFIN"]; "ORDFIN" -> "ORDSET" "ORDFIN" -> "FINITE" @ <<ORDFIN.dotfull>>= "OrderedFinite()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDFIN"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDFIN"]; "OrderedFinite()" -> "OrderedSet()" "OrderedFinite()" -> "Finite()" @@ -3152,13 +3152,13 @@ @ <<RCAGG.dotabb>>= -"RCAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"]; +"RCAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=RCAGG"]; "RCAGG" -> "HOAGG" @ <<RCAGG.dotfull>>= "RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RCAGG"]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" @ @@ -3421,13 +3421,13 @@ @ <<BRAGG.dotabb>>= -"BRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"]; +"BRAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=BRAGG"]; "BRAGG" -> "RCAGG" @ <<BRAGG.dotfull>>= "BinaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BRAGG"]; "BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -3527,13 +3527,13 @@ @ <<CABMON.dotabb>>= "CABMON" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CABMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=CABMON"]; "CABMON" -> "ABELMON" @ <<CABMON.dotfull>>= "CancellationAbelianMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CABMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=CABMON"]; "CancellationAbelianMonoid()" -> "AbelianMonoid()" @ @@ -3752,14 +3752,14 @@ @ <<DIOPS.dotabb>>= -"DIOPS" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"]; +"DIOPS" [color=lightblue,href="bookvol10.2.pdf#nameddest=DIOPS"]; "DIOPS" -> "BGAGG" "DIOPS" -> "CLAGG" @ <<DIOPS.dotfull>>= "DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=DIOPS"]; "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" @@ -3971,13 +3971,13 @@ @ <<DLAGG.dotabb>>= -"DLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"]; +"DLAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=DLAGG"]; "DLAGG" -> "RCAGG" @ <<DLAGG.dotfull>>= "DoublyLinkedAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=DLAGG"]; "DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -4119,13 +4119,13 @@ @ <<GROUP.dotabb>>= "GROUP" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=GROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=GROUP"]; "GROUP" -> "MONOID" @ <<GROUP.dotfull>>= "Group()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=GROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=GROUP"]; "Group()" -> "Monoid()" @ @@ -4423,14 +4423,14 @@ @ <<LNAGG.dotabb>>= -"LNAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"]; +"LNAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=LNAGG"]; "LNAGG" -> "IXAGG" "LNAGG" -> "CLAGG" @ <<LNAGG.dotfull>>= "LinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=LNAGG"]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" @@ -4543,14 +4543,14 @@ @ <<OASGP.dotabb>>= "OASGP" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OASGP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OASGP"]; "OASGP" -> "ORDSET" "OASGP" -> "ABELMON" @ <<OASGP.dotfull>>= "OrderedAbelianSemiGroup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OASGP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OASGP"]; "OrderedAbelianSemiGroup()" -> "OrderedSet()" "OrderedAbelianSemiGroup()" -> "AbelianMonoid()" @@ -4683,16 +4683,17 @@ @ <<ORDMON.dotabb>>= "ORDMON" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDMON"]; "ORDMON" -> "ORDSET" "ORDMON" -> "MONOID" @ <<ORDMON.dotfull>>= "OrderedMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDMON"]; "OrderedMonoid()" -> "OrderedSet()" "OrderedMonoid()" -> "Monoid()" + @ <<ORDMON.dotpic>>= digraph pic { @@ -4701,12 +4702,12 @@ node [shape=box, color=white, style=filled]; "OrderedMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDMON"]; "OrderedMonoid()" -> "OrderedSet()" "OrderedMonoid()" -> "Monoid()" "OrderedSet()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDSET"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDSET"]; "OrderedSet()" -> "SetCategory()" "Monoid()" [color=lightblue]; @@ -4862,21 +4863,21 @@ @ <<PRQAGG.dotabb>>= "PRQAGG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=PRQAGG"]; "PRQAGG" -> "BGAGG" @ <<PRQAGG.dotfull>>= "PriorityQueueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)" "PriorityQueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:SetCategory)" -> "PriorityQueueAggregate(a:Type)" "PriorityQueueAggregate(a:OrderedSet)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:OrderedSet)" -> "PriorityQueueAggregate(a:SetCategory)" @@ -5044,17 +5045,17 @@ @ <<QUAGG.dotabb>>= -"QUAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; +"QUAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=QUAGG"]; "QUAGG" -> "BGAGG" @ <<QUAGG.dotfull>>= "QueueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=QUAGG"]; "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" "QueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=QUAGG"]; "QueueAggregate(a:SetCategory)" -> "QueueAggregate(a:Type)" @ @@ -5307,14 +5308,14 @@ @ <<SETAGG.dotabb>>= "SETAGG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SETAGG"]; "SETAGG" -> "SETCAT" "SETAGG" -> "CLAGG" @ <<SETAGG.dotfull>>= "SetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SETAGG"]; "SetAggregate(a:SetCategory)" -> "SetCategory()" "SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)" @@ -5343,7 +5344,7 @@ "CoercibleTo(a:Type)" -> "Category" "Collection(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=CLAGG"]; "Collection(a:SetCategory)" -> "Collection(a:Type)" "Collection(a:Type)" [color=lightblue]; @@ -5489,17 +5490,17 @@ @ <<SKAGG.dotabb>>= -"SKAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; +"SKAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=SKAGG"]; "SKAGG" -> "BGAGG" @ <<SKAGG.dotfull>>= "StackAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SKAGG"]; "StackAggregate(a:Type)" -> "BagAggregate(a:Type)" "StackAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=SKAGG"]; "StackAggregate(a:SetCategory)" -> "StackAggregate(a:Type)" @ @@ -5947,13 +5948,13 @@ @ <<URAGG.dotabb>>= -"URAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"]; +"URAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=URAGG"]; "URAGG" -> "RCAGG" @ <<URAGG.dotfull>>= "UnaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=URAGG"]; "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -6080,13 +6081,13 @@ @ <<ABELGRP.dotabb>>= "ABELGRP" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELGRP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELGRP"]; "ABELGRP" -> "CABMON" @ <<ABELGRP.dotfull>>= "AbelianGroup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELGRP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ABELGRP"]; "AbelianGroup()" -> "CancellationAbelianMonoid()" @ @@ -6284,17 +6285,17 @@ @ <<DIAGG.dotabb>>= -"DIAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; +"DIAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=DIAGG"]; "DIAGG" -> "DIOPS" @ <<DIAGG.dotfull>>= "Dictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=DIAGG"]; "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" "Dictionary(Record(a:SetCategory,b:SetCategory))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=DIAGG"]; "Dictionary(Record(a:SetCategory,b:SetCategory))" -> "Dictionary(a:SetCategory)" @@ -6517,19 +6518,19 @@ @ <<DQAGG.dotabb>>= -"DQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; +"DQAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=DQAGG"]; "DQAGG" -> "SKAGG" "DQAGG" -> "QUAGG" @ <<DQAGG.dotfull>>= "DequeueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=DQAGG"]; "DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)" "DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)" "DequeueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=DQAGG"]; "DequeueAggregate(a:SetCategory)" -> "DequeueAggregate(a:Type)" @ @@ -6805,13 +6806,13 @@ @ <<ELAGG.dotabb>>= -"ELAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"]; +"ELAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=ELAGG"]; "ELAGG" -> "LNAGG" @ <<ELAGG.dotfull>>= "ExtensibleLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ELAGG"]; "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" @ @@ -7133,13 +7134,13 @@ @ <<FLAGG.dotabb>>= -"FLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"]; +"FLAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=FLAGG"]; "FLAGG" -> "LNAGG" @ <<FLAGG.dotfull>>= "FiniteLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=FLAGG"]; "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" @ @@ -7329,13 +7330,13 @@ @ <<MDAGG.dotabb>>= -"MDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"]; +"MDAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=MDAGG"]; "MDAGG" -> "DIOPS" @ <<MDAGG.dotfull>>= "MultiDictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=MDAGG"]; "MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" @ @@ -7445,14 +7446,14 @@ @ <<OAMON.dotabb>>= -"OAMON" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAMON"]; +"OAMON" [color=lightblue,href="bookvol10.2.pdf#nameddest=OAMON"]; "OAMON" -> "OASGP" "OAMON" -> "ABELMON" @ <<OAMON.dotfull>>= "OrderedAbelianMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OAMON"]; "OrderedAbelianMonoid()" -> "OrderedAbelianSemiGroup()" "OrderedAbelianMonoid()" -> "AbelianMonoid()" @@ -7812,14 +7813,14 @@ @ <<STAGG.dotabb>>= -"STAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"]; +"STAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=STAGG"]; "STAGG" -> "RCAGG" "STAGG" -> "LNAGG" @ <<STAGG.dotfull>>= "StreamAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=STAGG"]; "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)" "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)" @@ -8299,23 +8300,23 @@ @ <<A1AGG.dotabb>>= -"A1AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; +"A1AGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=A1AGG"]; "A1AGG" -> "FLAGG" @ <<A1AGG.dotfull>>= "OneDimensionalArrayAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" "OneDimensionalArrayAggregate(Character)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(Character)" -> "OneDimensionalArrayAggregate(a:Type)" "OneDimensionalArrayAggregate(Boolean)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(Boolean)" -> "OneDimensionalArrayAggregate(a:Type)" @@ -8613,14 +8614,14 @@ @ <<FSAGG.dotabb>>= -"FSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FSAGG"]; +"FSAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=FSAGG"]; "FSAGG" -> "DIAGG" "FSAGG" -> "SETAGG" @ <<FSAGG.dotfull>>= "FiniteSetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FSAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=FSAGG"]; "FiniteSetAggregate(a:SetCategory)" -> "Dictionary(a:SetCategory)" "FiniteSetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" @@ -8835,13 +8836,13 @@ @ <<KDAGG.dotabb>>= -"KDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KDAGG"]; +"KDAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=KDAGG"]; "KDAGG" -> "DIAGG" @ <<KDAGG.dotfull>>= "KeyedDictionary(a:SetCategory,b:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KDAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=KDAGG"]; "KeyedDictionary(a:SetCategory,b:SetCategory)" -> "Dictionary(Record(a:SetCategory,b:SetCategory))" @@ -8961,17 +8962,17 @@ @ <<LMODULE.dotabb>>= "LMODULE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=LMODULE"]; "LMODULE" -> "ABELGRP" @ <<LMODULE.dotfull>>= "LeftModule(a:Rng)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=LMODULE"]; "LeftModule(a:Rng)" -> "AbelianGroup()" "LeftModule(a:Ring)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=LMODULE"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=LMODULE"]; "LeftModule(a:Ring)" -> "LeftModule(a:Rng)" @ @@ -9518,20 +9519,20 @@ @ <<LSAGG.dotabb>>= -"LSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"]; +"LSAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=LSAGG"]; "LSAGG" -> "FLAGG" "LSAGG" -> "ELAGG" @ <<LSAGG.dotfull>>= "ListAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=LSAGG"]; "ListAggregate(a:Type)" -> "StreamAggregate(a:Type)" "ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" "ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)" "ListAggregate(Record(a:SetCategory,b:SetCategory))" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=LSAGG"]; "ListAggregate(Record(a:SetCategory,b:SetCategory))" -> "ListAggregate(a:Type)" @@ -9719,14 +9720,14 @@ @ <<MSETAGG.dotabb>>= "MSETAGG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MSETAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=MSETAGG"]; "MSETAGG" -> "MDAGG" "MSETAGG" -> "SETAGG" @ <<MSETAGG.dotfull>>= "MultisetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MSETAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=MSETAGG"]; "MultisetAggregate(a:SetCategory)" -> "MultiDictionary(a:SetCategory)" "MultisetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)" @@ -9835,14 +9836,14 @@ @ <<OCAMON.dotabb>>= "OCAMON" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OCAMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OCAMON"]; "OCAMON" -> "OAMON" "OCAMON" -> "CABMON" @ <<OCAMON.dotfull>>= "OrderedCancellationAbelianMonoid()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OCAMON"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OCAMON"]; "OrderedCancellationAbelianMonoid()" -> "OrderedAbelianMonoid()" "OrderedCancellationAbelianMonoid()" -> "CancellationAbelianMonoid()" @@ -9956,17 +9957,17 @@ @ <<RMODULE.dotabb>>= "RMODULE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RMODULE"]; "RMODULE" -> "ABELGRP" @ <<RMODULE.dotfull>>= "RightModule(a:Rng)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RMODULE"]; "RightModule(a:Rng)" -> "AbelianGroup()" "RightModule(a:Ring)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RMODULE"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=RMODULE"]; "RightModule(a:Ring)" -> "RightModule(a:Rng)" @ @@ -10073,13 +10074,13 @@ @ <<RNG.dotabb>>= -"RNG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RNG"]; +"RNG" [color=lightblue,href="bookvol10.2.pdf#nameddest=RNG"]; "RNG" -> "ABELGRP" "RNG" -> "SGROUP" @ <<RNG.dotfull>>= -"Rng()" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RNG"]; +"Rng()" [color=lightblue,href="bookvol10.2.pdf#nameddest=RNG"]; "Rng()" -> "AbelianGroup()" "Rng()" -> "SemiGroup()" @@ -10480,13 +10481,13 @@ @ <<SRAGG.dotabb>>= -"SRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SRAGG"]; +"SRAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=SRAGG"]; "SRAGG" -> "A1AGG" @ <<SRAGG.dotfull>>= "StringAggregate()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SRAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=SRAGG"]; "StringAggregate()" -> "OneDimensionalArrayAggregate(Character)" @ @@ -10888,14 +10889,14 @@ @ <<TBAGG.dotabb>>= -"TBAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TBAGG"]; +"TBAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=TBAGG"]; "TBAGG" -> "KDAGG" "TBAGG" -> "IXAGG" @ <<TBAGG.dotfull>>= "TableAggregate(a:SetCategory,b:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TBAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=TBAGG"]; "TableAggregate(a:SetCategory,b:SetCategory)" -> "KeyedDictionary(a:SetCategory,b:SetCategory)" "TableAggregate(a:SetCategory,b:SetCategory)" -> @@ -11406,14 +11407,14 @@ @ <<ALAGG.dotabb>>= -"ALAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ALAGG"]; +"ALAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=ALAGG"]; "ALAGG" -> "TBAGG" "ALAGG" -> "LSAGG" @ <<ALAGG.dotfull>>= "AssociationListAggregate(a:SetCategory,b:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ALAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ALAGG"]; "AssociationListAggregate(a:SetCategory,b:SetCategory)" -> "TableAggregate(a:SetCategory,b:SetCategory)" "AssociationListAggregate(a:SetCategory,b:SetCategory)" -> @@ -11537,23 +11538,23 @@ @ <<BMODULE.dotabb>>= "BMODULE" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BMODULE"]; "BMODULE" -> "LMODULE" "BMODULE" -> "RMODULE" @ <<BMODULE.dotfull>>= "BiModule(a:Ring,b:Ring)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BMODULE"]; "BiModule(a:Ring,b:Ring)" -> "LeftModule(a:Ring)" "BiModule(a:Ring,b:Ring)" -> "RightModule(a:Ring)" "BiModule(a:CommutativeRing,b:CommutativeRing)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=BMODULE"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=BMODULE"]; "BiModule(a:CommutativeRing,b:CommutativeRing)" -> "BiModule(a:Ring,b:Ring)" "BiModule(a:Ring,b:OrderedAbelianMonoid)" - [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=BMODULE"]; + [color=seagreen,href="bookvol10.2.pdf#nameddest=BMODULE"]; "BiModule(a:Ring,b:OrderedAbelianMonoid)" -> "BiModule(a:Ring,b:Ring)" @ @@ -11564,7 +11565,7 @@ node [shape=box, color=white, style=filled]; "BiModule(a:Ring,b:Ring)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BMODULE"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BMODULE"]; "BiModule(a:Ring,b:Ring)" -> "LeftModule(a:Ring)" "BiModule(a:Ring,b:Ring)" -> "RightModule(a:Ring)" @@ -11682,14 +11683,14 @@ @ <<OAGROUP.dotabb>>= "OAGROUP" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAGROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OAGROUP"]; "OAGROUP" -> "OCAMON" "OAGROUP" -> "ABELGRP" @ <<OAGROUP.dotfull>>= "OrderedAbelianGroup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAGROUP"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OAGROUP"]; "OrderedAbelianGroup()" -> "OrderedCancellationAbelianMonoid()" "OrderedAbelianGroup()" -> "AbelianGroup()" @@ -11806,13 +11807,13 @@ @ <<OAMONS.dotabb>>= "OAMONS" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAMONS"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OAMONS"]; "OAMONS" -> "OCAMON" @ <<OAMONS.dotfull>>= "OrderedAbelianMonoidSup()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OAMONS"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OAMONS"]; "OrderedAbelianMonoidSup()" -> "OrderedCancellationAbelianMonoid()" @ @@ -12035,14 +12036,14 @@ @ <<OMSAGG.dotabb>>= "OMSAGG" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OMSAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OMSAGG"]; "OMSAGG" -> "MSETAGG" "OMSAGG" -> "PRQAGG" @ <<OMSAGG.dotfull>>= "OrderedMultisetAggregate(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OMSAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=OMSAGG"]; "OrderedMultisetAggregate(a:SetCategory)" -> "MultisetAggregate(a:SetCategory)" "OrderedMultisetAggregate(a:SetCategory)" -> @@ -12206,7 +12207,7 @@ @ <<RING.dotabb>>= "RING" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RING"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RING"]; "RING" -> "RNG" "RING" -> "MONOID" "RING" -> "LMODULE" @@ -12214,7 +12215,7 @@ @ <<RING.dotfull>>= "Ring()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RING"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=RING"]; "Ring()" -> "Rng()" "Ring()" -> "Monoid()" "Ring()" -> "LeftModule(a:Ring)" @@ -12400,7 +12401,7 @@ @ <<ORDRING.dotabb>>= "ORDRING" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDRING"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDRING"]; "ORDRING" -> "OAGROUP" "ORDRING" -> "RING" "ORDRING" -> "MONOID" @@ -12408,7 +12409,7 @@ @ <<ORDRING.dotfull>>= "OrderedRing()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDRING"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDRING"]; "OrderedRing()" -> "OrderedAbelianGroup()" "OrderedRing()" -> "Ring()" "OrderedRing()" -> "Monoid()" @@ -12510,7 +12511,7 @@ @ <<BTAGG.dotabb>>= -"BTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BTAGG"]; +"BTAGG" [color=lightblue,href="bookvol10.2.pdf#nameddest=BTAGG"]; "BTAGG" -> "ORDSET" "BTAGG" -> "LOGIC" "BTAGG" -> "A1AGG" @@ -12518,7 +12519,7 @@ @ <<BTAGG.dotfull>>= "BitAggregate()" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BTAGG"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=BTAGG"]; "BitAggregate()" -> "OrderedSet()" "BitAggregate()" -> "Logic()" "BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)" @@ -12529,7 +12530,7 @@ \pageto{HomogeneousAggregate}{HOAGG} <<EVALAB.dotfull>>= "Evalable(a:Type)" - [color="#00EE00",href="books/bookvol10.2.pamphlet#nameddest=EVALAB"]; + [color="#00EE00",href="bookvol10.2.pdf#nameddest=EVALAB"]; @ \chapter{The bootstrap code} @@ -16813,7 +16814,7 @@ node [shape=box, color=white, style=filled]; "CATEGORY" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CATEGORY"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=CATEGORY"]; <<ABELGRP.dotabb>> <<ABELMON.dotabb>> @@ -16887,7 +16888,7 @@ node [shape=box, color=white, style=filled]; "Category" - [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CATEGORY"]; + [color=lightblue,href="bookvol10.2.pdf#nameddest=CATEGORY"]; <<ABELGRP.dotfull>> <<ABELMON.dotfull>> Modified: trunk/axiom/books/bookvol7.1.pamphlet =================================================================== --- trunk/axiom/books/bookvol7.1.pamphlet 2008-09-21 16:15:34 UTC (rev 979) +++ trunk/axiom/books/bookvol7.1.pamphlet 2008-09-22 05:30:00 UTC (rev 980) @@ -233,6 +233,7 @@ \pagepic{ps/v71releasenotes.eps}{releasenotes} \pagefrom{Root Page}{RootPage} \pageto{Online information}{onlineInformation} +\pageto{September 2008}{sept2008} \pageto{July 2008}{july2008} \pageto{May 2008}{may2008} \pageto{March 2008}{march2008} @@ -244,6 +245,7 @@ \beginscroll \beginmenu \menudownlink{Online information}{onlineInformation} + \menudownlink{September 2008}{sept2008} \menudownlink{July 2008}{july2008} \menudownlink{May 2008}{may2008} \menudownlink{March 2008}{march2008} @@ -271,6 +273,153 @@ \end{page} @ +\pagehead{sept2008}{releasenotes.ht}{September 23, 2008 Release Notes} +\pagepic{ps/v71sept2008.eps}{sept2008} +\pagefrom{What's New in Axiom}{releaseNotes} +<<releasenotes.ht>>= +\begin{page}{sept2008}{September 23, 2008 Release Notes} +\beginscroll +\begin{verbatim} +September 2008 Release Notes + +Axiom website + The effort here is to improve the support for offline literate + documentation. The primary changes are the inclusion of graphs + and additional book volumes. + +* <" rel="nofollow">http://axiom-developer.org/axiom-website/documentation.html> + Contains the new algebra volumes and subvolumes. +* <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol10.2abb.html> + Contains a "clickable" graph that indexes into the algebra. + + + + +Graphviz, PDF, and HTML integration + The effort here is to unify these three technologies in a way + that simplifies the user interface and improves documentation + +* Graphviz is used if available but not required +* Algebra graphs are automatically generated at build time + from algebra source files +* Graphviz graphs now properly hyperlink into PDF files allowing + any node in a graph to link to any document page + + + + +Book volume 0 (Jenks and Sutor) + +* <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol0.pdf> +* replace \over with \frac + + + +Book volume 7.1 (Hyperdoc pages) + The effort here is to create a literate document that contains + all of the "live" pages used in hyperdoc. The PDF is being + constructed so that a user can effectively "browse" the static + hyperdoc pages, which are included, without a running Axiom. + +* <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol7.1.pdf> +* The source for all of the pages is now contained in this book. +* Hyperdoc now fetches the pages directly from the book. +* The hyper page directory and all files are gone. +* Some of the static page images are now inside the PDF +* Pages have href links allowing "in-pdf" navigation of pages + + + + +Book volume 10 (Algebra) + The effort here is to create a way to describe and deeply + document the algebra. This volume was split to better handle + the structure of Axiom's information. + +* Split into 5 volumes + - 10 Implementation + - 10.1 Theory + - 10.2 Categories + - 10.3 Domains + - 10.4 Packages + + + + +Book volume 10.2 (Algebra Categories) + The effort here is to create fully indexed, cross-referenced, + graphical documentation for Axiom categories in a standalone + form. This is a "live" literate document which contains the + actual source code used to build the system. + +* <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol10.2.pdf> +* Contains 60 categories so far +* Has partial graphs for each category +* Has list of exported functions +* Has information about source of functions +* Has index cross reference by function and category +* Has PDF href links so that URLs work: + <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol10.2.pdf#nameddest=AGG> +* Has forward/backward links between categories +* Automatically generates "clickable" graphs: + <" rel="nofollow">http://axiom-developer.org/axiom-website/bookvol10.2abb.html> +* Graph clicking automatically opens to the proper source code + + + + +New algebra examples (Daly, Tsikas) + The effort here is to create "real time" documentation that + gives the end user an example of how to construct the proper + arguments and call a function. This puts examples into the + system so users don't need to consult other documents. + +* )d op someop shows examples of function usage +* about 100 new function examples were added +* new comment syntax added to allow automatic API testing + + + + +Input Files + There is a new effort to automatically extract the algebra + examples in order to regression test the user API to the + algebra. In addition there is ongoing test work. + +* New input files (Hemmecke, Stumbo, Cyganski, Daly) + bini, biquat, ifthenelse, liu, overload, sqrt3, typetower +* Changed input files (Hemmecke, Stumbo, Cyganski, Daly) + bern, function, linalg, regset, test, tutchap2 + + + + +Build changes + +* graphics does not depend on compress, done at build time +* firefox html pages are now built before tests are run + + + +Algebra changes + +* FLAGG (FiniteLinearAggregate) -- removed a duplicate function + + + +Interpreter changes (Page) + +* add cost function to bottomUp output + + + + +\end{verbatim} +\endscroll +\autobuttons +\end{page} + +@ \pagehead{july2008}{releasenotes.ht}{July 23, 2008 Release Notes} \pagepic{ps/v71july2008.eps}{july2008} \pagefrom{What's New in Axiom}{releaseNotes} Modified: trunk/axiom/books/ps/v71releasenotes.eps =================================================================== --- trunk/axiom/books/ps/v71releasenotes.eps 2008-09-21 16:15:34 UTC (rev 979) +++ trunk/axiom/books/ps/v71releasenotes.eps 2008-09-22 05:30:00 UTC (rev 980) @@ -1,7 +1,7 @@ %!PS-Adobe-3.0 EPSF-3.0 %%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner -%%Title: whatsnew.eps -%%CreationDate: Sat Jun 21 00:08:02 2008 +%%Title: v71releasenotes.eps +%%CreationDate: Mon Jul 28 14:40:07 2008 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 @@ -29,7 +29,7 @@ {currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} true 3 -%%BeginData: 96341 ASCII Bytes +%%BeginData: 102278 ASCII Bytes colorimage quD:2JN\QIJN\QI`BF,!J,~> quD:/JNA?CJNA?C`B*nsJ,~> @@ -787,6 +787,213 @@ !BpJ^m=G:gs+13$s+13hs8MBdeieN~> !BU8[l%/kcs+13$s+13hs8M6`c8pI~> !B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mCN>t!9F1Z!8IPP!;c`o!;c`o!;c`o!.k0$s+13$s7u]om/bd$J,~> +!BU8[l+6op!9F1Z!8IPP!;c`o!;c`o!;c`o!.k0$s+13$s7u]oklK'jJ,~> +!B:&Xj1>9j!9F1Z!8IPP!;c`o!;c`o!;c`o!.k0$s+13$s7u]oirR%VJ,~> +!BpJ^mFqU=!!<0#!9jI_!9F1Z!8RVO!;ulo!;ulo!;ulo!.k0$s+13$s8)cpm/bd$J,~> +!BU8[l.Z19!!<0#!9jI_!9F1Z!8RVO!;ulo!;ulo!;ulo!.k0$s+13$s8)cpklK'jJ,~> +!B:&Xj4aP3!!<0#!9jI_!9F1Z!8RVO!;ulo!;ulo!;ulo!.k0$s+13$s8)cpirR%VJ,~> +!BpJ^mHsrH!;ull!9jI_!9=+Z!8[\T!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$ +s82iqm/bd$J,~> +!BU8[l0\ND!;ull!9jI_!9=+Z!8[\T!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$ +s82iqklK'jJ,~> +!B:&Xj6cm>!;ull!9jI_!9=+Z!8[\T!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$ +s82iqirR%VJ,~> +!BpJ^mHsrH!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!;lfp!<3#t!!E6$!<<#urr;uu!<;utqu?Tp +rVufrs8W&uq>^HprVultrr;uurVultrr;uurVultrr;uurVultJcC<$JcC<$qu?Z_!S0Da~> +!BU8[l0\ND!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!;lfp!<3#t!!E6$!<<#urr;uu!<;utqu?Tp +rVufrs8W&uq>^HprVultrr;uurVultrr;uurVultrr;uurVultJcC<$JcC<$qu?Z[!R<`V~> +!B:&Xj6cm>!;uls!<)rs!<)rr!<)rs!!*&t!<3#o!;lfp!<3#t!!E6$!<<#urr;uu!<;utqu?Tp +rVufrs8W&uq>^HprVultrr;uurVultrr;uurVultrr;uurVultJcC<$JcC<$qu?ZU!Q-jH~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTos7lZns7lWps7QHms7lZos7lZps7ZNc +s8N)us8N)ts8N)us8N)ts8N)ts8N*!s8N(Ms+13$s+14Hs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTos7lZns7lWps7QHms7lZos7lZps7ZNc +s8N)us8N)ts8N)us8N)ts8N)ts8N*!s8N(Ms+13$s+14Hs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N*!s7lZps7cTos7lZns7lWps7QHms7lZos7lZps7ZNc +s8N)us8N)ts8N)us8N)ts8N)ts8N*!s8N(Ms+13$s+14Hs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss82lps8E#ss8E#us8E#ts8E#ts8N)qs8E#ss8Duus8Duus8E!$ +rr<'!s8E#ts8Duus8E#ss8E#ts8;rts8N)ls8E#ts8N)ts8N)us8N)ts8N)ss8;qKs+13$s+14G +s8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss82lps8E#ss8E#us8E#ts8E#ts8N)qs8E#ss8Duus8Duus8E!$ +rr<'!s8E#ts8Duus8E#ss8E#ts8;rts8N)ls8E#ts8N)ts8N)us8N)ts8N)ss8;qKs+13$s+14G +s8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss82lps8E#ss8E#us8E#ts8E#ts8N)qs8E#ss8Duus8Duus8E!$ +rr<'!s8E#ts8Duus8E#ss8E#ts8;rts8N)ls8E#ts8N)ts8N)us8N)ts8N)ss8;qKs+13$s+14G +s8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#qs7u`qs8N)rs8N*!s8N)ss8N)us8N)qs8N)rs8N'/rr<'!rr<'! +rr<'!rr<&ss8N'#rr<&rs8N)us8E#gs8E#ss8N)ts8N)us8N)ts8N)ts8)eIs+13$s+14Hs8MBd +eieN~> +!BU8[l0\NN!!`H'rrE'!s8E#qs7u`qs8N)rs8N*!s8N)ss8N)us8N)qs8N)rs8N'/rr<'!rr<'! +rr<'!rr<&ss8N'#rr<&rs8N)us8E#gs8E#ss8N)ts8N)us8N)ts8N)ts8)eIs+13$s+14Hs8M6` +c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#qs7u`qs8N)rs8N*!s8N)ss8N)us8N)qs8N)rs8N'/rr<'!rr<'! +rr<'!rr<&ss8N'#rr<&rs8N)us8E#gs8E#ss8N)ts8N)us8N)ts8N)ts8)eIs+13$s+14Hs8M$Z +_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&os82iss7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'!rr<&s +s8N'!s7ZNms8N)hs8E#rs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&os82iss7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'!rr<&s +s8N'!s7ZNms8N)hs8E#rs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&os82iss7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'!rr<&s +s8N'!s7ZNms8N)hs8E#rs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'! +rr<&ss8N'!s7ZNms8N)is8E#qs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'! +rr<&ss8N'!s7ZNms8N)is8E#qs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs8N)ss8N'!s7ZNns8N)ss8N)us8N)qs7ZL'rr<'!rr<'!rr<'! +rr<&ss8N'!s7ZNms8N)is8E#qs8N)ts8N)us8N)ts8N)us8N)ts8N(Ms+13$s+14Is8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8;rss8N'!s8E#ns8E#ts8E#ts8N)ts8N'!s8E#os8N*!s8N*! +s8N*!s8E#ts8Duus8E#ms8N)js8E#os8N*!s8N)ss8N*!s8N)ts8N)ts8N(Ms+13$s+14Is8MBd +eieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8;rss8N'!s8E#ns8E#ts8E#ts8N)ts8N'!s8E#os8N*!s8N*! +s8N*!s8E#ts8Duus8E#ms8N)js8E#os8N*!s8N)ss8N*!s8N)ts8N)ts8N(Ms+13$s+14Is8M6` +c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8;rss8N'!s8E#ns8E#ts8E#ts8N)ts8N'!s8E#os8N*!s8N*! +s8N*!s8E#ts8Duus8E#ms8N)js8E#os8N*!s8N)ss8N*!s8N)ts8N)ts8N(Ms+13$s+14Is8M$Z +_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#rs7lZos7lZos7lZns7lZps7lWps8;ots8Duus7HBks7lZps7lZi +s7lZns8)fos8)fos8)eIs+13$s+14Hs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#rs7lZos7lZos7lZns7lZps7lWps8;ots8Duus7HBks7lZps7lZi +s7lZns8)fos8)fos8)eIs+13$s+14Hs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#rs7lZos7lZos7lZns7lZps7lWps8;ots8Duus7HBks7lZps7lZi +s7lZns8)fos8)fos8)eIs+13$s+14Hs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ss8N'!s8;rps8)fqs8N'!s8;rps82los8)crs8;ots8Duus8)cr +s8;rps8)frs7lZis7lZms8;ros8;ros8;qKs+13$s+14Gs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ss8N'!s8;rps8)fqs8N'!s8;rps82los8)crs8;ots8Duus8)cr +s8;rps8)frs7lZis7lZms8;ros8;ros8;qKs+13$s+14Gs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ss8N'!s8;rps8)fqs8N'!s8;rps82los8)crs8;ots8Duus8)cr +s8;rps8)frs7lZis7lZms8;ros8;ros8;qKs+13$s+14Gs8M$Z_`*)~> +!BpJ^mHsrH!9X=]!.k0$s+13$s+::Mm/bd$J,~> +!BU8[l0\ND!9X=]!.k0$s+13$s+::MklK'jJ,~> +!B:&Xj6cm>!9X=]!.k0$s+13$s+::MirR%VJ,~> +!BpJ^mHsrH!9X=]!.k0$s+13$s+::Mm/bd$J,~> +!BU8[l0\ND!9X=]!.k0$s+13$s+::MklK'jJ,~> +!B:&Xj6cm>!9X=]!.k0$s+13$s+::MirR%VJ,~> +!BpJ^mDo8)!.k0$s+13$s+LFOm/bd$J,~> +!BU8[l,Wi%!.k0$s+13$s+LFOklK'jJ,~> +!B:&Xj2_2t!.k0$s+13$s+LFOirR%VJ,~> +!BpJ^mDo8)!.k0$s+13$s+LFOm/bd$J,~> +!BU8[l,Wi%!.k0$s+13$s+LFOklK'jJ,~> +!B:&Xj2_2t!.k0$s+13$s+LFOirR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^mDf2(!9sO^!;c`o!;c`o!;c`o!.k0$s+13$s2+g8m/bd$J,~> +!BU8[l,Nc$!9sO^!;c`o!;c`o!;c`o!.k0$s+13$s2+g8klK'jJ,~> +!B:&Xj2V,s!9sO^!;c`o!;c`o!;c`o!.k0$s+13$s2+g8irR%VJ,~> +!BpJ^mFqU:!;-<h!:'U]!;ulo!;ulo!;ulo!.k0$s+13$s24m9m/bd$J,~> +!BU8[l.Z16!;-<h!:'U]!;ulo!;ulo!;ulo!.k0$s+13$s24m9klK'jJ,~> +!B:&Xj4aP0!;-<h!:'U]!;ulo!;ulo!;ulo!.k0$s+13$s24m9irR%VJ,~> +!BpJ^mHsrH!;c`l!:g*h!:0[b!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$s2=s: +m/bd$J,~> +!BU8[l0\ND!;c`l!:g*h!:0[b!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$s2=s: +klK'jJ,~> +!B:&Xj6cm>!;c`l!:g*h!:0[b!<3#t!<)rt!<<*!!;uls!<<*!!<)rt!<)rt!.k0$s+13$s2=s: +irR%VJ,~> +!BpJ^mHsrH!;HNn!<3#t!<<)t!;lfr!;ulq!<<)t!;c`q!<)rt!<3#u!<)rt!<3#u!<)rt!<3#u +!<)rt!.k0$s+13$s2=s:m/bd$J,~> +!BU8[l0\ND!;HNn!<3#t!<<)t!;lfr!;ulq!<<)t!;c`q!<)rt!<3#u!<)rt!<3#u!<)rt!<3#u +!<)rt!.k0$s+13$s2=s:klK'jJ,~> +!B:&Xj6cm>!;HNn!<3#t!<<)t!;lfr!;ulq!<<)t!;c`q!<)rt!<3#u!<)rt!<3#u!<)rt!<3#u +!<)rt!.k0$s+13$s2=s:irR%VJ,~> +!BpJ^mHsrR!!`H'rrE'!s8E#ms8N)us8E#us8;rps8N)ss8;rts8;ris8N)us8N)ts8N)us8N)t +s8N)ts8N*!s8N(Ms+13$s+13fs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ms8N)us8E#us8;rps8N)ss8;rts8;ris8N)us8N)ts8N)us8N)t +s8N)ts8N*!s8N(Ms+13$s+13fs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ms8N)us8E#us8;rps8N)ss8;rts8;ris8N)us8N)ts8N)us8N)t +s8N)ts8N*!s8N(Ms+13$s+13fs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ns8N)ts8N)ts8N)rs8N)rs8N)ts8N)ks8E#ts8N)ts8N)us8N)t +s8N)ss8;qKs+13$s+13es8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ns8N)ts8N)ts8N)rs8N)rs8N)ts8N)ks8E#ts8N)ts8N)us8N)t +s8N)ss8;qKs+13$s+13es8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ns8N)ts8N)ts8N)rs8N)rs8N)ts8N)ks8E#ts8N)ts8N)us8N)t +s8N)ss8;qKs+13$s+13es8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ms8N)ts8N)ts8N)rs8N)rs8N)ts8N)ls8E#ss8N)ts8N)us8N)t +s8N)ts8)eIs+13$s+13fs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ms8N)ts8N)ts8N)rs8N)rs8N)ts8N)ls8E#ss8N)ts8N)us8N)t +s8N)ts8)eIs+13$s+13fs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ms8N)ts8N)ts8N)rs8N)rs8N)ts8N)ls8E#ss8N)ts8N)us8N)t +s8N)ts8)eIs+13$s+13fs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ts8N)ts8N)ts8N)rs8N)qs8N*!s8N)ls8E#rs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ts8N)ts8N)ts8N)rs8N)qs8N*!s8N)ls8E#rs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ts8N)ts8N)ts8N)rs8N)qs8N*!s8N)ls8E#rs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss8N)ts8N)ts8N)ts8N)rs8N)qs8N'#rr<&ls8E#qs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss8N)ts8N)ts8N)ts8N)rs8N)qs8N'#rr<&ls8E#qs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss8N)ts8N)ts8N)ts8N)rs8N)qs8N'#rr<&ls8E#qs8N)ts8N)u +s8N)ts8N)us8N)ts8N(Ms+13$s+13gs8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&ts8N)ts8N)ts8N)us8E#qs8N)ps8;rks8E#os8N*!s8N)ss8N*! +s8N)ts8N)ts8N(Ms+13$s+13gs8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&ts8N)ts8N)ts8N)us8E#qs8N)ps8;rks8E#os8N*!s8N)ss8N*! +s8N)ts8N)ts8N(Ms+13$s+13gs8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&ts8N)ts8N)ts8N)us8E#qs8N)ps8;rks8E#os8N*!s8N)ss8N*! +s8N)ts8N)ts8N(Ms+13$s+13gs8M$Z_`*)~> +!BpJ^mHsrR!!`H'rrE'!s8E#ss7u`ns7cTos7lZms8E#ls7lZns8)fos8)fos8)eIs+13$s+13f +s8MBdeieN~> +!BU8[l0\NN!!`H'rrE'!s8E#ss7u`ns7cTos7lZms8E#ls7lZns8)fos8)fos8)eIs+13$s+13f +s8M6`c8pI~> +!B:&Xj6cmH!!`H'rrE'!s8E#ss7u`ns7cTos7lZms8E#ls7lZns8)fos8)fos8)eIs+13$s+13f +s8M$Z_`*)~> +!BpJ^mHsrQ!!rT)rrE'!rr<&rs8;ros8;ots8E#us7lZms8N)ls7lZms8;ros8;ros8;qKs+13$ +s+13es8MBdeieN~> +!BU8[l0\NM!!rT)rrE'!rr<&rs8;ros8;ots8E#us7lZms8N)ls7lZms8;ros8;ros8;qKs+13$ +s+13es8M6`c8pI~> +!B:&Xj6cmG!!rT)rrE'!rr<&rs8;ros8;ots8E#us7lZms8N)ls7lZms8;ros8;ros8;qKs+13$ +s+13es8M$Z_`*)~> +!BpJ^mHsrH!87DP!.k0$s+13$s,[3Zm/bd$J,~> +!BU8[l0\ND!87DP!.k0$s+13$s,[3ZklK'jJ,~> +!B:&Xj6cm>!87DP!.k0$s+13$s,[3ZirR%VJ,~> +!BpJ^mHsrH!8@JQ!.k0$s+13$s,R-Ym/bd$J,~> +!BU8[l0\ND!8@JQ!.k0$s+13$s,R-YklK'jJ,~> +!B:&Xj6cm>!8@JQ!.k0$s+13$s,R-YirR%VJ,~> +!BpJ^mC`Jr!.k0$s+13$s,d9[m/bd$J,~> +!BU8[l+I&n!.k0$s+13$s,d9[klK'jJ,~> +!B:&Xj1PEh!.k0$s+13$s,d9[irR%VJ,~> +!BpJ^mC`Jr!.k0$s+13$s,d9[m/bd$J,~> +!BU8[l+I&n!.k0$s+13$s,d9[klK'jJ,~> +!B:&Xj1PEh!.k0$s+13$s,d9[irR%VJ,~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6`c8pI~> +!B:&Xj+75]s+13$s+13hs8M$Z_`*)~> +!BpJ^m=G:gs+13$s+13hs8MBdeieN~> +!BU8[l%/kcs+13$s+13hs8M6... [truncated message content] |
From: <gi...@ax...> - 2008-09-22 05:19:47
|
Makefile | 2 +- Makefile.pamphlet | 2 +- books/bookvol10.2.pamphlet | 345 +++--- books/bookvol7.1.pamphlet | 149 +++ books/ps/v71releasenotes.eps | 351 +++-- books/ps/v71sept2008.eps | 2960 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 3494 insertions(+), 315 deletions(-) New commits: commit f5913c396d3ffdf877b5e6f8368854a638310022 Author: Tim Daly <da...@ax...> Date: Mon Jul 28 15:01:01 2008 -0400 20080921 tpd books/bookvol10.2 use .pdf rather than .pamphlet in URL 20080921 tpd books/ps/v71sept2008.eps add new image for sept 2008 20080921 tpd books/ps/v71releasenotes.eps update image to include sept2008 20080921 tpd books/bookvol7.1 add september release notes 20080921 tpd Makefile.pamphlet September 2008 release number 20080921 tpd Makefile September 2008 release number |
From: <da...@us...> - 2008-09-21 16:15:40
|
Revision: 979 http://axiom.svn.sourceforge.net/axiom/?rev=979&view=rev Author: daly Date: 2008-09-21 16:15:34 +0000 (Sun, 21 Sep 2008) Log Message: ----------- 20080920 tpd books/ps/v102bimodule.ps diagram BMODULE 20080920 tpd books/ps/v102group.ps diagram GROUP 20080920 tpd books/ps/v102leftmodule.ps diagram LMODULE 20080920 tpd books/ps/v102orderedabeliangroup.ps diagram OAGROUP 20080920 tpd books/ps/v102orderedabelianmonoidsup.ps OAMONS 20080920 tpd books/ps/v102orderedcancellationabelianmonoid.ps OCAMON 20080920 tpd books/ps/v102orderedring.ps diagram ORDRING 20080920 tpd books/ps/v102rightmodule.ps diagram RMODULE 20080920 tpd books/ps/v102ring.ps diagram RING 20080920 tpd src/algebra/catdef.spad remove more categories 20080920 tpd books/bookvol10.2 add more categories Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/src/algebra/catdef.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102bimodule.ps trunk/axiom/books/ps/v102group.ps trunk/axiom/books/ps/v102leftmodule.ps trunk/axiom/books/ps/v102orderedabeliangroup.ps trunk/axiom/books/ps/v102orderedabelianmonoidsup.ps trunk/axiom/books/ps/v102orderedcancellationabelianmonoid.ps trunk/axiom/books/ps/v102orderedring.ps trunk/axiom/books/ps/v102rightmodule.ps trunk/axiom/books/ps/v102ring.ps Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-20 13:16:15 UTC (rev 978) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-21 16:15:34 UTC (rev 979) @@ -52,10 +52,12 @@ \ \\${\bf\Leftarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} %% %% cross will put the category and function in the index +%% cross will leave the funcname so it can be put inline. %% \newcommand{\cross}[2]{% e.g. \pagefrom{cat}{funcname} \index{#1!#2}% -\index{#2!#1}} +\index{#2!#1}% +#2} % special meanings for math characters @@ -298,7 +300,8 @@ {\bf Exports:}\\ \begin{tabular}{ll} - ?=? & ?\~{}=? +\cross{BASTYPE}{?=?} & +\cross{BASTYPE}{?\~{}=?} \end{tabular} These are directly exported but not implemented: @@ -366,11 +369,7 @@ \pageto{SetCategory}{SETCAT} \pagefrom{Category}{CATEGORY} -{\bf Exports:} -\begin{verbatim} - coerce -\end{verbatim} - +{\bf Exports:}\\ \cross{KOERCE}{coerce} This is directly exported but not implemented: @@ -430,11 +429,7 @@ \pageto{Collection}{CLAGG} \pagefrom{Category}{CATEGORY} -{\bf Exports:} -\begin{verbatim} - convert -\end{verbatim} - +{\bf Exports:}\\ \cross{KONVERT}{convert} This is directly exported but not implemented: @@ -550,11 +545,7 @@ \pageto{EltableAggregate}{ELTAGG} \pagefrom{Category}{CATEGORY} -{\bf Exports:} -\begin{verbatim} - ?.? -\end{verbatim} - +{\bf Exports:}\\ \cross{ELTAB}{?.?} This syntax for elt is supported by the interpreter and compiler. @@ -620,13 +611,11 @@ {\bf Exports:}\\ \begin{tabular}{lll} - coerce & retract & retractIfCan +\cross{RETRACT}{coerce} & +\cross{RETRACT}{retract} & +\cross{RETRACT}{retractIfCan} \end{tabular} -\cross{RETRACT}{coerce} -\cross{RETRACT}{retract} -\cross{RETRACT}{retractIfCan} - These are directly exported but not implemented: \begin{verbatim} coerce : S -> % @@ -770,16 +759,14 @@ {\bf Exports:}\\ \begin{tabular}{llllll} - empty? & eq? & less? & more? & sample & size? +\cross{AGG}{empty?} & +\cross{AGG}{eq?} & +\cross{AGG}{less?} & +\cross{AGG}{more?} & +\cross{AGG}{sample} & +\cross{AGG}{size?} \end{tabular} -\cross{AGG}{empty?} -\cross{AGG}{eq?} -\cross{AGG}{less?} -\cross{AGG}{more?} -\cross{AGG}{sample} -\cross{AGG}{size?} - These are implemented by this category: \begin{verbatim} empty? : % -> Boolean @@ -882,15 +869,13 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - elt & qelt & qsetelt! & setelt & ?.? +\cross{ELTAGG}{elt} & +\cross{ELTAGG}{qelt} & +\cross{ELTAGG}{qsetelt!} & +\cross{ELTAGG}{setelt} & +\cross{ELTAGG}{?.?} \end{tabular} -\cross{ELTAGG}{elt} -\cross{ELTAGG}{qelt} -\cross{ELTAGG}{qsetelt!} -\cross{ELTAGG}{setelt} -\cross{ELTAGG}{?.?} - These are part of this category's direct exports: \begin{verbatim} elt : (%,Dom,Im) -> Im @@ -1003,15 +988,13 @@ {\bf Exports:}\\ \begin{tabular}{lllll} -coerce & hash & latex & ?=? & ?\~{}=? +\cross{SETCAT}{coerce} & +\cross{SETCAT}{hash} & +\cross{SETCAT}{latex} & +\cross{SETCAT}{?=?} & +\cross{SETCAT}{?\~{}=?} \end{tabular} -\cross{SETCAT}{coerce} -\cross{SETCAT}{hash} -\cross{SETCAT}{latex} -\cross{SETCAT}{?=?} -\cross{SETCAT}{?\~{}=?} - These are implemented by this category: \begin{verbatim} hash : % -> SingleInteger @@ -1106,18 +1089,16 @@ \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ -\begin{tabular}{lllllll} - coerce & hash & latex & ?*? & ?+? & ?=? & ?\~{}=? +\begin{tabular}{lllll} +\cross{ABELSG}{coerce} & +\cross{ABELSG}{hash} & +\cross{ABELSG}{latex} & +\cross{ABELSG}{?*?} & +\cross{ABELSG}{?+?} \\ +\cross{ABELSG}{?=?} & +\cross{ABELSG}{?\~{}=?} &&& \end{tabular} -\cross{ABELSG}{coerce} -\cross{ABELSG}{hash} -\cross{ABELSG}{latex} -\cross{ABELSG}{?*?} -\cross{ABELSG}{?+?} -\cross{ABELSG}{?=?} -\cross{ABELSG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} ?+? : (%,%) -> % @@ -1225,20 +1206,18 @@ \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ -\begin{tabular}{lllllllll} - coerce & hash & index & latex & lookup & random & size & ?=? & ?\~{}=? +\begin{tabular}{lllll} +\cross{FINITE}{coerce} +\cross{FINITE}{hash} & +\cross{FINITE}{index} & +\cross{FINITE}{latex} & +\cross{FINITE}{lookup} & +\cross{FINITE}{random} \\ +\cross{FINITE}{size} & +\cross{FINITE}{?=?} & +\cross{FINITE}{?\~{}=?} && \end{tabular} -\cross{FINITE}{coerce} -\cross{FINITE}{hash} -\cross{FINITE}{index} -\cross{FINITE}{latex} -\cross{FINITE}{lookup} -\cross{FINITE}{random} -\cross{FINITE}{size} -\cross{FINITE}{?=?} -\cross{FINITE}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} index : PositiveInteger -> % @@ -1346,39 +1325,33 @@ \pagefrom{Evalable}{EVALAB} \pagefrom{SetCategory}{SETCAT} - {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & coerce & copy & count & empty & empty? & eq?\\ - eval & every? & hash & latex & less? & map & map!\\ - members & member? & more? & parts & sample & size? & \#?\\ - ?=? & ?\~{}=? & & & & &\\ +\begin{tabular}{lllll} +\cross{HOAGG}{any?} & +\cross{HOAGG}{coerce} & +\cross{HOAGG}{copy} & +\cross{HOAGG}{count} & +\cross{HOAGG}{empty} \\ +\cross{HOAGG}{empty?} & +\cross{HOAGG}{eq?} & +\cross{HOAGG}{eval} & +\cross{HOAGG}{every?} & +\cross{HOAGG}{hash} \\ +\cross{HOAGG}{latex} & +\cross{HOAGG}{less?} & +\cross{HOAGG}{map} & +\cross{HOAGG}{map!} & +\cross{HOAGG}{members} \\ +\cross{HOAGG}{member?} & +\cross{HOAGG}{more?} & +\cross{HOAGG}{parts} & +\cross{HOAGG}{sample} & +\cross{HOAGG}{size?} \\ +\cross{HOAGG}{\#?} & +\cross{HOAGG}{?=?} & +\cross{HOAGG}{?\~{}=?} && \end{tabular} -\cross{HOAGG}{any?} -\cross{HOAGG}{coerce} -\cross{HOAGG}{copy} -\cross{HOAGG}{count} -\cross{HOAGG}{empty} -\cross{HOAGG}{empty?} -\cross{HOAGG}{eq?} -\cross{HOAGG}{eval} -\cross{HOAGG}{every?} -\cross{HOAGG}{hash} -\cross{HOAGG}{latex} -\cross{HOAGG}{less?} -\cross{HOAGG}{map} -\cross{HOAGG}{map!} -\cross{HOAGG}{members} -\cross{HOAGG}{member?} -\cross{HOAGG}{more?} -\cross{HOAGG}{parts} -\cross{HOAGG}{sample} -\cross{HOAGG}{size?} -\cross{HOAGG}{\#?} -\cross{HOAGG}{?=?} -\cross{HOAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} map : ((S -> S),%) -> % @@ -1570,23 +1543,20 @@ \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ -\begin{tabular}{llllll} - coerce & hash & latex & max & min & ?$<$?\\ - ?$<=$? & ?=? & ?$>$? & ?$>=$? & ?\~{}=? &\\ +\begin{tabular}{lllll} +\cross{ORDSET}{coerce} & +\cross{ORDSET}{hash} & +\cross{ORDSET}{latex} & +\cross{ORDSET}{max} & +\cross{ORDSET}{min} \\ +\cross{ORDSET}{?$<$?} & +\cross{ORDSET}{?$<=$?} & +\cross{ORDSET}{?=?} & +\cross{ORDSET}{?$>$?} & +\cross{ORDSET}{?$>=$?} \\ +\cross{ORDSET}{?\~{}=?} &&&& \end{tabular} -\cross{ORDSET}{coerce} -\cross{ORDSET}{hash} -\cross{ORDSET}{latex} -\cross{ORDSET}{max} -\cross{ORDSET}{min} -\cross{ORDSET}{?$<$?} -\cross{ORDSET}{?$<=$?} -\cross{ORDSET}{?=?} -\cross{ORDSET}{?$>$?} -\cross{ORDSET}{?$>=$?} -\cross{ORDSET}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} ?<? : (%,%) -> Boolean @@ -1713,20 +1683,17 @@ \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ -\begin{tabular}{llll} - coerce & hash & latex & ?*? \\ - ?**? & ?=? & ?\^{}? & ?\~{}=? +\begin{tabular}{lllll} +\cross{SGROUP}{coerce} & +\cross{SGROUP}{hash} & +\cross{SGROUP}{latex} & +\cross{SGROUP}{?*?} & +\cross{SGROUP}{?**?} \\ +\cross{SGROUP}{?=?} & +\cross{SGROUP}{?\^{}?} & +\cross{SGROUP}{?~=?} && \end{tabular} -\cross{SGROUP}{coerce} -\cross{SGROUP}{hash} -\cross{SGROUP}{latex} -\cross{SGROUP}{?*?} -\cross{SGROUP}{?**?} -\cross{SGROUP}{?=?} -\cross{SGROUP}{?\^{}?} -\cross{SGROUP}{?~=?} - These are directly exported but not implemented: \begin{verbatim} ?*? : (%,%) -> % @@ -1837,18 +1804,16 @@ \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ -\begin{tabular}{lllllll} - coerce & hash & init & latex & nextItem & ?=? & ?\~{}=? +\begin{tabular}{lllll} +\cross{STEP}{coerce} & +\cross{STEP}{hash} & +\cross{STEP}{init} & +\cross{STEP}{latex} & +\cross{STEP}{?=?} \\ +\cross{STEP}{?~=?} & +\cross{STEP}{nextItem} &&& \end{tabular} -\cross{STEP}{coerce} -\cross{STEP}{hash} -\cross{STEP}{init} -\cross{STEP}{latex} -\cross{STEP}{?=?} -\cross{STEP}{?~=?} -\cross{STEP}{nextItem} - These are directly exported but not implemented: \begin{verbatim} init : () -> % @@ -1946,21 +1911,18 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - 0 & coerce & hash & latex & sample\\ - zero? & ?*? & ?+? & ?=? & ?\~{}=? +\cross{ABELMON}{0} & +\cross{ABELMON}{coerce} & +\cross{ABELMON}{hash} & +\cross{ABELMON}{latex} & +\cross{ABELMON}{sample} \\ +\cross{ABELMON}{zero?} & +\cross{ABELMON}{?*?} & +\cross{ABELMON}{?+?} & +\cross{ABELMON}{?=?} & +\cross{ABELMON}{?\~{}=?} \\ \end{tabular} -\cross{ABELMON}{0} -\cross{ABELMON}{coerce} -\cross{ABELMON}{hash} -\cross{ABELMON}{latex} -\cross{ABELMON}{sample} -\cross{ABELMON}{zero?} -\cross{ABELMON}{?*?} -\cross{ABELMON}{?+?} -\cross{ABELMON}{?=?} -\cross{ABELMON}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} 0 : () -> % @@ -2088,41 +2050,36 @@ \pagefrom{HomogeneousAggregate}{HOAGG} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & bag & coerce & copy & count & empty & empty?\\ - eq? & eval & every? & extract! & hash & insert! & inspect\\ - latex & less? & map & map! & member? & members & more?\\ - parts & sample & size? & \#? & ?=? & ?\~{}=? &\\ +\begin{tabular}{lllll} +\cross{BGAGG}{any?} & +\cross{BGAGG}{bag} & +\cross{BGAGG}{coerce} & +\cross{BGAGG}{copy} & +\cross{BGAGG}{count} \\ +\cross{BGAGG}{empty} & +\cross{BGAGG}{empty?} & +\cross{BGAGG}{eq?} & +\cross{BGAGG}{eval} & +\cross{BGAGG}{every?} \\ +\cross{BGAGG}{extract!} & +\cross{BGAGG}{hash} & +\cross{BGAGG}{insert!} & +\cross{BGAGG}{inspect} & +\cross{BGAGG}{latex} \\ +\cross{BGAGG}{less?} & +\cross{BGAGG}{map} & +\cross{BGAGG}{map!} & +\cross{BGAGG}{member?} & +\cross{BGAGG}{members} \\ +\cross{BGAGG}{more?} & +\cross{BGAGG}{parts} & +\cross{BGAGG}{sample} & +\cross{BGAGG}{size?} & +\cross{BGAGG}{\#?} \\ +\cross{BGAGG}{?=?} & +\cross{BGAGG}{?\~{}=?} &&& \end{tabular} -\cross{BGAGG}{any?} -\cross{BGAGG}{bag} -\cross{BGAGG}{coerce} -\cross{BGAGG}{copy} -\cross{BGAGG}{count} -\cross{BGAGG}{empty} -\cross{BGAGG}{empty?} -\cross{BGAGG}{eq?} -\cross{BGAGG}{eval} -\cross{BGAGG}{every?} -\cross{BGAGG}{extract!} -\cross{BGAGG}{hash} -\cross{BGAGG}{insert!} -\cross{BGAGG}{inspect} -\cross{BGAGG}{latex} -\cross{BGAGG}{less?} -\cross{BGAGG}{map} -\cross{BGAGG}{map!} -\cross{BGAGG}{member?} -\cross{BGAGG}{members} -\cross{BGAGG}{more?} -\cross{BGAGG}{parts} -\cross{BGAGG}{sample} -\cross{BGAGG}{size?} -\cross{BGAGG}{\#?} -\cross{BGAGG}{?=?} -\cross{BGAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} extract! : % -> S @@ -2258,45 +2215,39 @@ \pagefrom{HomogeneousAggregate}{HOAGG} {\bf Exports:}\\ -\begin{tabular}{llllll} - any? & coerce & construct & copy & convert & count\\ - empty & empty? & eq? & eval & every? & find\\ - hash & latex & less? & map & map! & member?\\ - members & more? & parts & reduce & remove & removeDuplicates\\ - sample & select & size? & \#? & ?=? & ?\~{}=? +\begin{tabular}{lllll} +\cross{CLAGG}{any?} & +\cross{CLAGG}{coerce} & +\cross{CLAGG}{construct} & +\cross{CLAGG}{copy} & +\cross{CLAGG}{convert} \\ +\cross{CLAGG}{count} & +\cross{CLAGG}{empty} & +\cross{CLAGG}{empty?} & +\cross{CLAGG}{eq?} & +\cross{CLAGG}{eval} \\ +\cross{CLAGG}{every?} & +\cross{CLAGG}{find} & +\cross{CLAGG}{hash} & +\cross{CLAGG}{latex} & +\cross{CLAGG}{less?} \\ +\cross{CLAGG}{map} & +\cross{CLAGG}{map!} & +\cross{CLAGG}{member?} & +\cross{CLAGG}{members} & +\cross{CLAGG}{more?} \\ +\cross{CLAGG}{parts} & +\cross{CLAGG}{reduce} & +\cross{CLAGG}{remove} & +\cross{CLAGG}{removeDuplicates} & +\cross{CLAGG}{sample} \\ +\cross{CLAGG}{select} & +\cross{CLAGG}{size?} & +\cross{CLAGG}{\#?} & +\cross{CLAGG}{?=?} & +\cross{CLAGG}{?\~{}=?} \\ \end{tabular} -\cross{CLAGG}{any?} -\cross{CLAGG}{coerce} -\cross{CLAGG}{construct} -\cross{CLAGG}{copy} -\cross{CLAGG}{convert} -\cross{CLAGG}{count} -\cross{CLAGG}{empty} -\cross{CLAGG}{empty?} -\cross{CLAGG}{eq?} -\cross{CLAGG}{eval} -\cross{CLAGG}{every?} -\cross{CLAGG}{find} -\cross{CLAGG}{hash} -\cross{CLAGG}{latex} -\cross{CLAGG}{less?} -\cross{CLAGG}{map} -\cross{CLAGG}{map!} -\cross{CLAGG}{member?} -\cross{CLAGG}{members} -\cross{CLAGG}{more?} -\cross{CLAGG}{parts} -\cross{CLAGG}{reduce} -\cross{CLAGG}{remove} -\cross{CLAGG}{removeDuplicates} -\cross{CLAGG}{sample} -\cross{CLAGG}{select} -\cross{CLAGG}{size?} -\cross{CLAGG}{\#?} -\cross{CLAGG}{?=?} -\cross{CLAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} construct: List S -> % @@ -2506,53 +2457,46 @@ \pagefrom{HomogeneousAggregate}{HOAGG} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & coerce & copy & count & elt & empty & empty? \\ - entries & entry? & eq? & eval & every? & fill! & first \\ - hash & index? & indices & latex & less? & map & map! \\ - maxIndex & member? & members & minIndex & more? & parts & qelt \\ - qsetelt! & sample & setelt & size? & swap! & ?.? & ?\~{}=?\\ - \#? & ?=? & & & & &\\ +\begin{tabular}{lllll} +\cross{IXAGG}{any?} & +\cross{IXAGG}{coerce} & +\cross{IXAGG}{copy} & +\cross{IXAGG}{count} & +\cross{IXAGG}{elt} \\ +\cross{IXAGG}{empty} & +\cross{IXAGG}{empty?} & +\cross{IXAGG}{entries} & +\cross{IXAGG}{entry?} & +\cross{IXAGG}{eq?} \\ +\cross{IXAGG}{eval} & +\cross{IXAGG}{every?} & +\cross{IXAGG}{fill!} & +\cross{IXAGG}{first} & +\cross{IXAGG}{hash} \\ +\cross{IXAGG}{index?} & +\cross{IXAGG}{indices} & +\cross{IXAGG}{latex} & +\cross{IXAGG}{less?} & +\cross{IXAGG}{map} \\ +\cross{IXAGG}{map!} & +\cross{IXAGG}{maxIndex} & +\cross{IXAGG}{member?} & +\cross{IXAGG}{members} & +\cross{IXAGG}{minIndex} \\ +\cross{IXAGG}{more?} & +\cross{IXAGG}{parts} & +\cross{IXAGG}{qelt} & +\cross{IXAGG}{qsetelt!} & +\cross{IXAGG}{sample} \\ +\cross{IXAGG}{setelt} & +\cross{IXAGG}{size?} & +\cross{IXAGG}{swap!} & +\cross{IXAGG}{?.?} & +\cross{IXAGG}{?\~{}=?} \\ +\cross{IXAGG}{\#?} & +\cross{IXAGG}{?=?} &&& \end{tabular} -\cross{IXAGG}{any?} -\cross{IXAGG}{coerce} -\cross{IXAGG}{copy} -\cross{IXAGG}{count} -\cross{IXAGG}{elt} -\cross{IXAGG}{empty} -\cross{IXAGG}{empty?} -\cross{IXAGG}{entries} -\cross{IXAGG}{entry?} -\cross{IXAGG}{eq?} -\cross{IXAGG}{eval} -\cross{IXAGG}{every?} -\cross{IXAGG}{fill!} -\cross{IXAGG}{first} -\cross{IXAGG}{hash} -\cross{IXAGG}{index?} -\cross{IXAGG}{indices} -\cross{IXAGG}{latex} -\cross{IXAGG}{less?} -\cross{IXAGG}{map} -\cross{IXAGG}{map!} -\cross{IXAGG}{maxIndex} -\cross{IXAGG}{member?} -\cross{IXAGG}{members} -\cross{IXAGG}{minIndex} -\cross{IXAGG}{more?} -\cross{IXAGG}{parts} -\cross{IXAGG}{qelt} -\cross{IXAGG}{qsetelt!} -\cross{IXAGG}{sample} -\cross{IXAGG}{setelt} -\cross{IXAGG}{size?} -\cross{IXAGG}{swap!} -\cross{IXAGG}{?.?} -\cross{IXAGG}{?\~{}=?} -\cross{IXAGG}{\#?} -\cross{IXAGG}{?=?} - These are directly exported but not implemented: \begin{verbatim} index? : (Index,%) -> Boolean @@ -2770,30 +2714,28 @@ \pagepic{ps/v102monoid.ps}{MONOID}{0.75} {\bf See:}\\ +\pageto{Group}{GROUP} \pageto{OrderedMonoid}{ORDMON} +\pageto{OrderedRing}{ORDRING} +\pageto{Ring}{RING} \pagefrom{SemiGroup}{SGROUP} {\bf Exports:}\\ \begin{tabular}{lllll} - 1 & coerce & hash & latex & one?\\ - recip & sample & ?*? & ?=? & ?\~{}=?\\ - ?**? & ?\^{}? & ?\^{}? &&\\ +\cross{MONOID}{1} & +\cross{MONOID}{coerce} & +\cross{MONOID}{hash} & +\cross{MONOID}{latex} & +\cross{MONOID}{one?} \\ +\cross{MONOID}{recip} & +\cross{MONOID}{sample} & +\cross{MONOID}{?*?} & +\cross{MONOID}{?=?} & +\cross{MONOID}{?\~{}=?} \\ +\cross{MONOID}{?**?} & +\cross{MONOID}{?\^{}?} &&& \end{tabular} -\cross{MONOID}{1} -\cross{MONOID}{coerce} -\cross{MONOID}{hash} -\cross{MONOID}{latex} -\cross{MONOID}{one?} -\cross{MONOID}{recip} -\cross{MONOID}{sample} -\cross{MONOID}{?*?} -\cross{MONOID}{?=?} -\cross{MONOID}{?\~{}=?} -\cross{MONOID}{?**?} -\cross{MONOID}{?\^{}?} - - These are directly exported but not implemented: \begin{verbatim} 1 : () -> % @@ -2931,27 +2873,23 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - coerce & hash & index & latex & lookup \\ - max & min & random & size & ?\~{}=? \\ - ?$<$? & ?$<=$? & ?=? & ?$>$? & ?$>=$? \\ +\cross{ORDFIN}{coerce} & +\cross{ORDFIN}{hash} & +\cross{ORDFIN}{index} & +\cross{ORDFIN}{latex} & +\cross{ORDFIN}{lookup} \\ +\cross{ORDFIN}{max} & +\cross{ORDFIN}{min} & +\cross{ORDFIN}{random} & +\cross{ORDFIN}{size} & +\cross{ORDFIN}{?\~{}=?} \\ +\cross{ORDFIN}{?$<$?} & +\cross{ORDFIN}{?$<=$?} & +\cross{ORDFIN}{?=?} & +\cross{ORDFIN}{?$>$?} & +\cross{ORDFIN}{?$>=$?} \\ \end{tabular} -\cross{ORDFIN}{coerce} -\cross{ORDFIN}{hash} -\cross{ORDFIN}{index} -\cross{ORDFIN}{latex} -\cross{ORDFIN}{lookup} -\cross{ORDFIN}{max} -\cross{ORDFIN}{min} -\cross{ORDFIN}{random} -\cross{ORDFIN}{size} -\cross{ORDFIN}{?\~{}=?} -\cross{ORDFIN}{?$<$?} -\cross{ORDFIN}{?$<=$?} -\cross{ORDFIN}{?=?} -\cross{ORDFIN}{?$>$?} -\cross{ORDFIN}{?$>=$?} - These exports come from OrderedSet(): \begin{verbatim} coerce : % -> OutputForm @@ -3050,52 +2988,45 @@ \pagefrom{HomogeneousAggregate}{HOAGG} {\bf Exports:}\\ -\begin{tabular}{llllll} - any? & child? & children & coerce & copy & count \\ - cyclic? & distance & empty & empty? & eq? & eval \\ - every? & hash & latex & leaf? & leaves & less? \\ - map & map! & member? & members & more? & nodes \\ - node? & parts & sample & setchildren! & setelt & setvalue!\\ - size? & value & ?.value & ?\~{}=? & \#? & ?=? \\ +\begin{tabular}{lllll} +\cross{RCAGG}{any?} & +\cross{RCAGG}{child?} & +\cross{RCAGG}{children} & +\cross{RCAGG}{coerce} & +\cross{RCAGG}{copy} \\ +\cross{RCAGG}{count} & +\cross{RCAGG}{cyclic?} & +\cross{RCAGG}{distance} & +\cross{RCAGG}{empty} & +\cross{RCAGG}{empty?} \\ +\cross{RCAGG}{eq?} & +\cross{RCAGG}{eval} & +\cross{RCAGG}{every?} & +\cross{RCAGG}{hash} & +\cross{RCAGG}{latex} \\ +\cross{RCAGG}{leaf?} & +\cross{RCAGG}{leaves} & +\cross{RCAGG}{less?} & +\cross{RCAGG}{map} & +\cross{RCAGG}{map!} \\ +\cross{RCAGG}{member?} & +\cross{RCAGG}{members} & +\cross{RCAGG}{more?} & +\cross{RCAGG}{nodes} & +\cross{RCAGG}{node?} \\ +\cross{RCAGG}{parts} & +\cross{RCAGG}{sample} & +\cross{RCAGG}{setchildren!} & +\cross{RCAGG}{setelt} & +\cross{RCAGG}{setvalue!} \\ +\cross{RCAGG}{size?} & +\cross{RCAGG}{value} & +\cross{RCAGG}{?.value} & +\cross{RCAGG}{?\~{}=?} & +\cross{RCAGG}{\#?} \\ +\cross{RCAGG}{?=?} &&&& \end{tabular} -\cross{RCAGG}{any?} -\cross{RCAGG}{child?} -\cross{RCAGG}{children} -\cross{RCAGG}{coerce} -\cross{RCAGG}{copy} -\cross{RCAGG}{count} -\cross{RCAGG}{cyclic?} -\cross{RCAGG}{distance} -\cross{RCAGG}{empty} -\cross{RCAGG}{empty?} -\cross{RCAGG}{eq?} -\cross{RCAGG}{eval} -\cross{RCAGG}{every?} -\cross{RCAGG}{hash} -\cross{RCAGG}{latex} -\cross{RCAGG}{leaf?} -\cross{RCAGG}{leaves} -\cross{RCAGG}{less?} -\cross{RCAGG}{map} -\cross{RCAGG}{map!} -\cross{RCAGG}{member?} -\cross{RCAGG}{members} -\cross{RCAGG}{more?} -\cross{RCAGG}{nodes} -\cross{RCAGG}{node?} -\cross{RCAGG}{parts} -\cross{RCAGG}{sample} -\cross{RCAGG}{setchildren!} -\cross{RCAGG}{setelt} -\cross{RCAGG}{setvalue!} -\cross{RCAGG}{size?} -\cross{RCAGG}{value} -\cross{RCAGG}{?.value} -\cross{RCAGG}{?\~{}=?} -\cross{RCAGG}{\#?} -\cross{RCAGG}{?=?} - These are directly exported but not implemented: \begin{verbatim} children : % -> List % @@ -3262,66 +3193,51 @@ \pagefrom{RecursiveAggregate}{RCAGG} {\bf Exports:}\\ -\begin{tabular}{llllll} - any? & children & child? & coerce & copy & count \\ - count & cyclic? & distance & empty & empty? & eq? \\ - eval & eval & eval & eval & every? & hash \\ - latex & leaf? & leaves & left & less? & map \\ - map! & member? & members & more? & nodes & node? \\ - parts & right & sample & setchildren! & setelt & setelt \\ - setelt & setleft! & setright! & setvalue! & size? & value \\ - \#? & ?=? & ?\~{}=? & ?.right & ?.left & ?.value \\ +\begin{tabular}{lllll} +\cross{BRAGG}{any?} & +\cross{BRAGG}{children} & +\cross{BRAGG}{child?} & +\cross{BRAGG}{coerce} & +\cross{BRAGG}{copy} \\ +\cross{BRAGG}{count} & +\cross{BRAGG}{cyclic?} & +\cross{BRAGG}{distance} & +\cross{BRAGG}{empty} & +\cross{BRAGG}{empty?} \\ +\cross{BRAGG}{eq?} & +\cross{BRAGG}{eval} & +\cross{BRAGG}{every?} & +\cross{BRAGG}{hash} & +\cross{BRAGG}{latex} \\ +\cross{BRAGG}{leaf?} & +\cross{BRAGG}{leaves} & +\cross{BRAGG}{left} & +\cross{BRAGG}{less?} & +\cross{BRAGG}{map} \\ +\cross{BRAGG}{map!} & +\cross{BRAGG}{member?} & +\cross{BRAGG}{members} & +\cross{BRAGG}{more?} & +\cross{BRAGG}{nodes} \\ +\cross{BRAGG}{node?} & +\cross{BRAGG}{parts} & +\cross{BRAGG}{right} & +\cross{BRAGG}{sample} & +\cross{BRAGG}{setchildren!} \\ +\cross{BRAGG}{setelt} & +\cross{BRAGG}{setleft!} & +\cross{BRAGG}{setright!} & +\cross{BRAGG}{setvalue!} & +\cross{BRAGG}{size?} \\ +\cross{BRAGG}{value} & +\cross{BRAGG}{\#?} & +\cross{BRAGG}{?=?} & +\cross{BRAGG}{?\~{}=?} & +\cross{BRAGG}{?.right} \\ +\cross{BRAGG}{?.left} & +\cross{BRAGG}{?.value} &&& \end{tabular} -\cross{BRAGG}{any?} -\cross{BRAGG}{children} -\cross{BRAGG}{child?} -\cross{BRAGG}{coerce} -\cross{BRAGG}{copy} -\cross{BRAGG}{count} -\cross{BRAGG}{count} -\cross{BRAGG}{cyclic?} -\cross{BRAGG}{distance} -\cross{BRAGG}{empty} -\cross{BRAGG}{empty?} -\cross{BRAGG}{eq?} -\cross{BRAGG}{eval} -\cross{BRAGG}{eval} -\cross{BRAGG}{eval} -\cross{BRAGG}{eval} -\cross{BRAGG}{every?} -\cross{BRAGG}{hash} -\cross{BRAGG}{latex} -\cross{BRAGG}{leaf?} -\cross{BRAGG}{leaves} -\cross{BRAGG}{left} -\cross{BRAGG}{less?} -\cross{BRAGG}{map} -\cross{BRAGG}{map!} -\cross{BRAGG}{member?} -\cross{BRAGG}{members} -\cross{BRAGG}{more?} -\cross{BRAGG}{nodes} -\cross{BRAGG}{node?} -\cross{BRAGG}{parts} -\cross{BRAGG}{right} -\cross{BRAGG}{sample} -\cross{BRAGG}{setchildren!} -\cross{BRAGG}{setelt} -\cross{BRAGG}{setelt} -\cross{BRAGG}{setelt} -\cross{BRAGG}{setleft!} -\cross{BRAGG}{setright!} -\cross{BRAGG}{setvalue!} -\cross{BRAGG}{size?} -\cross{BRAGG}{value} -\cross{BRAGG}{\#?} -\cross{BRAGG}{?=?} -\cross{BRAGG}{?\~{}=?} -\cross{BRAGG}{?.right} -\cross{BRAGG}{?.left} -\cross{BRAGG}{?.value} - These are directly exported but not implemented: \begin{verbatim} left : % -> % @@ -3546,27 +3462,24 @@ {\bf See:}\\ \pageto{AbelianGroup}{ABELGRP} +\pageto{OrderedCancellationAbelianMonoid}{OCAMON} \pagefrom{AbelianMonoid}{ABELMON} {\bf Exports:}\\ \begin{tabular}{lllll} - 0 & coerce & hash & latex & sample\\ - subtractIfCan & zero? & ?\~{}=? & ?*? & ?+?\\ - ?=?&&&& +\cross{CABMON}{0} & +\cross{CABMON}{coerce} & +\cross{CABMON}{hash} & +\cross{CABMON}{latex} & +\cross{CABMON}{sample} \\ +\cross{CABMON}{subtractIfCan} & +\cross{CABMON}{zero?} & +\cross{CABMON}{?\~{}=?} & +\cross{CABMON}{?*?} & +\cross{CABMON}{?+?} \\ +\cross{CABMON}{?=?} &&&& \end{tabular} -\cross{CABMON}{0} -\cross{CABMON}{coerce} -\cross{CABMON}{hash} -\cross{CABMON}{latex} -\cross{CABMON}{sample} -\cross{CABMON}{subtractIfCan} -\cross{CABMON}{zero?} -\cross{CABMON}{?\~{}=?} -\cross{CABMON}{?*?} -\cross{CABMON}{?+?} -\cross{CABMON}{?=?} - These are directly exported but not implemented: \begin{verbatim} subtractIfCan : (%,%) -> Union(%,"failed") @@ -3677,54 +3590,46 @@ \pagefrom{Collection}{CLAGG} {\bf Exports:}\\ -\begin{tabular}{llllll} - any? & bag & coerce & construct & convert & copy \\ - count & dictionary & empty & empty? & eq? & eval \\ - every? & extract! & find & hash & insert! & inspect \\ - latex & less? & map & map! & member? & members \\ - more? & parts & reduce & remove & remove! & removeDuplicates \\ - sample & select & select! & size? & \#? & ?=? \\ - ?\~{}=? &&&&&\\ +\begin{tabular}{lllll} +\cross{DIOPS}{any?} & +\cross{DIOPS}{bag} & +\cross{DIOPS}{coerce} & +\cross{DIOPS}{construct} & +\cross{DIOPS}{convert} \\ +\cross{DIOPS}{copy} & +\cross{DIOPS}{count} & +\cross{DIOPS}{dictionary} & +\cross{DIOPS}{empty} & +\cross{DIOPS}{empty?} \\ +\cross{DIOPS}{eq?} & +\cross{DIOPS}{eval} & +\cross{DIOPS}{every?} & +\cross{DIOPS}{extract!} & +\cross{DIOPS}{find} \\ +\cross{DIOPS}{hash} & +\cross{DIOPS}{insert!} & +\cross{DIOPS}{inspect} & +\cross{DIOPS}{latex} & +\cross{DIOPS}{less?} \\ +\cross{DIOPS}{map} & +\cross{DIOPS}{map!} & +\cross{DIOPS}{member?} & +\cross{DIOPS}{members} & +\cross{DIOPS}{more?} \\ +\cross{DIOPS}{parts} & +\cross{DIOPS}{reduce} & +\cross{DIOPS}{remove} & +\cross{DIOPS}{remove!} & +\cross{DIOPS}{removeDuplicates} \\ +\cross{DIOPS}{sample} & +\cross{DIOPS}{select} & +\cross{DIOPS}{select!} & +\cross{DIOPS}{size?} & +\cross{DIOPS}{\#?} \\ +\cross{DIOPS}{?=?} & +\cross{DIOPS}{?\~{}=?} &&& \end{tabular} -\cross{DIOPS}{any?} -\cross{DIOPS}{bag} -\cross{DIOPS}{coerce} -\cross{DIOPS}{construct} -\cross{DIOPS}{convert} -\cross{DIOPS}{copy} -\cross{DIOPS}{count} -\cross{DIOPS}{dictionary} -\cross{DIOPS}{empty} -\cross{DIOPS}{empty?} -\cross{DIOPS}{eq?} -\cross{DIOPS}{eval} -\cross{DIOPS}{every?} -\cross{DIOPS}{extract!} -\cross{DIOPS}{find} -\cross{DIOPS}{hash} -\cross{DIOPS}{insert!} -\cross{DIOPS}{inspect} -\cross{DIOPS}{latex} -\cross{DIOPS}{less?} -\cross{DIOPS}{map} -\cross{DIOPS}{map!} -\cross{DIOPS}{member?} -\cross{DIOPS}{members} -\cross{DIOPS}{more?} -\cross{DIOPS}{parts} -\cross{DIOPS}{reduce} -\cross{DIOPS}{remove} -\cross{DIOPS}{remove!} -\cross{DIOPS}{removeDuplicates} -\cross{DIOPS}{sample} -\cross{DIOPS}{select} -\cross{DIOPS}{select!} -\cross{DIOPS}{size?} -\cross{DIOPS}{\#?} -\cross{DIOPS}{?=?} -\cross{DIOPS}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} dictionary : List S -> % @@ -3902,66 +3807,57 @@ \pagefrom{RecursiveAggregate}{RCAGG} {\bf Exports:}\\ -\begin{tabular}{llllll} - any? & children & child? & coerce & concat! & copy \\ - count & count & cyclic? & distance & empty & empty? \\ - eq? & eval & eval & eval & eval & every? \\ - hash & head & last & latex & leaf? & leaves \\ - less? & map & map! & member? & members & more? \\ - next & nodes & node? & parts & previous & sample \\ - setchildren! & setelt & setnext! & setprevious! & setvalue! & size? \\ - tail & value & \#? & ?=? & ?\~{}=? & ?.value \\ +\begin{tabular}{lllll} +\cross{DLAGG}{any?} & +\cross{DLAGG}{children} & +\cross{DLAGG}{child?} & +\cross{DLAGG}{coerce} & +\cross{DLAGG}{concat!} \\ +\cross{DLAGG}{copy} & +\cross{DLAGG}{count} & +\cross{DLAGG}{count} & +\cross{DLAGG}{cyclic?} & +\cross{DLAGG}{distance} \\ +\cross{DLAGG}{empty} & +\cross{DLAGG}{empty?} & +\cross{DLAGG}{eq?} & +\cross{DLAGG}{eval} & +\cross{DLAGG}{eval} \\ +\cross{DLAGG}{eval} & +\cross{DLAGG}{eval} & +\cross{DLAGG}{every?} & +\cross{DLAGG}{hash} & +\cross{DLAGG}{head} \\ +\cross{DLAGG}{last} & +\cross{DLAGG}{latex} & +\cross{DLAGG}{leaf?} & +\cross{DLAGG}{leaves} & +\cross{DLAGG}{less?} \\ +\cross{DLAGG}{map} & +\cross{DLAGG}{map!} & +\cross{DLAGG}{member?} & +\cross{DLAGG}{members} & +\cross{DLAGG}{more?} \\ +\cross{DLAGG}{next} & +\cross{DLAGG}{nodes} & +\cross{DLAGG}{node?} & +\cross{DLAGG}{parts} & +\cross{DLAGG}{previous} \\ +\cross{DLAGG}{sample} & +\cross{DLAGG}{setchildren!} & +\cross{DLAGG}{setelt} & +\cross{DLAGG}{setnext!} & +\cross{DLAGG}{setprevious!} \\ +\cross{DLAGG}{setvalue!} & +\cross{DLAGG}{size?} & +\cross{DLAGG}{tail} & +\cross{DLAGG}{value} & +\cross{DLAGG}{\#?} \\ +\cross{DLAGG}{?=?} & +\cross{DLAGG}{?\~{}=?} & +\cross{DLAGG}{?.value} && \end{tabular} -\cross{DLAGG}{any?} -\cross{DLAGG}{children} -\cross{DLAGG}{child?} -\cross{DLAGG}{coerce} -\cross{DLAGG}{concat!} -\cross{DLAGG}{copy} -\cross{DLAGG}{count} -\cross{DLAGG}{count} -\cross{DLAGG}{cyclic?} -\cross{DLAGG}{distance} -\cross{DLAGG}{empty} -\cross{DLAGG}{empty?} -\cross{DLAGG}{eq?} -\cross{DLAGG}{eval} -\cross{DLAGG}{eval} -\cross{DLAGG}{eval} -\cross{DLAGG}{eval} -\cross{DLAGG}{every?} -\cross{DLAGG}{hash} -\cross{DLAGG}{head} -\cross{DLAGG}{last} -\cross{DLAGG}{latex} -\cross{DLAGG}{leaf?} -\cross{DLAGG}{leaves} -\cross{DLAGG}{less?} -\cross{DLAGG}{map} -\cross{DLAGG}{map!} -\cross{DLAGG}{member?} -\cross{DLAGG}{members} -\cross{DLAGG}{more?} -\cross{DLAGG}{next} -\cross{DLAGG}{nodes} -\cross{DLAGG}{node?} -\cross{DLAGG}{parts} -\cross{DLAGG}{previous} -\cross{DLAGG}{sample} -\cross{DLAGG}{setchildren!} -\cross{DLAGG}{setelt} -\cross{DLAGG}{setnext!} -\cross{DLAGG}{setprevious!} -\cross{DLAGG}{setvalue!} -\cross{DLAGG}{size?} -\cross{DLAGG}{tail} -\cross{DLAGG}{value} -\cross{DLAGG}{\#?} -\cross{DLAGG}{?=?} -\cross{DLAGG}{?\~{}=?} -\cross{DLAGG}{?.value} - These are directly exported but not implemented: \begin{verbatim} concat! : (%,%) -> % if $ has shallowlyMutable @@ -4111,6 +4007,176 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Group}{GROUP} +\pagepic{ps/v102group.ps}{GROUP}{0.65} + +{\bf See:}\\ +\pagefrom{Monoid}{MONOID} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\cross{GROUP}{1} & +\cross{GROUP}{coerce} & +\cross{GROUP}{commutator} & +\cross{GROUP}{conjugate} & +\cross{GROUP}{hash} \\ +\cross{GROUP}{inv} & +\cross{GROUP}{latex} & +\cross{GROUP}{one?} & +\cross{GROUP}{recip} & +\cross{GROUP}{sample} \\ +\cross{GROUP}{?\~{}=?} & +\cross{GROUP}{?*?} & +\cross{GROUP}{?**?} & +\cross{GROUP}{?/?} & +\cross{GROUP}{?=?} \\ +\cross{GROUP}{?\^{}?} &&&& +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + inv : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + commutator : (%,%) -> % + conjugate : (%,%) -> % + recip : % -> Union(%,"failed") + ?/? : (%,%) -> % + ?^? : (%,Integer) -> % + ?**? : (%,Integer) -> % +\end{verbatim} + +These exports come from Aggregate: +\begin{verbatim} +\end{verbatim} + +These exports come from Monoid(): +\begin{verbatim} + 1 : () -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + sample : () -> % + ?^? : (%,NonNegativeInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?*? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category GROUP Group>>= +)abbrev category GROUP Group +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The class of multiplicative groups, i.e. monoids with +++ multiplicative inverses. +++ +++ Axioms: +++ \spad{leftInverse("*":(%,%)->%,inv)}\tab{30}\spad{ inv(x)*x = 1 } +++ \spad{rightInverse("*":(%,%)->%,inv)}\tab{30}\spad{ x*inv(x) = 1 } +Group(): Category == Monoid with + inv: % -> % + ++ inv(x) returns the inverse of x. + "/": (%,%) -> % + ++ x/y is the same as x times the inverse of y. + "**": (%,Integer) -> % + ++ x**n returns x raised to the integer power n. + "^": (%,Integer) -> % + ++ x^n returns x raised to the integer power n. + unitsKnown + ++ unitsKnown asserts that recip only returns + ++ "failed" for non-units. + conjugate: (%,%) -> % + ++ conjugate(p,q) computes \spad{inv(q) * p * q}; this is + ++ 'right action by conjugation'. + commutator: (%,%) -> % + ++ commutator(p,q) computes \spad{inv(p) * inv(q) * p * q}. + add + import RepeatedSquaring(%) + x:% / y:% == x*inv(y) + recip(x:%) == inv(x) + _^(x:%, n:Integer):% == x ** n + x:% ** n:Integer == + zero? n => 1 + n<0 => expt(inv(x),(-n) pretend PositiveInteger) + expt(x,n pretend PositiveInteger) + conjugate(p,q) == inv(q) * p * q + commutator(p,q) == inv(p) * inv(q) * p * q + +@ +<<GROUP.dotabb>>= +"GROUP" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=GROUP"]; +"GROUP" -> "MONOID" + +@ +<<GROUP.dotfull>>= +"Group()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=GROUP"]; +"Group()" -> "Monoid()" + +@ +<<GROUP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Group()" [color=lightblue]; +"Group()" -> "Monoid()" +"Group()" -> "RepeatedSquaring(Group)" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SetCategory()" +"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedSquaring(Group)" [color="#00EE00"]; +"RepeatedSquaring(Group)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(SemiGroup)" [color="#00EE00"]; +"RepeatedSquaring(SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; + +} +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{LinearAggregate}{LNAGG} \pagepic{ps/v102linearaggregate.ps}{LNAGG}{1.00} @@ -4123,72 +4189,60 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - any? & coerce & concat & construct & convert \\ - copy & count & delete & elt & empty \\ - empty? & entries & entry? & eq? & eval \\ - every? & fill! & find & first & hash \\ - index? & indices & insert & latex & less? \\ - map & map! & maxIndex & member? & members \\ - minIndex & more? & new & parts & qelt \\ - qsetelt! & reduce & reduce & reduce & remove \\ - remove & removeDuplicates & sample & select & setelt \\ - setelt & size? & swap! & ?\~{}=? & \#? \\ - ?=? & ?.? &&&\\ +\cross{LNAGG}{any?} & +\cross{LNAGG}{coerce} & +\cross{LNAGG}{concat} & +\cross{LNAGG}{construct} & +\cross{LNAGG}{convert} \\ +\cross{LNAGG}{copy} & +\cross{LNAGG}{count} & +\cross{LNAGG}{delete} & +\cross{LNAGG}{elt} & +\cross{LNAGG}{empty} \\ +\cross{LNAGG}{empty?} & +\cross{LNAGG}{entries} & +\cross{LNAGG}{entry?} & +\cross{LNAGG}{eq?} & +\cross{LNAGG}{eval} \\ +\cross{LNAGG}{every?} & +\cross{LNAGG}{fill!} & +\cross{LNAGG}{find} & +\cross{LNAGG}{first} & +\cross{LNAGG}{hash} \\ +\cross{LNAGG}{index?} & +\cross{LNAGG}{indices} & +\cross{LNAGG}{insert} & +\cross{LNAGG}{latex} & +\cross{LNAGG}{less?} \\ +\cross{LNAGG}{map} & +\cross{LNAGG}{map!} & +\cross{LNAGG}{maxIndex} & +\cross{LNAGG}{member?} & +\cross{LNAGG}{members} \\ +\cross{LNAGG}{minIndex} & +\cross{LNAGG}{more?} & +\cross{LNAGG}{new} & +\cross{LNAGG}{parts} & +\cross{LNAGG}{qelt} \\ +\cross{LNAGG}{qsetelt!} & +\cross{LNAGG}{reduce} & +\cross{LNAGG}{reduce} & +\cross{LNAGG}{reduce} & +\cross{LNAGG}{remove} \\ +\cross{LNAGG}{remove} & +\cross{LNAGG}{removeDuplicates} & +\cross{LNAGG}{sample} & +\cross{LNAGG}{select} & +\cross{LNAGG}{setelt} \\ +\cross{LNAGG}{setelt} & +\cross{LNAGG}{size?} & +\cross{LNAGG}{swap!} & +\cross{LNAGG}{?\~{}=?} & +\cross{LNAGG}{\#?} \\ +\cross{LNAGG}{?=?} & +\cross{LNAGG}{?.?} &&& \end{tabular} -\cross{LNAGG}{any?} -\cross{LNAGG}{coerce} -\cross{LNAGG}{concat} -\cross{LNAGG}{construct} -\cross{LNAGG}{convert} -\cross{LNAGG}{copy} -\cross{LNAGG}{count} -\cross{LNAGG}{delete} -\cross{LNAGG}{elt} -\cross{LNAGG}{empty} -\cross{LNAGG}{empty?} -\cross{LNAGG}{entries} -\cross{LNAGG}{entry?} -\cross{LNAGG}{eq?} -\cross{LNAGG}{eval} -\cross{LNAGG}{every?} -\cross{LNAGG}{fill!} -\cross{LNAGG}{find} -\cross{LNAGG}{first} -\cross{LNAGG}{hash} -\cross{LNAGG}{index?} -\cross{LNAGG}{indices} -\cross{LNAGG}{insert} -\cross{LNAGG}{latex} -\cross{LNAGG}{less?} -\cross{LNAGG}{map} -\cross{LNAGG}{map!} -\cross{LNAGG}{maxIndex} -\cross{LNAGG}{member?} -\cross{LNAGG}{members} -\cross{LNAGG}{minIndex} -\cross{LNAGG}{more?} -\cross{LNAGG}{new} -\cross{LNAGG}{parts} -\cross{LNAGG}{qelt} -\cross{LNAGG}{qsetelt!} -\cross{LNAGG}{reduce} -\cross{LNAGG}{reduce} -\cross{LNAGG}{reduce} -\cross{LNAGG}{remove} -\cross{LNAGG}{remove} -\cross{LNAGG}{removeDuplicates} -\cross{LNAGG}{sample} -\cross{LNAGG}{select} -\cross{LNAGG}{setelt} -\cross{LNAGG}{setelt} -\cross{LNAGG}{size?} -\cross{LNAGG}{swap!} -\cross{LNAGG}{?\~{}=?} -\cross{LNAGG}{\#?} -\cross{LNAGG}{?=?} -\cross{LNAGG}{?.?} - These are directly exported but not implemented: \begin{verbatim} concat : (%,%) -> % @@ -4425,28 +4479,25 @@ \pagefrom{OrderedSet}{ORDSET} {\bf Exports:}\\ -\begin{tabular}{llllllll} - 0 & coerce & hash & latex & max & min & sample & zero?\\ - ?\~{}=? & ?*? & ?+? & ?$<$? & ?$<=$? & ?=? & ?$>$? & ?$>=$? +\begin{tabular}{lllll} +\cross{OASGP}{0} & +\cross{OASGP}{coerce} & +\cross{OASGP}{hash} & +\cross{OASGP}{latex} & +\cross{OASGP}{max} \\ +\cross{OASGP}{min} & +\cross{OASGP}{sample} & +\cross{OASGP}{zero?} & +\cross{OASGP}{?\~{}=?} & +\cross{OASGP}{?*?} \\ +\cross{OASGP}{?+?} & +\cross{OASGP}{?$<$?} & +\cross{OASGP}{?$<=$?} & +\cross{OASGP}{?=?} & +\cross{OASGP}{?$>$?} \\ +\cross{OASGP}{?$>=$?} &&&& \end{tabular} -\cross{OASGP}{0} -\cross{OASGP}{coerce} -\cross{OASGP}{hash} -\cross{OASGP}{latex} -\cross{OASGP}{max} -\cross{OASGP}{min} -\cross{OASGP}{sample} -\cross{OASGP}{zero?} -\cross{OASGP}{?\~{}=?} -\cross{OASGP}{?*?} -\cross{OASGP}{?+?} -\cross{OASGP}{?$<$?} -\cross{OASGP}{?$<=$?} -\cross{OASGP}{?=?} -\cross{OASGP}{?$>$?} -\cross{OASGP}{?$>=$?} - These exports come from OrderedSet(): \begin{verbatim} coerce : % -> OutputForm @@ -4559,31 +4610,27 @@ \pagefrom{OrderedSet}{ORDSET} {\bf Exports:}\\ -\begin{tabular}{llllll} - 1 & coerce & hash & latex & max & min\\ - one? & recip & sample & ?*? & ?**? & ?$<$?\\ - ?$<=$? & ?=? & ?$>$? & ?$>=$? & ?\~{}=? & ?\^{}?\\ +\begin{tabular}{lllll} +\cross{ORDMON}{1} & +\cross{ORDMON}{coerce} & +\cross{ORDMON}{hash} & +\cross{ORDMON}{latex} & +\cross{ORDMON}{max} \\ +\cross{ORDMON}{min} & +\cross{ORDMON}{one?} & +\cross{ORDMON}{recip} & +\cross{ORDMON}{sample} & +\cross{ORDMON}{?*?} \\ +\cross{ORDMON}{?**?} & +\cross{ORDMON}{?$<$?} & +\cross{ORDMON}{?$<=$?} & +\cross{ORDMON}{?=?} & +\cross{ORDMON}{?$>$?} \\ +\cross{ORDMON}{?$>=$?} & +\cross{ORDMON}{?\~{}=?} & +\cross{ORDMON}{?\^{}?} && \end{tabular} -\cross{ORDMON}{1} -\cross{ORDMON}{coerce} -\cross{ORDMON}{hash} -\cross{ORDMON}{latex} -\cross{ORDMON}{max} -\cross{ORDMON}{min} -\cross{ORDMON}{one?} -\cross{ORDMON}{recip} -\cross{ORDMON}{sample} -\cross{ORDMON}{?*?} -\cross{ORDMON}{?**?} -\cross{ORDMON}{?$<$?} -\cross{ORDMON}{?$<=$?} -\cross{ORDMON}{?=?} -\cross{ORDMON}{?$>$?} -\cross{ORDMON}{?$>=$?} -\cross{ORDMON}{?\~{}=?} -\cross{ORDMON}{?\^{}?} - These exports come from Monoid(): \begin{verbatim} 1 : () -> % @@ -4704,45 +4751,39 @@ \pagefrom{BagAggregate}{BGAGG} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & bag & copy & coerce & count & empty & empty? \\ - eq? & eval & every? & extract! & hash & insert! & inspect \\ - latex & less? & map & map! & max & member? & members \\ - merge & merge! & more? & parts & sample & size? & \#? \\ - ?=? & ?\~{}=? &\\ +\begin{tabular}{lllll} +\cross{PRQAGG}{any?} & +\cross{PRQAGG}{bag} & +\cross{PRQAGG}{copy} & +\cross{PRQAGG}{coerce} & +\cross{PRQAGG}{count} \\ +\cross{PRQAGG}{empty} & +\cross{PRQAGG}{empty?} & +\cross{PRQAGG}{eq?} & +\cross{PRQAGG}{eval} & +\cross{PRQAGG}{every?} \\ +\cross{PRQAGG}{extract!} & +\cross{PRQAGG}{hash} & +\cross{PRQAGG}{insert!} & +\cross{PRQAGG}{inspect} & +\cross{PRQAGG}{latex} \\ +\cross{PRQAGG}{less?} & +\cross{PRQAGG}{map} & +\cross{PRQAGG}{map!} & +\cross{PRQAGG}{max} & +\cross{PRQAGG}{member?} \\ +\cross{PRQAGG}{members} & +\cross{PRQAGG}{merge} & +\cross{PRQAGG}{merge!} & +\cross{PRQAGG}{more?} & +\cross{PRQAGG}{parts} \\ +\cross{PRQAGG}{sample} & +\cross{PRQAGG}{size?} & +\cross{PRQAGG}{\#?} & +\cross{PRQAGG}{?=?} & +\cross{PRQAGG}{?\~{}=?} \\ \end{tabular} -\cross{PRQAGG}{any?} -\cross{PRQAGG}{bag} -\cross{PRQAGG}{copy} -\cross{PRQAGG}{coerce} -\cross{PRQAGG}{count} -\cross{PRQAGG}{empty} -\cross{PRQAGG}{empty?} -\cross{PRQAGG}{eq?} -\cross{PRQAGG}{eval} -\cross{PRQAGG}{every?} -\cross{PRQAGG}{extract!} -\cross{PRQAGG}{hash} -\cross{PRQAGG}{insert!} -\cross{PRQAGG}{inspect} -\cross{PRQAGG}{latex} -\cross{PRQAGG}{less?} -\cross{PRQAGG}{map} -\cross{PRQAGG}{map!} -\cross{PRQAGG}{max} -\cross{PRQAGG}{member?} -\cross{PRQAGG}{members} -\cross{PRQAGG}{merge} -\cross{PRQAGG}{merge!} -\cross{PRQAGG}{more?} -\cross{PRQAGG}{parts} -\cross{PRQAGG}{sample} -\cross{PRQAGG}{size?} -\cross{PRQAGG}{\#?} -\cross{PRQAGG}{?=?} -\cross{PRQAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} max : % -> S @@ -4874,48 +4915,42 @@ \pagefrom{BagAggregate}{BGAGG} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & bag & back & coerce & copy & count & dequeue! \\ - empty & empty? & enqueue! & eq? & eval & every? & extract! \\ - front & hash & insert! & inspect & latex & length & less? \\ - map & map! & member? & members & more? & parts & rotate! \\ - sample & size? & \#? & ?=? & ?\~{}=? &&\\ +\begin{tabular}{lllll} +\cross{QUAGG}{any?} & +\cross{QUAGG}{bag} & +\cross{QUAGG}{back} & +\cross{QUAGG}{coerce} & +\cross{QUAGG}{copy} \\ +\cross{QUAGG}{count} & +\cross{QUAGG}{dequeue!} & +\cross{QUAGG}{empty} & +\cross{QUAGG}{empty?} & +\cross{QUAGG}{enqueue!} \\ +\cross{QUAGG}{eq?} & +\cross{QUAGG}{eval} & +\cross{QUAGG}{every?} & +\cross{QUAGG}{extract!} & +\cross{QUAGG}{front} \\ +\cross{QUAGG}{hash} & +\cross{QUAGG}{insert!} & +\cross{QUAGG}{inspect} & +\cross{QUAGG}{latex} & +\cross{QUAGG}{length} \\ +\cross{QUAGG}{less?} & +\cross{QUAGG}{map} & +\cross{QUAGG}{map!} & +\cross{QUAGG}{member?} & +\cross{QUAGG}{members} \\ +\cross{QUAGG}{more?} & +\cross{QUAGG}{parts} & +\cross{QUAGG}{rotate!} & +\cross{QUAGG}{sample} & +\cross{QUAGG}{size?} \\ +\cross{QUAGG}{\#?} & +\cross{QUAGG}{?=?} & +\cross{QUAGG}{?\~{}=?} && \end{tabular} -\cross{QUAGG}{any?} -\cross{QUAGG}{bag} -\cross{QUAGG}{back} -\cross{QUAGG}{coerce} -\cross{QUAGG}{copy} -\cross{QUAGG}{count} -\cross{QUAGG}{dequeue!} -\cross{QUAGG}{empty} -\cross{QUAGG}{empty?} -\cross{QUAGG}{enqueue!} -\cross{QUAGG}{eq?} -\cross{QUAGG}{eval} -\cross{QUAGG}{every?} -\cross{QUAGG}{extract!} -\cross{QUAGG}{front} -\cross{QUAGG}{hash} -\cross{QUAGG}{insert!} -\cross{QUAGG}{inspect} -\cross{QUAGG}{latex} -\cross{QUAGG}{length} -\cross{QUAGG}{less?} -\cross{QUAGG}{map} -\cross{QUAGG}{map!} -\cross{QUAGG}{member?} -\cross{QUAGG}{members} -\cross{QUAGG}{more?} -\cross{QUAGG}{parts} -\cross{QUAGG}{rotate!} -\cross{QUAGG}{sample} -\cross{QUAGG}{size?} -\cross{QUAGG}{\#?} -\cross{QUAGG}{?=?} -\cross{QUAGG}{?\~{}=?} - These are implemented by this category: \begin{verbatim} back : % -> S @@ -5060,55 +5095,46 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - any? & brace & coerce & construct & convert\\ - copy & count & difference & empty & empty?\\ - eq? & eval & every? & find & hash\\ - intersect & latex & less? & map & map!\\ - member? & members & more? & parts & reduce\\ - remove & removeDuplicates & sample & select & set\\ - size? & subset? & symmetricDifference & union & \#?\\ - ?$<$? & ?=? & ?\~{}=? && +\cross{SETAGG}{any?} & +\cross{SETAGG}{brace} & +\cross{SETAGG}{coerce} & +\cross{SETAGG}{construct} & +\cross{SETAGG}{convert} \\ +\cross{SETAGG}{copy} & +\cross{SETAGG}{count} & +\cross{SETAGG}{difference} & +\cross{SETAGG}{empty} & +\cross{SETAGG}{empty?} \\ +\cross{SETAGG}{eq?} & +\cross{SETAGG}{eval} & +\cross{SETAGG}{every?} & +\cross{SETAGG}{find} & +\cross{SETAGG}{hash} \\ +\cross{SETAGG}{intersect} & +\cross{SETAGG}{latex} & +\cross{SETAGG}{less?} & +\cross{SETAGG}{map} & +\cross{SETAGG}{map!} \\ +\cross{SETAGG}{member?} & +\cross{SETAGG}{members} & +\cross{SETAGG}{more?} & +\cross{SETAGG}{parts} & +\cross{SETAGG}{reduce} \\ +\cross{SETAGG}{remove} & +\cross{SETAGG}{removeDuplicates} & +\cross{SETAGG}{sample} & +\cross{SETAGG}{select} & +\cross{SETAGG}{set} \\ +\cross{SETAGG}{size?} & +\cross{SETAGG}{subset?} & +\cross{SETAGG}{symmetricDifference} & +\cross{SETAGG}{union} & +\cross{SETAGG}{\#?} \\ +\cross{SETAGG}{?$<$?} & +\cross{SETAGG}{?=?} & +\cross{SETAGG}{?\~{}=?} && \end{tabular} -\cross{SETAGG}{any?} -\cross{SETAGG}{brace} -\cross{SETAGG}{coerce} -\cross{SETAGG}{construct} -\cross{SETAGG}{convert} -\cross{SETAGG}{copy} -\cross{SETAGG}{count} -\cross{SETAGG}{difference} -\cross{SETAGG}{empty} -\cross{SETAGG}{empty?} -\cross{SETAGG}{eq?} -\cross{SETAGG}{eval} -\cross{SETAGG}{every?} -\cross{SETAGG}{find} -\cross{SETAGG}{hash} -\cross{SETAGG}{intersect} -\cross{SETAGG}{latex} -\cross{SETAGG}{less?} -\cross{SETAGG}{map} -\cross{SETAGG}{map!} -\cross{SETAGG}{member?} -\cross{SETAGG}{members} -\cross{SETAGG}{more?} -\cross{SETAGG}{parts} -\cross{SETAGG}{reduce} -\cross{SETAGG}{remove} -\cross{SETAGG}{removeDuplicates} -\cross{SETAGG}{sample} -\cross{SETAGG}{select} -\cross{SETAGG}{set} -\cross{SETAGG}{size?} -\cross{SETAGG}{subset?} -\cross{SETAGG}{symmetricDifference} -\cross{SETAGG}{union} -\cross{SETAGG}{\#?} -\cross{SETAGG}{?$<$?} -\cross{SETAGG}{?=?} -\cross{SETAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} brace : List S -> % @@ -5345,46 +5371,40 @@ \pagefrom{BagAggregate}{BGAGG} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & bag & coerce & copy & count & depth & empty \\ - empty? & eq? & eval & every? & extract! & hash & insert! \\ - inspect & latex & less? & map & map! & member? & members \\ - more? & parts & pop! & push! & sample & size? & top \\ - \#? & ?=? & ?\~{}=? &&&&\\ +\begin{tabular}{lllll} +\cross{SKAGG}{any?} & +\cross{SKAGG}{bag} & +\cross{SKAGG}{coerce} & +\cross{SKAGG}{copy} & +\cross{SKAGG}{count} \\ +\cross{SKAGG}{depth} & +\cross{SKAGG}{empty} & +\cross{SKAGG}{empty?} & +\cross{SKAGG}{eq?} & +\cross{SKAGG}{eval} \\ +\cross{SKAGG}{every?} & +\cross{SKAGG}{extract!} & +\cross{SKAGG}{hash} & +\cross{SKAGG}{insert!} & +\cross{SKAGG}{inspect} \\ +\cross{SKAGG}{latex} & +\cross{SKAGG}{less?} & +\cross{SKAGG}{map} & +\cross{SKAGG}{map!} & +\cross{SKAGG}{member?} \\ +\cross{SKAGG}{members} & +\cross{SKAGG}{more?} & +\cross{SKAGG}{parts} & +\cross{SKAGG}{pop!} & +\cross{SKAGG}{push!} \\ +\cross{SKAGG}{sample} & +\cross{SKAGG}{size?} & +\cross{SKAGG}{top} & +\cross{SKAGG}{\#?} & +\cross{SKAGG}{?=?} \\ +\cross{SKAGG}{?\~{}=?} &&&& \end{tabular} -\cross{SKAGG}{any?} -\cross{SKAGG}{bag} -\cross{SKAGG}{coerce} -\cross{SKAGG}{copy} -\cross{SKAGG}{count} -\cross{SKAGG}{depth} -\cross{SKAGG}{empty} -\cross{SKAGG}{empty?} -\cross{SKAGG}{eq?} -\cross{SKAGG}{eval} -\cross{SKAGG}{every?} -\cross{SKAGG}{extract!} -\cross{SKAGG}{hash} -\cross{SKAGG}{insert!} -\cross{SKAGG}{inspect} -\cross{SKAGG}{latex} -\cross{SKAGG}{less?} -\cross{SKAGG}{map} -\cross{SKAGG}{map!} -\cross{SKAGG}{member?} -\cross{SKAGG}{members} -\cross{SKAGG}{more?} -\cross{SKAGG}{parts} -\cross{SKAGG}{pop!} -\cross{SKAGG}{push!} -\cross{SKAGG}{sample} -\cross{SKAGG}{size?} -\cross{SKAGG}{top} -\cross{SKAGG}{\#?} -\cross{SKAGG}{?=?} -\cross{SKAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} depth : % -> NonNegativeInteger @@ -5518,75 +5538,63 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - any? & children & child? & coerce & concat \\ - concat! & copy & count & cycleEntry & cycleLength\\ - cycleSplit! & cycleTail & cyclic? & distance & empty \\ - empty? & eq? & eval & every? & first \\ - hash & last & latex & leaf? & leaves \\ - less? & map & map! & member? & members \\ - more? & nodes & node? & parts & rest \\ - sample & second & setchildren! & setelt & setfirst! \\ - setlast! & setrest! & setvalue! & size? & split! \\ - tail & third & value & \#? & ?.last \\ - ?.rest & ?.first & ?.value & ?=? & ?\~{}=? \\ +\cross{URAGG}{any?} & +\cross{URAGG}{children} & +\cross{URAGG}{child?} & +\cross{URAGG}{coerce} & +\cross{URAGG}{concat} \\ +\cross{URAGG}{concat!} & +\cross{URAGG}{copy} & +\cross{URAGG}{count} & +\cross{URAGG}{cycleEntry} & +\cross{URAGG}{cycleLength} \\ +\cross{URAGG}{cycleSplit!} & +\cross{URAGG}{cycleTail} & +\cross{URAGG}{cyclic?} & +\cross{URAGG}{distance} & +\cross{URAGG}{empty} \\ +\cross{URAGG}{empty?} & +\cross{URAGG}{eq?} & +\cross{URAGG}{eval} & +\cross{URAGG}{every?} & +\cross{URAGG}{first} \\ +\cross{URAGG}{hash} & +\cross{URAGG}{last} & +\cross{URAGG}{latex} & +\cross{URAGG}{leaf?} & +\cross{URAGG}{leaves} \\ +\cross{URAGG}{less?} & +\cross{URAGG}{map} & +\cross{URAGG}{map!} & +\cross{URAGG}{member?} & +\cross{URAGG}{members} \\ +\cross{URAGG}{more?} & +\cross{URAGG}{nodes} & +\cross{URAGG}{node?} & +\cross{URAGG}{parts} & +\cross{URAGG}{rest} \\ +\cross{URAGG}{sample} & +\cross{URAGG}{second} & +\cross{URAGG}{setchildren!} & +\cross{URAGG}{setelt} & +\cross{URAGG}{setfirst!} \\ +\cross{URAGG}{setlast!} & +\cross{URAGG}{setrest!} & +\cross{URAGG}{setvalue!} & +\cross{URAGG}{size?} & +\cross{URAGG}{split!} \\ +\cross{URAGG}{tail} & +\cross{URAGG}{third} & +\cross{URAGG}{value} & +\cross{URAGG}{\#?} & +\cross{URAGG}{?.last} \\ +\cross{URAGG}{?.rest} & +\cross{URAGG}{?.first} & +\cross{URAGG}{?.value} & +\cross{URAGG}{?=?} & +\cross{URAGG}{?\~{}=?} \\ \end{tabular} -\cross{URAGG}{any?} -\cross{URAGG}{children} -\cross{URAGG}{child?} -\cross{URAGG}{coerce} -\cross{URAGG}{concat} -\cross{URAGG}{concat!} -\cross{URAGG}{copy} -\cross{URAGG}{count} -\cross{URAGG}{cycleEntry} -\cross{URAGG}{cycleLength} -\cross{URAGG}{cycleSplit!} -\cross{URAGG}{cycleTail} -\cross{URAGG}{cyclic?} -\cross{URAGG}{distance} -\cross{URAGG}{empty} -\cross{URAGG}{empty?} -\cross{URAGG}{eq?} -\cross{URAGG}{eval} -\cross{URAGG}{every?} -\cross{URAGG}{first} -\cross{URAGG}{hash} -\cross{URAGG}{last} -\cross{URAGG}{latex} -\cross{URAGG}{leaf?} -\cross{URAGG}{leaves} -\cross{URAGG}{less?} -\cross{URAGG}{map} -\cross{URAGG}{map!} -\cross{URAGG}{member?} -\cross{URAGG}{members} -\cross{URAGG}{more?} -\cross{URAGG}{nodes} -\cross{URAGG}{node?} -\cross{URAGG}{parts} -\cross{URAGG}{rest} -\cross{URAGG}{sample} -\cross{URAGG}{second} -\cross{URAGG}{setchildren!} -\cross{URAGG}{setelt} -\cross{URAGG}{setfirst!} -\cross{URAGG}{setlast!} -\cross{URAGG}{setrest!} -\cross{URAGG}{setvalue!} -\cross{URAGG}{size?} -\cross{URAGG}{split!} -\cross{URAGG}{tail} -\cross{URAGG}{third} -\cross{URAGG}{value} -\cross{URAGG}{\#?} -\cross{URAGG}{?.last} -\cross{URAGG}{?.rest} -\cross{URAGG}{?.first} -\cross{URAGG}{?.value} -\cross{URAGG}{?=?} -\cross{URAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} concat : (S,%) -> % @@ -5980,30 +5988,29 @@ \pagepic{ps/v102abeliangroup.ps}{ABELGRP}{0.75} {\bf See:}\\ +\pageto{LeftModule}{LMODULE} +\pageto{OrderedAbelianGroup}{OAGROUP} +\pageto{RightModule}{RMODULE} \pageto{Rng}{RNG} \pagefrom{CancellationAbelianMonoid}{CABMON} {\bf Exports:}\\ -\begin{tabular}{lllllll} - 0 & coerce & hash & latex & sample & subtractIfCan & zero?\\ - ?\~{}=? & ?*? & ?+? & ?-? & -? & ?=? & +\begin{tabular}{lllll} +\cross{ABELGRP}{0} & +\cross{ABELGRP}{coerce} & +\cross{ABELGRP}{hash} & +\cross{ABELGRP}{latex} & +\cross{ABELGRP}{sample} \\ +\cross{ABELGRP}{subtractIfCan} & +\cross{ABELGRP}{zero?} & +\cross{ABELGRP}{?\~{}=?} & +\cross{ABELGRP}{?*?} & +\cross{ABELGRP}{?+?} \\ +\cross{ABELGRP}{?-?} & +\cross{ABELGRP}{-?} & +\cross{ABELGRP}{?=?} && \end{tabular} -\cross{ABELGRP}{0} -\cross{ABELGRP}{coerce} -\cross{ABELGRP}{hash} -\cross{ABELGRP}{latex} -\cross{ABELGRP}{sample} -\cross{ABELGRP}{subtractIfCan} -\cross{ABELGRP}{zero?} -\cross{ABELGRP}{?\~{}=?} -\cross{ABELGRP}{?*?} -\cross{ABELGRP}{?+?} -\cross{ABELGRP}{?-?} -\cross{ABELGRP}{-?} -\cross{ABELGRP}{?=?} - - These are directly exported but not implemented: \begin{verbatim} -? : % -> % @@ -6128,55 +6135,46 @@ \pagefrom{DictionaryOperations}{DIOPS} {\bf Exports:}\\ -\begin{tabular}{lllllll} - any? & bag & coerce & construct & convert \\ - copy & count & dictionary & empty & empty? \\ - eq? & eval & every? & extract! & find \\ - hash & insert! & inspect & latex & less? \\ - map & map! & member? & members & more? \\ - parts & reduce & remove & remove! & removeDuplicates \\ - sample & select & select! & size? & \#? \\ - ?\~{}=? & ?=? &&&\\ +\begin{tabular}{lllll} +\cross{DIAGG}{any?} & +\cross{DIAGG}{bag} & +\cross{DIAGG}{coerce} & +\cross{DIAGG}{construct} & +\cross{DIAGG}{convert} \\ +\cross{DIAGG}{copy} & +\cross{DIAGG}{count} & +\cross{DIAGG}{dictionary} & +\cross{DIAGG}{empty} & +\cross{DIAGG}{empty?} \\ +\cross{DIAGG}{eq?} & +\cross{DIAGG}{eval} & +\cross{DIAGG}{every?} & +\cross{DIAGG}{extract!} & +\cross{DIAGG}{find} \\ +\cross{DIAGG}{hash} & +\cross{DIAGG}{insert!} & +\cross{DIAGG}{inspect} & +\cross{DIAGG}{latex} & +\cross{DIAGG}{less?} \\ +\cross{DIAGG}{map} & +\cross{DIAGG}{map!} & +\cross{DIAGG}{member?} & +\cross{DIAGG}{members} & +\cross{DIAGG}{more?} \\ +\cross{DIAGG}{parts} & +\cross{DIAGG}{reduce} & +\cross{DIAGG}{remove} & +\cross{DIAGG}{remove!} & +\cross{DIAGG}{removeDuplicates} \\ +\cross{DIAGG}{sample} & +\cross{DIAGG}{select} & +\cross{DIAGG}{select!} & +\cross{DIAGG}{size?} & +\cross{DIAGG}{\#?} \\ +\cross{DIAGG}{?\~{}=?} & +\cross{DIAGG}{?=?} &&& \end{tabular} -\cross{DIAGG}{any?} -\cross{DIAGG}{bag} -\cross{DIAGG}{coerce} -\cross{DIAGG}{construct} -\cross{DIAGG}{convert} -\cross{DIAGG}{copy} -\cross{DIAGG}{count} -\cross{DIAGG}{dictionary} -\cross{DIAGG}{empty} -\cross{DIAGG}{empty?} -\cross{DIAGG}{eq?} -\cross{DIAGG}{eval} -\cross{DIAGG}{every?} -\cross{DIAGG}{extract!} -\cross{DIAGG}{find} -\cross{DIAGG}{hash} -\cross{DIAGG}{insert!} -\cross{DIAGG}{inspect} -\cross{DIAGG}{latex} -\cross{DIAGG}{less?} -\cross{DIAGG}{map} -\cross{DIAGG}{map!} -\cross{DIAGG}{member?} -\cross{DIAGG}{members} -\cross{DIAGG}{more?} -\cross{DIAGG}{parts} -\cross{DIAGG}{reduce} -\cross{DIAGG}{remove} -\cross{DIAGG}{remove!} -\cross{DIAGG}{removeDuplicates} -\cross{DIAGG}{sample} -\cross{DIAGG}{select} -\cross{DIAGG}{select!} -\cross{DIAGG}{size?} -\cross{DIAGG}{\#?} -\cross{DIAGG}{?\~{}=?} -\cross{DIAGG}{?=?} - These are implemented by this category: \begin{verbatim} dictionary : List S -> % @@ -6349,65 +6347,54 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - any? & back & bag & bottom! & coerce \\ - copy & count & depth & dequeue & dequeue! \\ - empty & empty? & enqueue! & eq? & eval \\ - every? & extract! & extractBottom! & extractTop! & front \\ - hash & height & insert! & insertBottom! & insertTop! \\ - inspect & latex & length & less? & map \\ - map! & members & member? & more? & parts \\ - pop! & push! & reverse! & rotate! & sample \\ - size? & top & top! & \#? & ?=? \\ - ?\~{}=? &&&&\\ +\cross{DQAGG}{any?} & +\cross{DQAGG}{back} & +\cross{DQAGG}{bag} & +\cross{DQAGG}{bottom!} & +\cross{DQAGG}{coerce} \\ +\cross{DQAGG}{copy} & +\cross{DQAGG}{count} & +\cross{DQAGG}{depth} & +\cross{DQAGG}{dequeue} & +\cross{DQAGG}{dequeue!} \\ +\cross{DQAGG}{empty} & +\cross{DQAGG}{empty?} & +\cross{DQAGG}{enqueue!} & +\cross{DQAGG}{eq?} & +\cross{DQAGG}{eval} \\ +\cross{DQAGG}{every?} & +\cross{DQAGG}{extract!} & +\cross{DQAGG}{extractBottom!} & +\cross{DQAGG}{extractTop!} & +\cross{DQAGG}{front} \\ +\cross{DQAGG}{hash} & +\cross{DQAGG}{height} & +\cross{DQAGG}{insert!} & +\cross{DQAGG}{insertBottom!} & +\cross{DQAGG}{insertTop!} \\ +\cross{DQAGG}{inspect} & +\cross{DQAGG}{latex} & +\cross{DQAGG}{length} & +\cross{DQAGG}{less?} & +\cross{DQAGG}{map} \\ +\cross{DQAGG}{map!} & +\cross{DQAGG}{members} & +\cross{DQAGG}{member?} & +\cross{DQAGG}{more?} & +\cross{DQAGG}{parts} \\ +\cross{DQAGG}{pop!} & +\cross{DQAGG}{push!} & +\cross{DQAGG}{reverse!} & +\cross{DQAGG}{rotate!} & +\cross{DQAGG}{sample} \\ +\cross{DQAGG}{size?} & +\cross{DQAGG}{top} & +\cross{DQAGG}{top!} & +\cross{DQAGG}{\#?} & +\cross{DQAGG}{?=?} \\ +\cross{DQAGG}{?\~{}=?} &&&& \end{tabular} -\cross{DQAGG}{any?} -\cross{DQAGG}{back} -\cross{DQAGG}{bag} -\cross{DQAGG}{bottom!} -\cross{DQAGG}{coerce} -\cross{DQAGG}{copy} -\cross{DQAGG}{count} -\cross{DQAGG}{depth} -\cross{DQAGG}{dequeue} -\cross{DQAGG}{dequeue!} -\cross{DQAGG}{empty} -\cross{DQAGG}{empty?} -\cross{DQAGG}{enqueue!} -\cross{DQAGG}{eq?} -\cross{DQAGG}{eval} -\cross{DQAGG}{every?} -\cross{DQAGG}{extract!} -\cross{DQAGG}{extractBottom!} -\cross{DQAGG}{extractTop!} -\cross{DQAGG}{front} -\cross{DQAGG}{hash} -\cross{DQAGG}{height} -\cross{DQAGG}{insert!} -\cross{DQAGG}{insertBottom!} -\cross{DQAGG}{insertTop!} -\cross{DQAGG}{inspect} -\cross{DQAGG}{latex} -\cross{DQAGG}{length} -\cross{DQAGG}{less?} -\cross{DQAGG}{map} -\cross{DQAGG}{map!} -\cross{DQAGG}{members} -\cross{DQAGG}{member?} -\cross{DQAGG}{more?} -\cross{DQAGG}{parts} -\cross{DQAGG}{pop!} -\cross{DQAGG}{push!} -\cross{DQAGG}{reverse!} -\cross{DQAGG}{rotate!} -\cross{DQAGG}{sample} -\cross{DQAGG}{size?} -\cross{DQAGG}{top} -\cross{DQAGG}{top!} -\cross{DQAGG}{\#?} -\cross{DQAGG}{?=?} -\cross{DQAGG}{?\~{}=?} - These are directly exported but not implemented: \begin{verbatim} bottom! : % -> S @@ -6582,75 +6569,63 @@ {\bf Exports:}\\ \begin{tabular}{lllll} - any? & coerce & concat & concat! & construct \\ - copy & convert & count & delete & delete! \\ - elt & empty & empty? & entries & entry? \\ - eval & every? & eq? & fill! & find \\ - first & hash & index? & indices & insert \\ - insert! & latex & less? & map & map! \\ - maxIndex & member... [truncated message content] |
From: <gi...@ax...> - 2008-09-21 16:14:21
|
books/bookvol10.2.pamphlet | 5301 +++++++++++++--------- books/ps/v102bimodule.ps | 636 +++ books/ps/v102group.ps | 791 ++++ books/ps/v102leftmodule.ps | 519 +++ books/ps/v102orderedabeliangroup.ps | 493 ++ books/ps/v102orderedabelianmonoidsup.ps | 652 +++ books/ps/v102orderedcancellationabelianmonoid.ps | 606 +++ books/ps/v102orderedring.ps | 832 ++++ books/ps/v102rightmodule.ps | 427 ++ books/ps/v102ring.ps | 744 +++ src/algebra/catdef.spad.pamphlet | 566 --- 11 files changed, 8943 insertions(+), 2624 deletions(-) New commits: commit 3d9ac8e5234807a8fbe3beafb68959182872ef55 Author: Tim Daly <da...@ax...> Date: Mon Jul 28 07:08:09 2008 -0400 20080920 tpd books/ps/v102bimodule.ps diagram BMODULE 20080920 tpd books/ps/v102group.ps diagram GROUP 20080920 tpd books/ps/v102leftmodule.ps diagram LMODULE 20080920 tpd books/ps/v102orderedabeliangroup.ps diagram OAGROUP 20080920 tpd books/ps/v102orderedabelianmonoidsup.ps OAMONS 20080920 tpd books/ps/v102orderedcancellationabelianmonoid.ps OCAMON 20080920 tpd books/ps/v102orderedring.ps diagram ORDRING 20080920 tpd books/ps/v102rightmodule.ps diagram RMODULE 20080920 tpd books/ps/v102ring.ps diagram RING 20080920 tpd src/algebra/catdef.spad remove more categories 20080920 tpd books/bookvol10.2 add more categories |
From: <gi...@ax...> - 2008-09-20 14:05:42
|
books/bookvol10.2.pamphlet | 3678 ++++++++++++++++++++++++----- books/ps/v102abeliangroup.ps | 632 +++++ books/ps/v102abelianmonoid.ps | 678 ++++++ books/ps/v102cancellationabelianmonoid.ps | 729 ++++++ books/ps/v102finitesetaggregate.ps | 636 +++++ books/ps/v102monoid.ps | 678 ++++++ books/ps/v102multisetaggregate.ps | 540 +++++ books/ps/v102orderedabelianmonoid.ps | 494 ++++ books/ps/v102orderedabeliansemigroup.ps | 795 +++++++ books/ps/v102orderedfinite.ps | 606 +++++ books/ps/v102orderedmonoid.ps | 800 +++++++ books/ps/v102orderedmultisetaggregate.ps | 708 ++++++ books/ps/v102rng.ps | 653 +++++ books/ps/v102setaggregate.ps | 760 ++++++ books/ps/v102stepthrough.ps | 499 ++++ changelog | 16 + src/algebra/catdef.spad.pamphlet | 847 ------- 17 files changed, 12367 insertions(+), 1382 deletions(-) New commits: commit 53d317b9cbd45a5e6aff64939aa3a6fc114ff41c Author: Tim Daly <da...@ax...> Date: Sun Jul 27 13:31:22 2008 -0400 20080919 tpd books/ps/v102stepthrough.ps diagram STEP 20080919 tpd books/ps/v102setaggregate.ps diagram SETAGG 20080919 tpd books/ps/v102rng.ps diagram RNG 20080919 tpd books/ps/v102orderedmultisetaggregate.ps diagram OMSAGG 20080919 tpd books/ps/v102orderedmonoid.ps diagram ORDMON 20080919 tpd books/ps/v102orderedfinite.ps diagram ORDFIN 20080919 tpd books/ps/v102orderedabeliansemigroup.ps diagram OASGP 20080919 tpd books/ps/v102orderedabelianmonoid.ps diagram OAMON 20080919 tpd books/ps/v102multisetaggregate.ps diagram MSETAGG 20080919 tpd books/ps/v102monoid.ps diagram MONOID 20080919 tpd books/ps/v102finitesetaggregate.ps diagram FINITE 20080919 tpd books/ps/v102cancellationabelianmonoid.ps diagram CABMON 20080919 tpd books/ps/v102abelianmonoid.ps diagram ABELMON 20080919 tpd books/ps/v102abeliangroup.ps diagram ABELSG 20080919 tpd src/algebra/catdef.spad remove more categories 20080919 tpd books/bookvol10.2 add more categories |
From: <da...@us...> - 2008-09-20 13:16:27
|
Revision: 978 http://axiom.svn.sourceforge.net/axiom/?rev=978&view=rev Author: daly Date: 2008-09-20 13:16:15 +0000 (Sat, 20 Sep 2008) Log Message: ----------- 20080919 tpd books/ps/v102stepthrough.ps diagram STEP 20080919 tpd books/ps/v102setaggregate.ps diagram SETAGG 20080919 tpd books/ps/v102rng.ps diagram RNG 20080919 tpd books/ps/v102orderedmultisetaggregate.ps diagram OMSAGG 20080919 tpd books/ps/v102orderedmonoid.ps diagram ORDMON 20080919 tpd books/ps/v102orderedfinite.ps diagram ORDFIN 20080919 tpd books/ps/v102orderedabeliansemigroup.ps diagram OASGP 20080919 tpd books/ps/v102orderedabelianmonoid.ps diagram OAMON 20080919 tpd books/ps/v102multisetaggregate.ps diagram MSETAGG 20080919 tpd books/ps/v102monoid.ps diagram MONOID 20080919 tpd books/ps/v102finitesetaggregate.ps diagram FINITE 20080919 tpd books/ps/v102cancellationabelianmonoid.ps diagram CABMON 20080919 tpd books/ps/v102abelianmonoid.ps diagram ABELMON 20080919 tpd books/ps/v102abeliangroup.ps diagram ABELSG 20080919 tpd src/algebra/catdef.spad remove more categories 20080919 tpd books/bookvol10.2 add more categories Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/catdef.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102abeliangroup.ps trunk/axiom/books/ps/v102abelianmonoid.ps trunk/axiom/books/ps/v102cancellationabelianmonoid.ps trunk/axiom/books/ps/v102finitesetaggregate.ps trunk/axiom/books/ps/v102monoid.ps trunk/axiom/books/ps/v102multisetaggregate.ps trunk/axiom/books/ps/v102orderedabelianmonoid.ps trunk/axiom/books/ps/v102orderedabeliansemigroup.ps trunk/axiom/books/ps/v102orderedfinite.ps trunk/axiom/books/ps/v102orderedmonoid.ps trunk/axiom/books/ps/v102orderedmultisetaggregate.ps trunk/axiom/books/ps/v102rng.ps trunk/axiom/books/ps/v102setaggregate.ps trunk/axiom/books/ps/v102stepthrough.ps Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-19 07:21:15 UTC (rev 977) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-20 13:16:15 UTC (rev 978) @@ -37,8 +37,8 @@ %% %% pagepic adds an image and an index entry %% -\newcommand{\pagepic}[2]{% e.g. \pagepic{pathandfile}{abb} -\includegraphics{#1}% +\newcommand{\pagepic}[3]{% e.g. \pagepic{pathandfile}{abb}{scale} +\includegraphics[scale=#3]{#1}% \index{images!#2}} %% %% pageto is a forward link to a referenced page @@ -290,9 +290,10 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BasicType}{BASTYPE} -\pagepic{ps/v102basictype.ps}{BASTYPE} +\pagepic{ps/v102basictype.ps}{BASTYPE}{1.00} {\bf See:}\\ +\pageto{SetCategory}{SETCAT} \pagefrom{Category}{CATEGORY} {\bf Exports:}\\ @@ -359,9 +360,10 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{CoercibleTo}{KOERCE} -\pagepic{ps/v102koerce.ps}{KOERCE} +\pagepic{ps/v102koerce.ps}{KOERCE}{1.00} {\bf See:}\\ +\pageto{SetCategory}{SETCAT} \pagefrom{Category}{CATEGORY} {\bf Exports:} @@ -422,7 +424,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{ConvertibleTo}{KONVERT} -\pagepic{ps/v102konvert.ps}{KONVERT} +\pagepic{ps/v102konvert.ps}{KONVERT}{1.00} {\bf See:}\\ \pageto{Collection}{CLAGG} @@ -542,9 +544,10 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Eltable}{ELTAB} -\pagepic{ps/v102eltab.ps}{ELTAB} +\pagepic{ps/v102eltab.ps}{ELTAB}{1.00} {\bf See:}\\ +\pageto{EltableAggregate}{ELTAGG} \pagefrom{Category}{CATEGORY} {\bf Exports:} @@ -610,7 +613,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{RetractableTo}{RETRACT} -\pagepic{ps/v102retractableto.ps}{RETRACT} +\pagepic{ps/v102retractableto.ps}{RETRACT}{1.00} {\bf See:}\\ \pagefrom{Category}{CATEGORY} @@ -718,7 +721,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Type}{TYPE} -\pagepic{ps/v102type.ps}{TYPE} +\pagepic{ps/v102type.ps}{TYPE}{1.00} {\bf See:}\\ \pageto{Aggregate}{AGG} @@ -759,7 +762,7 @@ \chapter{Category Layer 2} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Aggregate}{AGG} -\pagepic{ps/v102agg.ps}{AGG} +\pagepic{ps/v102agg.ps}{AGG}{1.00} {\bf See:}\\ \pageto{HomogeneousAggregate}{HOAGG} @@ -871,9 +874,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{EltableAggregate}{ELTAGG} -%\pagepic{ps/v102eltableaggregate.ps}{ELTAGG} -\includegraphics[scale=0.75]{ps/v102eltableaggregate.ps} -\index{images!STAGG} +\pagepic{ps/v102eltableaggregate.ps}{ELTAGG}{0.75} {\bf See:}\\ \pageto{IndexedAggregate}{IXAGG} @@ -987,7 +988,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{SetCategory}{SETCAT} -\pagepic{ps/v102setcategory.ps}{SETCAT} +\pagepic{ps/v102setcategory.ps}{SETCAT}{1.00} {\bf See:}\\ \pageto{AbelianSemiGroup}{ABELSG} @@ -995,6 +996,10 @@ \pageto{HomogeneousAggregate}{HOAGG} \pageto{OrderedSet}{ORDSET} \pageto{SemiGroup}{SGROUP} +\pageto{SetAggregate}{SETAGG} +\pageto{StepThrough}{STEP} +\pagefrom{BasicType}{BASTYPE} +\pagefrom{CoercibleTo}{KOERCE} {\bf Exports:}\\ \begin{tabular}{lllll} @@ -1094,9 +1099,10 @@ \chapter{Category Layer 3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{AbelianSemiGroup}{ABELSG} -\pagepic{ps/v102abeliansemigroup.ps}{ABELSG} +\pagepic{ps/v102abeliansemigroup.ps}{ABELSG}{1.00} {\bf See:}\\ +\pageto{AbelianMonoid}{ABELMON} \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ @@ -1212,9 +1218,10 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Finite}{FINITE} -\pagepic{ps/v102finite.ps}{FINITE} +\pagepic{ps/v102finite.ps}{FINITE}{1.00} {\bf See:}\\ +\pageto{OrderedFinite}{ORDFIN} \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ @@ -1328,7 +1335,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{HomogeneousAggregate}{HOAGG} -\pagepic{ps/v102homogeneousaggregate.ps}{HOAGG} +\pagepic{ps/v102homogeneousaggregate.ps}{HOAGG}{1.00} {\bf See:}\\ \pageto{BagAggregate}{BGAGG} @@ -1420,7 +1427,7 @@ if S has EVALAB S and S has SETCAT \end{verbatim} -These exports come from SetCategory: +These exports come from SetCategory(): \begin{verbatim} hash : % -> SingleInteger if S has SETCAT ?~=? : (%,%) -> Boolean if S has SETCAT @@ -1554,15 +1561,18 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{OrderedSet}{ORDSET} -\pagepic{ps/v102orderedset.ps}{ORDSET} +\pagepic{ps/v102orderedset.ps}{ORDSET}{1.00} {\bf See:}\\ +\pageto{OrderedAbelianSemiGroup}{OASGP} +\pageto{OrderedFinite}{ORDFIN} +\pageto{OrderedMonoid}{ORDMON} \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ \begin{tabular}{llllll} - coerce & hash & latex & max & min & ?<?\\ - ?<=? & ?=? & ?>? & ?>=? & ?\~{}=? &\\ + coerce & hash & latex & max & min & ?$<$?\\ + ?$<=$? & ?=? & ?$>$? & ?$>=$? & ?\~{}=? &\\ \end{tabular} \cross{ORDSET}{coerce} @@ -1570,11 +1580,11 @@ \cross{ORDSET}{latex} \cross{ORDSET}{max} \cross{ORDSET}{min} -\cross{ORDSET}{?<?} -\cross{ORDSET}{?<=?} +\cross{ORDSET}{?$<$?} +\cross{ORDSET}{?$<=$?} \cross{ORDSET}{?=?} -\cross{ORDSET}{?>?} -\cross{ORDSET}{?>=?} +\cross{ORDSET}{?$>$?} +\cross{ORDSET}{?$>=$?} \cross{ORDSET}{?\~{}=?} These are directly exported but not implemented: @@ -1616,7 +1626,6 @@ ++ pair of elements \spad{(a,b)} ++ exactly one of the following relations holds \spad{a<b or a=b or b<a} ++ and the relation is transitive, i.e. \spad{a<b and b<c => a<c}. - OrderedSet(): Category == SetCategory with --operations "<": (%,%) -> Boolean @@ -1688,9 +1697,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{SemiGroup}{SGROUP} -%\pagepic{ps/v102semigroup.ps}{SGROUP} -\includegraphics[scale=0.75]{ps/v102semigroup.ps} -\index{images!SGROUP} +\pagepic{ps/v102semigroup.ps}{SGROUP}{0.75} A Semigroup is defined as a set $S$ with a binary multiplicative operator ``*''. A Semigroup $G(S,*)$ is: @@ -1701,6 +1708,8 @@ \end{itemize} {\bf See:}\\ +\pageto{Monoid}{MONOID} +\pageto{Rng}{RNG} \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ @@ -1820,10 +1829,256 @@ } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{StepThrough}{STEP} +\pagepic{ps/v102stepthrough.ps}{STEP}{1.00} + +{\bf See:}\\ +\pagefrom{SetCategory}{SETCAT} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + coerce & hash & init & latex & nextItem & ?=? & ?\~{}=? +\end{tabular} + +\cross{STEP}{coerce} +\cross{STEP}{hash} +\cross{STEP}{init} +\cross{STEP}{latex} +\cross{STEP}{?=?} +\cross{STEP}{?~=?} +\cross{STEP}{nextItem} + +These are directly exported but not implemented: +\begin{verbatim} + init : () -> % + nextItem : % -> Union(%,"failed") +\end{verbatim} + +These exports come from SetCategory(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category STEP StepThrough>>= +)abbrev category STEP StepThrough +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A class of objects which can be 'stepped through'. +++ Repeated applications of \spadfun{nextItem} is guaranteed never to +++ return duplicate items and only return "failed" after exhausting +++ all elements of the domain. +++ This assumes that the sequence starts with \spad{init()}. +++ For infinite domains, repeated application +++ of \spadfun{nextItem} is not required to reach all possible domain elements +++ starting from any initial element. +++ +++ Conditional attributes: +++ infinite\tab{15}repeated \spad{nextItem}'s are never "failed". +StepThrough(): Category == SetCategory with + --operations + init: constant -> % + ++ init() chooses an initial object for stepping. + nextItem: % -> Union(%,"failed") + ++ nextItem(x) returns the next item, or "failed" if domain is exhausted. + +@ +<<STEP.dotabb>>= +"STEP" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STEP"]; +"STEP" -> "SETCAT" + +@ +<<STEP.dotfull>>= +"StepThrough()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STEP"]; +"StepThrough()" -> "SetCategory()" + +@ +<<STEP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"StepThrough()" [color=lightblue]; +"StepThrough()" -> "SetCategory()" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ \chapter{Category Layer 4} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{AbelianMonoid}{ABELMON} +\pagepic{ps/v102abelianmonoid.ps}{ABELMON}{0.75} + +{\bf See:}\\ +\pageto{CancellationAbelianMonoid}{CABMON} +\pageto{OrderedAbelianMonoid}{OAMON} +\pageto{OrderedAbelianSemiGroup}{OASGP} +\pagefrom{AbelianSemiGroup}{ABELSG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + 0 & coerce & hash & latex & sample\\ + zero? & ?*? & ?+? & ?=? & ?\~{}=? +\end{tabular} + +\cross{ABELMON}{0} +\cross{ABELMON}{coerce} +\cross{ABELMON}{hash} +\cross{ABELMON}{latex} +\cross{ABELMON}{sample} +\cross{ABELMON}{zero?} +\cross{ABELMON}{?*?} +\cross{ABELMON}{?+?} +\cross{ABELMON}{?=?} +\cross{ABELMON}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + 0 : () -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + sample : () -> % + zero? : % -> Boolean + ?*? : (PositiveInteger,%) -> % + ?*? : (NonNegativeInteger,%) -> % +\end{verbatim} + +These exports come from AbelianSemiGroup(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?+? : (%,%) -> % +\end{verbatim} + +<<category ABELMON AbelianMonoid>>= +)abbrev category ABELMON AbelianMonoid +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The class of multiplicative monoids, i.e. semigroups with an +++ additive identity element. +++ +++ Axioms: +++ \spad{leftIdentity("+":(%,%)->%,0)}\tab{30}\spad{ 0+x=x } +++ \spad{rightIdentity("+":(%,%)->%,0)}\tab{30}\spad{ x+0=x } +-- following domain must be compiled with subsumption disabled +-- define SourceLevelSubset to be EQUAL +AbelianMonoid(): Category == AbelianSemiGroup with + --operations + 0: constant -> % + ++ 0 is the additive identity element. + sample: constant -> % + ++ sample yields a value of type % + zero?: % -> Boolean + ++ zero?(x) tests if x is equal to 0. + "*": (NonNegativeInteger,%) -> % + ++ n * x is left-multiplication by a non negative integer + add + import RepeatedDoubling(%) + zero? x == x = 0 + n:PositiveInteger * x:% == (n::NonNegativeInteger) * x + sample() == 0 + if not (% has Ring) then + n:NonNegativeInteger * x:% == + zero? n => 0 + double(n pretend PositiveInteger,x) + +@ +<<ABELMON.dotabb>>= +"ABELMON" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELMON"]; +"ABELMON" -> "ABELSG" + +@ +<<ABELMON.dotfull>>= +"AbelianMonoid()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELMON"]; +"AbelianMonoid()" -> "AbelianSemiGroup()" + +@ +<<ABELMON.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"AbelianMonoid()" [color=lightblue]; +"AbelianMonoid()" -> "AbelianSemiGroup()" + +"AbelianSemiGroup()" [color=lightblue]; +"AbelianSemiGroup()" -> "SetCategory()" +"AbelianSemiGroup()" -> "RepeatedDoubling(AbelianSemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedDoubling(AbelianSemiGroup)" [color="#00EE00"]; +"RepeatedDoubling(AbelianSemiGroup)" -> "RepeatedDoubling(a:SetCategory)" + +"RepeatedDoubling(a:SetCategory)" [color="#00EE00"]; +"RepeatedDoubling(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BagAggregate}{BGAGG} -\pagepic{ps/v102bagaggregate.ps}{BGAGG} +\pagepic{ps/v102bagaggregate.ps}{BGAGG}{1.00} {\bf See:}\\ \pageto{DictionaryOperations}{DIOPS} @@ -1880,7 +2135,7 @@ bag : List S -> % \end{verbatim} -These exports come from HomogeneousAggregate: +These exports come from HomogeneousAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -1993,11 +2248,12 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Collection}{CLAGG} -\pagepic{ps/v102collection.ps}{CLAGG} +\pagepic{ps/v102collection.ps}{CLAGG}{1.00} {\bf See:}\\ \pageto{DictionaryOperations}{DIOPS} \pageto{LinearAggregate}{LNAGG} +\pageto{SetAggregate}{SETAGG} \pagefrom{ConvertibleTo}{KONVERT} \pagefrom{HomogeneousAggregate}{HOAGG} @@ -2066,7 +2322,7 @@ #? : % -> NonNegativeInteger if $ has finiteAggregate \end{verbatim} -These exports come from HomogeneousAggregate(a:Type): +These exports come from HomogeneousAggregate(S:Type): \begin{verbatim} coerce : % -> OutputForm if S has SETCAT copy : % -> % @@ -2091,16 +2347,16 @@ map! : ((S -> S),%) -> % if $ has shallowlyMutable member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate - sample : () -> % members : % -> List S if $ has finiteAggregate more? : (%,NonNegativeInteger) -> Boolean parts : % -> List S if $ has finiteAggregate + sample : () -> % size? : (%,NonNegativeInteger) -> Boolean ?=? : (%,%) -> Boolean if S has SETCAT ?~=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} -These exports come from ConvertibleTo(a:Type): +These exports come from ConvertibleTo(S:Type): \begin{verbatim} convert : % -> InputForm if S has KONVERT INFORM \end{verbatim} @@ -2241,7 +2497,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{IndexedAggregate}{IXAGG} -\pagepic{ps/v102indexedaggregate.ps}{IXAGG} +\pagepic{ps/v102indexedaggregate.ps}{IXAGG}{1.00} {\bf See:}\\ \pageto{LinearAggregate}{LNAGG} @@ -2318,7 +2574,7 @@ swap! : (%,Index,Index) -> Void if $ has shallowlyMutable \end{verbatim} -These exports come from HomogeneousAggregate(a:Type): +These exports come from HomogeneousAggregate(Entry:Type): \begin{verbatim} any? : ((Entry -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -2356,7 +2612,7 @@ ?=? : (%,%) -> Boolean if Entry has SETCAT \end{verbatim} -These exports come from EltableAggregate(a:SetCategory,b:Type): +These exports come from EltableAggregate(Index:SetCategory,Entry:Type): \begin{verbatim} qelt : (%,Index) -> Entry qsetelt! : (%,Index,Entry) -> Entry if $ has shallowlyMutable @@ -2510,8 +2766,282 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Monoid}{MONOID} +\pagepic{ps/v102monoid.ps}{MONOID}{0.75} + +{\bf See:}\\ +\pageto{OrderedMonoid}{ORDMON} +\pagefrom{SemiGroup}{SGROUP} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + 1 & coerce & hash & latex & one?\\ + recip & sample & ?*? & ?=? & ?\~{}=?\\ + ?**? & ?\^{}? & ?\^{}? &&\\ +\end{tabular} + +\cross{MONOID}{1} +\cross{MONOID}{coerce} +\cross{MONOID}{hash} +\cross{MONOID}{latex} +\cross{MONOID}{one?} +\cross{MONOID}{recip} +\cross{MONOID}{sample} +\cross{MONOID}{?*?} +\cross{MONOID}{?=?} +\cross{MONOID}{?\~{}=?} +\cross{MONOID}{?**?} +\cross{MONOID}{?\^{}?} + + +These are directly exported but not implemented: +\begin{verbatim} + 1 : () -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,NonNegativeInteger) -> % +\end{verbatim} + +These exports come from SemiGroup(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?*? : (%,%) -> % + ?**? : (%,PositiveInteger) -> % + ?^? : (%,PositiveInteger) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category MONOID Monoid>>= +)abbrev category MONOID Monoid +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The class of multiplicative monoids, i.e. semigroups with a +++ multiplicative identity element. +++ +++ Axioms: +++ \spad{leftIdentity("*":(%,%)->%,1)}\tab{30}\spad{1*x=x} +++ \spad{rightIdentity("*":(%,%)->%,1)}\tab{30}\spad{x*1=x} +++ +++ Conditional attributes: +++ unitsKnown\tab{15}\spadfun{recip} only returns "failed" on non-units +Monoid(): Category == SemiGroup with + 1: constant -> % + ++ 1 is the multiplicative identity. + sample: constant -> % + ++ sample yields a value of type % + one?: % -> Boolean + ++ one?(x) tests if x is equal to 1. + "**": (%,NonNegativeInteger) -> % + ++ x**n returns the repeated product + ++ of x n times, i.e. exponentiation. + "^" : (%,NonNegativeInteger) -> % + ++ x^n returns the repeated product + ++ of x n times, i.e. exponentiation. + recip: % -> Union(%,"failed") + ++ recip(x) tries to compute the multiplicative inverse for x + ++ or "failed" if it cannot find the inverse (see unitsKnown). + add + import RepeatedSquaring(%) + _^(x:%, n:NonNegativeInteger):% == x ** n + one? x == x = 1 + sample() == 1 + recip x == + (x = 1) => x + "failed" + x:% ** n:NonNegativeInteger == + zero? n => 1 + expt(x,n pretend PositiveInteger) + +@ +<<MONOID.dotabb>>= +"MONOID" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MONOID"]; +"MONOID" -> "SGROUP" + +@ +<<MONOID.dotfull>>= +"Monoid()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MONOID"]; +"Monoid()" -> "SemiGroup()" + +@ +<<MONOID.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SetCategory()" +"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedSquaring(SemiGroup)" [color="#00EE00"]; +"RepeatedSquaring(SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{OrderedFinite}{ORDFIN} +\pagepic{ps/v102orderedfinite.ps}{ORDFIN}{1.00} + +{\bf See:}\\ +\pagefrom{Finite}{FINITE} +\pagefrom{OrderedSet}{ORDSET} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + coerce & hash & index & latex & lookup \\ + max & min & random & size & ?\~{}=? \\ + ?$<$? & ?$<=$? & ?=? & ?$>$? & ?$>=$? \\ +\end{tabular} + +\cross{ORDFIN}{coerce} +\cross{ORDFIN}{hash} +\cross{ORDFIN}{index} +\cross{ORDFIN}{latex} +\cross{ORDFIN}{lookup} +\cross{ORDFIN}{max} +\cross{ORDFIN}{min} +\cross{ORDFIN}{random} +\cross{ORDFIN}{size} +\cross{ORDFIN}{?\~{}=?} +\cross{ORDFIN}{?$<$?} +\cross{ORDFIN}{?$<=$?} +\cross{ORDFIN}{?=?} +\cross{ORDFIN}{?$>$?} +\cross{ORDFIN}{?$>=$?} + +These exports come from OrderedSet(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + max : (%,%) -> % + min : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?<? : (%,%) -> Boolean + ?<=? : (%,%) -> Boolean + ?>? : (%,%) -> Boolean + ?>=? : (%,%) -> Boolean +\end{verbatim} + +These exports come from Finite(): +\begin{verbatim} + index : PositiveInteger -> % + lookup : % -> PositiveInteger + random : () -> % + size : () -> NonNegativeInteger +\end{verbatim} + +<<category ORDFIN OrderedFinite>>= +)abbrev category ORDFIN OrderedFinite +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Ordered finite sets. + +OrderedFinite(): Category == Join(OrderedSet, Finite) + +@ +<<ORDFIN.dotabb>>= +"ORDFIN" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDFIN"]; +"ORDFIN" -> "ORDSET" +"ORDFIN" -> "FINITE" + +@ +<<ORDFIN.dotfull>>= +"OrderedFinite()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDFIN"]; +"OrderedFinite()" -> "OrderedSet()" +"OrderedFinite()" -> "Finite()" + +@ +<<ORDFIN.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"OrderedFinite()" [color=lightblue]; +"OrderedFinite()" -> "OrderedSet()" +"OrderedFinite()" -> "Finite()" + +"Finite()" [color=lightblue]; +"Finite()" -> "SetCategory()" + +"OrderedSet()" [color=lightblue]; +"OrderedSet()" -> "SetCategory()" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{RecursiveAggregate}{RCAGG} -\pagepic{ps/v102recursiveaggregate.ps}{RCAGG} +\pagepic{ps/v102recursiveaggregate.ps}{RCAGG}{1.00} {\bf See:}\\ \pageto{BinaryRecursiveAggregate}{BRAGG} @@ -2587,7 +3117,7 @@ ?.value : (%,value) -> S \end{verbatim} -These exports come from HomogeneousAggregate(a:Type): +These exports come from HomogeneousAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -2726,7 +3256,7 @@ \chapter{Category Layer 5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{BinaryRecursiveAggregate}{BRAGG} -\pagepic{ps/v102binaryrecursiveaggregate.ps}{BRAGG} +\pagepic{ps/v102binaryrecursiveaggregate.ps}{BRAGG}{1.00} {\bf See:}\\ \pagefrom{RecursiveAggregate}{RCAGG} @@ -2819,7 +3349,7 @@ ?.left : (%,left) -> % \end{verbatim} -These exports come from RecursiveAggregate(a:Type) +These exports come from RecursiveAggregate(S:Type) \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -3011,8 +3541,134 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CancellationAbelianMonoid}{CABMON} +\pagepic{ps/v102cancellationabelianmonoid.ps}{CABMON}{0.75} + +{\bf See:}\\ +\pageto{AbelianGroup}{ABELGRP} +\pagefrom{AbelianMonoid}{ABELMON} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + 0 & coerce & hash & latex & sample\\ + subtractIfCan & zero? & ?\~{}=? & ?*? & ?+?\\ + ?=?&&&& +\end{tabular} + +\cross{CABMON}{0} +\cross{CABMON}{coerce} +\cross{CABMON}{hash} +\cross{CABMON}{latex} +\cross{CABMON}{sample} +\cross{CABMON}{subtractIfCan} +\cross{CABMON}{zero?} +\cross{CABMON}{?\~{}=?} +\cross{CABMON}{?*?} +\cross{CABMON}{?+?} +\cross{CABMON}{?=?} + +These are directly exported but not implemented: +\begin{verbatim} + subtractIfCan : (%,%) -> Union(%,"failed") +\end{verbatim} + +These exports come from AbelianMonoid(): +\begin{verbatim} + 0 : () -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + sample : () -> % + zero? : % -> Boolean + ?*? : (NonNegativeInteger,%) -> % + ?*? : (PositiveInteger,%) -> % + ?~=? : (%,%) -> Boolean + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category CABMON CancellationAbelianMonoid>>= +)abbrev category CABMON CancellationAbelianMonoid +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: Davenport & Trager I +++ Description: +++ This is an \spadtype{AbelianMonoid} with the cancellation property, i.e. +++ \spad{ a+b = a+c => b=c }. +++ This is formalised by the partial subtraction operator, +++ which satisfies the axioms listed below: +++ +++ Axioms: +++ \spad{c = a+b <=> c-b = a} +CancellationAbelianMonoid(): Category == AbelianMonoid with + subtractIfCan: (%,%) -> Union(%,"failed") + ++ subtractIfCan(x, y) returns an element z such that \spad{z+y=x} + ++ or "failed" if no such element exists. + +@ +<<CABMON.dotabb>>= +"CABMON" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CABMON"]; +"CABMON" -> "ABELMON" + +@ +<<CABMON.dotfull>>= +"CancellationAbelianMonoid()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CABMON"]; +"CancellationAbelianMonoid()" -> "AbelianMonoid()" + +@ +<<CABMON.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"CancellationAbelianMonoid()" [color=lightblue]; +"CancellationAbelianMonoid()" -> "AbelianMonoid()" + +"AbelianMonoid()" [color=lightblue]; +"AbelianMonoid()" -> "AbelianSemiGroup()" + +"AbelianSemiGroup()" [color=lightblue]; +"AbelianSemiGroup()" -> "SetCategory()" +"AbelianSemiGroup()" -> "RepeatedDoubling(AbelianSemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedDoubling(AbelianSemiGroup)" [color="#00EE00"]; +"RepeatedDoubling(AbelianSemiGroup)" -> "RepeatedDoubling(a:SetCategory)" + +"RepeatedDoubling(a:SetCategory)" [color="#00EE00"]; +"RepeatedDoubling(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{DictionaryOperations}{DIOPS} -\pagepic{ps/v102dictionaryoperations.ps}{DIOPS} +\pagepic{ps/v102dictionaryoperations.ps}{DIOPS}{1.00} {\bf See:}\\ \pageto{Dictionary}{DIAGG} @@ -3085,7 +3741,7 @@ dictionary : () -> % \end{verbatim} -These exports come from BagAggregate(a:SetCategory): +These exports come from BagAggregate(S:SetCategory): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -3126,7 +3782,7 @@ ?~=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} -These exports come from Collection(a:SetCategory) +These exports come from Collection(S:SetCategory) \begin{verbatim} convert : % -> InputForm if S has KONVERT INFORM find : ((S -> Boolean),%) -> Union(S,"failed") @@ -3240,7 +3896,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{DoublyLinkedAggregate}{DLAGG} -\pagepic{ps/v102doublylinkedaggregate.ps}{DLAGG} +\pagepic{ps/v102doublylinkedaggregate.ps}{DLAGG}{1.00} {\bf See:}\\ \pagefrom{RecursiveAggregate}{RCAGG} @@ -3318,7 +3974,7 @@ tail : % -> % \end{verbatim} -These exports come from RecursiveAggregate(a:Type): +These exports come from RecursiveAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -3456,7 +4112,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{LinearAggregate}{LNAGG} -\pagepic{ps/v102linearaggregate.ps}{LNAGG} +\pagepic{ps/v102linearaggregate.ps}{LNAGG}{1.00} {\bf See:}\\ \pageto{ExtensibleLinearAggregate}{ELAGG} @@ -3557,7 +4213,7 @@ maxIndex : % -> Integer if Integer has ORDSET \end{verbatim} -These exports come from IndexedAggregate(a:SetCategory,b:Type) +These exports come from IndexedAggregate(Integer,S:Type) \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -3608,7 +4264,7 @@ ?=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} -These exports come from Collection(a:Type): +These exports come from Collection(S:Type): \begin{verbatim} construct : List S -> % convert : % -> InputForm if S has KONVERT INFORM @@ -3759,11 +4415,292 @@ } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{OrderedAbelianSemiGroup}{OASGP} +\pagepic{ps/v102orderedabeliansemigroup.ps}{OASGP}{0.75} + +{\bf See:}\\ +\pageto{OrderedAbelianMonoid}{OAMON} +\pagefrom{AbelianMonoid}{ABELMON} +\pagefrom{OrderedSet}{ORDSET} + +{\bf Exports:}\\ +\begin{tabular}{llllllll} + 0 & coerce & hash & latex & max & min & sample & zero?\\ + ?\~{}=? & ?*? & ?+? & ?$<$? & ?$<=$? & ?=? & ?$>$? & ?$>=$? +\end{tabular} + +\cross{OASGP}{0} +\cross{OASGP}{coerce} +\cross{OASGP}{hash} +\cross{OASGP}{latex} +\cross{OASGP}{max} +\cross{OASGP}{min} +\cross{OASGP}{sample} +\cross{OASGP}{zero?} +\cross{OASGP}{?\~{}=?} +\cross{OASGP}{?*?} +\cross{OASGP}{?+?} +\cross{OASGP}{?$<$?} +\cross{OASGP}{?$<=$?} +\cross{OASGP}{?=?} +\cross{OASGP}{?$>$?} +\cross{OASGP}{?$>=$?} + +These exports come from OrderedSet(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + max : (%,%) -> % + min : (%,%) -> % + ?<? : (%,%) -> Boolean + ?>? : (%,%) -> Boolean + ?<=? : (%,%) -> Boolean + ?>=? : (%,%) -> Boolean + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +These exports come from AbelianMonoid(): +\begin{verbatim} + 0 : () -> % + sample : () -> % + zero? : % -> Boolean + ?*? : (NonNegativeInteger,%) -> % + ?*? : (PositiveInteger,%) -> % + ?+? : (%,%) -> % +\end{verbatim} + +<<category OASGP OrderedAbelianSemiGroup>>= +)abbrev category OASGP OrderedAbelianSemiGroup +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Ordered sets which are also abelian semigroups, such that the addition +++ preserves the ordering. +++ \spad{ x < y => x+z < y+z} +OrderedAbelianSemiGroup(): Category == Join(OrderedSet, AbelianMonoid) + +@ +<<OASGP.dotabb>>= +"OASGP" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OASGP"]; +"OASGP" -> "ORDSET" +"OASGP" -> "ABELMON" + +@ +<<OASGP.dotfull>>= +"OrderedAbelianSemiGroup()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OASGP"]; +"OrderedAbelianSemiGroup()" -> "OrderedSet()" +"OrderedAbelianSemiGroup()" -> "AbelianMonoid()" + +@ +<<OASGP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"OrderedAbelianSemiGroup()" [color=lightblue]; +"OrderedAbelianSemiGroup()" -> "OrderedSet()" +"OrderedAbelianSemiGroup()" -> "AbelianMonoid()" + +"OrderedSet()" [color=lightblue]; +"OrderedSet()" -> "SetCategory()" + +"AbelianMonoid()" [color=lightblue]; +"AbelianMonoid()" -> "AbelianSemiGroup()" + +"AbelianSemiGroup()" [color=lightblue]; +"AbelianSemiGroup()" -> "SetCategory()" +"AbelianSemiGroup()" -> "RepeatedDoubling(AbelianSemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedDoubling(AbelianSemiGroup)" [color="#00EE00"]; +"RepeatedDoubling(AbelianSemiGroup)" -> "RepeatedDoubling(a:SetCategory)" + +"RepeatedDoubling(a:SetCategory)" [color="#00EE00"]; +"RepeatedDoubling(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; +} + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{OrderedMonoid}{ORDMON} +\pagepic{ps/v102orderedmonoid.ps}{ORDMON}{0.75} + +{\bf See:}\\ +\pagefrom{Monoid}{MONOID} +\pagefrom{OrderedSet}{ORDSET} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + 1 & coerce & hash & latex & max & min\\ + one? & recip & sample & ?*? & ?**? & ?$<$?\\ + ?$<=$? & ?=? & ?$>$? & ?$>=$? & ?\~{}=? & ?\^{}?\\ +\end{tabular} + +\cross{ORDMON}{1} +\cross{ORDMON}{coerce} +\cross{ORDMON}{hash} +\cross{ORDMON}{latex} +\cross{ORDMON}{max} +\cross{ORDMON}{min} +\cross{ORDMON}{one?} +\cross{ORDMON}{recip} +\cross{ORDMON}{sample} +\cross{ORDMON}{?*?} +\cross{ORDMON}{?**?} +\cross{ORDMON}{?$<$?} +\cross{ORDMON}{?$<=$?} +\cross{ORDMON}{?=?} +\cross{ORDMON}{?$>$?} +\cross{ORDMON}{?$>=$?} +\cross{ORDMON}{?\~{}=?} +\cross{ORDMON}{?\^{}?} + +These exports come from Monoid(): +\begin{verbatim} + 1 : () -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + one? : % -> Boolean + recip : % -> Union(%,"failed") + sample : () -> % + ?*? : (%,%) -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +These exports come from OrderedSet(): +\begin{verbatim} + max : (%,%) -> % + min : (%,%) -> % + ?<? : (%,%) -> Boolean + ?<=? : (%,%) -> Boolean + ?>? : (%,%) -> Boolean + ?>=? : (%,%) -> Boolean +\end{verbatim} + +<<category ORDMON OrderedMonoid>>= +)abbrev category ORDMON OrderedMonoid +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ Ordered sets which are also monoids, such that multiplication +++ preserves the ordering. +++ +++ Axioms: +++ \spad{x < y => x*z < y*z} +++ \spad{x < y => z*x < z*y} + +OrderedMonoid(): Category == Join(OrderedSet, Monoid) + +@ +<<ORDMON.dotabb>>= +"ORDMON" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; +"ORDMON" -> "ORDSET" +"ORDMON" -> "MONOID" + +@ +<<ORDMON.dotfull>>= +"OrderedMonoid()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; +"OrderedMonoid()" -> "OrderedSet()" +"OrderedMonoid()" -> "Monoid()" +@ +<<ORDMON.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"OrderedMonoid()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDMON"]; +"OrderedMonoid()" -> "OrderedSet()" +"OrderedMonoid()" -> "Monoid()" + +"OrderedSet()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ORDSET"]; +"OrderedSet()" -> "SetCategory()" + +"Monoid()" [color=lightblue]; +"Monoid()" -> "SemiGroup()" + +"SemiGroup()" [color=lightblue]; +"SemiGroup()" -> "SetCategory()" +"SemiGroup()" -> "RepeatedSquaring(SemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedSquaring(SemiGroup)" [color="#00EE00"]; +"RepeatedSquaring(SemiGroup)" -> "RepeatedSquaring(a:SetCategory)" + +"RepeatedSquaring(a:SetCategory)" [color="#00EE00"]; +"RepeatedSquaring(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; + +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{PriorityQueueAggregate}{PRQAGG} -\pagepic{ps/v102priorityqueueaggregate.ps}{PRQAGG} +\pagepic{ps/v102priorityqueueaggregate.ps}{PRQAGG}{1.00} {\bf See:}\\ +\pageto{OrderedMultisetAggregate}{OMSAGG} \pagefrom{BagAggregate}{BGAGG} {\bf Exports:}\\ @@ -3813,7 +4750,7 @@ merge! : (%,%) -> % \end{verbatim} -These exports come from PriorityQueueAggregate(a:Type): +These exports come from BagAggregate(S:OrderedSet): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -3930,7 +4867,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{QueueAggregate}{QUAGG} -\pagepic{ps/v102queueaggregate.ps}{QUAGG} +\pagepic{ps/v102queueaggregate.ps}{QUAGG}{1.00} {\bf See:}\\ \pageto{DequeueAggregate}{DQAGG} @@ -3989,7 +4926,7 @@ rotate! : % -> % \end{verbatim} -These exports come from BagAggregate(a:Type): +These exports come from BagAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -4112,8 +5049,296 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{SetAggregate}{SETAGG} +\pagepic{ps/v102setaggregate.ps}{SETAGG}{1.00} + +{\bf See:}\\ +\pageto{FiniteSetAggregate}{FSAGG} +\pageto{MultisetAggregate}{MSETAGG} +\pagefrom{Collection}{CLAGG} +\pagefrom{SetCategory}{SETCAT} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + any? & brace & coerce & construct & convert\\ + copy & count & difference & empty & empty?\\ + eq? & eval & every? & find & hash\\ + intersect & latex & less? & map & map!\\ + member? & members & more? & parts & reduce\\ + remove & removeDuplicates & sample & select & set\\ + size? & subset? & symmetricDifference & union & \#?\\ + ?$<$? & ?=? & ?\~{}=? && +\end{tabular} + +\cross{SETAGG}{any?} +\cross{SETAGG}{brace} +\cross{SETAGG}{coerce} +\cross{SETAGG}{construct} +\cross{SETAGG}{convert} +\cross{SETAGG}{copy} +\cross{SETAGG}{count} +\cross{SETAGG}{difference} +\cross{SETAGG}{empty} +\cross{SETAGG}{empty?} +\cross{SETAGG}{eq?} +\cross{SETAGG}{eval} +\cross{SETAGG}{every?} +\cross{SETAGG}{find} +\cross{SETAGG}{hash} +\cross{SETAGG}{intersect} +\cross{SETAGG}{latex} +\cross{SETAGG}{less?} +\cross{SETAGG}{map} +\cross{SETAGG}{map!} +\cross{SETAGG}{member?} +\cross{SETAGG}{members} +\cross{SETAGG}{more?} +\cross{SETAGG}{parts} +\cross{SETAGG}{reduce} +\cross{SETAGG}{remove} +\cross{SETAGG}{removeDuplicates} +\cross{SETAGG}{sample} +\cross{SETAGG}{select} +\cross{SETAGG}{set} +\cross{SETAGG}{size?} +\cross{SETAGG}{subset?} +\cross{SETAGG}{symmetricDifference} +\cross{SETAGG}{union} +\cross{SETAGG}{\#?} +\cross{SETAGG}{?$<$?} +\cross{SETAGG}{?=?} +\cross{SETAGG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + brace : List S -> % + brace : () -> % + difference : (%,%) -> % + intersect : (%,%) -> % + set : List S -> % + set : () -> % + subset? : (%,%) -> Boolean + union : (%,%) -> % + ?<? : (%,%) -> Boolean +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + difference : (%,S) -> % + symmetricDifference : (%,%) -> % + union : (S,%) -> % + union : (%,S) -> % +\end{verbatim} + +These exports come from SetCategory(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +These exports come from Collection(S:SetCategory): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + construct : List S -> % + convert : % -> InputForm if S has KONVERT INFORM + copy : % -> % + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + count : (S,%) -> NonNegativeInteger + if S has SETCAT + and $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List Equation S) -> % + if S has EVALAB S + and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S + and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S + and S has SETCAT + eval : (%,List S,List S) -> % + if S has EVALAB S + and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + find : ((S -> Boolean),%) -> Union(S,"failed") + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + members : % -> List S if $ has finiteAggregate + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT + and $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S + if $ has finiteAggregate + reduce : (((S,S) -> S),%) -> S + if $ has finiteAggregate + remove : ((S -> Boolean),%) -> % + if $ has finiteAggregate + remove : (S,%) -> % + if S has SETCAT + and $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT + and $ has finiteAggregate + sample : () -> % + select : ((S -> Boolean),%) -> % + if $ has finiteAggregate + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger + if $ has finiteAggregate +\end{verbatim} + +<<category SETAGG SetAggregate>>= +)abbrev category SETAGG SetAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: 14 Oct, 1993 by RSS +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A set category lists a collection of set-theoretic operations +++ useful for both finite sets and multisets. +++ Note however that finite sets are distinct from multisets. +++ Although the operations defined for set categories are +++ common to both, the relationship between the two cannot +++ be described by inclusion or inheritance. +SetAggregate(S:SetCategory): + Category == Join(SetCategory, Collection(S)) with + partiallyOrderedSet + "<" : (%, %) -> Boolean + ++ s < t returns true if all elements of set aggregate s are also + ++ elements of set aggregate t. + brace : () -> % + ++ brace()$D (otherwise written {}$D) + ++ creates an empty set aggregate of type D. + ++ This form is considered obsolete. Use \axiomFun{set} instead. + brace : List S -> % + ++ brace([x,y,...,z]) + ++ creates a set aggregate containing items x,y,...,z. + ++ This form is considered obsolete. Use \axiomFun{set} instead. + set : () -> % + ++ set()$D creates an empty set aggregate of type D. + set : List S -> % + ++ set([x,y,...,z]) creates a set aggregate containing items x,y,...,z. + intersect: (%, %) -> % + ++ intersect(u,v) returns the set aggregate w consisting of + ++ elements common to both set aggregates u and v. + ++ Note: equivalent to the notation (not currently supported) + ++ {x for x in u | member?(x,v)}. + difference : (%, %) -> % + ++ difference(u,v) returns the set aggregate w consisting of + ++ elements in set aggregate u but not in set aggregate v. + ++ If u and v have no elements in common, \axiom{difference(u,v)} + ++ returns a copy of u. + ++ Note: equivalent to the notation (not currently supported) + ++ \axiom{{x for x in u | not member?(x,v)}}. + difference : (%, S) -> % + ++ difference(u,x) returns the set aggregate u with element x removed. + ++ If u does not contain x, a copy of u is returned. + ++ Note: \axiom{difference(s, x) = difference(s, {x})}. + symmetricDifference : (%, %) -> % + ++ symmetricDifference(u,v) returns the set aggregate of elements x + ++ which are members of set aggregate u or set aggregate v but + ++ not both. If u and v have no elements in common, + ++ \axiom{symmetricDifference(u,v)} returns a copy of u. + ++ Note: \axiom{symmetricDifference(u,v) = + ++ union(difference(u,v),difference(v,u))} + subset? : (%, %) -> Boolean + ++ subset?(u,v) tests if u is a subset of v. + ++ Note: equivalent to + ++ \axiom{reduce(and,{member?(x,v) for x in u},true,false)}. + union : (%, %) -> % + ++ union(u,v) returns the set aggregate of elements which are members + ++ of either set aggregate u or v. + union : (%, S) -> % + ++ union(u,x) returns the set aggregate u with the element x added. + ++ If u already contains x, \axiom{union(u,x)} returns a copy of u. + union : (S, %) -> % + ++ union(x,u) returns the set aggregate u with the element x added. + ++ If u already contains x, \axiom{union(x,u)} returns a copy of u. + add + symmetricDifference(x, y) == union(difference(x, y), difference(y, x)) + union(s:%, x:S) == union(s, {x}) + union(x:S, s:%) == union(s, {x}) + difference(s:%, x:S) == difference(s, {x}) + +@ +<<SETAGG.dotabb>>= +"SETAGG" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"]; +"SETAGG" -> "SETCAT" +"SETAGG" -> "CLAGG" + +@ +<<SETAGG.dotfull>>= +"SetAggregate(a:SetCategory)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"]; +"SetAggregate(a:SetCategory)" -> "SetCategory()" +"SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)" + +@ +<<SETAGG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"SetAggregate(a:SetCategory)" [color=lightblue]; +"SetAggregate(a:SetCategory)" -> "SetCategory()" +"SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Collection(a:SetCategory)" + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; +"Collection(a:SetCategory)" -> "Collection(a:Type)" + +"Collection(a:Type)" [color=lightblue]; +"Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" + +"HomogeneousAggregate(a:Type)" [color=lightblue]; +"HomogeneousAggregate(a:Type)" -> "Aggregate()" + +"Aggregate()" [color=lightblue]; +"Aggregate()" -> "Type()" + +"Type()" [color=lightblue]; +"Type()" -> "Category" + +"Category" [color=lightblue]; + +} +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{StackAggregate}{SKAGG} -\pagepic{ps/v102stackaggregate.ps}{SKAGG} +\pagepic{ps/v102stackaggregate.ps}{SKAGG}{1.00} {\bf See:}\\ \pageto{DequeueAggregate}{DQAGG} @@ -4168,7 +5393,7 @@ top : % -> S \end{verbatim} -These exports come from BagAggregate(a:Type): +These exports come from BagAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -4285,7 +5510,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{UnaryRecursiveAggregate}{URAGG} -\pagepic{ps/v102unaryrecursiveaggregate.ps}{URAGG} +\pagepic{ps/v102unaryrecursiveaggregate.ps}{URAGG}{1.00} {\bf See:}\\ \pageto{StreamAggregate}{STAGG} @@ -4409,7 +5634,7 @@ ?.rest : (%,rest) -> % \end{verbatim} -These exports come from RecursiveAggregate(a:Type): +These exports come from RecursiveAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -4751,10 +5976,154 @@ @ \chapter{Category Layer 6} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{AbelianGroup}{ABELGRP} +\pagepic{ps/v102abeliangroup.ps}{ABELGRP}{0.75} + +{\bf See:}\\ +\pageto{Rng}{RNG} +\pagefrom{CancellationAbelianMonoid}{CABMON} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + 0 & coerce & hash & latex & sample & subtractIfCan & zero?\\ + ?\~{}=? & ?*? & ?+? & ?-? & -? & ?=? & +\end{tabular} + +\cross{ABELGRP}{0} +\cross{ABELGRP}{coerce} +\cross{ABELGRP}{hash} +\cross{ABELGRP}{latex} +\cross{ABELGRP}{sample} +\cross{ABELGRP}{subtractIfCan} +\cross{ABELGRP}{zero?} +\cross{ABELGRP}{?\~{}=?} +\cross{ABELGRP}{?*?} +\cross{ABELGRP}{?+?} +\cross{ABELGRP}{?-?} +\cross{ABELGRP}{-?} +\cross{ABELGRP}{?=?} + + +These are directly exported but not implemented: +\begin{verbatim} + -? : % -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + subtractIfCan : (%,%) -> Union(%,"failed") + ?*? : (Integer,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?-? : (%,%) -> % +\end{verbatim} + +These exports come from CancellationAbelianMonoid(): +\begin{verbatim} + 0 : () -> % + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + sample : () -> % + zero? : % -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (PositiveInteger,%) -> % + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean +\end{verbatim} + +<<category ABELGRP AbelianGroup>>= +)abbrev category ABELGRP AbelianGroup +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The class of abelian groups, i.e. additive monoids where +++ each element has an additive inverse. +++ +++ Axioms: +++ \spad{-(-x) = x} +++ \spad{x+(-x) = 0} +-- following domain must be compiled with subsumption disabled +AbelianGroup(): Category == CancellationAbelianMonoid with + "-": % -> % + ++ -x is the additive inverse of x. + "-": (%,%) -> % + ++ x-y is the difference of x and y + ++ i.e. \spad{x + (-y)}. + -- subsumes the partial subtraction from previous + "*": (Integer,%) -> % + ++ n*x is the product of x by the integer n. + add + (x:% - y:%):% == x+(-y) + subtractIfCan(x:%, y:%):Union(%, "failed") == (x-y)::Union(%,"failed") + n:NonNegativeInteger * x:% == (n::Integer) * x + import RepeatedDoubling(%) + if not (% has Ring) then + n:Integer * x:% == + zero? n => 0 + n>0 => double(n pretend PositiveInteger,x) + double((-n) pretend PositiveInteger,-x) + +@ +<<ABELGRP.dotabb>>= +"ABELGRP" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELGRP"]; +"ABELGRP" -> "CABMON" + +@ +<<ABELGRP.dotfull>>= +"AbelianGroup()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELGRP"]; +"AbelianGroup()" -> "CancellationAbelianMonoid()" + +@ +<<ABELGRP.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"AbelianGroup()" [color=lightblue]; +"AbelianGroup()" -> "CancellationAbelianMonoid()" +"AbelianGroup()" -> "RepeatedDoubling(AbelianGroup)" + +"RepeatedDoubling(AbelianGroup)" [color="#00EE00"]; +"RepeatedDoubling(AbelianGroup)" -> "RepeatedDoubling(a:SetCategory)" + +"RepeatedDoubling(AbelianSemiGroup)" [color="#00EE00"]; +"RepeatedDoubling(AbelianSemiGroup)" -> "RepeatedDoubling(a:SetCategory)" + +"RepeatedDoubling(a:SetCategory)" [color="#00EE00"]; +"RepeatedDoubling(a:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"CancellationAbelianMonoid()" [color=lightblue]; +"CancellationAbelianMonoid()" -> "AbelianMonoid()" + +"AbelianMonoid()" [color=lightblue]; +"AbelianMonoid()" -> "AbelianSemiGroup()" + +"AbelianSemiGroup()" [color=lightblue]; +"AbelianSemiGroup()" -> "SETCAT..." +"AbelianSemiGroup()" -> "RepeatedDoubling(AbelianSemiGroup)" + +"SETCAT..." [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{Dictionary}{DIAGG} -\pagepic{ps/v102dictionary.ps}{DIAGG} +\pagepic{ps/v102dictionary.ps}{DIAGG}{1.00} {\bf See:}\\ +\pageto{FiniteSetAggregate}{FSAGG} \pageto{KeyedDictionary}{KDAGG} \pagefrom{DictionaryOperations}{DIOPS} @@ -4816,7 +6185,7 @@ remove! : ((S -> Boolean),%) -> % if $ has finiteAggregate \end{verbatim} -These exports come from DictionaryOperations(a:SetCategory): +These exports come from DictionaryOperations(S:SetCategory): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -4972,7 +6341,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{DequeueAggregate}{DQAGG} -\pagepic{ps/v102dequeueaggregate.ps}{DQAGG} +\pagepic{ps/v102dequeueaggregate.ps}{DQAGG}{1.00} {\bf See:}\\ \pagefrom{QueueAggregate}{QUAGG} @@ -5053,7 +6422,7 @@ top! : % -> S \end{verbatim} -These exports come from StackAggregate(a:Type): +These exports come from StackAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -5100,7 +6469,7 @@ ?~=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} -These exports come from QueueAggregate(a:Type): +These exports come from QueueAggregate(S:Type): \begin{verbatim} back : % -> S dequeue! : % -> S @@ -5205,7 +6574,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{ExtensibleLinearAggregate}{ELAGG} -\pagepic{ps/v102extensiblelinearaggregate.ps}{ELAGG} +\pagepic{ps/v102extensiblelinearaggregate.ps}{ELAGG}{1.00} {\bf See:}\\ \pageto{ListAggregate}{LSAGG} @@ -5313,7 +6682,7 @@ select : ((S -> Boolean),%) -> % if $ has finiteAggregate \end{verbatim} -These exports come from LinearAggregate(a:Type): +These exports come from LinearAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -5503,7 +6872,7 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{FiniteLinearAggregate}{FLAGG} -\pagepic{ps/v102finitelinearaggregate.ps}{FLAGG} +\pagepic{ps/v102finitelinearaggregate.ps}{FLAGG}{1.00} {\bf See:}\\ \pageto{OneDimensionalArrayAggregate}{A1AGG} @@ -5583,11 +6952,11 @@ \cross{FLAGG}{\#?} \cross{FLAGG}{?.?} \cross{FLAGG}{?.?} -\cross{FLAGG}{?<?} -\cross{FLAGG}{?<=?} +\cross{FLAGG}{?$<$?} +\cross{FLAGG}{?$<=$?} \cross{FLAGG}{?=?} -\cross{FLAGG}{?>?} -\cross{FLAGG}{?>=?} +\cross{FLAGG}{?$>$?} +\cross{FLAGG}{?$>=$?} \cross{FLAGG}{?\~{}=?} These are directly exported but not implemented: @@ -5615,7 +6984,7 @@ if S has ORDSET and $ has shallowlyMutable \end{verbatim} -These exports come from LinearAggregate(a:Type): +These exports come from LinearAggregate(S:Type): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -5846,9 +7215,10 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{MultiDictionary}{MDAGG} -\pagepic{ps/v102multidictionary.ps}{MDAGG} +\pagepic{ps/v102multidictionary.ps}{MDAGG}{1.00} {\bf See:}\\ +\pageto{MultisetAggregate}{MSETAGG} \pagefrom{DictionaryOperations}{DIOPS} {\bf Exports:}\\ @@ -5857,10 +7227,10 @@ copy & count & dictionary & duplicates & empty\\ empty? & eq? & eval & every? & extract!\\ find & hash & insert! & inspect & latex\\ - less? & map & map! & member? & members\\ + less? & map & map! & member? & members\\ more? & parts & reduce & remove & remove! \\ - removeDuplicates & sample & select & select! & size? \\ - \#? & ?=? & ?\~{}=? &&\\ + removeDuplicates & removeDuplicates! & sample & select & select!\\ + size? & \#? & ?=? & ?\~{}=? &\\ \end{tabular} \cross{MDAGG}{any?} @@ -5894,6 +7264,7 @@ \cross{MDAGG}{remove} \cross{MDAGG}{remove!} \cross{MDAGG}{removeDuplicates} +\cross{MDAGG}{removeDuplicates!} \cross{MDAGG}{sample} \cross{MDAGG}{select} \cross{MDAGG}{select!} @@ -5906,10 +7277,10 @@ \begin{verbatim} insert! : (S,%,NonNegativeInteger) -> % removeDuplicates! : % -> % - duplicates : % -> List Record(entry: S,count: NonNegativeInteger) + duplicates : % -> List Record(entry:S,count:NonNegativeInteger) \end{verbatim} -These exports come from DictionaryOperations(a:SetCategory): +These exports come from DictionaryOperations(S:SetCategory): \begin{verbatim} any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate @@ -6047,10 +7418,122 @@ @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{OrderedAbelianMonoid}{OAMON} +\pagepic{ps/v102orderedabelianmonoid.ps}{OAMON}{1.00} + +{\bf See:}\\ +\pagefrom{AbelianMonoid}{ABELMON} +\pagefrom{OrderedAbelianSemiGroup}{OASGP} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + 0 ... [truncated message content] |
From: <gi...@ax...> - 2008-09-19 00:17:24
|
books/bookvol10.2.pamphlet | 1212 ++++++++++++++++++++++++++-------- books/ps/v102finite.ps | 494 ++++++++++++++ books/ps/v102homogeneousaggregate.ps | 428 ++++++++---- books/ps/v102orderedset.ps | 494 ++++++++++++++ books/ps/v102semigroup.ps | 632 ++++++++++++++++++ changelog | 6 + src/algebra/catdef.spad.pamphlet | 141 ---- 7 files changed, 2837 insertions(+), 570 deletions(-) New commits: commit bb976a5dc350cae3e256b868b2bed008d9c74923 Author: Tim Daly <da...@ax...> Date: Sat Jul 26 19:22:36 2008 -0400 20080918 tpd books/ps/v102semigroup.ps diagram SGROUP 20080918 tpd books/ps/v102orderedset.ps diagram ORDSET 20080918 tpd books/ps/v102finite.ps diagram FINITE 20080918 tpd src/algebra/catdef.spad remove FINITE, ORDSET, SGROUP 20080918 tpd books/ps/v102homogeneousaggregate.ps corrected diagram 20080918 tpd books/bookvol10.2 add FINITE, ORDSET, SGROUP |
From: <da...@us...> - 2008-09-18 10:15:23
|
Revision: 976 http://axiom.svn.sourceforge.net/axiom/?rev=976&view=rev Author: daly Date: 2008-09-18 17:15:34 +0000 (Thu, 18 Sep 2008) Log Message: ----------- 20080917 tpd src/algebra/catdef.spad remove BASTYPE, SETCAT, ABELSG 20080917 tpd books/ps/v102abeliansemigroup.ps ABELSG graph 20080917 tpd books/ps/v102setcategory.ps SETCAT graph 20080917 tpd books/ps/v102basictype.ps BASTYPE graph 20080917 tpd books/bookvol10.2 add pdf destinations 20080917 tpd books/bookvol10.2 add BASTYPE, SETCAT, ABELSG Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/catdef.spad.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v102abeliansemigroup.ps trunk/axiom/books/ps/v102basictype.ps trunk/axiom/books/ps/v102setcategory.ps Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-18 05:28:06 UTC (rev 975) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-18 17:15:34 UTC (rev 976) @@ -6,9 +6,29 @@ \makeindex \usepackage{graphicx} %% +%% Note that this file will eventually generate a dvi file +%% which will eventually be processed by dvipdfm to create a pdf. +%% The categories/domains/packages will be placed in a graphviz graph. +%% The graphviz dot syntax allows an href parameter. +%% The href parameter will reference this file. +%% pdf href syntax allows named destinations. +%% This macro creates a named destination using \special +%% Thus, you reference http://thispdf#nameddest=ABBREV +%% and you end up at the right page. +%% This macro is called implicitly by \pagehead so every +%% category/domain/package can be referenced by fullname or abbrev. +%% +%% dest will give the ability to use nameddest= in html pdfs +%% +\newcommand{\dest}[1]{% e.g. \dest{abb} +\special{pdf:dest (#1) [ @thispage /FitH @ypos ]}} +%% +%% %% pagehead consolidates standard page indexing %% \newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb} +\dest{#1}% +\dest{#2}% \section{#1 (#2)} \label{#1}% \label{#2}% @@ -36,7 +56,6 @@ \newcommand{\cross}[2]{% e.g. \pagefrom{cat}{funcname} \index{#1!#2}% \index{#2!#1}} -%% % special meanings for math characters @@ -262,6 +281,7 @@ This is the root of the category hierarchy and is not represented by code. {\bf See:}\\ +\pageto{BasicType}{BASTYPE} \pageto{Eltable}{ELTAB} \pageto{CoercibleTo}{KOERCE} \pageto{ConvertibleTo}{KONVERT} @@ -269,6 +289,75 @@ \pageto{Type}{TYPE} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BasicType}{BASTYPE} +\pagepic{ps/v102basictype.ps}{BASTYPE} + +{\bf See:}\\ +\pagefrom{Category}{CATEGORY} + +{\bf Exports:}\\ +\begin{tabular}{ll} + ?=? & ?\~{}=? +\end{tabular} + +These are directly exported but not implemented: +\begin{verbatim} + ?=? : (%,%) -> Boolean +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category BASTYPE BasicType>>= +)abbrev category BASTYPE BasicType +--% BasicType +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ \spadtype{BasicType} is the basic category for describing a collection +++ of elements with \spadop{=} (equality). +BasicType(): Category == with + "=": (%,%) -> Boolean ++ x=y tests if x and y are equal. + "~=": (%,%) -> Boolean ++ x~=y tests if x and y are not equal. + add + _~_=(x:%,y:%) : Boolean == not(x=y) + +@ +<<BASTYPE.dotabb>>= +"BASTYPE" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"]; +"BASTYPE" -> "CATEGORY" + +@ +<<BASTYPE.dotfull>>= +"BasicType()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"]; +"BasicType()" -> "Category" + +@ +<<BASTYPE.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"Category" [color=lightblue]; +} + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{CoercibleTo}{KOERCE} \pagepic{ps/v102koerce.ps}{KOERCE} @@ -302,17 +391,20 @@ @ <<KOERCE.dotabb>>= -"KOERCE" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"KOERCE" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; "KOERCE" -> "CATEGORY" @ <<KOERCE.dotfull>>= -"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"CoercibleTo(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; "CoercibleTo(a:Type)" -> "Category" -"CoercibleTo(OutputForm)" [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"CoercibleTo(OutputForm)" + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"]; "CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + @ <<KOERCE.dotpic>>= digraph pic { @@ -320,10 +412,10 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"CoercibleTo(a:Type)" [color=lightblue]; "CoercibleTo(a:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -363,73 +455,74 @@ @ <<KONVERT.dotabb>>= -"KONVERT" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"KONVERT" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "KONVERT" -> "CATEGORY" @ <<KONVERT.dotfull>>= "ConvertibleTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(a:Type)" -> "Category" "ConvertibleTo(DoubleFloat)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Float)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(InputForm)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Integer)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Float))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Complex(Float))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Complex(Float))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Complex(DoubleFloat))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Complex(DoubleFloat))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(String)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(String)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Symbol)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Symbol)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(SExpression)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(SExpression)" -> "ConvertibleTo(a:Type)" "ConvertibleTo(Pattern(Base))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(Pattern(Base))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(List(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(List(Integer))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(List(Character))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(List(Character))" -> "ConvertibleTo(a:Type)" "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"]; "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> "ConvertibleTo(a:Type)" @ @@ -439,11 +532,10 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"ConvertibleTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"ConvertibleTo(a:Type)" [color=lightblue]; "ConvertibleTo(a:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -491,13 +583,13 @@ @ <<ELTAB.dotabb>>= -"ELTAB" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"ELTAB" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"]; "ELTAB" -> "CATEGORY" @ <<ELTAB.dotfull>>= "Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"]; "Eltable(a:SetCategory,b:Type)" -> "Category" @ @@ -507,11 +599,10 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Eltable(a:SetCategory,b:Type)" [color=lightblue]; "Eltable(a:SetCategory,b:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -568,45 +659,46 @@ @ <<RETRACT.dotabb>>= -"RETRACT" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RETRACT" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RETRACT" -> "CATEGORY" @ <<RETRACT.dotfull>>= "RetractableTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(a:Type)" -> "Category" "RetractableTo(SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(SetCategory)" -> "RetractableTo(a:Type)" "RetractableTo(Symbol)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(Symbol)" -> "RetractableTo(a:Type)" "RetractableTo(Integer)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(Integer)" -> "RetractableTo(a:Type)" "RetractableTo(NonNegativeInteger)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)" "RetractableTo(Fraction(Integer))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)" "RetractableTo(Float)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(Float)" -> "RetractableTo(a:Type)" "RetractableTo(Kernel(ExpressionSpace))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)" "RetractableTo(CommutativeRing)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"]; "RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" @ <<RETRACT.dotpic>>= @@ -615,11 +707,10 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"RetractableTo(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RetractableTo(a:Type)" [color=lightblue]; "RetractableTo(a:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -641,12 +732,12 @@ @ <<TYPE.dotabb>>= -"TYPE" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"TYPE" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"]; "TYPE" -> "CATEGORY" @ <<TYPE.dotfull>>= -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"]; "Type()" -> "Category" @ @@ -656,10 +747,10 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -748,12 +839,13 @@ @ <<AGG.dotabb>>= -"AGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"]; "AGG" -> "TYPE" @ <<AGG.dotfull>>= -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"]; "Aggregate()" -> "Type()" @ @@ -763,13 +855,13 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -862,13 +954,13 @@ @ <<ELTAGG.dotabb>>= -"ELTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"ELTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"]; "ELTAGG" -> "ELTAB" @ <<ELTAGG.dotfull>>= "EltableAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"]; "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" @ @@ -878,20 +970,237 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"EltableAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue]; "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" -"Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Eltable(a:SetCategory,b:Type)" [color=lightblue]; "Eltable(a:SetCategory,b:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{SetCategory}{SETCAT} +\pagepic{ps/v102setcategory.ps}{SETCAT} + +{\bf See:}\\ +\pageto{AbelianSemiGroup}{ABELSG} +\pageto{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +coerce & hash & latex & ?=? & ?\~{}=? +\end{tabular} + +\cross{SETCAT}{coerce} +\cross{SETCAT}{hash} +\cross{SETCAT}{latex} +\cross{SETCAT}{?=?} +\cross{SETCAT}{?\~{}=?} + +These are implemented by this category: +\begin{verbatim} + hash : % -> SingleInteger + latex : % -> String +\end{verbatim} + +These exports come from BasicType(): +\begin{verbatim} + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +These exports come from CoercibleTo(OutputForm): +\begin{verbatim} + coerce : % -> OutputForm +\end{verbatim} + +<<category SETCAT SetCategory>>= +)abbrev category SETCAT SetCategory +++ Author: +++ Date Created: +++ Date Last Updated: +++ 09/09/92 RSS added latex and hash +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ \spadtype{SetCategory} is the basic category for describing a collection +++ of elements with \spadop{=} (equality) and \spadfun{coerce} to output form. +++ +++ Conditional Attributes: +++ canonical\tab{15}data structure equality is the same as \spadop{=} +SetCategory(): Category == Join(BasicType,CoercibleTo OutputForm) with + --operations + hash: % -> SingleInteger ++ hash(s) calculates a hash code for s. + latex: % -> String ++ latex(s) returns a LaTeX-printable output + ++ representation of s. + add + hash(s : %): SingleInteger == 0$SingleInteger + latex(s : %): String == "\mbox{\bf Unimplemented}" + +@ +<<SETCAT.dotabb>>= +"SETCAT" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"]; +"SETCAT" -> "BASTYPE" +"SETCAT" -> "KOERCE" + +@ +<<SETCAT.dotfull>>= +"SetCategory()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +@ +<<SETCAT.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"Category" [color=lightblue]; + +} + +@ \chapter{Category Layer 3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{AbelianSemiGroup}{ABELSG} +\pagepic{ps/v102abeliansemigroup.ps}{ABELSG} + +{\bf See:}\\ +\pagefrom{SetCategory}{SETCAT} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + coerce & hash & latex & ?*? & ?+? & ?=? & ?\~{}=? +\end{tabular} + +\cross{ABELSG}{coerce} +\cross{ABELSG}{hash} +\cross{ABELSG}{latex} +\cross{ABELSG}{?*?} +\cross{ABELSG}{?+?} +\cross{ABELSG}{?=?} +\cross{ABELSG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + ?+? : (%,%) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + ?*? : (PositiveInteger,%) -> % +\end{verbatim} + +These exports come from SetCategory(): +\begin{verbatim} + coerce : % -> OutputForm + hash : % -> SingleInteger + latex : % -> String + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean +\end{verbatim} + +<<category ABELSG AbelianSemiGroup>>= +)abbrev category ABELSG AbelianSemiGroup +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ the class of all additive (commutative) semigroups, i.e. +++ a set with a commutative and associative operation \spadop{+}. +++ +++ Axioms: +++ \spad{associative("+":(%,%)->%)}\tab{30}\spad{ (x+y)+z = x+(y+z) } +++ \spad{commutative("+":(%,%)->%)}\tab{30}\spad{ x+y = y+x } +AbelianSemiGroup(): Category == SetCategory with + --operations + "+": (%,%) -> % ++ x+y computes the sum of x and y. + "*": (PositiveInteger,%) -> % + ++ n*x computes the left-multiplication of x by the positive integer n. + ++ This is equivalent to adding x to itself n times. + add + import RepeatedDoubling(%) + if not (% has Ring) then + n:PositiveInteger * x:% == double(n,x) + +@ +<<ABELSG.dotabb>>= +"ABELSG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"]; +"ABELSG" -> "SETCAT" +"ABELSG" -> "REPDB" + +@ +<<ABELSG.dotfull>>= +"AbelianSemiGroup()" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"]; +"AbelianSemiGroup()" -> "SetCategory()" +"AbelianSemiGroup()" -> "RepeatedDoubling(S:SetCategory)" + +<<ABELSG.dotpic>>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"AbelianSemiGroup()" [color=lightblue]; +"AbelianSemiGroup()" -> "SetCategory()" +"AbelianSemiGroup()" -> "RepeatedDoubling(S:AbelianSemiGroup)" + +"SetCategory()" [color=lightblue]; +"SetCategory()" -> "BasicType()" +"SetCategory()" -> "CoercibleTo(OutputForm)" + +"BasicType()" [color=lightblue]; +"BasicType()" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" + +"CoercibleTo(a:Type)" [color=lightblue]; +"CoercibleTo(a:Type)" -> "Category" + +"RepeatedDoubling(S:AbelianSemiGroup)" [color="#00EE00"]; +"RepeatedDoubling(S:AbelianSemiGroup)" -> "RepeatedDoubling(S:SetCategory)" + +"RepeatedDoubling(S:SetCategory)" [color="#00EE00"]; +"RepeatedDoubling(S:SetCategory)" -> "Package" + +"Package" [color="#00EE00"]; + +"Category" [color=lightblue]; +} + +@ + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{HomogeneousAggregate}{HOAGG} \pagepic{ps/v102homogeneousaggregate.ps}{HOAGG} @@ -1070,13 +1379,13 @@ @ <<HOAGG.dotabb>>= -"HOAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HOAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"]; "HOAGG" -> "AGG" @ <<HOAGG.dotfull>>= "HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" @ @@ -1086,23 +1395,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" "HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)" -"HomogeneousAggregate(a:Type)" -> "SetCategory" +"HomogeneousAggregate(a:Type)" -> "SetCategory()" -"Evalable(a:Type)" [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"Evalable(a:Type)" [color="#00EE00"]; -"SetCategory" [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"SetCategory()" [color="#00EE00"]; -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Category" [color=lightblue]; } @@ -1242,16 +1550,17 @@ @ <<BGAGG.dotabb>>= -"BGAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BGAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; "BGAGG" -> "HOAGG" @ <<BGAGG.dotfull>>= -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" "BagAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"]; "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" @ @@ -1261,20 +1570,19 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -1483,15 +1791,17 @@ @ <<CLAGG.dotabb>>= -"CLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"CLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; "CLAGG" -> "HOAGG" @ <<CLAGG.dotfull>>= -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"Collection(a:SetCategory)" + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"]; "Collection(a:SetCategory)" -> "Collection(a:Type)" @ @@ -1501,29 +1811,26 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" "Collection(a:Type)" -> "ConvertibleTo(InputForm)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"ConvertibleTo(InputForm)" - [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"ConvertibleTo(InputForm)" [color="#00EE00"]; "ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" -"ConvertibleTo(a:Type)" - [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"ConvertibleTo(a:Type)" [color="#00EE00"]; "ConvertibleTo(a:Type)" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -1741,26 +2048,26 @@ @ <<IXAGG.dotabb>>= -"IXAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IXAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; "IXAGG" -> "HOAGG" "IXAGG" -> "ELTAGG" @ <<IXAGG.dotfull>>= "IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" "IndexedAggregate(a:SetCategory,b:Type)" -> "EltableAggregate(a:SetCategory,b:Type)" "IndexedAggregate(a:SetCategory,b:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; "IndexedAggregate(a:SetCategory,b:SetCategory)" -> "IndexedAggregate(a:SetCategory,b:Type)" "IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" @@ -1771,32 +2078,28 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" "IndexedAggregate(a:SetCategory,b:Type)" -> "EltableAggregate(a:SetCategory,b:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"EltableAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue]; "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" -"Eltable(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Eltable(a:SetCategory,b:Type)" [color=lightblue]; "Eltable(a:SetCategory,b:Type)" -> "Category" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -1982,13 +2285,13 @@ @ <<RCAGG.dotabb>>= -"RCAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RCAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"]; "RCAGG" -> "HOAGG" @ <<RCAGG.dotfull>>= "RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" @ @@ -1998,21 +2301,19 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RecursiveAggregate(a:Type)" [color=lightblue]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -2268,13 +2569,13 @@ @ <<BRAGG.dotabb>>= -"BRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"]; "BRAGG" -> "RCAGG" @ <<BRAGG.dotfull>>= "BinaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"]; "BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -2284,25 +2585,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"BinaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BinaryRecursiveAggregate(a:Type)" [color=lightblue]; "BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RecursiveAggregate(a:Type)" [color=lightblue]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -2487,14 +2785,14 @@ @ <<DIOPS.dotabb>>= -"DIOPS" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DIOPS" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"]; "DIOPS" -> "BGAGG" "DIOPS" -> "CLAGG" @ <<DIOPS.dotfull>>= "DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"]; "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" @@ -2505,35 +2803,32 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DictionaryOperations(a:SetCategory)" [color=lightblue]; "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" -"BagAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:SetCategory)" [color=seagreen]; "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"Collection(a:SetCategory)" [color=seagreen]; "Collection(a:SetCategory)" -> "Collection(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -2718,13 +3013,13 @@ @ <<DLAGG.dotabb>>= -"DLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"]; "DLAGG" -> "RCAGG" @ <<DLAGG.dotfull>>= "DoublyLinkedAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"]; "DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -2734,25 +3029,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"DoublyLinkedAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DoublyLinkedAggregate(a:Type)" [color=lightblue]; "DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RecursiveAggregate(a:Type)" [color=lightblue]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -3013,13 +3305,14 @@ @ <<LNAGG.dotabb>>= -"LNAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LNAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"]; "LNAGG" -> "IXAGG" "LNAGG" -> "CLAGG" @ <<LNAGG.dotfull>>= -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" @@ -3030,34 +3323,31 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" [color=lightblue]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" -"IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" [color=seagreen]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -3185,21 +3475,21 @@ @ <<PRQAGG.dotabb>>= -"PRQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"PRQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; "PRQAGG" -> "BGAGG" @ <<PRQAGG.dotfull>>= "PriorityQueueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)" "PriorityQueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:SetCategory)" -> "PriorityQueueAggregate(a:Type)" "PriorityQueueAggregate(a:OrderedSet)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"]; "PriorityQueueAggregate(a:OrderedSet)" -> "PriorityQueueAggregate(a:SetCategory)" @@ -3210,24 +3500,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"PriorityQueueAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"PriorityQueueAggregate(a:Type)" [color=lightblue]; "PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -3374,16 +3662,17 @@ @ <<QUAGG.dotabb>>= -"QUAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"QUAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; "QUAGG" -> "BGAGG" @ <<QUAGG.dotfull>>= -"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"QueueAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" "QueueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"]; "QueueAggregate(a:SetCategory)" -> "QueueAggregate(a:Type)" @ @@ -3393,23 +3682,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"QueueAggregate(a:Type)" [color=lightblue]; "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -3546,16 +3834,17 @@ @ <<SKAGG.dotabb>>= -"SKAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"SKAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; "SKAGG" -> "BGAGG" @ <<SKAGG.dotfull>>= -"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"StackAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; "StackAggregate(a:Type)" -> "BagAggregate(a:Type)" "StackAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"]; "StackAggregate(a:SetCategory)" -> "StackAggregate(a:Type)" @ @@ -3565,23 +3854,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"StackAggregate(a:Type)" [color=lightblue]; "StackAggregate(a:Type)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -4016,13 +4304,13 @@ @ <<URAGG.dotabb>>= -"URAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"URAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"]; "URAGG" -> "RCAGG" @ <<URAGG.dotfull>>= "UnaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"]; "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" @ @@ -4032,25 +4320,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"UnaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"UnaryRecursiveAggregate(a:Type)" [color=lightblue]; "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RecursiveAggregate(a:Type)" [color=lightblue]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -4222,17 +4507,17 @@ @ <<DIAGG.dotabb>>= -"DIAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DIAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; "DIAGG" -> "DIOPS" @ <<DIAGG.dotfull>>= "Dictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" "Dictionary(Record(a:SetCategory,b:SetCategory))" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"]; "Dictionary(Record(a:SetCategory,b:SetCategory))" -> "Dictionary(a:SetCategory)" @@ -4243,39 +4528,35 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Dictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Dictionary(a:SetCategory)" [color=lightblue]; "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" -"DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DictionaryOperations(a:SetCategory)" [color=lightblue]; "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" -"BagAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:SetCategory)" [color=seagreen]; "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"Collection(a:SetCategory)" [color=seagreen]; "Collection(a:SetCategory)" -> "Collection(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Aggregate()" [color=lightblue]; "Aggregate()" -> "Type()" -"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Type()" [color=lightblue]; "Type()" -> "Category" -"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Category" [color=lightblue]; } @ @@ -4470,18 +4751,19 @@ @ <<DQAGG.dotabb>>= -"DQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; "DQAGG" -> "SKAGG" "DQAGG" -> "QUAGG" @ <<DQAGG.dotfull>>= -"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DequeueAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; "DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)" "DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)" "DequeueAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"]; "DequeueAggregate(a:SetCategory)" -> "DequeueAggregate(a:Type)" @ @@ -4491,24 +4773,23 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DequeueAggregate(a:Type)" [color=lightblue]; "DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)" "DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)" -"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"StackAggregate(a:Type)" [color=lightblue]; "StackAggregate(a:Type)" -> "BagAggregate(a:Type)" -"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"QueueAggregate(a:Type)" [color=lightblue]; "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "..." -"..." [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"..." [color=lightblue]; } @ @@ -4769,13 +5050,13 @@ @ <<ELAGG.dotabb>>= -"ELAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"ELAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"]; "ELAGG" -> "LNAGG" @ <<ELAGG.dotfull>>= "ExtensibleLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"]; "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" @ @@ -4785,32 +5066,28 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"ExtensibleLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"ExtensibleLinearAggregate(a:Type)" [color=lightblue]; "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" [color=lightblue]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" -"IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" [color=seagreen]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "..." -"..." [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"..." [color=lightblue]; } @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -5112,13 +5389,13 @@ @ <<FLAGG.dotabb>>= -"FLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"FLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"]; "FLAGG" -> "LNAGG" @ <<FLAGG.dotfull>>= "FiniteLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"]; "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" @ @@ -5128,35 +5405,31 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"FiniteLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"FiniteLinearAggregate(a:Type)" [color=lightblue]; "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" "FiniteLinearAggregate(a:Type)" -> "OrderedSet" -"OrderedSet" [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"OrderedSet" [color="#00EE00"]; -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" [color=lightblue]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" -"IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" [color=seagreen]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "..." -"..." [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"..." [color=lightblue]; } @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -5165,7 +5438,6 @@ {\bf See:}\\ \pagefrom{DictionaryOperations}{DIOPS} -<<category MDAGG MultiDictionary>>= {\bf Exports:}\\ \begin{tabular}{lllll} @@ -5214,9 +5486,9 @@ \cross{MDAGG}{select} \cross{MDAGG}{select!} \cross{MDAGG}{size?} -\cross{MDAGG}{#?} +\cross{MDAGG}{\#?} \cross{MDAGG}{?=?} -\cross{MDAGG}{?~=?} +\cross{MDAGG}{?\~{}=?} These are directly exported but not implemented: \begin{verbatim} @@ -5288,6 +5560,7 @@ ?~=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} +<<category MDAGG MultiDictionary>>= )abbrev category MDAGG MultiDictionary ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 @@ -5319,13 +5592,13 @@ @ <<MDAGG.dotabb>>= -"MDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"MDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"]; "MDAGG" -> "DIOPS" @ <<MDAGG.dotfull>>= "MultiDictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"]; "MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" @ @@ -5335,33 +5608,29 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"MultiDictionary(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"MultiDictionary(a:SetCategory)" [color=lightblue]; "MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)" -"DictionaryOperations(a:SetCategory)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"DictionaryOperations(a:SetCategory)" [color=lightblue]; "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)" "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)" -"BagAggregate(a:SetCategory)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:SetCategory)" [color=seagreen]; "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" -"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"BagAggregate(a:Type)" [color=lightblue]; "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"Collection(a:SetCategory)" [color=seagreen]; "Collection(a:SetCategory)" -> "Collection(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "..." -"..." [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"..." [color=lightblue]; } @ @@ -5684,13 +5953,14 @@ @ <<STAGG.dotabb>>= -"STAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"STAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"]; "STAGG" -> "RCAGG" "STAGG" -> "LNAGG" @ <<STAGG.dotfull>>= -"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"StreamAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"]; "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)" "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)" @@ -5701,40 +5971,35 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"StreamAggregate(a:Type)" [color=lightblue]; "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)" "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)" -"UnaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"UnaryRecursiveAggregate(a:Type)" [color=lightblue]; "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" -"RecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"RecursiveAggregate(a:Type)" [color=lightblue]; "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" [color=lightblue]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "Collection(a:Type)" -"IndexedAggregate(b:Integer,a:Type)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" [color=seagreen]; "IndexedAggregate(b:Integer,a:Type)" -> "IndexedAggregate(a:SetCategory,b:Type)" -"IndexedAggregate(a:SetCategory,b:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue]; "IndexedAggregate(a:SetCategory,b:Type)" -> "HomogeneousAggregate(a:Type)" -"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"Collection(a:Type)" [color=lightblue]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" -"HomogeneousAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"HomogeneousAggregate(a:Type)" [color=lightblue]; "HomogeneousAggregate(a:Type)" -> "..." -"..." [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"..." [color=lightblue]; } @ @@ -6189,23 +6454,23 @@ @ <<A1AGG.dotabb>>= -"A1AGG" [color=lightblue,style=filled]; +"A1AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; "A1AGG" -> "FLAGG" @ <<A1AGG.dotfull>>= "OneDimensionalArrayAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; + [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" "OneDimensionalArrayAggregate(Character)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(Character)" -> "OneDimensionalArrayAggregate(a:Type)" "OneDimensionalArrayAggregate(Boolean)" - [color=seagreen,href="books/bookvol10.2.pamphlet"]; + [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"]; "OneDimensionalArrayAggregate(Boolean)" -> "OneDimensionalArrayAggregate(a:Type)" @@ -6216,25 +6481,22 @@ bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"OneDimensionalArrayAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"OneDimensionalArrayAggregate(a:Type)" [color=lightblue]; "OneDimensionalArrayAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)" -"FiniteLinearAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"FiniteLinearAggregate(a:Type)" [color=lightblue]; "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)" -"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; +"LinearAggregate(a:Type)" [color=lightblue]; "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)" "LinearAggregate(a:Type)" -> "CLAGG..." -"IndexedAggregate(b:Integer,... [truncated message content] |
From: <gi...@ax...> - 2008-09-18 10:12:46
|
books/bookvol10.2.pamphlet | 1324 ++++++++++++++++++++++++++------------ books/ps/v102abeliansemigroup.ps | 677 +++++++++++++++++++ books/ps/v102basictype.ps | 299 +++++++++ books/ps/v102setcategory.ps | 473 ++++++++++++++ changelog | 6 + src/algebra/catdef.spad.pamphlet | 352 +---------- 6 files changed, 2368 insertions(+), 763 deletions(-) New commits: commit 6bb671be4caa43995e0d35bc7a2f4d8323a9a6cb Author: Tim Daly <da...@ax...> Date: Sat Jul 26 11:44:02 2008 -0400 20080917 tpd src/algebra/catdef.spad remove BASTYPE, SETCAT, ABELSG 20080917 tpd books/ps/v102abeliansemigroup.ps ABELSG graph 20080917 tpd books/ps/v102setcategory.ps SETCAT graph 20080917 tpd books/ps/v102basictype.ps BASTYPE graph 20080917 tpd books/bookvol10.2 add pdf destinations 20080917 tpd books/bookvol10.2 add BASTYPE, SETCAT, ABELSG |
From: <da...@us...> - 2008-09-18 05:27:56
|
Revision: 975 http://axiom.svn.sourceforge.net/axiom/?rev=975&view=rev Author: daly Date: 2008-09-18 05:28:06 +0000 (Thu, 18 Sep 2008) Log Message: ----------- 20080917 wsp src/algebra/mkfunc.spad add parse to InputForm Modified Paths: -------------- trunk/axiom/changelog trunk/axiom/src/algebra/mkfunc.spad.pamphlet Modified: trunk/axiom/changelog =================================================================== --- trunk/axiom/changelog 2008-09-17 04:37:14 UTC (rev 974) +++ trunk/axiom/changelog 2008-09-18 05:28:06 UTC (rev 975) @@ -1,3 +1,4 @@ +20080917 wsp src/algebra/mkfunc.spad add parse to InputForm 20080917 tpd books/bookvol10.2 remove duplicate function def in FLAGG 20080916 tpd books/ps/v102streamaggregate.ps 20080916 tpd books/ps/v102listaggregate.ps Modified: trunk/axiom/src/algebra/mkfunc.spad.pamphlet =================================================================== --- trunk/axiom/src/algebra/mkfunc.spad.pamphlet 2008-09-17 04:37:14 UTC (rev 974) +++ trunk/axiom/src/algebra/mkfunc.spad.pamphlet 2008-09-18 05:28:06 UTC (rev 975) @@ -68,6 +68,8 @@ ++ unparse(f) returns a string s such that the parser ++ would transform s to f. ++ Error: if f is not the parsed form of a string. + parse : String -> % + ++ parse is the inverse of unparse. It parses a string to InputForm. declare : List % -> Symbol ++ declare(t) returns a name f such that f has been ++ declared to the interpreter to be of type t, but has @@ -139,6 +141,9 @@ atom?(s:% := form2String(x)$Lisp) => strsym s concat [strsym a for a in destruct s] + parse(s:String):% == + ncParseFromString(s)$Lisp + declare signature == declare(name := new()$Symbol, signature)$Lisp name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gi...@ax...> - 2008-09-18 05:26:33
|
changelog | 1 + src/algebra/mkfunc.spad.pamphlet | 5 +++++ 2 files changed, 6 insertions(+), 0 deletions(-) New commits: commit 39c0f541b0cd43eca6884b45b6e8d8da1efc4885 Author: Tim Daly <da...@ax...> Date: Sat Jul 26 01:32:52 2008 -0400 20080917 wsp src/algebra/mkfunc.spad add parse to InputForm |
From: <gi...@ax...> - 2008-09-17 04:36:18
|
books/bookvol10.2.pamphlet | 1 - changelog | 1 + 2 files changed, 1 insertions(+), 1 deletions(-) New commits: commit 7489943c8fed0cccd0cbc992a97b96a4719c1be2 Author: Tim Daly <da...@ax...> Date: Fri Jul 25 23:08:25 2008 -0400 20080917 tpd books/bookvol10.2 remove duplicate function def in FLAGG |
From: <da...@us...> - 2008-09-17 04:33:51
|
Revision: 973 http://axiom.svn.sourceforge.net/axiom/?rev=973&view=rev Author: daly Date: 2008-09-17 04:34:02 +0000 (Wed, 17 Sep 2008) Log Message: ----------- 20080916 tpd books/ps/v102streamaggregate.ps 20080916 tpd books/ps/v102listaggregate.ps 20080916 tpd books/ps/v102finitelinearaggregate.ps corrected diagram 20080916 tpd books/ps/v102collection.ps corrected diagram 20080916 tpd books/bookvol10.2 more documentation Modified Paths: -------------- trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/books/ps/v102collection.ps trunk/axiom/books/ps/v102finitelinearaggregate.ps trunk/axiom/books/ps/v102listaggregate.ps trunk/axiom/books/ps/v102streamaggregate.ps trunk/axiom/changelog Modified: trunk/axiom/books/bookvol10.2.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.2.pamphlet 2008-09-13 05:27:50 UTC (rev 972) +++ trunk/axiom/books/bookvol10.2.pamphlet 2008-09-17 04:34:02 UTC (rev 973) @@ -9,7 +9,7 @@ %% pagehead consolidates standard page indexing %% \newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb} -\section{#1} +\section{#1 (#2)} \label{#1}% \label{#2}% \index{{#1}}% @@ -26,12 +26,19 @@ \newcommand{\pageto}[2]{% e.g. \pageto{abb}{name} \ \\${\bf\Rightarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} %% -%% pageback is a backward link to a referencing page +%% pagefrom is a backward link to a referencing page %% \newcommand{\pagefrom}[2]{% e.g. \pagefrom{name}{abb} \ \\${\bf\Leftarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} %% +%% cross will put the category and function in the index +%% +\newcommand{\cross}[2]{% e.g. \pagefrom{cat}{funcname} +\index{#1!#2}% +\index{#2!#1}} +%% + % special meanings for math characters \providecommand{\N}{\mbox{\bbold N}} \providecommand{\Natural}{\mbox{\bbold N}} @@ -273,6 +280,8 @@ coerce \end{verbatim} +\cross{KOERCE}{coerce} + This is directly exported but not implemented: \begin{verbatim} coerce : % -> S @@ -323,6 +332,7 @@ \pagepic{ps/v102konvert.ps}{KONVERT} {\bf See:}\\ +\pageto{Collection}{CLAGG} \pagefrom{Category}{CATEGORY} {\bf Exports:} @@ -330,6 +340,8 @@ convert \end{verbatim} +\cross{KONVERT}{convert} + This is directly exported but not implemented: \begin{verbatim} convert : % -> S @@ -447,12 +459,15 @@ ?.? \end{verbatim} +\cross{ELTAB}{?.?} + This syntax for elt is supported by the interpreter and compiler. This is directly exported but not implemented: \begin{verbatim} ?.? : (%,S) -> Index \end{verbatim} + <<category ELTAB Eltable>>= )abbrev category ELTAB Eltable ++ Author: Michael Monagan; revised by Manuel Bronstein and Manuel Bronstein @@ -512,6 +527,10 @@ coerce & retract & retractIfCan \end{tabular} +\cross{RETRACT}{coerce} +\cross{RETRACT}{retract} +\cross{RETRACT}{retractIfCan} + These are directly exported but not implemented: \begin{verbatim} coerce : S -> % @@ -658,6 +677,13 @@ empty? & eq? & less? & more? & sample & size? \end{tabular} +\cross{AGG}{empty?} +\cross{AGG}{eq?} +\cross{AGG}{less?} +\cross{AGG}{more?} +\cross{AGG}{sample} +\cross{AGG}{size?} + These are implemented by this category: \begin{verbatim} empty? : % -> Boolean @@ -762,6 +788,12 @@ elt & qelt & qsetelt! & setelt & ?.? \end{tabular} +\cross{ELTAGG}{elt} +\cross{ELTAGG}{qelt} +\cross{ELTAGG}{qsetelt!} +\cross{ELTAGG}{setelt} +\cross{ELTAGG}{?.?} + These are part of this category's direct exports: \begin{verbatim} elt : (%,Dom,Im) -> Im @@ -869,15 +901,42 @@ \pageto{IndexedAggregate}{IXAGG} \pageto{RecursiveAggregate}{RCAGG} \pagefrom{Aggregate}{AGG} +\pagefrom{Evalable}{EVALAB} +\pagefrom{SetCategory}{SETCAT} + {\bf Exports:}\\ \begin{tabular}{lllllll} any? & coerce & copy & count & empty & empty? & eq?\\ eval & every? & hash & latex & less? & map & map!\\ members & member? & more? & parts & sample & size? & \#?\\ - ?$=$? & ?\~{}=? & & & & &\\ + ?=? & ?\~{}=? & & & & &\\ \end{tabular} +\cross{HOAGG}{any?} +\cross{HOAGG}{coerce} +\cross{HOAGG}{copy} +\cross{HOAGG}{count} +\cross{HOAGG}{empty} +\cross{HOAGG}{empty?} +\cross{HOAGG}{eq?} +\cross{HOAGG}{eval} +\cross{HOAGG}{every?} +\cross{HOAGG}{hash} +\cross{HOAGG}{latex} +\cross{HOAGG}{less?} +\cross{HOAGG}{map} +\cross{HOAGG}{map!} +\cross{HOAGG}{members} +\cross{HOAGG}{member?} +\cross{HOAGG}{more?} +\cross{HOAGG}{parts} +\cross{HOAGG}{sample} +\cross{HOAGG}{size?} +\cross{HOAGG}{\#?} +\cross{HOAGG}{?=?} +\cross{HOAGG}{?\~{}=?} + These are directly exported but not implemented: \begin{verbatim} map : ((S -> S),%) -> % @@ -887,14 +946,19 @@ These are implemented by this category: \begin{verbatim} - any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate coerce : % -> OutputForm if S has SETCAT - count : (S,%) -> NonNegativeInteger if S has SETCAT and $ has finiteAggregate - count : ((S -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate - eval : (%,List Equation S) -> % if S has EVALAB S and S has SETCAT + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate members : % -> List S if $ has finiteAggregate - member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate #? : % -> NonNegativeInteger if $ has finiteAggregate ?=? : (%,%) -> Boolean if S has SETCAT \end{verbatim} @@ -913,9 +977,12 @@ These exports come from Evalable(a:Type): \begin{verbatim} - eval : (%,List S,List S) -> % if S has EVALAB S and S has SETCAT - eval : (%,S,S) -> % if S has EVALAB S and S has SETCAT - eval : (%,Equation S) -> % if S has EVALAB S and S has SETCAT + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT \end{verbatim} These exports come from SetCategory: @@ -1022,13 +1089,13 @@ "HomogeneousAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; "HomogeneousAggregate(a:Type)" -> "Aggregate()" -"Evalable(a:Type)" - [color="#00EE00",href="books/bookvol10.pamphlet"]; "HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)" -"SetCategory" - [color="#00EE00",href="books/bookvol10.pamphlet"]; "HomogeneousAggregate(a:Type)" -> "SetCategory" +"Evalable(a:Type)" [color="#00EE00",href="books/bookvol10.2.pamphlet"]; + +"SetCategory" [color="#00EE00",href="books/bookvol10.2.pamphlet"]; + "Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; "Aggregate()" -> "Type()" @@ -1060,6 +1127,34 @@ parts & sample & size? & \#? & ?=? & ?\~{}=? &\\ \end{tabular} +\cross{BGAGG}{any?} +\cross{BGAGG}{bag} +\cross{BGAGG}{coerce} +\cross{BGAGG}{copy} +\cross{BGAGG}{count} +\cross{BGAGG}{empty} +\cross{BGAGG}{empty?} +\cross{BGAGG}{eq?} +\cross{BGAGG}{eval} +\cross{BGAGG}{every?} +\cross{BGAGG}{extract!} +\cross{BGAGG}{hash} +\cross{BGAGG}{insert!} +\cross{BGAGG}{inspect} +\cross{BGAGG}{latex} +\cross{BGAGG}{less?} +\cross{BGAGG}{map} +\cross{BGAGG}{map!} +\cross{BGAGG}{member?} +\cross{BGAGG}{members} +\cross{BGAGG}{more?} +\cross{BGAGG}{parts} +\cross{BGAGG}{sample} +\cross{BGAGG}{size?} +\cross{BGAGG}{\#?} +\cross{BGAGG}{?=?} +\cross{BGAGG}{?\~{}=?} + These are directly exported but not implemented: \begin{verbatim} extract! : % -> S @@ -1074,18 +1169,25 @@ These exports come from HomogeneousAggregate: \begin{verbatim} - any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate coerce : % -> OutputForm if S has SETCAT copy : % -> % - count : (S,%) -> NonNegativeInteger if S has SETCAT and $ has finiteAggregate - count : ((S -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate empty : () -> % empty? : % -> Boolean eq? : (%,%) -> Boolean - eval : (%,List S,List S) -> % if S has EVALAB S and S has SETCAT - eval : (%,S,S) -> % if S has EVALAB S and S has SETCAT - eval : (%,Equation S) -> % if S has EVALAB S and S has SETCAT - eval : (%,List Equation S) -> % if S has EVALAB S and S has SETCAT + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate hash : % -> SingleInteger if S has SETCAT latex : % -> String if S has SETCAT @@ -1093,7 +1195,8 @@ map : ((S -> S),%) -> % map! : ((S -> S),%) -> % if $ has shallowlyMutable members : % -> List S if $ has finiteAggregate - member? : (S,%) -> Boolean if S has SETCAT and $ has finiteAggregate + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate more? : (%,NonNegativeInteger) -> Boolean parts : % -> List S if $ has finiteAggregate sample : () -> % @@ -1182,7 +1285,113 @@ {\bf See:}\\ \pageto{DictionaryOperations}{DIOPS} \pageto{LinearAggregate}{LNAGG} +\pagefrom{ConvertibleTo}{KONVERT} \pagefrom{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + any? & coerce & construct & copy & convert & count\\ + empty & empty? & eq? & eval & every? & find\\ + hash & latex & less? & map & map! & member?\\ + members & more? & parts & reduce & remove & removeDuplicates\\ + sample & select & size? & \#? & ?=? & ?\~{}=? +\end{tabular} + +\cross{CLAGG}{any?} +\cross{CLAGG}{coerce} +\cross{CLAGG}{construct} +\cross{CLAGG}{copy} +\cross{CLAGG}{convert} +\cross{CLAGG}{count} +\cross{CLAGG}{empty} +\cross{CLAGG}{empty?} +\cross{CLAGG}{eq?} +\cross{CLAGG}{eval} +\cross{CLAGG}{every?} +\cross{CLAGG}{find} +\cross{CLAGG}{hash} +\cross{CLAGG}{latex} +\cross{CLAGG}{less?} +\cross{CLAGG}{map} +\cross{CLAGG}{map!} +\cross{CLAGG}{member?} +\cross{CLAGG}{members} +\cross{CLAGG}{more?} +\cross{CLAGG}{parts} +\cross{CLAGG}{reduce} +\cross{CLAGG}{remove} +\cross{CLAGG}{removeDuplicates} +\cross{CLAGG}{sample} +\cross{CLAGG}{select} +\cross{CLAGG}{size?} +\cross{CLAGG}{\#?} +\cross{CLAGG}{?=?} +\cross{CLAGG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + construct: List S -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + find : ((S -> Boolean),%) -> Union(S,"failed") + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT and $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%) -> S if $ has finiteAggregate + remove : (S,%) -> % if S has SETCAT and $ has finiteAggregate + remove : ((S -> Boolean),%) -> % if $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT and $ has finiteAggregate + select : ((S -> Boolean),%) -> % if $ has finiteAggregate + #? : % -> NonNegativeInteger if $ has finiteAggregate +\end{verbatim} + +These exports come from HomogeneousAggregate(a:Type): +\begin{verbatim} + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + sample : () -> % + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + size? : (%,NonNegativeInteger) -> Boolean + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + +These exports come from ConvertibleTo(a:Type): +\begin{verbatim} + convert : % -> InputForm if S has KONVERT INFORM +\end{verbatim} + <<category CLAGG Collection>>= )abbrev category CLAGG Collection ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1294,6 +1503,7 @@ "Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)" +"Collection(a:Type)" -> "ConvertibleTo(InputForm)" "HomogeneousAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"]; @@ -1305,6 +1515,14 @@ "Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"]; "Type()" -> "Category" +"ConvertibleTo(InputForm)" + [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(a:Type)" + [color="#00EE00",href="books/bookvol10.2.pamphlet"]; +"ConvertibleTo(a:Type)" -> "Category" + "Category" [color=lightblue,href="books/bookvol10.2.pamphlet"]; } @@ -1318,6 +1536,122 @@ \pageto{TableAggregate}{TBAGG} \pagefrom{EltableAggregate}{ELTAGG} \pagefrom{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + any? & coerce & copy & count & elt & empty & empty? \\ + entries & entry? & eq? & eval & every? & fill! & first \\ + hash & index? & indices & latex & less? & map & map! \\ + maxIndex & member? & members & minIndex & more? & parts & qelt \\ + qsetelt! & sample & setelt & size? & swap! & ?.? & ?\~{}=?\\ + \#? & ?=? & & & & &\\ +\end{tabular} + +\cross{IXAGG}{any?} +\cross{IXAGG}{coerce} +\cross{IXAGG}{copy} +\cross{IXAGG}{count} +\cross{IXAGG}{elt} +\cross{IXAGG}{empty} +\cross{IXAGG}{empty?} +\cross{IXAGG}{entries} +\cross{IXAGG}{entry?} +\cross{IXAGG}{eq?} +\cross{IXAGG}{eval} +\cross{IXAGG}{every?} +\cross{IXAGG}{fill!} +\cross{IXAGG}{first} +\cross{IXAGG}{hash} +\cross{IXAGG}{index?} +\cross{IXAGG}{indices} +\cross{IXAGG}{latex} +\cross{IXAGG}{less?} +\cross{IXAGG}{map} +\cross{IXAGG}{map!} +\cross{IXAGG}{maxIndex} +\cross{IXAGG}{member?} +\cross{IXAGG}{members} +\cross{IXAGG}{minIndex} +\cross{IXAGG}{more?} +\cross{IXAGG}{parts} +\cross{IXAGG}{qelt} +\cross{IXAGG}{qsetelt!} +\cross{IXAGG}{sample} +\cross{IXAGG}{setelt} +\cross{IXAGG}{size?} +\cross{IXAGG}{swap!} +\cross{IXAGG}{?.?} +\cross{IXAGG}{?\~{}=?} +\cross{IXAGG}{\#?} +\cross{IXAGG}{?=?} + +These are directly exported but not implemented: +\begin{verbatim} + index? : (Index,%) -> Boolean + indices : % -> List Index +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + elt : (%,Index,Entry) -> Entry + entries : % -> List Entry + entry? : (Entry,%) -> Boolean + if $ has finiteAggregate and Entry has SETCAT + fill! : (%,Entry) -> % if $ has shallowlyMutable + first : % -> Entry if Index has ORDSET + map : ((Entry -> Entry),%) -> % + map! : ((Entry -> Entry),%) -> % if $ has shallowlyMutable + maxIndex : % -> Index if Index has ORDSET + minIndex : % -> Index if Index has ORDSET + swap! : (%,Index,Index) -> Void if $ has shallowlyMutable +\end{verbatim} + +These exports come from HomogeneousAggregate(a:Type): +\begin{verbatim} + any? : ((Entry -> Boolean),%) -> Boolean + if $ has finiteAggregate + coerce : % -> OutputForm if Entry has SETCAT + copy : % -> % + count : (Entry,%) -> NonNegativeInteger + if Entry has SETCAT and $ has finiteAggregate + count : ((Entry -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List Entry,List Entry) -> % + if Entry has EVALAB Entry and Entry has SETCAT + eval : (%,Entry,Entry) -> % + if Entry has EVALAB Entry and Entry has SETCAT + eval : (%,Equation Entry) -> % + if Entry has EVALAB Entry and Entry has SETCAT + eval : (%,List Equation Entry) -> % + if Entry has EVALAB Entry and Entry has SETCAT + every? : ((Entry -> Boolean),%) -> Boolean + if $ has finiteAggregate + hash : % -> SingleInteger if Entry has SETCAT + latex : % -> String if Entry has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + member? : (Entry,%) -> Boolean + if Entry has SETCAT and $ has finiteAggregate + members : % -> List Entry if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List Entry if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + ?~=? : (%,%) -> Boolean if Entry has SETCAT + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if Entry has SETCAT +\end{verbatim} + +These exports come from EltableAggregate(a:SetCategory,b:Type): +\begin{verbatim} + qelt : (%,Index) -> Entry + qsetelt! : (%,Index,Entry) -> Entry if $ has shallowlyMutable + setelt : (%,Index,Entry) -> Entry if $ has shallowlyMutable + ?.? : (%,Index) -> Entry +\end{verbatim} + <<category IXAGG IndexedAggregate>>= )abbrev category IXAGG IndexedAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1473,9 +1807,116 @@ {\bf See:}\\ \pageto{BinaryRecursiveAggregate}{BRAGG} \pageto{DoublyLinkedAggregate}{DLAGG} -\pageto{StreamAggregate}{STAGG} \pageto{UnaryRecursiveAggregate}{URAGG} \pagefrom{HomogeneousAggregate}{HOAGG} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + any? & child? & children & coerce & copy & count \\ + cyclic? & distance & empty & empty? & eq? & eval \\ + every? & hash & latex & leaf? & leaves & less? \\ + map & map! & member? & members & more? & nodes \\ + node? & parts & sample & setchildren! & setelt & setvalue!\\ + size? & value & ?.value & ?\~{}=? & \#? & ?=? \\ +\end{tabular} + +\cross{RCAGG}{any?} +\cross{RCAGG}{child?} +\cross{RCAGG}{children} +\cross{RCAGG}{coerce} +\cross{RCAGG}{copy} +\cross{RCAGG}{count} +\cross{RCAGG}{cyclic?} +\cross{RCAGG}{distance} +\cross{RCAGG}{empty} +\cross{RCAGG}{empty?} +\cross{RCAGG}{eq?} +\cross{RCAGG}{eval} +\cross{RCAGG}{every?} +\cross{RCAGG}{hash} +\cross{RCAGG}{latex} +\cross{RCAGG}{leaf?} +\cross{RCAGG}{leaves} +\cross{RCAGG}{less?} +\cross{RCAGG}{map} +\cross{RCAGG}{map!} +\cross{RCAGG}{member?} +\cross{RCAGG}{members} +\cross{RCAGG}{more?} +\cross{RCAGG}{nodes} +\cross{RCAGG}{node?} +\cross{RCAGG}{parts} +\cross{RCAGG}{sample} +\cross{RCAGG}{setchildren!} +\cross{RCAGG}{setelt} +\cross{RCAGG}{setvalue!} +\cross{RCAGG}{size?} +\cross{RCAGG}{value} +\cross{RCAGG}{?.value} +\cross{RCAGG}{?\~{}=?} +\cross{RCAGG}{\#?} +\cross{RCAGG}{?=?} + +These are directly exported but not implemented: +\begin{verbatim} + children : % -> List % + cyclic? : % -> Boolean + distance : (%,%) -> Integer + nodes : % -> List % + leaf? : % -> Boolean + leaves : % -> List S + node? : (%,%) -> Boolean if S has SETCAT + setchildren! : (%,List %) -> % if $ has shallowlyMutable + setvalue! : (%,S) -> S if $ has shallowlyMutable + value : % -> S +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + child? : (%,%) -> Boolean if S has SETCAT + setelt : (%,value,S) -> S if $ has shallowlyMutable + ?.value : (%,value) -> S +\end{verbatim} + +These exports come from HomogeneousAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + ?~=? : (%,%) -> Boolean if S has SETCAT + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category RCAGG RecursiveAggregate>>= )abbrev category RCAGG RecursiveAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1582,6 +2023,136 @@ {\bf See:}\\ \pagefrom{RecursiveAggregate}{RCAGG} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + any? & children & child? & coerce & copy & count \\ + count & cyclic? & distance & empty & empty? & eq? \\ + eval & eval & eval & eval & every? & hash \\ + latex & leaf? & leaves & left & less? & map \\ + map! & member? & members & more? & nodes & node? \\ + parts & right & sample & setchildren! & setelt & setelt \\ + setelt & setleft! & setright! & setvalue! & size? & value \\ + \#? & ?=? & ?\~{}=? & ?.right & ?.left & ?.value \\ +\end{tabular} + +\cross{BRAGG}{any?} +\cross{BRAGG}{children} +\cross{BRAGG}{child?} +\cross{BRAGG}{coerce} +\cross{BRAGG}{copy} +\cross{BRAGG}{count} +\cross{BRAGG}{count} +\cross{BRAGG}{cyclic?} +\cross{BRAGG}{distance} +\cross{BRAGG}{empty} +\cross{BRAGG}{empty?} +\cross{BRAGG}{eq?} +\cross{BRAGG}{eval} +\cross{BRAGG}{eval} +\cross{BRAGG}{eval} +\cross{BRAGG}{eval} +\cross{BRAGG}{every?} +\cross{BRAGG}{hash} +\cross{BRAGG}{latex} +\cross{BRAGG}{leaf?} +\cross{BRAGG}{leaves} +\cross{BRAGG}{left} +\cross{BRAGG}{less?} +\cross{BRAGG}{map} +\cross{BRAGG}{map!} +\cross{BRAGG}{member?} +\cross{BRAGG}{members} +\cross{BRAGG}{more?} +\cross{BRAGG}{nodes} +\cross{BRAGG}{node?} +\cross{BRAGG}{parts} +\cross{BRAGG}{right} +\cross{BRAGG}{sample} +\cross{BRAGG}{setchildren!} +\cross{BRAGG}{setelt} +\cross{BRAGG}{setelt} +\cross{BRAGG}{setelt} +\cross{BRAGG}{setleft!} +\cross{BRAGG}{setright!} +\cross{BRAGG}{setvalue!} +\cross{BRAGG}{size?} +\cross{BRAGG}{value} +\cross{BRAGG}{\#?} +\cross{BRAGG}{?=?} +\cross{BRAGG}{?\~{}=?} +\cross{BRAGG}{?.right} +\cross{BRAGG}{?.left} +\cross{BRAGG}{?.value} + +These are directly exported but not implemented: +\begin{verbatim} + left : % -> % + right : % -> % + setelt : (%,right,%) -> % if $ has shallowlyMutable + setelt : (%,left,%) -> % if $ has shallowlyMutable + setleft! : (%,%) -> % if $ has shallowlyMutable + setright! : (%,%) -> % if $ has shallowlyMutable +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + children : % -> List % + coerce : % -> OutputForm if S has SETCAT + cyclic? : % -> Boolean + leaf? : % -> Boolean + leaves : % -> List S + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + nodes : % -> List % + node? : (%,%) -> Boolean if S has SETCAT + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?.right : (%,right) -> % + ?.left : (%,left) -> % +\end{verbatim} + +These exports come from RecursiveAggregate(a:Type) +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + child? : (%,%) -> Boolean if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + distance : (%,%) -> Integer + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + setchildren! : (%,List %) -> % if $ has shallowlyMutable + setelt : (%,value,S) -> S if $ has shallowlyMutable + setvalue! : (%,S) -> S if $ has shallowlyMutable + size? : (%,NonNegativeInteger) -> Boolean + value : % -> S + ?~=? : (%,%) -> Boolean if S has SETCAT + ?.value : (%,value) -> S +\end{verbatim} + <<category BRAGG BinaryRecursiveAggregate>>= )abbrev category BRAGG BinaryRecursiveAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1744,6 +2315,128 @@ \pageto{MultiDictionary}{MDAGG} \pagefrom{BagAggregate}{BGAGG} \pagefrom{Collection}{CLAGG} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + any? & bag & coerce & construct & convert & copy \\ + count & dictionary & empty & empty? & eq? & eval \\ + every? & extract! & find & hash & insert! & inspect \\ + latex & less? & map & map! & member? & members \\ + more? & parts & reduce & remove & remove! & removeDuplicates \\ + sample & select & select! & size? & \#? & ?=? \\ + ?\~{}=? &&&&&\\ +\end{tabular} + +\cross{DIOPS}{any?} +\cross{DIOPS}{bag} +\cross{DIOPS}{coerce} +\cross{DIOPS}{construct} +\cross{DIOPS}{convert} +\cross{DIOPS}{copy} +\cross{DIOPS}{count} +\cross{DIOPS}{dictionary} +\cross{DIOPS}{empty} +\cross{DIOPS}{empty?} +\cross{DIOPS}{eq?} +\cross{DIOPS}{eval} +\cross{DIOPS}{every?} +\cross{DIOPS}{extract!} +\cross{DIOPS}{find} +\cross{DIOPS}{hash} +\cross{DIOPS}{insert!} +\cross{DIOPS}{inspect} +\cross{DIOPS}{latex} +\cross{DIOPS}{less?} +\cross{DIOPS}{map} +\cross{DIOPS}{map!} +\cross{DIOPS}{member?} +\cross{DIOPS}{members} +\cross{DIOPS}{more?} +\cross{DIOPS}{parts} +\cross{DIOPS}{reduce} +\cross{DIOPS}{remove} +\cross{DIOPS}{remove!} +\cross{DIOPS}{removeDuplicates} +\cross{DIOPS}{sample} +\cross{DIOPS}{select} +\cross{DIOPS}{select!} +\cross{DIOPS}{size?} +\cross{DIOPS}{\#?} +\cross{DIOPS}{?=?} +\cross{DIOPS}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + dictionary : List S -> % + remove! : ((S -> Boolean),%) -> % if $ has finiteAggregate + remove! : (S,%) -> % if $ has finiteAggregate + select! : ((S -> Boolean),%) -> % if $ has finiteAggregate +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + coerce : % -> OutputForm if S has SETCAT + construct : List S -> % + copy : % -> % + dictionary : () -> % +\end{verbatim} + +These exports come from BagAggregate(a:SetCategory): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + bag : List S -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + extract! : % -> S + hash : % -> SingleInteger if S has SETCAT + insert! : (S,%) -> % + inspect : % -> S + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + +These exports come from Collection(a:SetCategory) +\begin{verbatim} + convert : % -> InputForm if S has KONVERT INFORM + find : ((S -> Boolean),%) -> Union(S,"failed") + reduce : (((S,S) -> S),%) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT and $ has finiteAggregate + remove : ((S -> Boolean),%) -> % if $ has finiteAggregate + remove : (S,%) -> % if S has SETCAT and $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT and $ has finiteAggregate + select : ((S -> Boolean),%) -> % if $ has finiteAggregate +\end{verbatim} + <<category DIOPS DictionaryOperations>>= )abbrev category DIOPS DictionaryOperations ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1850,6 +2543,132 @@ {\bf See:}\\ \pagefrom{RecursiveAggregate}{RCAGG} + +{\bf Exports:}\\ +\begin{tabular}{llllll} + any? & children & child? & coerce & concat! & copy \\ + count & count & cyclic? & distance & empty & empty? \\ + eq? & eval & eval & eval & eval & every? \\ + hash & head & last & latex & leaf? & leaves \\ + less? & map & map! & member? & members & more? \\ + next & nodes & node? & parts & previous & sample \\ + setchildren! & setelt & setnext! & setprevious! & setvalue! & size? \\ + tail & value & \#? & ?=? & ?\~{}=? & ?.value \\ +\end{tabular} + +\cross{DLAGG}{any?} +\cross{DLAGG}{children} +\cross{DLAGG}{child?} +\cross{DLAGG}{coerce} +\cross{DLAGG}{concat!} +\cross{DLAGG}{copy} +\cross{DLAGG}{count} +\cross{DLAGG}{count} +\cross{DLAGG}{cyclic?} +\cross{DLAGG}{distance} +\cross{DLAGG}{empty} +\cross{DLAGG}{empty?} +\cross{DLAGG}{eq?} +\cross{DLAGG}{eval} +\cross{DLAGG}{eval} +\cross{DLAGG}{eval} +\cross{DLAGG}{eval} +\cross{DLAGG}{every?} +\cross{DLAGG}{hash} +\cross{DLAGG}{head} +\cross{DLAGG}{last} +\cross{DLAGG}{latex} +\cross{DLAGG}{leaf?} +\cross{DLAGG}{leaves} +\cross{DLAGG}{less?} +\cross{DLAGG}{map} +\cross{DLAGG}{map!} +\cross{DLAGG}{member?} +\cross{DLAGG}{members} +\cross{DLAGG}{more?} +\cross{DLAGG}{next} +\cross{DLAGG}{nodes} +\cross{DLAGG}{node?} +\cross{DLAGG}{parts} +\cross{DLAGG}{previous} +\cross{DLAGG}{sample} +\cross{DLAGG}{setchildren!} +\cross{DLAGG}{setelt} +\cross{DLAGG}{setnext!} +\cross{DLAGG}{setprevious!} +\cross{DLAGG}{setvalue!} +\cross{DLAGG}{size?} +\cross{DLAGG}{tail} +\cross{DLAGG}{value} +\cross{DLAGG}{\#?} +\cross{DLAGG}{?=?} +\cross{DLAGG}{?\~{}=?} +\cross{DLAGG}{?.value} + +These are directly exported but not implemented: +\begin{verbatim} + concat! : (%,%) -> % if $ has shallowlyMutable + head : % -> % + last : % -> S + next : % -> % + previous : % -> % + setnext! : (%,%) -> % if $ has shallowlyMutable + setprevious! : (%,%) -> % if $ has shallowlyMutable + tail : % -> % +\end{verbatim} + +These exports come from RecursiveAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + children : % -> List % + child? : (%,%) -> Boolean if S has SETCAT + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + cyclic? : % -> Boolean + distance : (%,%) -> Integer + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + leaf? : % -> Boolean + leaves : % -> List S + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + nodes : % -> List % + node? : (%,%) -> Boolean if S has SETCAT + parts : % -> List S if $ has finiteAggregate + sample : () -> % + setchildren! : (%,List %) -> % if $ has shallowlyMutable + setelt : (%,value,S) -> S if $ has shallowlyMutable + setvalue! : (%,S) -> S if $ has shallowlyMutable + size? : (%,NonNegativeInteger) -> Boolean + value : % -> S + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT + ?.value : (%,value) -> S +\end{verbatim} + <<category DLAGG DoublyLinkedAggregate>>= )abbrev category DLAGG DoublyLinkedAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -1947,6 +2766,166 @@ \pageto{StreamAggregate}{STAGG} \pagefrom{Collection}{CLAGG} \pagefrom{IndexedAggregate}{IXAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + any? & coerce & concat & construct & convert \\ + copy & count & delete & elt & empty \\ + empty? & entries & entry? & eq? & eval \\ + every? & fill! & find & first & hash \\ + index? & indices & insert & latex & less? \\ + map & map! & maxIndex & member? & members \\ + minIndex & more? & new & parts & qelt \\ + qsetelt! & reduce & reduce & reduce & remove \\ + remove & removeDuplicates & sample & select & setelt \\ + setelt & size? & swap! & ?\~{}=? & \#? \\ + ?=? & ?.? &&&\\ +\end{tabular} + +\cross{LNAGG}{any?} +\cross{LNAGG}{coerce} +\cross{LNAGG}{concat} +\cross{LNAGG}{construct} +\cross{LNAGG}{convert} +\cross{LNAGG}{copy} +\cross{LNAGG}{count} +\cross{LNAGG}{delete} +\cross{LNAGG}{elt} +\cross{LNAGG}{empty} +\cross{LNAGG}{empty?} +\cross{LNAGG}{entries} +\cross{LNAGG}{entry?} +\cross{LNAGG}{eq?} +\cross{LNAGG}{eval} +\cross{LNAGG}{every?} +\cross{LNAGG}{fill!} +\cross{LNAGG}{find} +\cross{LNAGG}{first} +\cross{LNAGG}{hash} +\cross{LNAGG}{index?} +\cross{LNAGG}{indices} +\cross{LNAGG}{insert} +\cross{LNAGG}{latex} +\cross{LNAGG}{less?} +\cross{LNAGG}{map} +\cross{LNAGG}{map!} +\cross{LNAGG}{maxIndex} +\cross{LNAGG}{member?} +\cross{LNAGG}{members} +\cross{LNAGG}{minIndex} +\cross{LNAGG}{more?} +\cross{LNAGG}{new} +\cross{LNAGG}{parts} +\cross{LNAGG}{qelt} +\cross{LNAGG}{qsetelt!} +\cross{LNAGG}{reduce} +\cross{LNAGG}{reduce} +\cross{LNAGG}{reduce} +\cross{LNAGG}{remove} +\cross{LNAGG}{remove} +\cross{LNAGG}{removeDuplicates} +\cross{LNAGG}{sample} +\cross{LNAGG}{select} +\cross{LNAGG}{setelt} +\cross{LNAGG}{setelt} +\cross{LNAGG}{size?} +\cross{LNAGG}{swap!} +\cross{LNAGG}{?\~{}=?} +\cross{LNAGG}{\#?} +\cross{LNAGG}{?=?} +\cross{LNAGG}{?.?} + +These are directly exported but not implemented: +\begin{verbatim} + concat : (%,%) -> % + concat : List % -> % + delete : (%,Integer) -> % + delete : (%,UniversalSegment Integer) -> % + insert : (%,%,Integer) -> % + map : (((S,S) -> S),%,%) -> % + new : (NonNegativeInteger,S) -> % + setelt : (%,UniversalSegment Integer,S) -> S + if $ has shallowlyMutable + ?.? : (%,UniversalSegment Integer) -> % +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + concat : (%,S) -> % + concat : (S,%) -> % + index? : (Integer,%) -> Boolean + indices : % -> List Integer + insert : (S,%,Integer) -> % + maxIndex : % -> Integer if Integer has ORDSET +\end{verbatim} + +These exports come from IndexedAggregate(a:SetCategory,b:Type) +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + elt : (%,Integer,S) -> S + empty : () -> % + empty? : % -> Boolean + entries : % -> List S + entry? : (S,%) -> Boolean + if $ has finiteAggregate and S has SETCAT + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + fill! : (%,S) -> % if $ has shallowlyMutable + first : % -> S if Integer has ORDSET + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + minIndex : % -> Integer if Integer has ORDSET + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + qelt : (%,Integer) -> S + qsetelt! : (%,Integer,S) -> S if $ has shallowlyMutable + sample : () -> % + setelt : (%,Integer,S) -> S if $ has shallowlyMutable + size? : (%,NonNegativeInteger) -> Boolean + swap! : (%,Integer,Integer) -> Void if $ has shallowlyMutable + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?.? : (%,Integer) -> S + ?~=? : (%,%) -> Boolean if S has SETCAT + ?=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + +These exports come from Collection(a:Type): +\begin{verbatim} + construct : List S -> % + convert : % -> InputForm if S has KONVERT INFORM + find : ((S -> Boolean),%) -> Union(S,"failed") + reduce : (((S,S) -> S),%) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT and $ has finiteAggregate + remove : ((S -> Boolean),%) -> % if $ has finiteAggregate + remove : (S,%) -> % if S has SETCAT and $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT and $ has finiteAggregate + select : ((S -> Boolean),%) -> % if $ has finiteAggregate +\end{verbatim} + <<category LNAGG LinearAggregate>>= )abbrev category LNAGG LinearAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2088,6 +3067,97 @@ {\bf See:}\\ \pagefrom{BagAggregate}{BGAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + any? & bag & copy & coerce & count & empty & empty? \\ + eq? & eval & every? & extract! & hash & insert! & inspect \\ + latex & less? & map & map! & max & member? & members \\ + merge & merge! & more? & parts & sample & size? & \#? \\ + ?=? & ?\~{}=? &\\ +\end{tabular} + +\cross{PRQAGG}{any?} +\cross{PRQAGG}{bag} +\cross{PRQAGG}{copy} +\cross{PRQAGG}{coerce} +\cross{PRQAGG}{count} +\cross{PRQAGG}{empty} +\cross{PRQAGG}{empty?} +\cross{PRQAGG}{eq?} +\cross{PRQAGG}{eval} +\cross{PRQAGG}{every?} +\cross{PRQAGG}{extract!} +\cross{PRQAGG}{hash} +\cross{PRQAGG}{insert!} +\cross{PRQAGG}{inspect} +\cross{PRQAGG}{latex} +\cross{PRQAGG}{less?} +\cross{PRQAGG}{map} +\cross{PRQAGG}{map!} +\cross{PRQAGG}{max} +\cross{PRQAGG}{member?} +\cross{PRQAGG}{members} +\cross{PRQAGG}{merge} +\cross{PRQAGG}{merge!} +\cross{PRQAGG}{more?} +\cross{PRQAGG}{parts} +\cross{PRQAGG}{sample} +\cross{PRQAGG}{size?} +\cross{PRQAGG}{\#?} +\cross{PRQAGG}{?=?} +\cross{PRQAGG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + max : % -> S + merge : (%,%) -> % + merge! : (%,%) -> % +\end{verbatim} + +These exports come from PriorityQueueAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + bag : List S -> % + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + extract! : % -> S + hash : % -> SingleInteger if S has SETCAT + insert! : (S,%) -> % + inspect : % -> S + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category PRQAGG PriorityQueueAggregate>>= )abbrev category PRQAGG PriorityQueueAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2168,6 +3238,103 @@ {\bf See:}\\ \pageto{DequeueAggregate}{DQAGG} \pagefrom{BagAggregate}{BGAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + any? & bag & back & coerce & copy & count & dequeue! \\ + empty & empty? & enqueue! & eq? & eval & every? & extract! \\ + front & hash & insert! & inspect & latex & length & less? \\ + map & map! & member? & members & more? & parts & rotate! \\ + sample & size? & \#? & ?=? & ?\~{}=? &&\\ +\end{tabular} + +\cross{QUAGG}{any?} +\cross{QUAGG}{bag} +\cross{QUAGG}{back} +\cross{QUAGG}{coerce} +\cross{QUAGG}{copy} +\cross{QUAGG}{count} +\cross{QUAGG}{dequeue!} +\cross{QUAGG}{empty} +\cross{QUAGG}{empty?} +\cross{QUAGG}{enqueue!} +\cross{QUAGG}{eq?} +\cross{QUAGG}{eval} +\cross{QUAGG}{every?} +\cross{QUAGG}{extract!} +\cross{QUAGG}{front} +\cross{QUAGG}{hash} +\cross{QUAGG}{insert!} +\cross{QUAGG}{inspect} +\cross{QUAGG}{latex} +\cross{QUAGG}{length} +\cross{QUAGG}{less?} +\cross{QUAGG}{map} +\cross{QUAGG}{map!} +\cross{QUAGG}{member?} +\cross{QUAGG}{members} +\cross{QUAGG}{more?} +\cross{QUAGG}{parts} +\cross{QUAGG}{rotate!} +\cross{QUAGG}{sample} +\cross{QUAGG}{size?} +\cross{QUAGG}{\#?} +\cross{QUAGG}{?=?} +\cross{QUAGG}{?\~{}=?} + +These are implemented by this category: +\begin{verbatim} + back : % -> S + dequeue! : % -> S + enqueue! : (S,%) -> S + front : % -> S + length : % -> NonNegativeInteger + rotate! : % -> % +\end{verbatim} + +These exports come from BagAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + bag : List S -> % + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + extract! : % -> S + hash : % -> SingleInteger if S has SETCAT + insert! : (S,%) -> % + inspect : % -> S + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category QUAGG QueueAggregate>>= )abbrev category QUAGG QueueAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2253,6 +3420,99 @@ {\bf See:}\\ \pageto{DequeueAggregate}{DQAGG} \pagefrom{BagAggregate}{BGAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + any? & bag & coerce & copy & count & depth & empty \\ + empty? & eq? & eval & every? & extract! & hash & insert! \\ + inspect & latex & less? & map & map! & member? & members \\ + more? & parts & pop! & push! & sample & size? & top \\ + \#? & ?=? & ?\~{}=? &&&&\\ +\end{tabular} + +\cross{SKAGG}{any?} +\cross{SKAGG}{bag} +\cross{SKAGG}{coerce} +\cross{SKAGG}{copy} +\cross{SKAGG}{count} +\cross{SKAGG}{depth} +\cross{SKAGG}{empty} +\cross{SKAGG}{empty?} +\cross{SKAGG}{eq?} +\cross{SKAGG}{eval} +\cross{SKAGG}{every?} +\cross{SKAGG}{extract!} +\cross{SKAGG}{hash} +\cross{SKAGG}{insert!} +\cross{SKAGG}{inspect} +\cross{SKAGG}{latex} +\cross{SKAGG}{less?} +\cross{SKAGG}{map} +\cross{SKAGG}{map!} +\cross{SKAGG}{member?} +\cross{SKAGG}{members} +\cross{SKAGG}{more?} +\cross{SKAGG}{parts} +\cross{SKAGG}{pop!} +\cross{SKAGG}{push!} +\cross{SKAGG}{sample} +\cross{SKAGG}{size?} +\cross{SKAGG}{top} +\cross{SKAGG}{\#?} +\cross{SKAGG}{?=?} +\cross{SKAGG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + depth : % -> NonNegativeInteger + pop! : % -> S + push! : (S,%) -> S + top : % -> S +\end{verbatim} + +These exports come from BagAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + bag : List S -> % + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + extract! : % -> S + hash : % -> SingleInteger if S has SETCAT + insert! : (S,%) -> % + inspect : % -> S + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + sample : () -> % + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category SKAGG StackAggregate>>= )abbrev category SKAGG StackAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2330,7 +3590,167 @@ \pagepic{ps/v102unaryrecursiveaggregate.ps}{URAGG} {\bf See:}\\ +\pageto{StreamAggregate}{STAGG} \pagefrom{RecursiveAggregate}{RCAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + any? & children & child? & coerce & concat \\ + concat! & copy & count & cycleEntry & cycleLength\\ + cycleSplit! & cycleTail & cyclic? & distance & empty \\ + empty? & eq? & eval & every? & first \\ + hash & last & latex & leaf? & leaves \\ + less? & map & map! & member? & members \\ + more? & nodes & node? & parts & rest \\ + sample & second & setchildren! & setelt & setfirst! \\ + setlast! & setrest! & setvalue! & size? & split! \\ + tail & third & value & \#? & ?.last \\ + ?.rest & ?.first & ?.value & ?=? & ?\~{}=? \\ +\end{tabular} + +\cross{URAGG}{any?} +\cross{URAGG}{children} +\cross{URAGG}{child?} +\cross{URAGG}{coerce} +\cross{URAGG}{concat} +\cross{URAGG}{concat!} +\cross{URAGG}{copy} +\cross{URAGG}{count} +\cross{URAGG}{cycleEntry} +\cross{URAGG}{cycleLength} +\cross{URAGG}{cycleSplit!} +\cross{URAGG}{cycleTail} +\cross{URAGG}{cyclic?} +\cross{URAGG}{distance} +\cross{URAGG}{empty} +\cross{URAGG}{empty?} +\cross{URAGG}{eq?} +\cross{URAGG}{eval} +\cross{URAGG}{every?} +\cross{URAGG}{first} +\cross{URAGG}{hash} +\cross{URAGG}{last} +\cross{URAGG}{latex} +\cross{URAGG}{leaf?} +\cross{URAGG}{leaves} +\cross{URAGG}{less?} +\cross{URAGG}{map} +\cross{URAGG}{map!} +\cross{URAGG}{member?} +\cross{URAGG}{members} +\cross{URAGG}{more?} +\cross{URAGG}{nodes} +\cross{URAGG}{node?} +\cross{URAGG}{parts} +\cross{URAGG}{rest} +\cross{URAGG}{sample} +\cross{URAGG}{second} +\cross{URAGG}{setchildren!} +\cross{URAGG}{setelt} +\cross{URAGG}{setfirst!} +\cross{URAGG}{setlast!} +\cross{URAGG}{setrest!} +\cross{URAGG}{setvalue!} +\cross{URAGG}{size?} +\cross{URAGG}{split!} +\cross{URAGG}{tail} +\cross{URAGG}{third} +\cross{URAGG}{value} +\cross{URAGG}{\#?} +\cross{URAGG}{?.last} +\cross{URAGG}{?.rest} +\cross{URAGG}{?.first} +\cross{URAGG}{?.value} +\cross{URAGG}{?=?} +\cross{URAGG}{?\~{}=?} + +These are directly exported but not implemented: +\begin{verbatim} + concat : (S,%) -> % + concat! : (%,S) -> % if $ has shallowlyMutable + concat! : (%,%) -> % if $ has shallowlyMutable + first : % -> S + first : (%,NonNegativeInteger) -> % + rest : % -> % + setfirst! : (%,S) -> S if $ has shallowlyMutable +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + children : % -> List % + concat : (%,%) -> % + cycleEntry : % -> % + cycleLength : % -> NonNegativeInteger + cycleSplit! : % -> % if $ has shallowlyMutable + cycleTail : % -> % + cyclic? : % -> Boolean + last : % -> S + last : (%,NonNegativeInteger) -> % + leaf? : % -> Boolean + less? : (%,NonNegativeInteger) -> Boolean + more? : (%,NonNegativeInteger) -> Boolean + nodes : % -> List % + node? : (%,%) -> Boolean if S has SETCAT + rest : (%,NonNegativeInteger) -> % + second : % -> S + setchildren! : (%,List %) -> % if $ has shallowlyMutable + setelt : (%,first,S) -> S if $ has shallowlyMutable + setelt : (%,last,S) -> S if $ has shallowlyMutable + setelt : (%,rest,%) -> % if $ has shallowlyMutable + setlast! : (%,S) -> S if $ has shallowlyMutable + setvalue! : (%,S) -> S if $ has shallowlyMutable + size? : (%,NonNegativeInteger) -> Boolean + split! : (%,Integer) -> % if $ has shallowlyMutable + tail : % -> % + third : % -> S + value : % -> S + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + ?.first : (%,first) -> S + ?.last : (%,last) -> S + ?.rest : (%,rest) -> % +\end{verbatim} + +These exports come from RecursiveAggregate(a:Type): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + child? : (%,%) -> Boolean if S has SETCAT + coerce : % -> OutputForm if S has SETCAT + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + distance : (%,%) -> Integer + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + hash : % -> SingleInteger if S has SETCAT + latex : % -> String if S has SETCAT + leaves : % -> List S + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + parts : % -> List S if $ has finiteAggregate + sample : () -> % + setelt : (%,value,S) -> S if $ has shallowlyMutable + setrest! : (%,%) -> % if $ has shallowlyMutable + ?.value : (%,value) -> S + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category URAGG UnaryRecursiveAggregate>>= )abbrev category URAGG UnaryRecursiveAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2642,6 +4062,121 @@ {\bf See:}\\ \pageto{KeyedDictionary}{KDAGG} \pagefrom{DictionaryOperations}{DIOPS} + +{\bf Exports:}\\ +\begin{tabular}{lllllll} + any? & bag & coerce & construct & convert \\ + copy & count & dictionary & empty & empty? \\ + eq? & eval & every? & extract! & find \\ + hash & insert! & inspect & latex & less? \\ + map & map! & member? & members & more? \\ + parts & reduce & remove & remove! & removeDuplicates \\ + sample & select & select! & size? & \#? \\ + ?\~{}=? & ?=? &&&\\ +\end{tabular} + +\cross{DIAGG}{any?} +\cross{DIAGG}{bag} +\cross{DIAGG}{coerce} +\cross{DIAGG}{construct} +\cross{DIAGG}{convert} +\cross{DIAGG}{copy} +\cross{DIAGG}{count} +\cross{DIAGG}{dictionary} +\cross{DIAGG}{empty} +\cross{DIAGG}{empty?} +\cross{DIAGG}{eq?} +\cross{DIAGG}{eval} +\cross{DIAGG}{every?} +\cross{DIAGG}{extract!} +\cross{DIAGG}{find} +\cross{DIAGG}{hash} +\cross{DIAGG}{insert!} +\cross{DIAGG}{inspect} +\cross{DIAGG}{latex} +\cross{DIAGG}{less?} +\cross{DIAGG}{map} +\cross{DIAGG}{map!} +\cross{DIAGG}{member?} +\cross{DIAGG}{members} +\cross{DIAGG}{more?} +\cross{DIAGG}{parts} +\cross{DIAGG}{reduce} +\cross{DIAGG}{remove} +\cross{DIAGG}{remove!} +\cross{DIAGG}{removeDuplicates} +\cross{DIAGG}{sample} +\cross{DIAGG}{select} +\cross{DIAGG}{select!} +\cross{DIAGG}{size?} +\cross{DIAGG}{\#?} +\cross{DIAGG}{?\~{}=?} +\cross{DIAGG}{?=?} + +These are implemented by this category: +\begin{verbatim} + dictionary : List S -> % + select! : ((S -> Boolean),%) -> % if $ has finiteAggregate + ?=? : (%,%) -> Boolean if S has SETCAT + remove! : ((S -> Boolean),%) -> % if $ has finiteAggregate +\end{verbatim} + +These exports come from DictionaryOperations(a:SetCategory): +\begin{verbatim} + any? : ((S -> Boolean),%) -> Boolean + if $ has finiteAggregate + bag : List S -> % + coerce : % -> OutputForm if S has SETCAT + construct : List S -> % + convert : % -> InputForm if S has KONVERT INFORM + copy : % -> % + count : (S,%) -> NonNegativeInteger + if S has SETCAT and $ has finiteAggregate + count : ((S -> Boolean),%) -> NonNegativeInteger + if $ has finiteAggregate + dictionary : () -> % + empty : () -> % + empty? : % -> Boolean + eq? : (%,%) -> Boolean + eval : (%,List S,List S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,S,S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,Equation S) -> % + if S has EVALAB S and S has SETCAT + eval : (%,List Equation S) -> % + if S has EVALAB S and S has SETCAT + every? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate + extract! : % -> S + find : ((S -> Boolean),%) -> Union(S,"failed") + hash : % -> SingleInteger if S has SETCAT + insert! : (S,%) -> % + inspect : % -> S + latex : % -> String if S has SETCAT + less? : (%,NonNegativeInteger) -> Boolean + map : ((S -> S),%) -> % + map! : ((S -> S),%) -> % if $ has shallowlyMutable + member? : (S,%) -> Boolean + if S has SETCAT and $ has finiteAggregate + members : % -> List S if $ has finiteAggregate + more? : (%,NonNegativeInteger) -> Boolean + parts : % -> List S if $ has finiteAggregate + reduce : (((S,S) -> S),%) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S) -> S if $ has finiteAggregate + reduce : (((S,S) -> S),%,S,S) -> S + if S has SETCAT and $ has finiteAggregate + remove : ((S -> Boolean),%) -> % if $ has finiteAggregate + remove : (S,%) -> % if S has SETCAT and $ has finiteAggregate + remove! : (S,%) -> % if $ has finiteAggregate + removeDuplicates : % -> % + if S has SETCAT and $ has finiteAggregate + sample : () -> % + select : ((S -> Boolean),%) -> % if $ has finiteAggregate + size? : (%,NonNegativeInteger) -> Boolean + #? : % -> NonNegativeInteger if $ has finiteAggregate + ?~=? : (%,%) -> Boolean if S has SETCAT +\end{verbatim} + <<category DIAGG Dictionary>>= )abbrev category DIAGG Dictionary ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2751,6 +4286,139 @@ {\bf See:}\\ \pagefrom{QueueAggregate}{QUAGG} \pagefrom{StackAggregate}{SKAGG} + +{\bf Exports:}\\ +\begin{tabular}{lllll} + any? & back & bag & bottom! & coerce \\ + copy & count & depth & dequeue & dequeue! \\ + empty & empty? & enqueue! & eq? & eval \\... [truncated message content] |
From: <gi...@ax...> - 2008-09-17 04:11:43
|
books/bookvol10.2.pamphlet | 4122 +++++++++++++++++++++++++++++++-- books/ps/v102collection.ps | 289 ++- books/ps/v102finitelinearaggregate.ps | 115 +- books/ps/v102listaggregate.ps | 491 ++-- books/ps/v102streamaggregate.ps | 403 ++-- changelog | 5 + 6 files changed, 4741 insertions(+), 684 deletions(-) New commits: commit f48c67d0e07f3c861db98e417cb8251dcef93fb2 Author: Tim Daly <da...@ax...> Date: Fri Jul 25 22:49:42 2008 -0400 20080916 tpd books/ps/v102streamaggregate.ps 20080916 tpd books/ps/v102listaggregate.ps 20080916 tpd books/ps/v102finitelinearaggregate.ps corrected diagram 20080916 tpd books/ps/v102collection.ps corrected diagram 20080916 tpd books/bookvol10.2 more documentation |
From: <da...@us...> - 2008-09-13 05:27:52
|
Revision: 972 http://axiom.svn.sourceforge.net/axiom/?rev=972&view=rev Author: daly Date: 2008-09-13 05:27:50 +0000 (Sat, 13 Sep 2008) Log Message: ----------- 20080912 tpd books/Makefile add bookvol10 subvolumes 20080912 tpd books/bookvol10.4 added 20080912 tpd books/bookvol10.3 added 20080912 tpd books/bookvol10.2 added 20080912 tpd books/bookvol10.1 added 20080912 tpd books/bookvol10 split 20080912 tpd books/ps/v102keyeddictionary.ps updated 20080912 tpd books/ps/v102homogeneousaggregate.ps updated 20080912 tpd books/ps/v102homogeneousaggregate.ps updated 20080912 tpd books/ps/v10* renamed to books/ps/v102* Modified Paths: -------------- trunk/axiom/books/Makefile.pamphlet trunk/axiom/books/bookvol10.pamphlet trunk/axiom/changelog trunk/axiom/src/Makefile.pamphlet Added Paths: ----------- trunk/axiom/books/bookvol10.1.pamphlet trunk/axiom/books/bookvol10.2.pamphlet trunk/axiom/books/bookvol10.3.pamphlet trunk/axiom/books/bookvol10.4.pamphlet trunk/axiom/books/ps/v102agg.ps trunk/axiom/books/ps/v102associationlistaggregate.ps trunk/axiom/books/ps/v102bagaggregate.ps trunk/axiom/books/ps/v102binaryrecursiveaggregate.ps trunk/axiom/books/ps/v102collection.ps trunk/axiom/books/ps/v102dequeueaggregate.ps trunk/axiom/books/ps/v102dictionary.ps trunk/axiom/books/ps/v102dictionaryoperations.ps trunk/axiom/books/ps/v102doublylinkedaggregate.ps trunk/axiom/books/ps/v102eltab.ps trunk/axiom/books/ps/v102eltableaggregate.ps trunk/axiom/books/ps/v102extensiblelinearaggregate.ps trunk/axiom/books/ps/v102finitelinearaggregate.ps trunk/axiom/books/ps/v102homogeneousaggregate.ps trunk/axiom/books/ps/v102indexedaggregate.ps trunk/axiom/books/ps/v102keyeddictionary.ps trunk/axiom/books/ps/v102koerce.ps trunk/axiom/books/ps/v102konvert.ps trunk/axiom/books/ps/v102linearaggregate.ps trunk/axiom/books/ps/v102listaggregate.ps trunk/axiom/books/ps/v102multidictionary.ps trunk/axiom/books/ps/v102onedimensionalarrayaggregate.ps trunk/axiom/books/ps/v102priorityqueueaggregate.ps trunk/axiom/books/ps/v102queueaggregate.ps trunk/axiom/books/ps/v102recursiveaggregate.ps trunk/axiom/books/ps/v102retractableto.ps trunk/axiom/books/ps/v102stackaggregate.ps trunk/axiom/books/ps/v102streamaggregate.ps trunk/axiom/books/ps/v102stringaggregate.ps trunk/axiom/books/ps/v102tableaggregate.ps trunk/axiom/books/ps/v102type.ps trunk/axiom/books/ps/v102unaryrecursiveaggregate.ps Removed Paths: ------------- trunk/axiom/books/ps/v10agg.ps trunk/axiom/books/ps/v10associationlistaggregate.ps trunk/axiom/books/ps/v10bagaggregate.ps trunk/axiom/books/ps/v10binaryrecursiveaggregate.ps trunk/axiom/books/ps/v10collection.ps trunk/axiom/books/ps/v10dequeueaggregate.ps trunk/axiom/books/ps/v10dictionary.ps trunk/axiom/books/ps/v10dictionaryoperations.ps trunk/axiom/books/ps/v10doublylinkedaggregate.ps trunk/axiom/books/ps/v10eltab.ps trunk/axiom/books/ps/v10eltableaggregate.ps trunk/axiom/books/ps/v10extensiblelinearaggregate.ps trunk/axiom/books/ps/v10finitelinearaggregate.ps trunk/axiom/books/ps/v10homogeneousaggregate.ps trunk/axiom/books/ps/v10indexedaggregate.ps trunk/axiom/books/ps/v10keyeddictionary.ps trunk/axiom/books/ps/v10koerce.ps trunk/axiom/books/ps/v10konvert.ps trunk/axiom/books/ps/v10linearaggregate.ps trunk/axiom/books/ps/v10listaggregate.ps trunk/axiom/books/ps/v10multidictionary.ps trunk/axiom/books/ps/v10onedimensionalarrayaggregate.ps trunk/axiom/books/ps/v10priorityqueueaggregate.ps trunk/axiom/books/ps/v10queueaggregate.ps trunk/axiom/books/ps/v10recursiveaggregate.ps trunk/axiom/books/ps/v10retractableto.ps trunk/axiom/books/ps/v10stackaggregate.ps trunk/axiom/books/ps/v10streamaggregate.ps trunk/axiom/books/ps/v10stringaggregate.ps trunk/axiom/books/ps/v10tableaggregate.ps trunk/axiom/books/ps/v10type.ps trunk/axiom/books/ps/v10unaryrecursiveaggregate.ps Modified: trunk/axiom/books/Makefile.pamphlet =================================================================== --- trunk/axiom/books/Makefile.pamphlet 2008-09-12 01:26:14 UTC (rev 971) +++ trunk/axiom/books/Makefile.pamphlet 2008-09-13 05:27:50 UTC (rev 972) @@ -26,7 +26,8 @@ ${PDF}/bookvol3.pdf ${PDF}/bookvol4.pdf ${PDF}/bookvol5.pdf \ ${PDF}/bookvol6.pdf ${PDF}/bookvol7.pdf ${PDF}/bookvol7.1.pdf \ ${PDF}/bookvol8.pdf ${PDF}/bookvol9.pdf ${PDF}/bookvol10.pdf \ - ${PDF}/bookvol11.pdf ${PDF}/bookvol12.pdf + ${PDF}/bookvol10.1.pdf ${PDF}/bookvol10.2.pdf ${PDF}/bookvol10.3.pdf \ + ${PDF}/bookvol10.4.pdf ${PDF}/bookvol11.pdf ${PDF}/bookvol12.pdf all: ${PDF}/axiom.sty ${BOOKS} ${PDF}/toc.pdf @@ -104,7 +105,11 @@ "{\\bf Volume ~ 7.1}: Axiom {\\sl Hyperdoc Pages}\\\\" >>toc.toc ; \ echo "{\\bf Volume ~ 8}: Axiom {\\sl Graphics}\\\\" >>toc.toc ; \ echo "{\\bf Volume ~ 9}: Axiom {\\sl Compiler}\\\\" >>toc.toc ; \ - echo "{\\bf Volume 10}: Axiom {\\sl Algebra}\\\\" >>toc.toc ; \ + echo "{\\bf Volume 10}: Axiom {\\sl Algebra: Implementation}\\\\" >>toc.toc ; \ + echo "{\\bf Volume 10.1}: Axiom {\\sl Algebra: Theory}\\\\" >>toc.toc ; \ + echo "{\\bf Volume 10.1}: Axiom {\\sl Algebra: Categories}\\\\" >>toc.toc ; \ + echo "{\\bf Volume 10.1}: Axiom {\\sl Algebra: Domains}\\\\" >>toc.toc ; \ + echo "{\\bf Volume 10.1}: Axiom {\\sl Algebra: Packages}\\\\" >>toc.toc ; \ echo "{\\bf Volume 11}: Axiom {\\sl Browser}\\\\" >>toc.toc ; \ echo "{\\bf Volume 12}: Axiom {\\sl Crystal}\\\\" >>toc.toc ; \ echo "\\newpage" >>toc.toc ; \ @@ -154,8 +159,20 @@ <<sed pattern>> <bookvol9.toc >>toc.toc ; \ echo "\\newpage" >>toc.toc ; \ - echo "\\section*{Volume 10: Axiom Algebra}" >>toc.toc ; \ + echo "\\section*{Volume 10: Axiom Algebra: Implementation}" >>toc.toc ; \ <<sed pattern>> + echo "\\newpage" >>toc.toc ; \ + echo "\\section*{Volume 10.1: Axiom Algebra: Theory}" >>toc.toc ; \ +<<sed pattern>> + echo "\\newpage" >>toc.toc ; \ + echo "\\section*{Volume 10.2: Axiom Algebra: Categories}" >>toc.toc ; \ +<<sed pattern>> + echo "\\newpage" >>toc.toc ; \ + echo "\\section*{Volume 10.3: Axiom Algebra: Domains}" >>toc.toc ; \ +<<sed pattern>> + echo "\\newpage" >>toc.toc ; \ + echo "\\section*{Volume 10.4: Axiom Algebra: Packages}" >>toc.toc ; \ +<<sed pattern>> <bookvol10.toc >>toc.toc ; \ echo "\\newpage" >>toc.toc ; \ echo "\\section*{Volume 11: Axiom Browser}" >>toc.toc ; \ Added: trunk/axiom/books/bookvol10.1.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.1.pamphlet (rev 0) +++ trunk/axiom/books/bookvol10.1.pamphlet 2008-09-13 05:27:50 UTC (rev 972) @@ -0,0 +1,2090 @@ +\documentclass[dvipdfm]{book} +\usepackage{hyperref} +\usepackage{amssymb} +\usepackage{axiom} +\usepackage{makeidx} +\makeindex +\usepackage{graphicx} +%% +%% pagehead consolidates standard page indexing +%% +\newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb} +\section{#1} +\label{#1}% +\label{#2}% +\index{{#1}}% +\index{{#2}}}% +%% +%% pagepic adds an image and an index entry +%% +\newcommand{\pagepic}[2]{% e.g. \pagepic{pathandfile}{abb} +\includegraphics{#1}% +\index{images!#2}} +%% +%% pageto is a forward link to a referenced page +%% +\newcommand{\pageto}[2]{% e.g. \pageto{abb}{name} +\ \\${\bf\Rightarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} +%% +%% pageback is a backward link to a referencing page +%% +\newcommand{\pagefrom}[2]{% e.g. \pagefrom{name}{abb} +\ \\${\bf\Leftarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} +%% +% special meanings for math characters +\providecommand{\N}{\mbox{\bbold N}} +\providecommand{\Natural}{\mbox{\bbold N}} +\providecommand{\Z}{\mbox{\bbold Z}} +\providecommand{\Integer}{\mbox{\bbold Z}} +\providecommand{\Rational}{\mbox{\bbold Q}} +\providecommand{\Q}{\mbox{\bbold Q}} +\providecommand{\Complex}{\mbox{\bbold C}} +\providecommand{\C}{{\mathcal C}} +\providecommand{\Real}{\mbox{\bbold R}} +\providecommand{\F}{{\mathcal F}} +\providecommand{\R}{{\mathcal R}} +\begin{document} +\begin{titlepage} +\center{\includegraphics{ps/axiomfront.ps}} +\vskip 0.1in +\includegraphics{ps/bluebayou.ps}\\ +\vskip 0.1in +{\Huge{The 30 Year Horizon}} +\vskip 0.1in +$$ +\begin{array}{lll} +Manuel\ Bronstein & William\ Burge & Timothy\ Daly \\ +James\ Davenport & Michael\ Dewar & Martin\ Dunstan \\ +Albrecht\ Fortenbacher & Patrizia\ Gianni & Johannes\ Grabmeier \\ +Jocelyn\ Guidry & Richard\ Jenks & Larry\ Lambe \\ +Michael\ Monagan & Scott\ Morrison & William\ Sit \\ +Jonathan\ Steinbach & Robert\ Sutor & Barry\ Trager \\ +Stephen\ Watt & Jim\ Wen & Clifton\ Williamson +\end{array} +$$ +\center{\large{Volume 10: Axiom Algebra: Theory}} +\end{titlepage} +\pagenumbering{roman} +\begin{verbatim} +Portions Copyright (c) 2005 Timothy Daly + +The Blue Bayou image Copyright (c) 2004 Jocelyn Guidry + +Portions Copyright (c) 2004 Martin Dunstan + +Portions Copyright (c) 1991-2002, +The Numerical ALgorithms Group Ltd. +All rights reserved. + +This book and the Axiom software is licensed as follows: + +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. + +\end{verbatim} + +Inclusion of names in the list of credits is based on historical +information and is as accurate as possible. Inclusion of names +does not in any way imply an endorsement but represents historical +influence on Axiom development. +\vfill +\eject +\begin{tabular}{lll} +Cyril Alberga & Roy Adler & Richard Anderson\\ +George Andrews & Henry Baker & Stephen Balzac\\ +Yurij Baransky & David R. Barton & Gerald Baumgartner\\ +Gilbert Baumslag & Fred Blair & Vladimir Bondarenko\\ +Mark Botch & Alexandre Bouyer & Peter A. Broadbery\\ +Martin Brock & Manuel Bronstein & Florian Bundschuh\\ +William Burge & Quentin Carpent & Bob Caviness\\ +Bruce Char & Cheekai Chin & David V. Chudnovsky\\ +Gregory V. Chudnovsky & Josh Cohen & Christophe Conil\\ +Don Coppersmith & George Corliss & Robert Corless\\ +Gary Cornell & Meino Cramer & Claire Di Crescenzo\\ +Timothy Daly Sr. & Timothy Daly Jr. & James H. Davenport\\ +Jean Della Dora & Gabriel Dos Reis & Michael Dewar\\ +Claire DiCrescendo & Sam Dooley & Lionel Ducos\\ +Martin Dunstan & Brian Dupee & Dominique Duval\\ +Robert Edwards & Heow Eide-Goodman & Lars Erickson\\ +Richard Fateman & Bertfried Fauser & Stuart Feldman\\ +Brian Ford & Albrecht Fortenbacher & George Frances\\ +Constantine Frangos & Timothy Freeman & Korrinn Fu\\ +Marc Gaetano & Rudiger Gebauer & Kathy Gerber\\ +Patricia Gianni & Holger Gollan & Teresa Gomez-Diaz\\ +Laureano Gonzalez-Vega& Stephen Gortler & Johannes Grabmeier\\ +Matt Grayson & James Griesmer & Vladimir Grinberg\\ +Oswald Gschnitzer & Jocelyn Guidry & Steve Hague\\ +Vilya Harvey & Satoshi Hamaguchi & Martin Hassner\\ +Ralf Hemmecke & Henderson & Antoine Hersen\\ +Pietro Iglio & Richard Jenks & Kai Kaminski\\ +Grant Keady & Tony Kennedy & Paul Kosinski\\ +Klaus Kusche & Bernhard Kutzler & Larry Lambe\\ +Frederic Lehobey & Michel Levaud & Howard Levy\\ +Rudiger Loos & Michael Lucks & Richard Luczak\\ +Camm Maguire & Bob McElrath & Michael McGettrick\\ +Ian Meikle & David Mentre & Victor S. Miller\\ +Gerard Milmeister & Mohammed Mobarak & H. Michael Moeller\\ +Michael Monagan & Marc Moreno-Maza & Scott Morrison\\ +Mark Murray & William Naylor & C. Andrew Neff\\ +John Nelder & Godfrey Nolan & Arthur Norman\\ +Jinzhong Niu & Michael O'Connor & Kostas Oikonomou\\ +Julian A. Padget & Bill Page & Jaap Weel\\ +Susan Pelzel & Michel Petitot & Didier Pinchon\\ +Claude Quitte & Norman Ramsey & Michael Richardson\\ +Renaud Rioboo & Jean Rivlin & Nicolas Robidoux\\ +Simon Robinson & Michael Rothstein & Martin Rubey\\ +Philip Santas & Alfred Scheerhorn & William Schelter\\ +Gerhard Schneider & Martin Schoenert & Marshall Schor\\ +Fritz Schwarz & Nick Simicich & William Sit\\ +Elena Smirnova & Jonathan Steinbach & Christine Sundaresan\\ +Robert Sutor & Moss E. Sweedler & Eugene Surowitz\\ +James Thatcher & Baldir Thomas & Mike Thomas\\ +Dylan Thurston & Barry Trager & Themos T. Tsikas\\ +Gregory Vanuxem & Bernhard Wall & Stephen Watt\\ +Juergen Weiss & M. Weller & Mark Wegman\\ +James Wen & Thorsten Werther & Michael Wester\\ +John M. Wiley & Berhard Will & Clifton J. Williamson\\ +Stephen Wilson & Shmuel Winograd & Robert Wisbauer\\ +Sandra Wityak & Waldemar Wiwianka & Knut Wolf\\ +Clifford Yapp & David Yun & Richard Zippel\\ +Evelyn Zoernack & Bruno Zuercher & Dan Zwillinger +\end{tabular} +\eject +\tableofcontents +\vfill +\eject +\setlength{\parindent}{0em} +\setlength{\parskip}{1ex} +{\Large{\bf New Foreword}} +\vskip .25in + +On October 1, 2001 Axiom was withdrawn from the market and ended +life as a commercial product. +On September 3, 2002 Axiom was released under the Modified BSD +license, including this document. +On August 27, 2003 Axiom was released as free and open source +software available for download from the Free Software Foundation's +website, Savannah. + +Work on Axiom has had the generous support of the Center for +Algorithms and Interactive Scientific Computation (CAISS) at +City College of New York. Special thanks go to Dr. Gilbert +Baumslag for his support of the long term goal. + +The online version of this documentation is roughly 1000 pages. +In order to make printed versions we've broken it up into three +volumes. The first volume is tutorial in nature. The second volume +is for programmers. The third volume is reference material. We've +also added a fourth volume for developers. All of these changes +represent an experiment in print-on-demand delivery of documentation. +Time will tell whether the experiment succeeded. + +Axiom has been in existence for over thirty years. It is estimated to +contain about three hundred man-years of research and has, as of +September 3, 2003, 143 people listed in the credits. All of these +people have contributed directly or indirectly to making Axiom +available. Axiom is being passed to the next generation. I'm looking +forward to future milestones. + +With that in mind I've introduced the theme of the ``30 year horizon''. +We must invent the tools that support the Computational Mathematician +working 30 years from now. How will research be done when every bit of +mathematical knowledge is online and instantly available? What happens +when we scale Axiom by a factor of 100, giving us 1.1 million domains? +How can we integrate theory with code? How will we integrate theorems +and proofs of the mathematics with space-time complexity proofs and +running code? What visualization tools are needed? How do we support +the conceptual structures and semantics of mathematics in effective +ways? How do we support results from the sciences? How do we teach +the next generation to be effective Computational Mathematicians? + +The ``30 year horizon'' is much nearer than it appears. + +\vskip .25in +%\noindent +Tim Daly\\ +CAISS, City College of New York\\ +November 10, 2003 ((iHy)) +\vfill +\eject +\pagenumbering{arabic} +\setcounter{chapter}{0} % Chapter 1 +\chapter{Integration} +An {\sl elementary function} +\index{elementary function} +of a variable $x$ is a function that can +be obtained from the rational functions in $x$ by repeatedly adjoining +a finite number of nested logarithms, exponentials, and algebraic +numbers or functions. Since $\sqrt{-1}$ is elementary, the +trigonometric functions and their inverses are also elementary (when +they are rewritten using complex exponentials and logarithms) as well +as all the ``usual'' functions of calculus. For example, +\begin{equation} +\sin(x+\tan(x^3-\sqrt{x^3-x+1})) +\end{equation} +is elementary when rewritten as +\[ +\frac{\sqrt{-1}}{2}(e^{t-x\sqrt{-1}}-e^{x\sqrt{-1}-t}) +{\rm\ where\ } +t=\frac{1-e^{2\sqrt{-1}(x^3-\sqrt{x^3-x+1})}} +{1+e^{2\sqrt{-1}(x^3-\sqrt{x^3-x+1})}} +\] +This tutorial describes recent algorithmic solutions to the {\sl +problem of integration in finite terms}: +\index{integration in finite terms} +to decide in a finite number +of steps whether a given elementary funcction has an elementary +indefinite integral, and to compute it explicitly if it exists. While +this problem was studied extensively by Abel and Liouville during the +last century, the difficulties posed by algebraic functions caused +Hardy (1916) to state that ``there is reason to suppose that no such +method can be given''. This conjecture was eventually disproved by +Risch (1970), who described an algorithm for this problem in a series +of reports \cite{12,13,14,15}. In the past 30 years, this procedure +has been repeatedly improved, extended and refined, yielding practical +algorithms that are now becoming standard and are implemented in most +of the major computer algebra systems. In this tutorial, we outline +the above algorithms for various classes of elementary functions, +starting with rational functions and progressively increasing the +class of functions up to general elementary functions. Proofs of +correctness of the algorithms presented here can be found in several +of the references, and are generally too long and too detailed to be +described in this tutorial. + +{\bf Notations}: we write $x$ for the variable of integration, and ' +for the derivation $d/dx$. $\mathbb{Z}$,$\mathbb{Q}$,$\mathbb{R}$,and +$\mathbb{C}$ denote respectively the integers, rational, real and +complex numbers. All fields are commutative and, except when mentioned +explicitly otherwise, have characteristic 0. If $K$ is a field, then +$\overline{K}$ denotes its algebraic closure. For a polynomial $p$, +pp($p$) denotes the primitive +part of $p$, {\sl i. e.} $p$ divided by the gcd of its coefficients. +\section{Rational Functions} +By a {\sl rational function}, we mean a quotient of polynomials in the +integration variable $x$. This means that other functions can appear +in the integrand, provided they do not involve $x$, hence that the +coefficients of our polynomials in $x$ lie in an arbitrary field $K$ +satisfying: $\forall{a} \in K,\ a^{'}=0$. + +\subsection{The full partial-fraction algorithm} +This method, which dates back to Newton, Leibniz, and Bernoulli, +should not be used in practice, yet it remains the method found in +most calculus tests and is often taught. Its major drawback is the +factorization of the denominator of the integrand over the real or +complex numbers. We outline it because it provides the theoretical +foundations for all the subsequent algorithms. Let +$f \in \mathbb{R}(x)$ be our integrand, and write +$f=P+A/D$ where $P, A, D \in \mathbb{R}[x]$, $gcd(A,D)=1$, and +$deg(A) < deg(D)$. Let +\[ +D=c\prod_{i=1}^n(x-a_i)^{e_i}\prod_{j=1}^m(x^2+b_jx+c_j)^{f_j} +\] +be the irreducible factorization of $D$ over $\mathbb{R}$, where $c$, +the $a_i$'s, $b_j$'s and $c_j$'s are in $\mathbb{R}$ and the $e_i$'s +and $f_j$'s are positive integers. Computing the partial fraction +decomposition of $f$, we get +\[ +f=P+\sum_{i=1}^n\sum_{k=1}^{e_i}\frac{A_{ik}}{(x-a_i)^k} ++\sum_{j=1}^m\sum_{k=1}^{f_i}\frac{B_{jk}x+C_{jk}}{(x^2+b_jx+c_j)^k} +\] +where the $A_{ik}$'s, $B_{jk}$'s, and $C_{jk}$'s are in +$\mathbb{R}$. Hence, +\[ +\int{f}=\int{P}+\sum_{i=1}^n\sum_{k=1}^{e_i}\int{\frac{A_{ik}}{(x-a_i)^k}} ++\sum_{j=1}^m\sum_{k=1}^{f_i}\int{\frac{B_{jk}x+C_{jk}}{(x^2+b_jx+c_j)^k}} +\] +Computing $\int{P}$ poses no problem (it will for any other class of +functions), and for the other terms we have +\begin{equation} +\int{\frac{A_{ik}}{(x-a_i)^k}}=\left\{ +\begin{array}{lc} +A_{ik}(x-a_i)^{1-k}/(1-k)&{\rm if\ } k > 1\\ +A_{i1}\log(x-a_i)&{\rm if\ } k = 1\\ +\end{array} +\right. +\end{equation} +and, noting that $b_j^2-4c_j < 0$ since $x^2+b_jx+c_j$ is irreducible +in $\mathbb{R}$[x]. +\[ +\int\frac{B_{j1}x+C_{j1}}{(x^2+b_jx+c_j)}= +\frac{B_{j1}}{2}\log(x^2+b_jx+c_j) ++\frac{2C_{j1}-b_jB_{j1}}{\sqrt{4c_j-b_j^2}} +arctan\left(\frac{2x+b_j}{\sqrt{4c_j-b_j^2}}\right) +\] +and for $k > 1$, +\[ +\begin{array}{lcl} +\displaystyle +\int{\frac{B_{jk}x+C_{jk}}{(x^2+b_jx+c_j)^k}}&=& +\displaystyle\frac{(2C_{jk}-b_jB_{jk})x+b_jC_{jk}-2c_jB_{jk}} +{(k-1)(4c_j-b_j^2)(x^2+b_jx+c_j)^{k-1}}\\ +&&\displaystyle+\int{\frac{(2k-3)(2C_{jk}-b_jB_{jk})} +{(k-1)(4c_j-b_j^2)(x^2+b_jx+c_j)^{k-1}}}\\ +\end{array} +\] +This last formula is then used recursively until $k=1$. + +An alternative is to factor $D$ linearly over $\mathbb{C}$: +$D=\prod_{i=1}^q(x-\alpha_i)^{e_i}$, and then use (2) on each term of +\begin{equation} +f=P+\sum_{i=1}^q\sum_{j=1}^{e_i}\frac{A_{ij}}{(x-\alpha_i)^j} +\end{equation} +Note that this alternative is applicable to coefficients in any field +$K$, if we factor $D$ linearly over its algebraic closure +$\overline{K}$, and is equivalent to expanding $f$ into its Laurent +series at all its finite poles, since that series at +$x=\alpha_i \in \overline{K}$ is +\[ +f=\frac{A_{ie_i}}{(x-\alpha_i)^{e_i}} ++\cdots ++\frac{A_{i2}}{(x-\alpha_i)^2} ++\frac{A_{i1}}{(x-\alpha_i)} ++\cdots +\] +where the $A_{ij}$'s are the same as those in (3). Thus, this approach +can be seen as expanding the integrand into series around all the +poles (including $\infty$), then integrating the series termwise, and +then interpolating for the answer, by summing all the polar terms, +obtaining the integral of (3). In addition, this alternative shows +that any rational function $f \in K(x)$ has an elementary integral of +the form +\begin{equation} +\int{f}=v+c_1\log(u_1)+\cdots+c_m\log(u_m) +\end{equation} +where $v,u_1,\ldots,u_m \in \overline{K}(x)$ are the rational +functions, and $c_1,\ldots,c_m \in \overline{K}$ are constants. The +original Risch algorithm is essentially a generalization of this +approach that searches for integrals of arbitrary elementary functions +in a form similar to (4). + +\subsection{The Hermite reduction} +The major computational inconvenience of the full partial fraction +approach is the need to factor polynomials over $\mathbb{R}$, +$\mathbb{C}$, or $\overline{K}$, thereby introducing algebraic numbers +even if the integrand and its integral are both in $\mathbb{Q}(x)$. On +the other hand, introducing algebraic numbers may be necessary, for +example it is proven in \cite{14} that any field containing an +integral of $1/(x^2+2)$ must also contain $\sqrt{2}$. Modern research +has yielded so-called ``rational'' algorithms that +\begin{itemize} +\item compute as much of the integral as possible with all +calculations being done in $K(x)$, and +\item compute the minimal algebraic extension of $K$ necessary to +express the integral +\end{itemize} +The first rational algorithms for integration date back to the +$19^{{\rm th}}$ century, when both Hermite\cite{6} and +Ostrogradsky\cite{11} invented methods for computing the $v$ of (4) +entirely within $K(x)$. We describe here only Hermite's method, since +it is the one that has been generalized to arbitrary elementary +functions. The basic idea is that if an irreducible $p \in K[x]$ +appears with multiplicity $k > 1$ in the factorization of the +denominator of the integrand, then (2) implies that it appears with +multiplicity $k-1$ in the denominator of the integral. Furthermore, it +is possible to compute the product of all such irreducibles for each +$k$ without factoring the denominator into irreducibles by computing +its {\sl squarefree factorization}, {\sl i.e} a factorization +$D=D_1D_2^2\cdots D_m^m$, where each $D_i$ is squarefree and +$gcd(D_i,D_j)=1$ for $i \ne j$. A straightforward way to compute it is +as follows: let $R=gcd(D,D^{'})$, then $R=D_2D_2^3\cdots D_m^{m-1}$, so +$D/R=D_1D_2\cdots D_m$ and $gcd(R,D/R)=D_2\cdots D_m$, which implies +finally that +\[ +D_1=\frac{D/R}{gcd(R,D/R)} +\] +Computing recursively a squarefree factorization of $R$ completes the +one for $D$. Note that \cite{23} presents a more efficient method for +this decomposition. Let now $f \in K(x)$ be our integrand, and write +$f=P+A/D$ where $P,A,D \in K[x]$, $gcd(A,D)=1$, and $deg(A)<deg(D)$. +Let $D=D_1D_2^2\cdots D_m^m$ be a squarefree factorization of $D$ and +suppose that $m \ge 2$ (otherwise $D$ is already squarefree). Let then +$V=D_m$ and $U=D/V^m$. Since $gcd(UV^{'},V)=1$, we can use the +extended Euclidean algorithm to find $B,C \in K[x]$ such that +\[ +\frac{A}{1-m}=BUV^{'}+CV +\] +and $deg(B) < deg(V)$. Multiplying both sides by $(1-m)/(UV^m)$ gives +\[ +\frac{A}{UV^m}=\frac{(1-m)BV^{'}}{V^m}+\frac{(1-m)C}{UV^{m-1}} +\] +so, adding and subtracting $B^{'}/V^{m-1}$ to the right hand side, we +get +\[ +\frac{A}{UV^m}=\left(\frac{B^{'}}{V^{m-1}}-\frac{(m-1)BV^{'}}{V^m}\right) ++\frac{(1-m)C-UB^{'}}{UV^{m-1}} +\] +and integrating both sides yields +\[ +\int\frac{A}{UV^m}=\frac{B}{V^{m-1}}+\int\frac{(1-m)C-UB^{'}}{UV^{m-1}} +\] +so the integrand is reduced to one with a smaller power of $V$ in the +denominator. This process is repeated until the denominator is +squarefree, yielding $g,h \in K(x)$ such that $f=g^{'}+h$ and $h$ has +a squarefree denominator. + +\subsection{The Rothstein-Trager and Lazard-Rioboo-Trager algorithms} +Following the Hermite reduction, we only have to integrate fractions +of the form $f=A/D$ with $deg(A)<deg(D)$ and $D$ squarefree. It +follows from (2) that +\[ +\int{f}=\sum_{i=1}^n a_i\log(x-\alpha_i) +\] +where the $\alpha_i$'s are the zeros of $D$ in $\overline{K}$, and the +$a_i$'s are the residues of $f$ at the $\alpha_i$'s. The problem +is then to compute those residues without splitting $D$. Rothstein +\cite{18} and Trager \cite{19} independently proved that the +$\alpha_i$'s are exactly the zeros of +\begin{equation} +R=resultant_x(D,A-tD^{'}) \in K[t] +\end{equation} +and that the splitting field of $R$ over $K$ is indeed the minimal +algebraic extension of $K$ necessary to express the integral in the +form (4). The integral is then given by +\begin{equation} +\int\frac{A}{D}=\sum_{i=1}^m\sum_{a|R_i(a)=0}a\log(\gcd(D,A-aD^{'})) +\end{equation} +where $R=\prod_{i=1}^m R_i^{e_i}$ is the irreducible factorization of +$R$ over $K$. Note that this algorithm requires factoring $R$ into +irreducibles over $K$, and computing greatest common divisors in +$(K[t]/(R_i))[x]$, hence computing with algebraic numbers. Trager and +Lazard \& Rioboo \cite{7} independently discovered that those +computations can be avoided, if one uses the subresultant PRS +algorithm to compute the resultant of (5): let +$(R_0,R_1,\ldots R_k\ne 0,0,\ldots)$ be the subresultant PRS with +respect to $x$ of $D$ and $A-tD^{'}$ and $R=Q_1Q_2^2\ldots Q_m^m$ be a +{\sl squarefree} factorization of their resultant. Then, +\[ +\sum_{a|Q_i(a)=0} a\log(\gcd(D,A-aD^{'}))=\hbox{\hskip 5.0cm} +\] +\[ +\left\{ +\begin{array}{ll} +\sum_{a|Q_i(a)=0} a \log(D) & {\rm if\ }i = deg(D)\\ +\sum_{a|Q_i(a)=0} a \log({\rm pp}_x(R_{k_i})(a,x))& +{\rm where\ }deg(R_{k_i})=i,1 \le k_i \le n\\ +&{\rm if\ }i < deg(D) +\end{array} +\right. +\] +Evaluating ${\rm pp}_x(R_{k_i})$ at $t=a$ where $a$ is a root of $Q_i$ +is equivalent to reducing each coefficient with respect to $x$ of +${\rm pp}_x(R_{k_i})$ module $Q_i$, hence computing in the algebraic +extension $K[t]/(Q_i)$. Even this step can be avoided: it is in fact +sufficient to ensure that $Q_i$ and the leading coefficient with +respect to $x$ of $R_{k_i}$ do not have a nontrivial common factor, +which implies then that the remainder by $Q_i$ is nonzero, see +\cite{10} for details and other alternatives for computing +${\rm pp}_x(R_{k_i})(a,x)$ + +\section{Algebraic Functions} +By an {\sl algebraic function}, we mean an element of a finitely +generated algebraic extension $E$ of the rational function field +$K(x)$. This includes nested radicals and implicit algebraic +functions, not all of which can be expressed by radicals. It turns out +that the algorithms we used for rational functions can be extended to +algebraic functions, but with several difficulties, the first one +being to define the proper analogues of polynomials, numerators and +denominators. Since $E$ is algebraic over $K(x)$, for any +$\alpha \in E$, there exists a polynomial $p \in K[x][y]$ such that +$p(x,\alpha)=0$. We say that $\alpha \in E$ is {\sl integral over} +$K[x]$ if there is a polynomial $p \in K[x][y]$, {\sl monic in y}, +such that $p(x,\alpha)=0$. Integral elements are analogous to +polynomials in that their value is defined for any +$x \in \overline{K}$ (unlike non-integral elements, which must have at +least one pole in $\overline{K}$). The set +\[ +{\bf O}_{K[x]} = \{\alpha \in E {\rm\ such\ that\ }\alpha +{\rm\ is\ integral\ over\ }K[x]\} +\] +is called the {\sl integral closure of} $K[x]$ {\sl in E}. It is a +ring and a finitely generated $K[x]$-module. Let $\alpha \in E^{*}$ be +any element and $p=\sum_{i=0}^m a_iy^i \in K[x][y]$ be such that +$p(x,\alpha)=0$ and $a_m \ne 0$. Then, $q(x,a_my)=0$ where +$q=y^m+\sum_{i=0}^{m-1} a_ia_m^{m-i-1}y^i$ is monic in $y$, +so $a_my \in {\bf O}_{K[x]}$. We need a canonical representation +for algebraic functions similar to quotients of polynomials for +rational functions. Expressions as quotients of integral functions are +not unique, for example, $\sqrt{x}/x=x/\sqrt{x}$. Hoever, $E$ is a +finite-dimensional vector space over $K(x)$, so let $n=[E:K(x)]$ and +$w=(w_1,\ldots,w_n)$ be any basis for $E$ over $K(x)$. By the above +remark, there are $a_1,\ldots,a_n \in K(x)^{*}$ such that +$a_iw_i \in {\bf O}_{K[x]}$ for each $i$. Since +$(a_1w_1,\ldots,a_nw_n)$ is also a basis for $E$ over $K(x)$, we can +assume without loss of generality that the basis $w$ is composed of +integral elements. Any $\alpha \in E$ can be written uniquely as +$\alpha = \sum_{i=1}^n f_iw_i$ for $f_1,\ldots,f_n \in K(x)$, and +putting the $f_i$'s over a monic common denominator $D \in K[x]$, we +get an expression +\[ +\alpha = \frac{A_1w_1+\ldots+A_nw_n}{D} +\] +where $A_1,\ldots,A_n \in K[x]$ and $\gcd(D,A_1,\ldots,A_n)=1$. We +call $\sum_{i=1}^n A_iw_i \in {\bf O}_{K[x]}$ and +$D \in K[x]$ respectively the {\sl numerator} and {\sl denominator} of +$\alpha$ with respect to $w$. They are defined uniquely once the basis +$w$ is fixed. +\subsection{The Hermite reduction} +Now that we have numerators and denominators for algebraic functions, +we can attempt to generalize the Hermite reduction of the previous +section, so let $f \in E$ be our integrand, +$w=(w_1,\ldots,w_n) \in {{\bf O}_{K[n]}}^{n}$ be a basis for $E$ +over $K(x)$ and let $\sum_{i=1}^m A_iw_i \in {\bf O}_{K[x]}$ +and $D \in K[x]$ be the numerator and denominator of $f$ with respect +to $w$, Let $D=D_1D_2^2\ldots D_m^m$ be a squarefree factorization of +$D$ and suppose that $m \ge 2$. Let then $V=D_m$ and $U=D/V^m$, and we +ask whether we can compute +$B=\sum_{i=1}^n B_iw_i \in {\bf O}_{K[x]}$ and $h \in E$ such +that $deg(B_i) < deg(V)$ for each $i$, +\begin{equation} +\int\frac{\sum_{i=1}^n A_iw_i}{UV^m}=\frac{B}{V^{m-1}}+\int{h} +\end{equation} +and the denominator of $h$ with respect to $w$ has no factor of order +$m$ or higher. This turns out to reduce to solving the following +linear system +\begin{equation} +f_1S_1+\ldots+f_nS_n=A_1w_1+\ldots+A_nw_n +\end{equation} +for $f_1,\ldots,f_n \in K(x)$, where +\begin{equation} +S_i=UV^m\left(\frac{w_i}{V^{m-1}}\right)^{'}\quad{\rm for\ }1\le i\le n +\end{equation} +Indeed, suppose that (8) has a solution $f_1,\ldots,f_n \in K(x)$, and +write $f_i=T_i/Q$, where $Q,T_1,\ldots,T_n \in K[x]$ and +$\gcd(Q,T_1,\ldots,T_n)=1$. Suppose further that $\gcd(Q,V)=1$. Then, +we can use the extended Euclidean algorithm to find $A,R \in K[x]$ +such that $AV+RQ=1$, and Euclidean division to find $Q_i,B_i \in K[x]$ +such that $deg(B_i)<deg(V)$ when $B_i \ne 0$ and $RT_i=VQ_i+B_i$ for +each $i$. We then have +\[ +\begin{array}{lcl} +h&=&\displaystyle +f-\left(\frac{\sum_{i=1}^n B_iw_i}{V^{m-1}}\right)^{'}\\ +&&\\ +&=&\displaystyle +\frac{\sum_{i=1}^nA_iw_i}{UV^m} +-\frac{\sum_{i=1}^nB_i^{'}w_i}{V^{m-1}} +-\sum_{i=1}^n(RT_i-VQ_i)\left(\frac{w_i}{V^{m-1}}\right)^{'}\\ +&&\\ +&=&\displaystyle +\frac{\sum_{i=1}^nA_iw_i}{UV^m} +-\frac{R\sum_{i=1}^nT_iS_i}{UV^m} ++V\sum_{i=1}^nQ_i\left(\frac{w_i}{V^{m-1}}\right)^{'} +-\frac{\sum_{i=1}^nB_i^{'}w_i}{V^{m-1}}\\ +&&\\ +&=&\displaystyle +\frac{(1-RQ)\sum_{i=1}^nA_iw_i}{UV^m} ++\frac{\sum_{i=1}^nQ_iw_i^{'}}{V^{m-2}} +-(m-1)V^{'}\frac{\sum_{i=1}^nQ_iw_i}{V^{m-1}} +-\frac{\sum_{i=1}^nB_i^{'}w_i}{V^{m-1}}\\ +&&\\ +&=&\displaystyle +\frac{\sum_{i=1}^nAA_iw_i}{UV^{m-1}} +-\frac{\sum_{i=1}^n((m-1)V^{'}Q_i+B_i^{'})w_i}{V^{m-1}} ++\frac{\sum_{i=1}^nQ_iw_i^{'}}{V^{m-2}} +\end{array} +\] +Hence, if in addition the denominator of $h$ has no factor of order +$m$ or higher, then $B=\sum_{i=1}^nB_iw_i \in {\bf O}_{K[x]}$ +and $h$ solve (7) and we have reduced the integrand. Unfortunately, it +can happen that the denominator of $h$ has a factor of order $m$ or +higher, or that (8) has no solution in $K(x)$ whose denominator is +coprime with $V$, as the following example shows. + +\noindent +{\bf Example 1} Let $E=K(x)[y]/(y^4+(x^2+x)y-x^2)$ {\sl with basis} +$w=(1,y,y^2,y^3)$ {\sl over} $K(x)$ {\sl and consider the integrand} +\[ +f=\frac{y^3}{x^2}=\frac{w_4}{x^2}\in E +\] +We have $D=x^2$, so $U=1,V=x$ and $m=2$. +Then, $S_1=x^2(1/x)^{'}=-1$, +\[ +\begin{array}{lcl} +\displaystyle S_2&=&x^2\left(\frac{y}{x}\right)^{'}\\ +&&\\ +\displaystyle &=&\frac{24(1-x^2)y^3+32x(1-x)y^2-(9x^4+45x^3+209x^2+63x+18)y +-18x(x^3+x^2-x-1)}{27x^4+108x^3+418x^2+108x+27}\\ +&&\\ +\displaystyle S_3&=&x^2\left(\frac{y^2}{x}\right)^{'}\\ +&&\\ +\displaystyle &=& +\frac{64x(1-x)y^3+9(x^4+2x^3-2x-1)y^2+12x(x^3+x^2-x-1)y+48x^2(1-x^2)} +{27x^4+108x^3+418x^2+108x+27}\\ +&&\\ +and&&\\ +&&\\ +\displaystyle S_4&=&x^2\left(\frac{y^3}{x}\right)^{'}\\ +&&\\ +\displaystyle &=&\frac{(27x^4+81x^3+209x^2+27x)y^3+18x(x^3+x^2-x-1)y^2 ++24x^2(x^2-1)y+96x^3(1-x)} +{27x^4+108x^3+418x^2+108x+27} +\end{array} +\] +{\sl so (8) becomes} +\begin{equation} +M +\left( +\begin{array}{c} +f_1\\ +f_2\\ +f_3\\ +f_4 +\end{array} +\right)= +\left( +\begin{array}{c} +0\\ +0\\ +0\\ +1 +\end{array} +\right) +\end{equation} +{\sl where} +\[ +M=\left( +\begin{array}{cccc} +\displaystyle -1&\frac{-18x(x^3+x^2-x-1)}{F}&\frac{48x^2(1-x^2)}{F} +&\frac{96x^3(1-x)}{F}\\ +\displaystyle 0&\frac{-(9x^4+45x^3+209x^2+63x+18)}{F} +&\frac{12x(x^3+x^2-x-1)}{F}&\frac{24x^2(x^2-1)}{F}\\ +\displaystyle 0&\frac{32x(1-x)}{F}&\frac{9(x^4+2x^3-2x-1)}{F} +&\frac{18x(x^3+x^2-x-1)}{F}\\ +\displaystyle 0&\frac{24(1-x^2)}{F}&\frac{64x(1-x)}{F} +&\frac{(27x^4+81x^3+209x^2+27x)}{F} +\end{array} +\right) +\] +and $F=27x^4+108x^3+418x^2+108x+27$. The system (10) admits a unique +solution $f_1=f_2=0, f_3=-2$ and $f_4=(x+1)/x$, whose denominator is +not coprime with $V$, so the Hermite reduction is not applicable. + +The above problem was first solved by Trager \cite{20}, who proved +that if $w$ is an {\sl integral basis, i.e.} its elements generate +${\bf O}_{K[x]}$ over $K[x]$, then the system (8) always has a +unique solution in $K(x)$ when $m > 1$, and that solution always has a +denominator coprime with V. Furthermore, the denominator of each +$w_i^{'}$ must be squarefree, implying that the denominator of $h$ is +a factor of $FUV^{m-1}$ where $F \in K[x]$ is squarefree and coprime +with $UV$. He also described an algorithm for computing an integral +basis, a necessary preprocessing for his Hermite reduction. The main +problem with that approach is that computing the integral basis, +whether by the method of \cite{20} or the local alternative \cite{21}, +can be in general more expansive than the rest of the reduction +process. We describe here the lazy Hermite reduction \cite{5}, which +avoids the precomputation of an integral basis. It is based on the +observation that if $m > 1$ and (8) does not have a solution allowing +us to perform the reduction, then either +\begin{itemize} +\item the $S_i$'s are linearly dependent over $K(x)$, or +\item (8) has a unique solution in $K(x)$ whose denominator has a +nontrivial common factor with $V$, or +\item the denominator of some $w_i$ is not squarefree +\end{itemize} +In all of the above cases, we can replace our basis $w$ by a new one, +also made up of integral elements, so that that $K[x]$-module +generated by the new basis strictly contains the one generated by $w$: + +\noindent +{\bf Theorem 1 (\cite{5})} {\sl Suppose that $m \ge 2$ and that +$\{S_1,\ldots,S_n\}$ as given by (9) are linearly dependent over $K(x)$, +and let $T_1,\ldots,T_n \in K[x]$ be not all 0 and such that +$\sum_{i=1}^n T_iS_i=0$. Then, +\[ +w_0=\frac{U}{V}\sum_{i=1}^n T_iw_i \in {\bf O}_{K[x]} +\] +Furthermore, if $\gcd(T_1,\ldots,T_n)=1$ then +$w_0 \notin K[x]w_1+\cdots+K[x]w_n$.} + +\noindent +{\bf Theorem 2 (\cite{5})} {\sl Suppose that $m \ge 2$ and that +$\{S_1,\ldots,S_n\}$ as given by (9) are linearly independent over +$K(x)$, and let $Q,T_1,\ldots,T_n \in K[x]$ be such that +\[ +\sum_{i=1}^n A_iw_i = \frac{1}{Q}\sum_{i=1}^n T_iS_i +\] +Then, +\[ +w_0=\frac{U(V/\gcd(V,Q))}{\gcd(V,Q)}\sum_{i=1}^n T_iw_i \in +{\bf O}_{K[x]} +\] +Furthermore, +if $\gcd(Q,T_1,\ldots,T_n)=1$ and $\deg(\gcd(V,Q)) \ge 1$, then +$w_0 \notin K[x]w_1+\cdots+K[x]w_n$.} + +{\bf Theorem 3 (\cite{5})} {\sl Suppose that the denominator $F$ of +some $w_i$ is not squarefree, and let $F=F_1F_2^2\cdots F_k^k$ be its +squarefree factorization. Then,} +\[ +w_0=F_1\cdots F_kw_i^{'} \in {\bf O}_{K[x]} \backslash +(K[x]w_1+\cdots+K[x]w_n). +\] + +The lazy Hermite reduction proceeds by solving the system (8) in +$K(x)$. Either the reduction will succeed, or one of the above +theorems produces an element +$w_0 \in {\bf O}_{K[x]} \backslash (K[x]w_1+\cdots+K[x]w_n).$ Let then +$\sum_{i=1}^n C_iw_i$ and $F$ be the numerator and denominator of +$w_0$ with respect to $w$. Using Hermitian row reduction, we can zero +out the last row of +\[ +\left( +\begin{array}{cccc} +F & & &\\ + &F & &\\ + & &\ddots&\\ + & & &F\\ +C_1&C_2&\cdots&C_n +\end{array} +\right) +\] +obtaining a matrix of the form +\[ +\left( +\begin{array}{cccc} +C_{1,1} & C_{1,2} & \cdots & C_{1,n}\\ +C_{2,1} & C_{2,2} & \cdots & C_{2,n}\\ +\vdots & \vdots & & \vdots\\ +C_{n,1} & C_{n,2} & \cdots & C_{n,n}\\ +0 & 0 & \cdots & 0\\ +\end{array} +\right) +\] +with $C_{ij} \in K[x]$. Let $\overline{w}_i=(\sum_{j=1}^n +C_{ij}w_j)/F$ +for $1 \le i \le n$. Then, +$\overline{w}=(\overline{w}_1,\ldots,\overline{w}_n)$ is a basis for +$E$ over $K$ and +\[ +K[x]\overline{w}_1+\cdots+K[x]\overline{w}_n=K[x]w_1+\cdots+K[x]w_n+K[x]w_0 +\] +is a submodule of ${\bf O}_{K[x]}$, which strictly contains +$K[x]w_1+\cdots+K[x]w_n$, since it contains $w_0$. Any strictly +increasing chain of submodules of ${\bf O}_{K[x]}$ must +stabilize after a finite number of steps, which means that this +process produces a basis for which either the Hermite reduction can be +carried out, or for which $f$ has a squarefree denominator. + +\noindent +{\bf Example 2} Continuing example 1 for which the Hermite reduction +failed, Theorem 2 implies that +\[ +w_0=\frac{1}{x}(-2xw_3+(x+1)w_4)=(-2xy^2+(x+1)y^3)x \in {\bf O}_{K[x]} +\] +Performing a Hermitian row reduction on +\[ +\left( +\begin{array}{cccc} +x& & & \\ + &x& & \\ + & &x & \\ + & & &x\\ +0&0&-2x&x+1\\ +\end{array} +\right) +\] +yields +\[ +\left( +\begin{array}{cccc} +x& & & \\ + &x& & \\ + & &x& \\ + & & &1\\ +0&0&0&0\\ +\end{array} +\right) +\] +so the new basis is $\overline{w}=(1,y,y^2,y^3/x)$, and the +denominator of $f$ with respect to $\overline{w}$ is 1, which is +squarefree. + +\subsection{Simple radical extensions} +The integration algorithm becomes easier when $E$ is a simple radical +extension of $K(x)$, {\sl i.e.} $E=K(x)[y]/(y^n-a)$ for some +$a \in K(x)$. Write $a=A/D$ where $A,D \in K[x]$, and let +$AD^{n-1}=A_1A_2^2\cdots A_k^k$ be a squarefree factorization of +$AD^{n-1}$. Writing $i=nq_i+r_i$, for $1 \le i \le k$, where +$0 \le r_i < n$, let $F=A_1^{q_1}\cdots A_k^{q_k}$, +$H=A_1^{r_1}\cdots A_k^{r_k}$ and $z=yD/F$. Then, +\[ +z^n=\left(y\frac{D}{F}\right)^n=\frac{y^nD^n}{F^n}=\frac{AD^{n-1}}{F} +=A_1^{r_1}\cdots A_k^{r_k}=H +\] +Since $r_i < n$ for each $i$, the squarefree factorization of $H$ is +of the form $H=H_1H_2^2\cdots H_m^m$ with $m<n$. An integral basis is +then $w=(w_1,\ldots,w_n)$ where +\begin{equation} +w_i=\frac{z^{i-1}}{\prod_{j=1}^m H_j^{\lfloor(i-1)j/n\rfloor}}\quad +1 \le i \le n +\end{equation} +and the Hermite reductions with respect to the above basis is always +guaranteed to succeed. Furthermore, when using that basis, the system +(8) becomes diagonal and its solution can be written explicitly: +writing $D_i=\prod_{j=1}^m H_j^{\lfloor ij/n\rfloor}$ we have +\[ +\begin{array}{ccl} +S_i & = &\displaystyle UV^m\left(\frac{w_i}{V^{m-1}}\right)^{'} +=UV^m\left(\frac{z^{i-1}}{D_{i-1}V^{m-1}}\right)^{'}\\ +&&\\ +&=&\displaystyle UV^m\left(\frac{i-1}{n}\frac{H^{'}}{H}- +\frac{{D_{i-1}}^{'}}{D_{i-1}} +-(m-1)\frac{V^{'}}{V}\right)\left(\frac{z^{i-1}}{D_{i-1}V^{m-1}}\right)\\ +&&\\ +&=&\displaystyle U\left(V\left(\frac{i-1}{n}\frac{H^{'}}{H} +-\frac{{D_{i-1}}^{'}}{D_{i-1}}\right)-(m-1)V^{'}\right)w_i +\end{array} +\] +so the unique solution of (8) in $K(x)$ is +\begin{equation} +f_i=\frac{A_i}{U\left(V\left(\frac{i-1}{n}\frac{H^{'}}{H}- +\frac{{D_{i-1}}^{'}}{D_{i-1}}\right)-(m-1)V^{'}\right)} +\quad{\rm for\ }1 \le i \le n +\end{equation} +and it can be shown that the denominator of each $f_i$ is coprime with +$V$ when $m \ge 2$. + +\noindent +{\bf Example 3} {\sl Consider +\[ +\int\frac{(2x^8+1)\sqrt{(x^8+1)}}{x^{17}+2x^9+x}~dx +\] +The integrand is +\[ +f=\frac{(2x^8+1)y}{x^{17}+2x^9+x} \in E +=\mathbb{Q}(x)[y]/(y^2-x^8-1) +\] +so $H=x^8+1$ which is squarefree, implying that the integral basis +(11) is $(w_1,w_2)=(1,y)$. The squarefree factorization of +$x^{17}+2x^9+x$ is $x(x^8+1)^2$ so $U=x$, $V=x^8+1$, $m=2$, and the +solution (12) of (8) is +\[ +f_1=0,\quad +f_2=\frac{2x^8+1}{x\left((x^8+1)\frac{1}{2}\frac{8x^7}{x^8+1} +-8x^7\right)}=-\frac{(2x^8+1)/4}{x^8} +\] +We have $Q=x^8$, so $V-Q=1$, $A=1$, $R=-1$ and $RQf_2=V/2-1/4$, +implying that +\[ +B=-\frac{y}{4}\quad {\rm and}\quad h=f-\left(\frac{B}{V}\right)^{'} +=\frac{y}{x(x^8+1)} +\] +solve (7), i.e. +\[ +\int\frac{(2x^8+1)\sqrt{(x^8+1)}}{x^{17}+2x^9+x}~dx= +-\frac{\sqrt{x^8+1}}{4(x^8+1)} ++\int\frac{\sqrt{x^8+1}}{x(x^8+1)}~dx +\] +and the remaining integrand has a squarefree denominator.} + +\subsection{Liouville's Theorem} +Up to this point, the algorithms we have presented never fail, yet it +can happen that an algebraic function does not have an elementary +integral, for example +\[ +\int{\frac{x~dx}{\sqrt{1-x^3}}} +\] +which is not an elementary function of $x$. So we need a way to +recognize such functions before completing the integration +algorithm. Liouville was the first to state and prove a precise +theorem from Laplace's observation that we can restrict the elementary +integration problem by allowing only new logarithms to appear linearly +in the integral, all the other terms appearing in the integral being +already in the integrand. + +{\bf Theorem 4 (Liouville \cite{8,9})} {\sl +Let $E$ be an algebraic extension of the rational function field +$K(x)$, and $f \in E$. If $f$ has an elementary integral, then there +exist $v \in E$, constants $c_1,\ldots,c_n \in \overline{K}$ and +$u_1,\ldots,u_k \in E(c_1,\ldots,c_k)^{*}$ such that} +\begin{equation} +f=v^{'}+c_1\frac{u_1^{'}}{u_1}+\cdots+c_k\frac{u_k^{'}}{u_k} +\end{equation} +The above is a restriction to algebraic functions of the strong +Liouville Theorem, whose proof can be found in \cite{4,14}. An elegant +and elementary algebraic proof of a slightly weaker version can be +found in \cite{17}. As a consequence, we can look for an integral of +the form (4), Liouville's Theorem guaranteeing that there is no +elementary integral if we cannot find one in that form. Note that the +above theorem does not say that every integral must have the above +form, and in fact that form is not always the most convenient one, for +example, +\[ +\int{\frac{dx}{1+x^2}}=arctan(x)=\frac{\sqrt{-1}}{2} +\log\left(\frac{\sqrt{-1}+x}{\sqrt{-1}-x}\right) +\] + +\subsection{The integral part} +Following the Hermite reduction, we can assume that we have a basis +$w=(w_1,\ldots,w_n)$ of $E$ over $K(x)$ made of integral elements such +that our integrand is of the form $f=\sum_{i=1}^n A_iw_i/D$ where +$D \in K[x]$ is squarefree. Given Liouville's Theorem, we now have to +solve equation (13) for $v$, $u_1,\ldots,u_k$ and the constants +$c_1,\ldots,c_k$. Since $D$ is squarefree, it can be shown that +$v \in {\bf O}_{K[x]}$ for any solution, and in fact $v$ +corresponds to the polynomial part of the integral of rational +functions. It is however more difficult to compute than the integral +of polynomials, so Trager \cite{20} gave a change of variable that +guarantees that either $v^{'}=0$ or $f$ has no elementary integral. In +order to describe it, we need to define the analogue for algebraic +functions of having a nontrivial polynomial part: we say that +$\alpha \in E$ is {\sl integral at infinity} if there is a polynomial +$p=\sum_{i=1}^m a_iy^i \in K[x][y]$ such that $p(x,\alpha)=0$ and +$deg(a_m) \ge deg(a_i)$ for each $i$. Note that a rational function +$A/D \in K(x)$ is integral at infinity if and only if +$deg(A) \le deg(D)$ since it is a zero of $Dy-A$. When $\alpha-E$ is +not integral at infinity, we say that it has a {\sl pole at +infinity}. Let +\[ +{\bf O}_\infty = \{\alpha \in E {\rm\ such\ that\ }\alpha +{\rm\ is\ integral\ at\ infinity}\} +\] +A set $(b_1,\ldots,b_n) \in E^n$ is called {\sl normal at infinity} if +there are $r_1,\ldots,r_n \in K(x)$ such that every +$\alpha \in {\bf O}_\infty$ can be written as +$\alpha = \sum_{i=1}^n B_ir_ib_i/C$ where $C,B_1,\ldots,B_n \in K[x]$ +and $deg(C) \ge deg(B_i)$ for each $i$. We say that the differential +$\alpha ~dx$ is integral at infinity if +$\alpha x^{1+1/r} \in {\bf O}_\infty$ where $r$ is the smallest +ramification index at infinity. Trager \cite{20} described an +algorithm that converts an arbitrary integral basis $w_1,\ldots,w_n$ +into one that is also normal at infinity, so the first part of his +integration algorithm is as follows: +\begin{enumerate} +\item Pick any basis $b=(b_1,\ldots,b_n)$ of $E$ over $K(x)$ that is +composed of integral elements. +\item Pick an integer $N \in \mathbb{Z}$ that is not zero of the +denominator of $f$ with respect to $b$, nor of the discriminant of $E$ +over $K(x)$, and perform the change of variable $x=N+1/z$, +$dx=-dz/z^2$ on the integrand. +\item Compute an integral basis $w$ for $E$ over $K(z)$ and make it +normal at infinity +\item Perform the Hermite reduction on $f$ using $w$, this yields +$g,h \in E$ such that $\int{f~dz}=g+\int{h~dz}$ and $h$ has a +squarefree denominator with respect to $w$. +\item If $hz^2$ has a pole at infinity, then $\int{f~dz}$ and +$\int{h~dz}$ are not elementary functions +\item Otherwise, $\int{h~dz}$ is elementary if and only if there are +constants $c_1,\ldots,c_k \in \overline{K}$ and +$u_1,\ldots,u_k \in E(c_1,\ldots,c_k)^{*}$ such that +\end{enumerate} +\begin{equation} +h=\frac{c_1}{u_1}\frac{du_1}{dz}+\cdots+\frac{c_k}{u_k}\frac{du_k}{dz} +\end{equation} +The condition that $N$ is not a zero of the denominator of $f$ with +respect to $b$ implies that the $f~dz$ is integral at infinity after +the change of variable, and Trager proved that if $h~dz$ is not +integral at infinity after the Hermite reduction, then $\int{h~dz}$ +and $\int{f~dz}$ are not elementary functions. The condition that $N$ +is not a zero of the discriminant of $E$ over $K(x)$ implies that the +ramification indices at infinity are all equal to 1 after the change +of variable, hence that $h~dz$ is integral at infinity if and only if +$hz^2 \in {\bf O}_\infty$. That second condition on $N$ can be +disregarded, in which case we must replace $hz^2$ in step 5 by +$hz^{1+1/r}$ where $r$ is the smallest ramification index at +infinity. Note that $hz^2 \in {\bf O}_\infty$ implies that +$hz^{1+1/r} \in {\bf O}_\infty$, but not conversely. Finally, we +remark that for simple radical extensions, the integral basis (11) is +already normal at infinity. + +Alternatively, we can use lazy Hermite reduction in the above +algorithm: in step 3, we pick any basis made of integral elements, +then perform the lazy Hermite reduction in step 4. If $h \in K(z)$ +after the Hermite reduction, then we can complete the integral without +computing an integral basis. Otherwise, we compute an integral basis +and make it normal at infinity between steps 4 and 5. This lazy +variant can compute $\int{f~dx}$ whenever it is an element of $E$ +without computing an integral basis. + +\subsection{The logarithmic part} +Following the previous sections, we are left with solving equation +(14) for the constants $c_1,\ldots,c_k$ and for $u_1,\ldots,u_k$. We +must make at this point the following additional assumptions: +\begin{itemize} +\item we have an integral primitive element for $E$ over $K(z)$, {\sl +i.e.} $y \in {\bf O}_{K[z]}$ such that $E=K(z)(y)$, +\item $[E : K(z)]=[E : \overline{K}(z)]$, {\sl i.e.} the minimal +polynomial for $y$ over $K[z]$ is absolutely reducible, and +\item we have an integral basis $w=(w_1,\ldots,w_n)$ for $E$ over +$K(z)$, and $w$ is normal at infinity +\end{itemize} +A primitive element can be computed by considering linear combinations +of the generators of $E$ over $K(x)$ with random coefficients in +$K(x)$, and Trager \cite{20} describes an absolute factorization +algorithm, so the above assumptions can be ensured, although those +steps can be computationally very expensive, except in the case of +simple radical extensions. Before describing the second part of +Trager's integration algorithm, we need to define some concepts from +the theory of algebraic curves. Given a finite algebraic extension +$E=K(z)(y)$ of $K(z)$, a {\sl place} $P$ of $E$ is a proper local +subring of $E$ containing $K$, and a {\sl divisor} is a formal sum +$\sum{n_PP}$ with finite support, where the $n_P$'s are integers and +the $P$'s are places. Let $P$ be a place, then its maximal ideal +$\mu_P$ is principal, so let $p\in E$ be a generator of $\mu_P$. The +{\sl order at} $P$ is the function +$\nu_P : E^{*} \rightarrow \mathbb{Z}$ which maps $f \in E^{*}$ to the +largest $k \in \mathbb{Z}$ such that $f \in p^kP$. Given +$f \in E^{*}$, the {\sl divisor of} $f$ is $(f) = \sum{\nu_P(f)P}$ +where the sum is taken over all the places. It has finite support +since $\nu_P(f) \ne 0$ if and only if $P$ is a pole or zero of +$f$. Finally, we way that a divisor $\delta = \sum{n_PP}$ is +{\sl principal} if $\delta=(f)$ for some $f \in E^{*}$. Note that if +$\delta$ is principal, the $\sum{n_P}=0$, but the converse is not +generally true, except if $E=K(z)$. Trager's algorithm proceeds +essentially by constructing candidate divisors for the $u_i$'s of +(14): +\begin{itemize} +\item Let $\sum_{i=1}^n A_iw_i$ be the numerator of $h$ with respect +to $w$, and $D$ be its (squarefree) denominator +\item Write $\sum_{i=1}^n A_iw_i=G/H$, where $G \in K[z,y]$ and +$H \in K[z]$ +\item Let $f \in K[z,y]$ be the (monic) minimum polynomial for $y$ +over $K(z)$, $t$ be a new indeterminante and compute +\[ +R(t)={\rm resultant_z\ }\left({\rm\ pp_t }\left({\rm\ resultant_y\ }\left( +G-tH\frac{dD}{dz},F\right)\right),D\right) \in K[t] +\] +\item Let $\alpha_1,\ldots,\alpha_s \in \overline{K}$ be the distinct +nonzero roots of $R$, $(q_1,\ldots,q_k)$ be a basis for the vector +space that they generate over $\mathbb{Q}$, write +$\alpha_i=r_{i1}q_1+\cdots+r_{ik}q_k$ for each $i$, where +$r_{ij} \in \mathbb{Q}$ and let $m > 0$ be a common denominator for +all the $r_{ij}$'s +\item For $1 \le j \le k$, let +$\delta_j=\sum_{i=1}^s mr_{ij}\sum_l r_lP_l$ where $r_l$ is the +ramification index of $P_l$ and $P_l$ runs over all the places at +which $h~dz$ has residue $r_i\alpha_i$ +\item If there are nonzero integers $n_1,\ldots,n_k$ such that +$n_j\delta_j$ is principal for each $j$, then let +\[ +u=h-\frac{1}{m}\sum_{j=1}^k\frac{q_j}{n_ju_j}\frac{du_j}{dz} +\] +where $u_j \in E(\alpha_1,\ldots,\alpha_s)^{*}$ is such that +$n_j\delta_j=(u_j)$. If $u=0$, then +$\int{h~dz}=\sum_{j=1}^k q_j\log(u_j)/(mn_j)$, otherwise if either +$u \ne 0$ or there is no such integer $n_j$ for at least one $j$, +then $h~dz$ has no elementary integral. +\end{itemize} +Note that this algorithm expresses the integral, when it is +elementary, with the smallest possible number of logarithms. Steps 3 +to 6 requires computing in the splitting field $K_0$ of $R$ over $K$, +but it can be proven that, as in the case of rational functions, $K_0$ +is the minimal algebraic extension of $K$ necessary to express the +integral in the form (4). Trager \cite{20} describes a representation +of divisors as fractional ideals and gives algorithms for the +arithmetic of divisors and for testing whether a given divisor is +principal. In order to determine whether there exists an integer $N$ +such that $N\delta$ is principal, we need to reduce the algebraic +extension to one over a finite field $\mathbb{F}_{p^q}$ for some +``good'' prime $p \in \mathbb{Z}$. Over $\mathbb{F}_{p^q}$, it is +known that for every divisor $\delta=\sum{n_PP}$ such that +$\sum{n_P}=0$, $M\delta$ is principal for some integer +$1 \le M \le (1+\sqrt{p^q})^{2g}$, where $g$ is the genus of the curve +\cite{22}, so we compute such an $M$ by testing $M=1,2,3,\ldots$ until +we find it. It can then be shown that for almost all primes $p$, if +$M\delta$ is not principal in characteristic 0, the $N\delta$ is not +principal for any integer $N \ne 0$. Since we can test whether the +prime $p$ is ``good'' by testing whether the image in +$\mathbb{F}_{p^q}$ of the discriminant of the discriminant of the +minimal polynomial for $y$ over $K[z]$ is 0, this yields a complete +algorithm. In the special case of hyperelliptic extensions, {\sl i.e.} +simple radical extensions of degree 2, Bertrand \cite{1} describes a +simpler representation of divisors for which the arithmetic and +principality tests are more efficient than the general methods. + +\noindent +{\bf Example 4} {\sl +Continuing example 3, we were left with the integrand +\[ +\frac{\sqrt{x^8+1}}{x(x^8+1)}=\frac{w_2}{x(x^8+1)} \in E +=\mathbb{Q}(x)[y]/(y^2-x^8-1) +\] +where $(w_1,w_2)=(1,y)$ is an integral basis normal at infinity, and +the denominator $D=x(x^8+1)$ of the integrand is squarefree. Its +numerator is $w_2=y$, so the resultant of step 3 is +\[ +resultant_x(pp_t(resultant_y(y-t(9x^8+1),y^2-x^8-1)),x(x^8+1))= +ct^{16}(t^2-1) +\] +where $c$ is a large nonzero integer. Its nonzero roots are $\pm 1$, +and the integrand has residue 1 at the place $P$ corresponding to the +point $(x,y)=(0,1)$ and $-1$ at the place $Q$ corresponding to the +point $(x,y)=(0,-1)$, so the divisor $\delta_1$ of step 5 is +$\delta_1=P-Q$. It turns out that $\delta_1$, $2\delta_1$, and +$3\delta_1$ are not principal, but that +\[ +4\delta_1=\left(\frac{x^4}{1+y}\right)\quad{\rm\ and\ }\quad +\frac{w_2}{x(x^8+1)} +-\frac{1}{4}\frac{(x^4/(1+y))^{'}}{x^4/(1+y)}=0 +\] +which implies that +\[ +\int{\frac{\sqrt{x^8+1}}{x(x^8+1)}}~dx +=\frac{1}{4}\log\left(\frac{x^4}{1+\sqrt{x^8+1}}\right) +\]} + +\noindent +{\bf Example 5} {\sl +Consider +\[ +\int{\frac{x~dx}{\sqrt{1-x^3}}} +\] +The integrand is +\[ +f=\frac{xy}{1-x^3} \in E = +\mathbb{Q}(x)[y]/(y^2+x^3-1) +\] +where $(w_1,w_2)=(1,y)$ is an integral basis normal at infinity, and +the denominaotr $D=1-x^3$ of the integrand is squarefree. Its +numerator is $xw_2=xy$, so the resultant of step 3 is +\[ +resultant_x(pp_t(resultant_y(xy+3tx^2,y^2+x^3-1)),1-x^3)=729t^6 +\] +whose only root is 0. Since $f \ne 0$, we conclude from step 6 that +$\int{f~dx}$ is not an elementary function.} + +\noindent +{\bf Example 6} {\sl +\[ +\int{\frac{dx}{x\sqrt{1-x^3}}} +\] +The integrand is +\[ +f=\frac{y}{x-x^4} \in E = +\mathbb{Q}(x)[y]/(y^2+x^3-1) +\] +where $(w_1,w_2)=(1,y)$ is an integral basis normal at infinity, and +the denominator $D=x-x^4$ of the integrand is squarefree. Its +numerator is $w_2=y$, so the resultant of step 3 is +\[ +resultant_x(pp_t(resultant_y(y+t(4x^3-1),y^2+x^3-1)),x-x^4)=729t^6(t^2-1) +\] +Its nonzero roots are $\pm 1$, and the integrand has residue 1 at the +place $P$ corrseponding to the point $(x,y)=(0,1)$ and $-1$ at the +place $Q$ corresponding to the point $(x,y)=(0,-1)$ so the divisor +$\delta_1$ of step 5 is $\delta_1=P-Q$. It turns out that $\delta_1$ +and $2\delta_1$ are not principal, but that +\[ +3\delta_1=\left(\frac{y-1}{y+1}\right)\quad{\rm and}\quad +\frac{y}{x-x^4}-\frac{1}{3}\frac{((y-1)/(y+1))^{'}}{(y-1)/(y+1)}=0 +\] +which implies that +\[ +\int{\frac{dx}{x\sqrt{1-x^3}}} +=\frac{1}{3}\log\left(\frac{\sqrt{1-x^3}-1}{\sqrt{1-x^3}+1}\right) +\]} + +\section{Elementary Functions} +Let $f$ be an arbitrary elementary function. In order to generalize +the algorithms of the previous sections, we need to build an algebraic +model in which $f$ behaves in some sense like a rational or algebraic +function. For that purpose, we need to formally define differential +fields and elementary functions. + +\subsection{Differential algebra} +A {\sl differential field} $(K,')$ is a {\sl differential extension} +of $(K,')$ with a given map $a \rightarrow a'$ from $K$ into $K$, +satisfying $(a+b)'=a'+b'$ and $(ab)'=a'b+ab'$. Such a map is called a +{\sl derivation} on $K$. An element $a \in K$ which satisfies $a'=0$ +is called a {\sl constant}, and the set +Const($K$)$=\{a \in K {\rm\ such\ that\ }a'=0\}$ of all the constants +of $K$ is a subfield of $K$. + +A differential field $(E,')$ is a {\sl differential equation} of +$(K,')$ if $K \subseteq E$ and the derivation on $E$ extends the one +on $K$. In that case, an element $t \in E$ is a {\sl monomial} over +$K$ if $t$ is transcendental over $K$ and $t' \in K[t]$, which implies +that both $K[t]$ and $K(t)$ are closed under '. An element $t \in E$ +is {\sl elementary over} $K$ if either +\begin{itemize} +\item $t'=b'/b$ for some $b \in K^{*}$, in which case we say that $t$ +is a {\sl logarithm} over $K$, and write $t=log(b)$, or +\item $t'=b't$ for some $b \in K^{*}$, in which case we say that $t$ +is an {\sl exponential} over $K$, and write $t=... [truncated message content] |
From: <gi...@ax...> - 2008-09-13 05:20:57
|
books/Makefile.pamphlet | 23 +- books/bookvol10.1.pamphlet | 2090 +++++++ books/bookvol10.2.pamphlet | 8210 ++++++++++++++++++++++++ books/bookvol10.3.pamphlet | 246 + books/bookvol10.4.pamphlet | 245 + books/bookvol10.pamphlet | 8677 +------------------------- books/ps/v102agg.ps | 350 ++ books/ps/v102associationlistaggregate.ps | 727 +++ books/ps/v102bagaggregate.ps | 452 ++ books/ps/v102binaryrecursiveaggregate.ps | 503 ++ books/ps/v102collection.ps | 452 ++ books/ps/v102dequeueaggregate.ps | 523 ++ books/ps/v102dictionary.ps | 625 ++ books/ps/v102dictionaryoperations.ps | 676 ++ books/ps/v102doublylinkedaggregate.ps | 503 ++ books/ps/v102eltab.ps | 299 + books/ps/v102eltableaggregate.ps | 350 ++ books/ps/v102extensiblelinearaggregate.ps | 574 ++ books/ps/v102finitelinearaggregate.ps | 574 ++ books/ps/v102homogeneousaggregate.ps | 503 ++ books/ps/v102indexedaggregate.ps | 574 ++ books/ps/v102keyeddictionary.ps | 676 ++ books/ps/v102koerce.ps | 299 + books/ps/v102konvert.ps | 299 + books/ps/v102linearaggregate.ps | 625 ++ books/ps/v102listaggregate.ps | 697 +++ books/ps/v102multidictionary.ps | 625 ++ books/ps/v102onedimensionalarrayaggregate.ps | 503 ++ books/ps/v102priorityqueueaggregate.ps | 503 ++ books/ps/v102queueaggregate.ps | 503 ++ books/ps/v102recursiveaggregate.ps | 452 ++ books/ps/v102retractableto.ps | 299 + books/ps/v102stackaggregate.ps | 503 ++ books/ps/v102streamaggregate.ps | 646 ++ books/ps/v102stringaggregate.ps | 605 ++ books/ps/v102tableaggregate.ps | 903 +++ books/ps/v102type.ps | 299 + books/ps/v102unaryrecursiveaggregate.ps | 503 ++ books/ps/v10agg.ps | 350 -- books/ps/v10associationlistaggregate.ps | 778 --- books/ps/v10bagaggregate.ps | 452 -- books/ps/v10binaryrecursiveaggregate.ps | 503 -- books/ps/v10collection.ps | 452 -- books/ps/v10dequeueaggregate.ps | 523 -- books/ps/v10dictionary.ps | 625 -- books/ps/v10dictionaryoperations.ps | 676 -- books/ps/v10doublylinkedaggregate.ps | 503 -- books/ps/v10eltab.ps | 299 - books/ps/v10eltableaggregate.ps | 350 -- books/ps/v10extensiblelinearaggregate.ps | 574 -- books/ps/v10finitelinearaggregate.ps | 574 -- books/ps/v10homogeneousaggregate.ps | 401 -- books/ps/v10indexedaggregate.ps | 574 -- books/ps/v10keyeddictionary.ps | 676 -- books/ps/v10koerce.ps | 299 - books/ps/v10konvert.ps | 299 - books/ps/v10linearaggregate.ps | 625 -- books/ps/v10listaggregate.ps | 697 --- books/ps/v10multidictionary.ps | 625 -- books/ps/v10onedimensionalarrayaggregate.ps | 503 -- books/ps/v10priorityqueueaggregate.ps | 503 -- books/ps/v10queueaggregate.ps | 503 -- books/ps/v10recursiveaggregate.ps | 452 -- books/ps/v10retractableto.ps | 299 - books/ps/v10stackaggregate.ps | 503 -- books/ps/v10streamaggregate.ps | 646 -- books/ps/v10stringaggregate.ps | 605 -- books/ps/v10tableaggregate.ps | 903 --- books/ps/v10type.ps | 299 - books/ps/v10unaryrecursiveaggregate.ps | 503 -- changelog | 10 + src/Makefile.pamphlet | 12 +- 72 files changed, 27455 insertions(+), 25257 deletions(-) New commits: commit 315cde6ee41f4143519084d4f1dca25916104dc5 Author: Tim Daly <da...@ax...> Date: Thu Jul 24 11:06:23 2008 -0400 20080912 tpd books/Makefile add bookvol10 subvolumes 20080912 tpd books/bookvol10.4 added 20080912 tpd books/bookvol10.3 added 20080912 tpd books/bookvol10.2 added 20080912 tpd books/bookvol10.1 added 20080912 tpd books/bookvol10 split 20080912 tpd books/ps/v102keyeddictionary.ps updated 20080912 tpd books/ps/v102homogeneousaggregate.ps updated 20080912 tpd books/ps/v102homogeneousaggregate.ps updated 20080912 tpd books/ps/v10* renamed to books/ps/v102* |
From: <da...@us...> - 2008-09-12 01:26:06
|
Revision: 971 http://axiom.svn.sourceforge.net/axiom/?rev=971&view=rev Author: daly Date: 2008-09-12 01:26:14 +0000 (Fri, 12 Sep 2008) Log Message: ----------- 20080911 tpd src/algebra/Makefile remove coerce.spad 20080911 tpd books/ps/v10unaryrecursiveaggregate.ps add image 20080911 tpd books/ps/v10type.ps add image 20080911 tpd books/ps/v10tableaggregate.ps add image 20080911 tpd books/ps/v10stringaggregate.ps add image 20080911 tpd books/ps/v10streamaggregate.ps add image 20080911 tpd books/ps/v10stackaggregate.ps add image 20080911 tpd books/ps/v10retractableto.ps add image 20080911 tpd books/ps/v10recursiveaggregate.ps add image 20080911 tpd books/ps/v10queueaggregate.ps add image 20080911 tpd books/ps/v10priorityqueueaggregate.ps add image 20080911 tpd books/ps/v10onedimensionalarrayaggregate.ps add image 20080911 tpd books/ps/v10multidictionary.ps add image 20080911 tpd books/ps/v10listaggregate.ps add image 20080911 tpd books/ps/v10linearaggregate.ps add image 20080911 tpd books/ps/v10konvert.ps add image 20080911 tpd books/ps/v10koerce.ps add image 20080911 tpd books/ps/v10keyeddictionary.ps add image 20080911 tpd books/ps/v10indexedaggregate.ps add image 20080911 tpd books/ps/v10homogeneousaggregate.ps add image 20080911 tpd books/ps/v10finitelinearaggregate.ps add image 20080911 tpd books/ps/v10extensiblelinearaggregate.ps add image 20080911 tpd books/ps/v10eltableaggregate.ps add image 20080911 tpd books/ps/v10eltab.ps add image 20080911 tpd books/ps/v10doublylinkedaggregate.ps add image 20080911 tpd books/ps/v10dictionaryoperations.ps add image 20080911 tpd books/ps/v10dictionary.ps add image 20080911 tpd books/ps/v10dequeueaggregate.ps add image 20080911 tpd books/ps/v10collection.ps add image 20080911 tpd books/ps/v10binaryrecursiveaggregate.ps add image 20080911 tpd books/ps/v10bagaggregate.ps add image 20080911 tpd books/ps/v10associationlistaggregate.ps add image 20080911 tpd books/ps/v10agg.ps add image 20080911 tpd src/algebra/coerce.spad merge into bookvol10 20080911 tpd books/bookvol10 document aggcat, coerce layers Modified Paths: -------------- trunk/axiom/books/bookvol10.pamphlet trunk/axiom/changelog trunk/axiom/src/algebra/Makefile.pamphlet Added Paths: ----------- trunk/axiom/books/ps/v10agg.ps trunk/axiom/books/ps/v10associationlistaggregate.ps trunk/axiom/books/ps/v10bagaggregate.ps trunk/axiom/books/ps/v10binaryrecursiveaggregate.ps trunk/axiom/books/ps/v10collection.ps trunk/axiom/books/ps/v10dequeueaggregate.ps trunk/axiom/books/ps/v10dictionary.ps trunk/axiom/books/ps/v10dictionaryoperations.ps trunk/axiom/books/ps/v10doublylinkedaggregate.ps trunk/axiom/books/ps/v10eltab.ps trunk/axiom/books/ps/v10eltableaggregate.ps trunk/axiom/books/ps/v10extensiblelinearaggregate.ps trunk/axiom/books/ps/v10finitelinearaggregate.ps trunk/axiom/books/ps/v10homogeneousaggregate.ps trunk/axiom/books/ps/v10indexedaggregate.ps trunk/axiom/books/ps/v10keyeddictionary.ps trunk/axiom/books/ps/v10koerce.ps trunk/axiom/books/ps/v10konvert.ps trunk/axiom/books/ps/v10linearaggregate.ps trunk/axiom/books/ps/v10listaggregate.ps trunk/axiom/books/ps/v10multidictionary.ps trunk/axiom/books/ps/v10onedimensionalarrayaggregate.ps trunk/axiom/books/ps/v10priorityqueueaggregate.ps trunk/axiom/books/ps/v10queueaggregate.ps trunk/axiom/books/ps/v10recursiveaggregate.ps trunk/axiom/books/ps/v10retractableto.ps trunk/axiom/books/ps/v10stackaggregate.ps trunk/axiom/books/ps/v10streamaggregate.ps trunk/axiom/books/ps/v10stringaggregate.ps trunk/axiom/books/ps/v10tableaggregate.ps trunk/axiom/books/ps/v10type.ps trunk/axiom/books/ps/v10unaryrecursiveaggregate.ps Removed Paths: ------------- trunk/axiom/src/algebra/coerce.spad.pamphlet Modified: trunk/axiom/books/bookvol10.pamphlet =================================================================== --- trunk/axiom/books/bookvol10.pamphlet 2008-09-11 18:35:17 UTC (rev 970) +++ trunk/axiom/books/bookvol10.pamphlet 2008-09-12 01:26:14 UTC (rev 971) @@ -8,13 +8,29 @@ %% %% pagehead consolidates standard page indexing %% -\newcommand{\pagehead}[3]{% e.g. \pagehead{page}{file.ht}{title} -\subsection{#3}% -\label{#1} -\index{pages!#1!#2}% -\index{#1!#2!pages}% -\index{#2!pages!#1}} +\newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb} +\section{#1} +\label{#1}% +\label{#2}% +\index{{#1}}% +\index{{#2}}}% %% +%% pagepic adds an image and an index entry +%% +\newcommand{\pagepic}[2]{% e.g. \pagepic{pathandfile}{abb} +\includegraphics{#1}% +\index{images!#2}} +%% +%% pageto is a forward link to a referenced page +%% +\newcommand{\pageto}[2]{% e.g. \pageto{abb}{name} +\ \\${\bf\Rightarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} +%% +%% pageback is a backward link to a referencing page +%% +\newcommand{\pagefrom}[2]{% e.g. \pagefrom{name}{abb} +\ \\${\bf\Leftarrow{}}${``#1''} (#2) \ref{#1} on page~\pageref{#1}} +%% % special meanings for math characters \providecommand{\N}{\mbox{\bbold N}} \providecommand{\Natural}{\mbox{\bbold N}} @@ -1982,8 +1998,289 @@ case. Again, the details are quite technical and can be found in \cite{2,12,13}. -\chapter{Categories Layers} -\section{category AGG Aggregate} +\chapter{Category Layer 1} +\pagehead{Category}{CATEGORY} +This is the root of the category hierarchy and is not represented by code. + +See:\\ +\pageto{Eltable}{ELTAB} +\pageto{CoercibleTo}{KOERCE} +\pageto{ConvertibleTo}{KONVERT} +\pageto{RetractableTo}{RETRACT} +\pageto{Type}{TYPE} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{CoercibleTo}{KOERCE} +\pagepic{ps/v10koerce.ps}{KOERCE} + +See:\\ +\pagefrom{Category}{CATEGORY} +<<category KOERCE CoercibleTo>>= +)abbrev category KOERCE CoercibleTo +++ Category for coerce +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is coercible to B means any element of A can automatically be +++ converted into an element of B by the interpreter. +CoercibleTo(S:Type): Category == with + coerce: % -> S + ++ coerce(a) transforms a into an element of S. + +@ +<<KOERCE.dotabb>>= +"KOERCE" [color=lightblue,href="books/bookvol10.pamphlet"]; +"KOERCE" -> "CATEGORY" + +@ +<<KOERCE.dotfull>>= +"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; +"CoercibleTo(a:Type)" -> "Category" + +"CoercibleTo(OutputForm)" [color=seagreen,href="books/bookvol10.pamphlet"]; +"CoercibleTo(OutputForm)" -> + "CoercibleTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{ConvertibleTo}{KONVERT} +\pagepic{ps/v10konvert.ps}{KONVERT} + +See:\\ +\pagefrom{Category}{CATEGORY} +<<category KONVERT ConvertibleTo>>= +)abbrev category KONVERT ConvertibleTo +++ Category for convert +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is convertible to B means any element of A +++ can be converted into an element of B, +++ but not automatically by the interpreter. +ConvertibleTo(S:Type): Category == with + convert: % -> S + ++ convert(a) transforms a into an element of S. + +@ +<<KONVERT.dotabb>>= +"KONVERT" [color=lightblue,href="books/bookvol10.pamphlet"]; +"KONVERT" -> "CATEGORY" + +@ +<<KONVERT.dotfull>>= +"ConvertibleTo(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(a:Type)" -> "Category" + +"ConvertibleTo(DoubleFloat)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Float)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(InputForm)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Integer)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Float))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Complex(Float))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Complex(Float))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Complex(DoubleFloat))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Complex(DoubleFloat))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(String)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(String)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Symbol)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Symbol)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(SExpression)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(SExpression)" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(Pattern(Base))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(Pattern(Base))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(List(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(List(Integer))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(List(Character))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(List(Character))" -> "ConvertibleTo(a:Type)" + +"ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" -> + "ConvertibleTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Eltable}{ELTAB} +\pagepic{ps/v10eltab.ps}{ELTAB} + +See:\\ +\pagefrom{Category}{CATEGORY} +<<category ELTAB Eltable>>= +)abbrev category ELTAB Eltable +++ Author: Michael Monagan; revised by Manuel Bronstein and Manuel Bronstein +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An eltable over domains D and I is a structure which can be viewed +++ as a function from D to I. +++ Examples of eltable structures range from data structures, e.g. those +++ of type \spadtype{List}, to algebraic structures like \spadtype{Polynomial}. +Eltable(S:SetCategory, Index:Type): Category == with + elt : (%, S) -> Index + ++ elt(u,i) (also written: u . i) returns the element of u indexed by i. + ++ Error: if i is not an index of u. + +@ +<<ELTAB.dotabb>>= +"ELTAB" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ELTAB" -> "CATEGORY" + +@ +<<ELTAB.dotfull>>= +"Eltable(a:SetCategory,b:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"Eltable(a:SetCategory,b:Type)" -> "Category" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{RetractableTo}{RETRACT} +\pagepic{ps/v10retractableto.ps}{RETRACT} + +See:\\ +\pagefrom{Category}{CATEGORY} +<<category RETRACT RetractableTo>>= +)abbrev category RETRACT RetractableTo +++ Category for retract +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: 14 May 1991 +++ Description: +++ A is retractable to B means that some elementsif A can be converted +++ into elements of B and any element of B can be converted into an +++ element of A. +RetractableTo(S: Type): Category == with + coerce: S -> % + ++ coerce(a) transforms a into an element of %. + retractIfCan: % -> Union(S,"failed") + ++ retractIfCan(a) transforms a into an element of S if possible. + ++ Returns "failed" if a cannot be made into an element of S. + retract: % -> S + ++ retract(a) transforms a into an element of S if possible. + ++ Error: if a cannot be made into an element of S. + add + retract(s) == + (u:=retractIfCan s) case "failed" => error "not retractable" + u + +@ +<<RETRACT.dotabb>>= +"RETRACT" [color=lightblue,href="books/bookvol10.pamphlet"]; +"RETRACT" -> "CATEGORY" + +@ +<<RETRACT.dotfull>>= +"RetractableTo(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"RetractableTo(a:Type)" -> "Category" + +"RetractableTo(SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(SetCategory)" -> "RetractableTo(a:Type)" + +"RetractableTo(Symbol)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Symbol)" -> "RetractableTo(a:Type)" + +"RetractableTo(Integer)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Integer)" -> "RetractableTo(a:Type)" + +"RetractableTo(NonNegativeInteger)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)" + +"RetractableTo(Fraction(Integer))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)" + +"RetractableTo(Float)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Float)" -> "RetractableTo(a:Type)" + +"RetractableTo(Kernel(ExpressionSpace))" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)" + +"RetractableTo(CommutativeRing)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)" +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Type}{TYPE} +\pagepic{ps/v10type.ps}{TYPE} + +See:\\ +\pageto{Aggregate}{AGG} +\pagefrom{Category}{CATEGORY} +<<category TYPE Type>>= +)abbrev category TYPE Type +++ The new fundamental Type (keeping Object for 1.5 as well) +++ Author: Richard Jenks +++ Date Created: 14 May 1992 +++ Date Last Updated: 14 May 1992 +++ Description: The fundamental Type; +Type(): Category == with nil + +@ +<<TYPE.dotabb>>= +"TYPE" [color=lightblue,href="books/bookvol10.pamphlet"]; +"TYPE" -> "CATEGORY" + +@ +<<TYPE.dotfull>>= +"Type()" [color=lightblue,href="books/bookvol10.pamphlet"]; +"Type()" -> "Category" + +@ +\chapter{Category Layer 2} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Aggregate}{AGG} +\pagepic{ps/v10agg.ps}{AGG} + +See:\\ +\pageto{HomogeneousAggregate}{HOAGG} +\pagefrom{Type}{TYPE} <<category AGG Aggregate>>= )abbrev category AGG Aggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2047,9 +2344,17 @@ "Aggregate()" -> "Type()" @ -\section{category ALAGG AssociationListAggregate} -<<category ALAGG AssociationListAggregate>>= -)abbrev category ALAGG AssociationListAggregate +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{EltableAggregate}{ELTAGG} +%\pagepic{ps/v10eltableaggregate.ps}{ELTAGG} +\includegraphics[scale=0.75]{ps/v10eltableaggregate.ps} +\index{images!STAGG} + +See:\\ +\pageto{IndexedAggregate}{IXAGG} +\pagefrom{Eltable}{ELTAB} +<<category ELTAGG EltableAggregate>>= +)abbrev category ELTAGG EltableAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2060,105 +2365,71 @@ ++ Keywords: ++ References: ++ Description: -++ An association list is a list of key entry pairs which may be viewed -++ as a table. It is a poor mans version of a table: -++ searching for a key is a linear operation. -AssociationListAggregate(Key:SetCategory,Entry:SetCategory): Category == - Join(TableAggregate(Key, Entry), ListAggregate Record(key:Key,entry:Entry)) with - assoc: (Key, %) -> Union(Record(key:Key,entry:Entry), "failed") - ++ assoc(k,u) returns the element x in association list u stored - ++ with key k, or "failed" if u has no key k. +++ An eltable aggregate is one which can be viewed as a function. +++ For example, the list \axiom{[1,7,4]} can applied to 0,1, and 2 respectively +++ will return the integers 1,7, and 4; thus this list may be viewed +++ as mapping 0 to 1, 1 to 7 and 2 to 4. In general, an aggregate +++ can map members of a domain {\em Dom} to an image domain {\em Im}. +EltableAggregate(Dom:SetCategory, Im:Type): Category == +-- This is separated from Eltable +-- and series won't have to support qelt's and setelt's. + Eltable(Dom, Im) with + elt : (%, Dom, Im) -> Im + ++ elt(u, x, y) applies u to x if x is in the domain of u, + ++ and returns y otherwise. + ++ For example, if u is a polynomial in \axiom{x} over the rationals, + ++ \axiom{elt(u,n,0)} may define the coefficient of \axiom{x} + ++ to the power n, returning 0 when n is out of range. + qelt: (%, Dom) -> Im + ++ qelt(u, x) applies \axiom{u} to \axiom{x} without checking whether + ++ \axiom{x} is in the domain of \axiom{u}. If \axiom{x} is not in the + ++ domain of \axiom{u} a memory-access violation may occur. If a check + ++ on whether \axiom{x} is in the domain of \axiom{u} is required, use + ++ the function \axiom{elt}. + if % has shallowlyMutable then + setelt : (%, Dom, Im) -> Im + ++ setelt(u,x,y) sets the image of x to be y under u, + ++ assuming x is in the domain of u. + ++ Error: if x is not in the domain of u. + -- this function will soon be renamed as setelt!. + qsetelt_!: (%, Dom, Im) -> Im + ++ qsetelt!(u,x,y) sets the image of \axiom{x} to be \axiom{y} under + ++ \axiom{u}, without checking that \axiom{x} is in the domain of + ++ \axiom{u}. + ++ If such a check is required use the function \axiom{setelt}. + add + qelt(a, x) == elt(a, x) + if % has shallowlyMutable then + qsetelt_!(a, x, y) == (a.x := y) @ -<<ALAGG.dotabb>>= -"ALAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"ALAGG" -> "TBAGG" -"ALAGG" -> "LSAGG" +<<ELTAGG.dotabb>>= +"ELTAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"ELTAGG" -> "ELTAB" @ -<<ALAGG.dotfull>>= -"AssociationListAggregate(a:SetCategory,b:SetCategory)" +<<ELTAGG.dotfull>>= +"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> - "TableAggregate(a:SetCategory,b:SetCategory)" -"AssociationListAggregate(a:SetCategory,b:SetCategory)" -> - "ListAggregate(Record(a:SetCategory,b:SetCategory))" +"EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)" @ -\section{ALAGG.lsp BOOTSTRAP} -{\bf ALAGG} depends on a chain of files. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf ALAGG} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf ALAGG.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. +\chapter{Category Layer 3} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{HomogeneousAggregate}{HOAGG} +\pagepic{ps/v10homogeneousaggregate.ps}{HOAGG} -Note that this code is not included in the generated catdef.spad file. - -<<ALAGG.lsp BOOTSTRAP>>= - -(|/VERSIONCHECK| 2) - -(SETQ |AssociationListAggregate;CAT| (QUOTE NIL)) - -(SETQ |AssociationListAggregate;AL| (QUOTE NIL)) - -(DEFUN |AssociationListAggregate| - (|&REST| #1=#:G88404 |&AUX| #2=#:G88402) - (DSETQ #2# #1#) - (LET (#3=#:G88403) - (COND - ((SETQ #3# (|assoc| (|devaluateList| #2#) |AssociationListAggregate;AL|)) - (CDR #3#)) - (T - (SETQ |AssociationListAggregate;AL| - (|cons5| - (CONS - (|devaluateList| #2#) - (SETQ #3# (APPLY (FUNCTION |AssociationListAggregate;|) #2#))) - |AssociationListAggregate;AL|)) #3#)))) - -(DEFUN |AssociationListAggregate;| (|t#1| |t#2|) - (PROG (#1=#:G88401) - (RETURN - (PROG1 - (LETT #1# - (|sublisV| - (PAIR - (QUOTE (|t#1| |t#2|)) (LIST (|devaluate| |t#1|) (|devaluate| |t#2|))) - (|sublisV| - (PAIR - (QUOTE (#2=#:G88400)) - (LIST (QUOTE (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|))))) - (COND - (|AssociationListAggregate;CAT|) - ((QUOTE T) - (LETT |AssociationListAggregate;CAT| - (|Join| - (|TableAggregate| (QUOTE |t#1|) (QUOTE |t#2|)) - (|ListAggregate| (QUOTE #2#)) - (|mkCategory| - (QUOTE |domain|) - (QUOTE - (((|assoc| - ((|Union| - (|Record| (|:| |key| |t#1|) (|:| |entry| |t#2|)) "failed") - |t#1| |$|)) - T))) - NIL (QUOTE NIL) NIL)) - . #3=(|AssociationListAggregate|)))))) - . #3#) - (SETELT #1# 0 - (LIST - (QUOTE |AssociationListAggregate|) - (|devaluate| |t#1|) - (|devaluate| |t#2|))))))) -@ -\section{category A1AGG OneDimensionalArrayAggregate} -<<category A1AGG OneDimensionalArrayAggregate>>= -)abbrev category A1AGG OneDimensionalArrayAggregate +See:\\ +\pageto{BagAggregate}{BGAGG} +\pageto{Collection}{CLAGG} +\pageto{IndexedAggregate}{IXAGG} +\pageto{RecursiveAggregate}{RCAGG} +\pagefrom{Aggregate}{AGG} +<<category HOAGG HomogeneousAggregate>>= +)abbrev category HOAGG HomogeneousAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 +++ Date Last Updated: April 1991, May 1995 ++ Basic Operations: ++ Related Constructors: ++ Also See: @@ -2166,264 +2437,93 @@ ++ Keywords: ++ References: ++ Description: -++ One-dimensional-array aggregates serves as models for one-dimensional arrays. -++ Categorically, these aggregates are finite linear aggregates -++ with the \spadatt{shallowlyMutable} property, that is, any component of -++ the array may be changed without affecting the -++ identity of the overall array. -++ Array data structures are typically represented by a fixed area in storage and -++ therefore cannot efficiently grow or shrink on demand as can list structures -++ (see however \spadtype{FlexibleArray} for a data structure which -++ is a cross between a list and an array). -++ Iteration over, and access to, elements of arrays is extremely fast -++ (and often can be optimized to open-code). -++ Insertion and deletion however is generally slow since an entirely new -++ data structure must be created for the result. -OneDimensionalArrayAggregate(S:Type): Category == - FiniteLinearAggregate S with shallowlyMutable +++ A homogeneous aggregate is an aggregate of elements all of the +++ same type. +++ In the current system, all aggregates are homogeneous. +++ Two attributes characterize classes of aggregates. +++ Aggregates from domains with attribute \spadatt{finiteAggregate} +++ have a finite number of members. +++ Those with attribute \spadatt{shallowlyMutable} allow an element +++ to be modified or updated without changing its overall value. +HomogeneousAggregate(S:Type): Category == Aggregate with + if S has SetCategory then SetCategory + if S has SetCategory then + if S has Evalable S then Evalable S + map : (S->S,%) -> % + ++ map(f,u) returns a copy of u with each element x replaced by f(x). + ++ For collections, \axiom{map(f,u) = [f(x) for x in u]}. + if % has shallowlyMutable then + map_!: (S->S,%) -> % + ++ map!(f,u) destructively replaces each element x of u + ++ by \axiom{f(x)}. + if % has finiteAggregate then + any?: (S->Boolean,%) -> Boolean + ++ any?(p,u) tests if \axiom{p(x)} is true for any element x of u. + ++ Note: for collections, + ++ \axiom{any?(p,u) = reduce(or,map(f,u),false,true)}. + every?: (S->Boolean,%) -> Boolean + ++ every?(f,u) tests if p(x) is true for all elements x of u. + ++ Note: for collections, + ++ \axiom{every?(p,u) = reduce(and,map(f,u),true,false)}. + count: (S->Boolean,%) -> NonNegativeInteger + ++ count(p,u) returns the number of elements x in u + ++ such that \axiom{p(x)} is true. For collections, + ++ \axiom{count(p,u) = reduce(+,[1 for x in u | p(x)],0)}. + parts: % -> List S + ++ parts(u) returns a list of the consecutive elements of u. + ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. + members: % -> List S + ++ members(u) returns a list of the consecutive elements of u. + ++ For collections, \axiom{parts([x,y,...,z]) = (x,y,...,z)}. + if S has SetCategory then + count: (S,%) -> NonNegativeInteger + ++ count(x,u) returns the number of occurrences of x in u. For + ++ collections, \axiom{count(x,u) = reduce(+,[x=y for y in u],0)}. + member?: (S,%) -> Boolean + ++ member?(x,u) tests if x is a member of u. + ++ For collections, + ++ \axiom{member?(x,u) = reduce(or,[x=y for y in u],false)}. add - parts x == [qelt(x, i) for i in minIndex x .. maxIndex x] - sort_!(f, a) == quickSort(f, a)$FiniteLinearAggregateSort(S, %) + if S has Evalable S then + eval(u:%,l:List Equation S):% == map(eval(#1,l),u) + if % has finiteAggregate then + #c == # parts c + any?(f, c) == _or/[f x for x in parts c] + every?(f, c) == _and/[f x for x in parts c] + count(f:S -> Boolean, c:%) == _+/[1 for x in parts c | f x] + members x == parts x + if S has SetCategory then + count(s:S, x:%) == count(s = #1, x) + member?(e, c) == any?(e = #1,c) + x = y == + size?(x, #y) and _and/[a = b for a in parts x for b in parts y] + coerce(x:%):OutputForm == + bracket + commaSeparate [a::OutputForm for a in parts x]$List(OutputForm) - any?(f, a) == - for i in minIndex a .. maxIndex a repeat - f qelt(a, i) => return true - false - - every?(f, a) == - for i in minIndex a .. maxIndex a repeat - not(f qelt(a, i)) => return false - true - - position(f:S -> Boolean, a:%) == - for i in minIndex a .. maxIndex a repeat - f qelt(a, i) => return i - minIndex(a) - 1 - - find(f, a) == - for i in minIndex a .. maxIndex a repeat - f qelt(a, i) => return qelt(a, i) - "failed" - - count(f:S->Boolean, a:%) == - n:NonNegativeInteger := 0 - for i in minIndex a .. maxIndex a repeat - if f(qelt(a, i)) then n := n+1 - n - - map_!(f, a) == - for i in minIndex a .. maxIndex a repeat - qsetelt_!(a, i, f qelt(a, i)) - a - - setelt(a:%, s:UniversalSegment(Integer), x:S) == - l := lo s; h := if hasHi s then hi s else maxIndex a - l < minIndex a or h > maxIndex a => error "index out of range" - for k in l..h repeat qsetelt_!(a, k, x) - x - - reduce(f, a) == - empty? a => error "cannot reduce an empty aggregate" - r := qelt(a, m := minIndex a) - for k in m+1 .. maxIndex a repeat r := f(r, qelt(a, k)) - r - - reduce(f, a, identity) == - for k in minIndex a .. maxIndex a repeat - identity := f(identity, qelt(a, k)) - identity - - if S has SetCategory then - reduce(f, a, identity,absorber) == - for k in minIndex a .. maxIndex a while identity ^= absorber - repeat identity := f(identity, qelt(a, k)) - identity - --- this is necessary since new has disappeared. - stupidnew: (NonNegativeInteger, %, %) -> % - stupidget: List % -> S --- a and b are not both empty if n > 0 - stupidnew(n, a, b) == - zero? n => empty() - new(n, (empty? a => qelt(b, minIndex b); qelt(a, minIndex a))) --- at least one element of l must be non-empty - stupidget l == - for a in l repeat - not empty? a => return first a - error "Should not happen" - - map(f, a, b) == - m := max(minIndex a, minIndex b) - n := min(maxIndex a, maxIndex b) - l := max(0, n - m + 1)::NonNegativeInteger - c := stupidnew(l, a, b) - for i in minIndex(c).. for j in m..n repeat - qsetelt_!(c, i, f(qelt(a, j), qelt(b, j))) - c - --- map(f, a, b, x) == --- m := min(minIndex a, minIndex b) --- n := max(maxIndex a, maxIndex b) --- l := (n - m + 1)::NonNegativeInteger --- c := new l --- for i in minIndex(c).. for j in m..n repeat --- qsetelt_!(c, i, f(a(j, x), b(j, x))) --- c - - merge(f, a, b) == - r := stupidnew(#a + #b, a, b) - i := minIndex a - m := maxIndex a - j := minIndex b - n := maxIndex b - for k in minIndex(r).. while i <= m and j <= n repeat - if f(qelt(a, i), qelt(b, j)) then - qsetelt_!(r, k, qelt(a, i)) - i := i+1 - else - qsetelt_!(r, k, qelt(b, j)) - j := j+1 - for k in k.. for i in i..m repeat qsetelt_!(r, k, elt(a, i)) - for k in k.. for j in j..n repeat qsetelt_!(r, k, elt(b, j)) - r - - elt(a:%, s:UniversalSegment(Integer)) == - l := lo s - h := if hasHi s then hi s else maxIndex a - l < minIndex a or h > maxIndex a => error "index out of range" - r := stupidnew(max(0, h - l + 1)::NonNegativeInteger, a, a) - for k in minIndex r.. for i in l..h repeat - qsetelt_!(r, k, qelt(a, i)) - r - - insert(a:%, b:%, i:Integer) == - m := minIndex b - n := maxIndex b - i < m or i > n => error "index out of range" - y := stupidnew(#a + #b, a, b) - for k in minIndex y.. for j in m..i-1 repeat - qsetelt_!(y, k, qelt(b, j)) - for k in k.. for j in minIndex a .. maxIndex a repeat - qsetelt_!(y, k, qelt(a, j)) - for k in k.. for j in i..n repeat qsetelt_!(y, k, qelt(b, j)) - y - - copy x == - y := stupidnew(#x, x, x) - for i in minIndex x .. maxIndex x for j in minIndex y .. repeat - qsetelt_!(y, j, qelt(x, i)) - y - - copyInto_!(y, x, s) == - s < minIndex y or s + #x > maxIndex y + 1 => - error "index out of range" - for i in minIndex x .. maxIndex x for j in s.. repeat - qsetelt_!(y, j, qelt(x, i)) - y - - construct l == --- a := new(#l) - empty? l => empty() - a := new(#l, first l) - for i in minIndex(a).. for x in l repeat qsetelt_!(a, i, x) - a - - delete(a:%, s:UniversalSegment(Integer)) == - l := lo s; h := if hasHi s then hi s else maxIndex a - l < minIndex a or h > maxIndex a => error "index out of range" - h < l => copy a - r := stupidnew((#a - h + l - 1)::NonNegativeInteger, a, a) - for k in minIndex(r).. for i in minIndex a..l-1 repeat - qsetelt_!(r, k, qelt(a, i)) - for k in k.. for i in h+1 .. maxIndex a repeat - qsetelt_!(r, k, qelt(a, i)) - r - - delete(x:%, i:Integer) == - i < minIndex x or i > maxIndex x => error "index out of range" - y := stupidnew((#x - 1)::NonNegativeInteger, x, x) - for i in minIndex(y).. for j in minIndex x..i-1 repeat - qsetelt_!(y, i, qelt(x, j)) - for i in i .. for j in i+1 .. maxIndex x repeat - qsetelt_!(y, i, qelt(x, j)) - y - - reverse_! x == - m := minIndex x - n := maxIndex x - for i in 0..((n-m) quo 2) repeat swap_!(x, m+i, n-i) - x - - concat l == - empty? l => empty() - n := _+/[#a for a in l] - i := minIndex(r := new(n, stupidget l)) - for a in l repeat - copyInto_!(r, a, i) - i := i + #a - r - - sorted?(f, a) == - for i in minIndex(a)..maxIndex(a)-1 repeat - not f(qelt(a, i), qelt(a, i + 1)) => return false - true - - concat(x:%, y:%) == - z := stupidnew(#x + #y, x, y) - copyInto_!(z, x, i := minIndex z) - copyInto_!(z, y, i + #x) - z - - if S has SetCategory then - x = y == - #x ^= #y => false - for i in minIndex x .. maxIndex x repeat - not(qelt(x, i) = qelt(y, i)) => return false - true - - coerce(r:%):OutputForm == - bracket commaSeparate - [qelt(r, k)::OutputForm for k in minIndex r .. maxIndex r] - - position(x:S, t:%, s:Integer) == - n := maxIndex t - s < minIndex t or s > n => error "index out of range" - for k in s..n repeat - qelt(t, k) = x => return k - minIndex(t) - 1 - - if S has OrderedSet then - a < b == - for i in minIndex a .. maxIndex a - for j in minIndex b .. maxIndex b repeat - qelt(a, i) ^= qelt(b, j) => return a.i < b.j - #a < #b - - @ -<<A1AGG.dotabb>>= -"A1AGG" [color=lightblue,style=filled]; -"A1AGG" -> "FLAGG" +<<HOAGG.dotabb>>= +"HOAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"HOAGG" -> "AGG" @ -<<A1AGG.dotfull>>= -"OneDimensionalArrayAggregate(a:Type)" +<<HOAGG.dotfull>>= +"HomogeneousAggregate(a:Type)" [color=lightblue,href="books/bookvol10.pamphlet"]; -"OneDimensionalArrayAggregate(a:Type)" -> - "FiniteLinearAggregate(a:Type)" +"HomogeneousAggregate(a:Type)" -> "Aggregate()" -"OneDimensionalArrayAggregate(Character)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"OneDimensionalArrayAggregate(Character)" -> - "OneDimensionalArrayAggregate(a:Type)" +@ +\chapter{Category Layer 4} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BagAggregate}{BGAGG} +\pagepic{ps/v10bagaggregate.ps}{BGAGG} -"OneDimensionalArrayAggregate(Boolean)" - [color=seagreen,href="books/bookvol10.pamphlet"]; -"OneDimensionalArrayAggregate(Boolean)" -> - "OneDimensionalArrayAggregate(a:Type)" - -@ -\section{category BGAGG BagAggregate} +See:\\ +\pageto{DictionaryOperations}{DIOPS} +\pageto{PriorityQueueAggregate}{PRQAGG} +\pageto{QueueAggregate}{QUAGG} +\pageto{StackAggregate}{SKAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} <<category BGAGG BagAggregate>>= )abbrev category BGAGG BagAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2436,13 +2536,14 @@ ++ Keywords: ++ References: ++ Description: -++ A bag aggregate is an aggregate for which one can insert and extract objects, -++ and where the order in which objects are inserted determines the order -++ of extraction. +++ A bag aggregate is an aggregate for which one can insert and extract +++ objects, and where the order in which objects are inserted determines +++ the order of extraction. ++ Examples of bags are stacks, queues, and dequeues. BagAggregate(S:Type): Category == HomogeneousAggregate S with shallowlyMutable - ++ shallowlyMutable means that elements of bags may be destructively changed. + ++ shallowlyMutable means that elements of bags may be + ++ destructively changed. bag: List S -> % ++ bag([x,y,...,z]) creates a bag with elements x,y,...,z. extract_!: % -> S @@ -2471,196 +2572,14 @@ "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)" @ -\section{category BRAGG BinaryRecursiveAggregate} -<<category BRAGG BinaryRecursiveAggregate>>= -)abbrev category BRAGG BinaryRecursiveAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A binary-recursive aggregate has 0, 1 or 2 children and -++ serves as a model for a binary tree or a doubly-linked aggregate structure -BinaryRecursiveAggregate(S:Type):Category == RecursiveAggregate S with - -- needs preorder, inorder and postorder iterators - left: % -> % - ++ left(u) returns the left child. - elt: (%,"left") -> % - ++ elt(u,"left") (also written: \axiom{a . left}) is - ++ equivalent to \axiom{left(a)}. - right: % -> % - ++ right(a) returns the right child. - elt: (%,"right") -> % - ++ elt(a,"right") (also written: \axiom{a . right}) - ++ is equivalent to \axiom{right(a)}. - if % has shallowlyMutable then - setelt: (%,"left",%) -> % - ++ setelt(a,"left",b) (also written \axiom{a . left := b}) is equivalent - ++ to \axiom{setleft!(a,b)}. - setleft_!: (%,%) -> % - ++ setleft!(a,b) sets the left child of \axiom{a} to be b. - setelt: (%,"right",%) -> % - ++ setelt(a,"right",b) (also written \axiom{b . right := b}) - ++ is equivalent to \axiom{setright!(a,b)}. - setright_!: (%,%) -> % - ++ setright!(a,x) sets the right child of t to be x. - add - cycleMax ==> 1000 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{Collection}{CLAGG} +\pagepic{ps/v10collection.ps}{CLAGG} - elt(x,"left") == left x - elt(x,"right") == right x - leaf? x == empty? x or empty? left x and empty? right x - leaves t == - empty? t => empty()$List(S) - leaf? t => [value t] - concat(leaves left t,leaves right t) - nodes x == - l := empty()$List(%) - empty? x => l - concat(nodes left x,concat([x],nodes right x)) - children x == - l := empty()$List(%) - empty? x => l - empty? left x => [right x] - empty? right x => [left x] - [left x, right x] - if % has SetAggregate(S) and S has SetCategory then - node?(u,v) == - empty? v => false - u = v => true - for y in children v repeat node?(u,y) => return true - false - x = y == - empty?(x) => empty?(y) - empty?(y) => false - value x = value y and left x = left y and right x = right y - if % has finiteAggregate then - member?(x,u) == - empty? u => false - x = value u => true - member?(x,left u) or member?(x,right u) - - if S has SetCategory then - coerce(t:%): OutputForm == - empty? t => "[]"::OutputForm - v := value(t):: OutputForm - empty? left t => - empty? right t => v - r := coerce(right t)@OutputForm - bracket ["."::OutputForm, v, r] - l := coerce(left t)@OutputForm - r := - empty? right t => "."::OutputForm - coerce(right t)@OutputForm - bracket [l, v, r] - - if % has finiteAggregate then - aggCount: (%,NonNegativeInteger) -> NonNegativeInteger - #x == aggCount(x,0) - aggCount(x,k) == - empty? x => 0 - k := k + 1 - k = cycleMax and cyclic? x => error "cyclic tree" - for y in children x repeat k := aggCount(y,k) - k - - isCycle?: (%, List %) -> Boolean - eqMember?: (%, List %) -> Boolean - cyclic? x == not empty? x and isCycle?(x,empty()$(List %)) - isCycle?(x,acc) == - empty? x => false - eqMember?(x,acc) => true - for y in children x | not empty? y repeat - isCycle?(y,acc) => return true - false - eqMember?(y,l) == - for x in l repeat eq?(x,y) => return true - false - if % has shallowlyMutable then - setelt(x,"left",b) == setleft_!(x,b) - setelt(x,"right",b) == setright_!(x,b) - -@ -<<BRAGG.dotabb>>= -"BRAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BRAGG" -> "RCAGG" - -@ -<<BRAGG.dotfull>>= -"BinaryRecursiveAggregate(a:Type)" - [color=lightblue,href="books/bookvol10.pamphlet"]; -"BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)" - -@ -\section{category BTAGG BitAggregate} -<<category BTAGG BitAggregate>>= -)abbrev category BTAGG BitAggregate -++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks -++ Date Created: August 87 through August 88 -++ Date Last Updated: April 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ The bit aggregate category models aggregates representing large -++ quantities of Boolean data. -BitAggregate(): Category == - Join(OrderedSet, Logic, OneDimensionalArrayAggregate Boolean) with - "not": % -> % - ++ not(b) returns the logical {\em not} of bit aggregate - ++ \axiom{b}. - "^" : % -> % - ++ ^ b returns the logical {\em not} of bit aggregate - ++ \axiom{b}. - nand : (%, %) -> % - ++ nand(a,b) returns the logical {\em nand} of bit aggregates \axiom{a} - ++ and \axiom{b}. - nor : (%, %) -> % - ++ nor(a,b) returns the logical {\em nor} of bit aggregates \axiom{a} and - ++ \axiom{b}. - _and : (%, %) -> % - ++ a and b returns the logical {\em and} of bit aggregates \axiom{a} and - ++ \axiom{b}. - _or : (%, %) -> % - ++ a or b returns the logical {\em or} of bit aggregates \axiom{a} and - ++ \axiom{b}. - xor : (%, %) -> % - ++ xor(a,b) returns the logical {\em exclusive-or} of bit aggregates - ++ \axiom{a} and \axiom{b}. - - add - not v == map(_not, v) - _^ v == map(_not, v) - _~(v) == map(_~, v) - _/_\(v, u) == map(_/_\, v, u) - _\_/(v, u) == map(_\_/, v, u) - nand(v, u) == map(nand, v, u) - nor(v, u) == map(nor, v, u) - -@ -<<BTAGG.dotabb>>= -"BTAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BTAGG" -> "ORDSET" -"BTAGG" -> "LOGIC" -"BTAGG" -> "A1AGG" - -@ -<<BTAGG.dotfull>>= -"BitAggregate()" [color=lightblue,href="books/bookvol10.pamphlet"]; -"BitAggregate()" -> "OrderedSet()" -"BitAggregate()" -> "Logic()" -"BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)" - -@ -\section{category CLAGG Collection} +See:\\ +\pageto{DictionaryOperations}{DIOPS} +\pageto{LinearAggregate}{LNAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} <<category CLAGG Collection>>= )abbrev category CLAGG Collection ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks @@ -2682,8 +2601,9 @@ ++ \spadfun{flexibleArray} for \spadtype{FlexibleArray}, and so on. Collection(S:Type): Category == HomogeneousAggregate(S) with construct: List S -> % - ++ \axiom{construct(x,y,...,z)} returns the collection of elements \axiom{x,y,...,z} - ++ ordered as given. Equivalently written as \axiom{[x,y,...,z]$D}, where + ++ \axiom{construct(x,y,...,z)} returns the collection of elements + ++ \axiom{x,y,...,z} ordered as given. Equivalently written as + ++ \axiom{[x,y,...,z]$D}, where ++ D is the domain. D may be omitted for those of type List. find: (S->Boolean, %) -> Union(S, "failed") ++ find(p,u) returns the first x in u such that \axiom{p(x)} is true, and @@ -2727,7 +2647,8 @@ ++ elements \axiom{y = x} removed. ++ Note: \axiom{remove(y,c) == [x for x in c | x ^= y]}. removeDuplicates: % -> % - ++ removeDuplicates(u) returns a copy of u with all duplicates removed. + ++ removeDuplicates(u) returns a copy of u with all duplicates + ++ removed. if S has ConvertibleTo InputForm then ConvertibleTo InputForm add if % has finiteAggregate then @@ -2760,74 +2681,224 @@ "Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.pamphlet"]; "Collection(a:SetCategory)" -> "Collection(a:Type)" -@ -\section{CLAGG.lsp BOOTSTRAP} -{\bf CLAGG} depends on a chain of files. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf CLAGG} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf CLAGG.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. -Note that this code is not included in the generated catdef.spad file. - -<<CLAGG.lsp BOOTSTRAP>>= - -(|/VERSIONCHECK| 2) - -(SETQ |Collection;CAT| (QUOTE NIL)) - -(SETQ |Collection;AL| (QUOTE NIL)) - -(DEFUN |Collection| (#1=#:G82618) (LET (#2=#:G82619) (COND ((SETQ #2# (|assoc| (|devaluate| #1#) |Collection;AL|)) (CDR #2#)) (T (SETQ |Collection;AL| (|cons5| (CONS (|devaluate| #1#) (SETQ #2# (|Collection;| #1#))) |Collection;AL|)) #2#)))) - -(DEFUN |Collection;| (|t#1|) (PROG (#1=#:G82617) (RETURN (PROG1 (LETT #1# (|sublisV| (PAIR (QUOTE (|t#1|)) (LIST (|devaluate| |t#1|))) (COND (|Collection;CAT|) ((QUOTE T) (LETT |Collection;CAT| (|Join| (|HomogeneousAggregate| (QUOTE |t#1|)) (|mkCategory| (QUOTE |domain|) (QUOTE (((|construct| (|$| (|List| |t#1|))) T) ((|find| ((|Union| |t#1| "failed") (|Mapping| (|Boolean|) |t#1|) |$|)) T) ((|reduce| (|t#1| (|Mapping| |t#1| |t#1| |t#1|) |$|)) (|has| |$| (ATTRIBUTE |finiteAggregate|))) ((|reduce| (|t#1| (|Mapping| |t#1| |t#1| |t#1|) |$| |t#1|)) (|has| |$| (ATTRIBUTE |finiteAggregate|))) ((|remove| (|$| (|Mapping| (|Boolean|) |t#1|) |$|)) (|has| |$| (ATTRIBUTE |finiteAggregate|))) ((|select| (|$| (|Mapping| (|Boolean|) |t#1|) |$|)) (|has| |$| (ATTRIBUTE |finiteAggregate|))) ((|reduce| (|t#1| (|Mapping| |t#1| |t#1| |t#1|) |$| |t#1| |t#1|)) (AND (|has| |t#1| (|SetCategory|)) (|has| |$| (ATTRIBUTE |finiteAggregate|)))) ((|remove| (|$| |t#1| |$|)) (AND (|has| |t#1| (|SetCategory|)) (|has| |$| (ATTRIBUTE |finiteAggregate|)))) ((|removeDuplicates| (|$| |$|)) (AND (|has| |t#1| (|SetCategory|)) (|has| |$| (ATTRIBUTE |finiteAggregate|)))))) (QUOTE (((|ConvertibleTo| (|InputForm|)) (|has| |t#1| (|ConvertibleTo| (|InputForm|)))))) (QUOTE ((|List| |t#1|))) NIL)) . #2=(|Collection|))))) . #2#) (SETELT #1# 0 (LIST (QUOTE |Collection|) (|devaluate| |t#1|))))))) @ -\section{CLAGG-.lsp BOOTSTRAP} -{\bf CLAGG-} depends on {\bf CLAGG}. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf CLAGG-} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf CLAGG-.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{IndexedAggregate}{IXAGG} +\pagepic{ps/v10indexedaggregate.ps}{IXAGG} -Note that this code is not included in the generated catdef.spad file. +See:\\ +\pageto{LinearAggregate}{LNAGG} +\pageto{TableAggregate}{TBAGG} +\pagefrom{EltableAggregate}{ELTAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<<category IXAGG IndexedAggregate>>= +)abbrev category IXAGG IndexedAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ An indexed aggregate is a many-to-one mapping of indices to entries. +++ For example, a one-dimensional-array is an indexed aggregate where +++ the index is an integer. Also, a table is an indexed aggregate +++ where the indices and entries may have any type. +IndexedAggregate(Index: SetCategory, Entry: Type): Category == + Join(HomogeneousAggregate(Entry), EltableAggregate(Index, Entry)) with + entries: % -> List Entry + ++ entries(u) returns a list of all the entries of aggregate u + ++ in no assumed order. + -- to become entries: % -> Entry* and entries: % -> Iterator(Entry,Entry) + index?: (Index,%) -> Boolean + ++ index?(i,u) tests if i is an index of aggregate u. + indices: % -> List Index + ++ indices(u) returns a list of indices of aggregate u in no + ++ particular order. to become indices: + -- % -> Index* and indices: % -> Iterator(Index,Index). +-- map: ((Entry,Entry)->Entry,%,%,Entry) -> % +-- ++ exists c = map(f,a,b,x), i:Index where +-- ++ c.i = f(a(i,x),b(i,x)) | index?(i,a) or index?(i,b) + if Entry has SetCategory and % has finiteAggregate then + entry?: (Entry,%) -> Boolean + ++ entry?(x,u) tests if x equals \axiom{u . i} for some index i. + if Index has OrderedSet then + maxIndex: % -> Index + ++ maxIndex(u) returns the maximum index i of aggregate u. + ++ Note: in general, + ++ \axiom{maxIndex(u) = reduce(max,[i for i in indices u])}; + ++ if u is a list, \axiom{maxIndex(u) = #u}. + minIndex: % -> Index + ++ minIndex(u) returns the minimum index i of aggregate u. + ++ Note: in general, + ++ \axiom{minIndex(a) = reduce(min,[i for i in indices a])}; + ++ for lists, \axiom{minIndex(a) = 1}. + first : % -> Entry + ++ first(u) returns the first element x of u. + ++ Note: for collections, \axiom{first([x,y,...,z]) = x}. + ++ Error: if u is empty. -<<CLAGG-.lsp BOOTSTRAP>>= + if % has shallowlyMutable then + fill_!: (%,Entry) -> % + ++ fill!(u,x) replaces each entry in aggregate u by x. + ++ The modified u is returned as value. + swap_!: (%,Index,Index) -> Void + ++ swap!(u,i,j) interchanges elements i and j of aggregate u. + ++ No meaningful value is returned. + add + elt(a, i, x) == (index?(i, a) => qelt(a, i); x) -(|/VERSIONCHECK| 2) + if % has finiteAggregate then + entries x == parts x + if Entry has SetCategory then + entry?(x, a) == member?(x, a) -(DEFUN |CLAGG-;#;ANni;1| (|c| |$|) (LENGTH (SPADCALL |c| (QREFELT |$| 9)))) + if Index has OrderedSet then + maxIndex a == "max"/indices(a) + minIndex a == "min"/indices(a) + first a == a minIndex a -(DEFUN |CLAGG-;count;MANni;2| (|f| |c| |$|) (PROG (|x| #1=#:G82637 #2=#:G82634 #3=#:G82632 #4=#:G82633) (RETURN (SEQ (PROGN (LETT #4# NIL |CLAGG-;count;MANni;2|) (SEQ (LETT |x| NIL |CLAGG-;count;MANni;2|) (LETT #1# (SPADCALL |c| (QREFELT |$| 9)) |CLAGG-;count;MANni;2|) G190 (COND ((OR (ATOM #1#) (PROGN (LETT |x| (CAR #1#) |CLAGG-;count;MANni;2|) NIL)) (GO G191))) (SEQ (EXIT (COND ((SPADCALL |x| |f|) (PROGN (LETT #2# 1 |CLAGG-;count;MANni;2|) (COND (#4# (LETT #3# (|+| #3# #2#) |CLAGG-;count;MANni;2|)) ((QUOTE T) (PROGN (LETT #3# #2# |CLAGG-;count;MANni;2|) (LETT #4# (QUOTE T) |CLAGG-;count;MANni;2|))))))))) (LETT #1# (CDR #1#) |CLAGG-;count;MANni;2|) (GO G190) G191 (EXIT NIL)) (COND (#4# #3#) ((QUOTE T) 0))))))) + if % has shallowlyMutable then + map(f, a) == map_!(f, copy a) -(DEFUN |CLAGG-;any?;MAB;3| (|f| |c| |$|) (PROG (|x| #1=#:G82642 #2=#:G82640 #3=#:G82638 #4=#:G82639) (RETURN (SEQ (PROGN (LETT #4# NIL |CLAGG-;any?;MAB;3|) (SEQ (LETT |x| NIL |CLAGG-;any?;MAB;3|) (LETT #1# (SPADCALL |c| (QREFELT |$| 9)) |CLAGG-;any?;MAB;3|) G190 (COND ((OR (ATOM #1#) (PROGN (LETT |x| (CAR #1#) |CLAGG-;any?;MAB;3|) NIL)) (GO G191))) (SEQ (EXIT (PROGN (LETT #2# (SPADCALL |x| |f|) |CLAGG-;any?;MAB;3|) (COND (#4# (LETT #3# (COND (#3# (QUOTE T)) ((QUOTE T) #2#)) |CLAGG-;any?;MAB;3|)) ((QUOTE T) (PROGN (LETT #3# #2# |CLAGG-;any?;MAB;3|) (LETT #4# (QUOTE T) |CLAGG-;any?;MAB;3|))))))) (LETT #1# (CDR #1#) |CLAGG-;any?;MAB;3|) (GO G190) G191 (EXIT NIL)) (COND (#4# #3#) ((QUOTE T) (QUOTE NIL)))))))) + map_!(f, a) == + for i in indices a repeat qsetelt_!(a, i, f qelt(a, i)) + a -(DEFUN |CLAGG-;every?;MAB;4| (|f| |c| |$|) (PROG (|x| #1=#:G82647 #2=#:G82645 #3=#:G82643 #4=#:G82644) (RETURN (SEQ (PROGN (LETT #4# NIL |CLAGG-;every?;MAB;4|) (SEQ (LETT |x| NIL |CLAGG-;every?;MAB;4|) (LETT #1# (SPADCALL |c| (QREFELT |$| 9)) |CLAGG-;every?;MAB;4|) G190 (COND ((OR (ATOM #1#) (PROGN (LETT |x| (CAR #1#) |CLAGG-;every?;MAB;4|) NIL)) (GO G191))) (SEQ (EXIT (PROGN (LETT #2# (SPADCALL |x| |f|) |CLAGG-;every?;MAB;4|) (COND (#4# (LETT #3# (COND (#3# #2#) ((QUOTE T) (QUOTE NIL))) |CLAGG-;every?;MAB;4|)) ((QUOTE T) (PROGN (LETT #3# #2# |CLAGG-;every?;MAB;4|) (LETT #4# (QUOTE T) |CLAGG-;every?;MAB;4|))))))) (LETT #1# (CDR #1#) |CLAGG-;every?;MAB;4|) (GO G190) G191 (EXIT NIL)) (COND (#4# #3#) ((QUOTE T) (QUOTE T)))))))) + fill_!(a, x) == + for i in indices a repeat qsetelt_!(a, i, x) + a -(DEFUN |CLAGG-;find;MAU;5| (|f| |c| |$|) (SPADCALL |f| (SPADCALL |c| (QREFELT |$| 9)) (QREFELT |$| 18))) + swap_!(a, i, j) == + t := a.i + qsetelt_!(a, i, a.j) + qsetelt_!(a, j, t) + void -(DEFUN |CLAGG-;reduce;MAS;6| (|f| |x| |$|) (SPADCALL |f| (SPADCALL |x| (QREFELT |$| 9)) (QREFELT |$| 21))) +@ +<<IXAGG.dotabb>>= +"IXAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"IXAGG" -> "HOAGG" +"IXAGG" -> "ELTAGG" -(DEFUN |CLAGG-;reduce;MA2S;7| (|f| |x| |s| |$|) (SPADCALL |f| (SPADCALL |x| (QREFELT |$| 9)) |s| (QREFELT |$| 23))) +@ +<<IXAGG.dotfull>>= +"IndexedAggregate(a:SetCategory,b:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:Type)" -> + "HomogeneousAggregate(a:Type)" +"IndexedAggregate(a:SetCategory,b:Type)" -> + "EltableAggregate(a:SetCategory,b:Type)" -(DEFUN |CLAGG-;remove;M2A;8| (|f| |x| |$|) (SPADCALL (SPADCALL |f| (SPADCALL |x| (QREFELT |$| 9)) (QREFELT |$| 25)) (QREFELT |$| 26))) +"IndexedAggregate(a:SetCategory,b:SetCategory)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(a:SetCategory,b:SetCategory)" -> + "IndexedAggregate(a:SetCategory,b:Type)" -(DEFUN |CLAGG-;select;M2A;9| (|f| |x| |$|) (SPADCALL (SPADCALL |f| (SPADCALL |x| (QREFELT |$| 9)) (QREFELT |$| 28)) (QREFELT |$| 26))) +"IndexedAggregate(b:Integer,a:Type)" + [color=seagreen,href="books/bookvol10.pamphlet"]; +"IndexedAggregate(b:Integer,a:Type)" -> + "IndexedAggregate(a:SetCategory,b:Type)" -(DEFUN |CLAGG-;remove;S2A;10| (|s| |x| |$|) (SPADCALL (CONS (FUNCTION |CLAGG-;remove;S2A;10!0|) (VECTOR |$| |s|)) |x| (QREFELT |$| 31))) +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{RecursiveAggregate}{RCAGG} +\pagepic{ps/v10recursiveaggregate.ps}{RCAGG} -(DEFUN |CLAGG-;remove;S2A;10!0| (|#1| |$$|) (SPADCALL |#1| (QREFELT |$$| 1) (QREFELT (QREFELT |$$| 0) 30))) +See:\\ +\pageto{BinaryRecursiveAggregate}{BRAGG} +\pageto{DoublyLinkedAggregate}{DLAGG} +\pageto{StreamAggregate}{STAGG} +\pageto{UnaryRecursiveAggregate}{URAGG} +\pagefrom{HomogeneousAggregate}{HOAGG} +<<category RCAGG RecursiveAggregate>>= +)abbrev category RCAGG RecursiveAggregate +++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks +++ Date Created: August 87 through August 88 +++ Date Last Updated: April 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A recursive aggregate over a type S is a model for a +++ a directed graph containing values of type S. +++ Recursively, a recursive aggregate is a {\em node} +++ consisting of a \spadfun{value} from S and 0 or more \spadfun{children} +++ which are recursive aggregates. +++ A node with no children is called a \spadfun{leaf} node. +++ A recursive aggregate may be cyclic for which some operations as noted +++ may go into an infinite loop. +RecursiveAggregate(S:Type): Category == HomogeneousAggregate(S) with + children: % -> List % + ++ children(u) returns a list of the children of aggregate u. + -- should be % -> %* and also needs children: % -> Iterator(S,S) + nodes: % -> List % + ++ nodes(u) returns a list of all of the nodes of aggregate u. + -- to become % -> %* and also nodes: % -> Iterator(S,S) + leaf?: % -> Boolean + ++ leaf?(u) tests if u is a terminal node. + value: % -> S + ++ value(u) returns the value of the node u. + elt: (%,"value") -> S + ++ elt(u,"value") (also written: \axiom{a. value}) is + ++ equivalent to \axiom{value(a)}. + cyclic?: % -> Boolean + ++ cyclic?(u) tests if u has a cycle. + leaves: % -> List S + ++ leaves(t) returns the list of values in obtained by visiting the + ++ nodes of tree \axiom{t} in left-to-right order. + distance: (%,%) -> Integer + ++ distance(u,v) returns the path length (an integer) from node u to v. + if S has SetCategory then + child?: (%,%) -> Boolean + ++ child?(u,v) tests if node u is a child of node v. + node?: (%,%) -> Boolean + ++ node?(u,v) tests if node u is contained in node v + ++ (either as a child, a child of a child, etc.). + if % has shallowlyMutable then + setchildren_!: (%,List %)->% + ++ setchildren!(u,v) replaces the current children of node u + ++ with the members of v in left-to-right order. + setelt: (%,"value",S) -> S + ++ setelt(a,"value",x) (also written \axiom{a . value := x}) + ++ is equivalent to \axiom{setvalue!(a,x)} + setvalue_!: (%,S) -> S + ++ setvalue!(u,x) sets the value of node u to x. + add + elt(x,"value") == value x + if % has shallowlyMutable then + setelt(x,"value",y) == setvalue_!(x,y) + if S has SetCategory then + child?(x,l) == member?(x,children(l)) -(DEFUN |CLAGG-;reduce;MA3S;11| (|f| |x| |s1| |s2| |$|) (SPADCALL |f| (SPADCALL |x| (QREFELT |$| 9)) |s1| |s2| (QREFELT |$| 33))) +@ +<<RCAGG.dotabb>>= +"RCAGG" [color=lightblue,href="books/bookvol10.pamphlet"]; +"RCAGG" -> "HOAGG" -(DEFUN |CLAGG-;removeDuplicates;2A;12| (|x| |$|) (SPADCALL (SPADCALL (SPADCALL |x| (QREFELT |$| 9)) (QREFELT |$| 35)) (QREFELT |$| 26))) +@ +<<RCAGG.dotfull>>= +"RecursiveAggregate(a:Type)" + [color=lightblue,href="books/bookvol10.pamphlet"]; +"RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)" -(DEFUN |Collection&| (|#1| |#2|) (PROG (|DV$1| |DV$2| |dv$| |$| |pv$|) (RETURN (PROGN (LETT |DV$1| (|devaluate| |#1|) . #1=(|Collection&|)) (LETT |DV$2| (|devaluate| |#2|) . #1#) (LETT |dv$| (LIST (QUOTE |Collection&|) |DV$1| |DV$2|) . #1#) (LETT |$| (GETREFV 37) . #1#) (QSETREFV |$| 0 |dv$|) (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 (LIST (|HasCategory| |#2| (QUOTE (|ConvertibleTo| (|InputForm|)))) (|HasCategory| |#2| (QUOTE (|SetCategory|))) (|HasAttribute| |#1| (QUOTE |finiteAggregate|)))) . #1#)) (|stuffDomainSlots| |$|) (QSETREFV |$| 6 |#1|) (QSETREFV |$| 7 |#2|) (COND ((|testBitVector| |pv$| 3) (PROGN (QSETREFV |$| 11 (CONS (|dispatchFunction| |CLAGG-;#;ANni;1|) |$|)) (QSETREFV |$| 13 (CONS (|dispatchFunction| |CLAGG-;count;MANni;2|) |$|)) (QSETREFV |$| 15 (CONS (|dispatchFunction| |CLAGG-;any?;MAB;3|) |$|)) (QSETREFV |$| 16 (CONS (|dispatchFunction| |CLAGG-;every?;MAB;4|) |$|)) (QSETREFV |$| 19 (CONS (|dispatchFunction| |CLAGG-;find;MAU;5|) |$|)) (QSETREFV |$| 22 (CONS (|dispatchFunction| |CLAGG-;reduce;MAS;6|) |$|)) (QSETREFV |$| 24 (CONS (|dispatchFunction| |CLAGG-;reduce;MA2S;7|) |$|)) (QSETREFV |$| 27 (CONS (|dispatchFunction| |CLAGG-;remove;M2A;8|) |$|)) (QSETREFV |$| 29 (CONS (|dispatchFunction| |CLAGG-;select;M2A;9|) |$|)) (COND ((|testBitVector| |pv$| 2) (PROGN (QSETREFV |$| 32 (CONS (|dispatchFunction| |CLAGG-;remove;S2A;10|) |$|)) (QSETREFV |$| 34 (CONS (|dispatchFunction| |CLAGG-;reduce;MA3S;11|) |$|)) (QSETREFV |$| 36 (CONS (|dispatchFunction| |CLAGG-;removeDuplicates;2A;12|) |$|)))))))) |$|)))) +@ +\chapter{Category Layer 5} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{BinaryRecursiveAggregate}{BRAGG} +\pagepic{ps/v10binaryrecursiveaggregate.ps}{BRAGG} -(MAKEPROP (QUOTE |Collection&|) (QUOTE |infovec|) (LIST (QUOTE #(NIL NIL NIL NIL NIL NIL (|local| |#1|) (|local| |#2|) (|List| 7) (0 . |parts|) (|NonNegativeInteger|) (5 . |#|) (|Mapping| 14 7) (10 . |count|) (|Boolean|) (16 . |any?|) (22 . |every?|) (|Union| 7 (QUOTE "failed")) (28 . |find|) (34 . |find|) (|Mapping| 7 7 7) (40 . |reduce|) (46 . |reduce|) (52 . |reduce|) (59 . |reduce|) (66 . |remove|) (72 . |construct|) (77 . |remove|) (83 . |select|) (89 . |select|) (95 . |=|) (101 . |remove|) (107 . |remove|) (113 . |reduce|) (121 . |reduce|) (129 . |removeDuplicates|) (134 . |removeDuplicates|))) (QUOTE #(|select| 139 |removeDuplicates| 145 |remove| 150 |reduce| 162 |find| 183 |every?| 189 |count| 195 |any?| 201 |#| 207)) (QUOTE NIL) (CONS (|makeByteWordVec2| 1 (QUOTE NIL)) (CONS (QUOTE #()) (CONS (QUOTE #()) (|makeByteWordVec2| 36 (QUOTE (1 6 8 0 9 1 0 10 0 11 2 0 10 12 0 13 2 0 14 12 0 15 2 0 14 12 0 16 2 8 17 12 0 18 2 0 17 12 0 19 2 8 7 20 0 21 2 0 7 20 0 22 3 8 7 20 0 7 23 3 0 7 20 0 7 24 2 8 0 12 0 25 1 6 0 8 26 2 0 0 12 0 27 2 8 0 12 0 28 2 0 0 12 0 29 2 7 14 0 0 30 2 6 0 12 0 31 2 0 0 7 0 32 4 8 7 20 0 7 7 33 4 0 7 20 0 7 7 34 1 8 0 0 35 1 0 0 0 36 2 0 0 12 0 29 1 0 0 0 36 2 0 0 7 0 32 2 0 0 12 0 27 4 0 7 20 0 7 7 34 3 0 7 20 0 7 24 2 0 7 20 0 22 2 0 17 12 0 19 2 0 14 12 0 16 2 0 10 12 0 13 2 0 14 12 0 15 1 0 10 0 11)))))) (QUOTE |lookupComplete|))) -@ -\section{category DIAGG Dictionary} -<<category DIAGG Dictionary>>= -)abbrev category DIAGG Dictionary +See:\\ +\pagefrom{RecursiveAggregate}{RCAGG} +<<category BRAGG BinaryRecursiveAggregate>>= +)abbrev category BRAGG BinaryRecursiveAggregate ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks ++ Date Created: August 87 through August 88 ++ Date Last Updated: April 1991 @@ -2838,54 +2909,128 @@ ++ Keywords: ++ References: ++ Description: -++ A dictionary is an aggregate in which entries can be inserted, -++ searched for and removed. Duplicates are thrown away on insertion. -++ This category models the usual notion of dictionary which involves -++ large amounts of data where copying is impractical. -++ Principal operations are thus destructive (non-copying) ones. -Dictionary(S:SetCategory): Category == - DictionaryOperations S add - dictionary l == - d := dictionary() - for x in l repeat insert_!(x, d) - d +++ A binary-recursive aggregate has 0, 1 or 2 children and +++ serves as a model for a binary tree or a doubly-linked aggregate structure +BinaryRecursiveAggregate(S:Type):Category == RecursiveAggregate S with + -- needs preorder, inorder and postorder iterators + left: % -> % + ++ left(u) returns the left child. + elt: (%,"left") -> % + ++ elt(u,"left") (also written: \axiom{a . ... [truncated message content] |