diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index cb65b93..57d4df1 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -286,13 +286,21 @@ A ``yellow'' color indicates a domain.
 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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 }
 
 @
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ Note that this code is not included in the generated catdef.spad file.
 <<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 @@ digraph dotabb {
 <<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 @@ digraph dotabb {
 <<BRAGG.dotabb>>
 <<BTAGG.dotabb>>
 <<CABMON.dotabb>>
+<<CFCAT.dotabb>>
 <<CHARNZ.dotabb>>
 <<CHARZ.dotabb>>
 <<CLAGG.dotabb>>
@@ -28242,6 +29267,7 @@ digraph dotabb {
 <<DLAGG.dotabb>>
 <<DQAGG.dotabb>>
 <<ELAGG.dotabb>>
+<<ELEMFUN.dotabb>>
 <<ELTAB.dotabb>>
 <<ELTAGG.dotabb>>
 <<ENTIRER.dotabb>>
@@ -28262,12 +29288,14 @@ digraph dotabb {
 <<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 @@ digraph dotabb {
 <<PDRING.dotabb>>
 <<PFECAT.dotabb>>
 <<PID.dotabb>>
+<<PRIMCAT.dotabb>>
 <<PRQAGG.dotabb>>
 <<QUAGG.dotabb>>
 <<RCAGG.dotabb>>
@@ -28308,9 +29337,12 @@ digraph dotabb {
 <<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 @@ digraph dotfull {
 <<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 @@ digraph dotfull {
 <<BRAGG.dotfull>>
 <<BTAGG.dotfull>>
 <<CABMON.dotfull>>
+<<CFCAT.dotfull>>
 <<CHARNZ.dotfull>>
 <<CHARZ.dotfull>>
 <<CLAGG.dotfull>>
@@ -28353,6 +29388,7 @@ digraph dotfull {
 <<DLAGG.dotfull>>
 <<DQAGG.dotfull>>
 <<ELAGG.dotfull>>
+<<ELEMFUN.dotfull>>
 <<ELTAB.dotfull>>
 <<ELTAGG.dotfull>>
 <<ENTIRER.dotfull>>
@@ -28373,12 +29409,14 @@ digraph dotfull {
 <<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 @@ digraph dotfull {
 <<PDRING.dotfull>>
 <<PFECAT.dotfull>>
 <<PID.dotfull>>
+<<PRIMCAT.dotfull>>
 <<PRQAGG.dotfull>>
 <<QUAGG.dotfull>>
 <<RCAGG.dotfull>>
@@ -28419,9 +29458,12 @@ digraph dotfull {
 <<SETCAT.dotfull>>
 <<SGROUP.dotfull>>
 <<SKAGG.dotfull>>
+<<SPFCAT.dotfull>>
 <<SRAGG.dotfull>>
 <<STAGG.dotfull>>
 <<STEP.dotfull>>
+<<TRANFUN.dotfull>>
+<<TRIGCAT.dotfull>>
 <<TYPE.dotfull>>
 <<TBAGG.dotfull>>
 <<UFD.dotfull>>
diff --git a/books/ps/v102archyperbolicfunctioncategory.ps b/books/ps/v102archyperbolicfunctioncategory.ps
new file mode 100644
index 0000000..d8eacfd
--- /dev/null
+++ b/books/ps/v102archyperbolicfunctioncategory.ps
@@ -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
diff --git a/books/ps/v102arctrigonometricfunctioncategory.ps b/books/ps/v102arctrigonometricfunctioncategory.ps
new file mode 100644
index 0000000..64ce57d
--- /dev/null
+++ b/books/ps/v102arctrigonometricfunctioncategory.ps
@@ -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
diff --git a/books/ps/v102combinatorialfunctioncategory.ps b/books/ps/v102combinatorialfunctioncategory.ps
new file mode 100644
index 0000000..8c6a3e4
--- /dev/null
+++ b/books/ps/v102combinatorialfunctioncategory.ps
@@ -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
diff --git a/books/ps/v102elementaryfunctioncategory.ps b/books/ps/v102elementaryfunctioncategory.ps
new file mode 100644
index 0000000..65f0062
--- /dev/null
+++ b/books/ps/v102elementaryfunctioncategory.ps
@@ -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
+} 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 236 152
+%%PageOrientation: Portrait
+gsave
+36 36 200 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
+198 114 lineto
+198 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 114 lineto
+198 114 lineto
+198 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% ElementaryFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 192 108 moveto
+0 108 lineto
+0 72 lineto
+192 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 192 108 moveto
+0 108 lineto
+0 72 lineto
+192 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 85 moveto
+(ElementaryFunctionCategory\(\))
+[8.64 3.84 6.24 10.8 6.24 6.96 4.08 6.24 5.04 6.96 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 130 36 moveto
+62 36 lineto
+62 0 lineto
+130 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 130 36 moveto
+62 36 lineto
+62 0 lineto
+130 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+70 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% ElementaryFunctionCategory()->Category
+newpath 96 72 moveto
+96 64 96 55 96 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 100 46 moveto
+96 36 lineto
+93 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 100 46 moveto
+96 36 lineto
+93 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102hyperbolicfunctioncategory.ps b/books/ps/v102hyperbolicfunctioncategory.ps
new file mode 100644
index 0000000..c51c22d
--- /dev/null
+++ b/books/ps/v102hyperbolicfunctioncategory.ps
@@ -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 234 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 234 152
+%%PageOrientation: Portrait
+gsave
+36 36 198 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
+196 114 lineto
+196 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 114 lineto
+196 114 lineto
+196 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% HyperbolicFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 190 108 moveto
+0 108 lineto
+0 72 lineto
+190 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 190 108 moveto
+0 108 lineto
+0 72 lineto
+190 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 85 moveto
+(HyperbolicFunctionCategory\(\))
+[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 129 36 moveto
+61 36 lineto
+61 0 lineto
+129 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 129 36 moveto
+61 36 lineto
+61 0 lineto
+129 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+69 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% HyperbolicFunctionCategory()->Category
+newpath 95 72 moveto
+95 64 95 55 95 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 99 46 moveto
+95 36 lineto
+92 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 99 46 moveto
+95 36 lineto
+92 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102liouvillianfunctioncategory.ps b/books/ps/v102liouvillianfunctioncategory.ps
new file mode 100644
index 0000000..357b79d
--- /dev/null
+++ b/books/ps/v102liouvillianfunctioncategory.ps
@@ -0,0 +1,713 @@
+%!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 568 296
+%%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 568 296
+%%PageOrientation: Portrait
+gsave
+36 36 532 260 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 258 lineto
+530 258 lineto
+530 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 258 lineto
+530 258 lineto
+530 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% LiouvillianFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 292 252 moveto
+104 252 lineto
+104 216 lineto
+292 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 292 252 moveto
+104 252 lineto
+104 216 lineto
+292 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+112 229 moveto
+(LiouvillianFunctionCategory\(\))
+[8.64 3.84 6.96 6.96 6.96 3.84 3.84 3.84 3.84 6.24 6.96 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
+% PrimitiveFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 178 180 moveto
+0 180 lineto
+0 144 lineto
+178 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 178 180 moveto
+0 180 lineto
+0 144 lineto
+178 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 157 moveto
+(PrimitiveFunctionCategory\(\))
+[7.68 5.04 3.84 10.8 3.84 3.84 3.84 6.48 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
+% LiouvillianFunctionCategory()->PrimitiveFunctionCategory()
+newpath 170 216 moveto
+156 207 139 196 125 186 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 126 183 moveto
+116 180 lineto
+122 188 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 126 183 moveto
+116 180 lineto
+122 188 lineto
+closepath
+stroke
+end grestore
+% TranscendentalFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 414 180 moveto
+202 180 lineto
+202 144 lineto
+414 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 414 180 moveto
+202 180 lineto
+202 144 lineto
+414 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+210 157 moveto
+(TranscendentalFunctionCategory\(\))
+[7.92 4.8 6.24 6.96 5.52 6.24 6.24 6.96 6.96 6.24 6.96 4.08 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
+% LiouvillianFunctionCategory()->TranscendentalFunctionCategory()
+newpath 226 216 moveto
+239 207 257 196 272 186 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 275 188 moveto
+281 180 lineto
+271 183 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 275 188 moveto
+281 180 lineto
+271 183 lineto
+closepath
+stroke
+end grestore
+% Category
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 306 36 moveto
+238 36 lineto
+238 0 lineto
+306 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 306 36 moveto
+238 36 lineto
+238 0 lineto
+306 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+246 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% PrimitiveFunctionCategory()->Category
+newpath 85 144 moveto
+82 124 81 92 97 72 curveto
+114 52 181 35 228 26 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 229 29 moveto
+238 24 lineto
+228 23 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 229 29 moveto
+238 24 lineto
+228 23 lineto
+closepath
+stroke
+end grestore
+% TRIGCAT
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 182 108 moveto
+106 108 lineto
+106 72 lineto
+182 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 182 108 moveto
+106 108 lineto
+106 72 lineto
+182 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+114 85 moveto
+(TRIGCAT)
+[8.64 9.36 4.56 10.08 9.12 9.36 8.64]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->TRIGCAT
+newpath 267 144 moveto
+244 134 215 122 191 111 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 193 108 moveto
+182 107 lineto
+190 114 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 193 108 moveto
+182 107 lineto
+190 114 lineto
+closepath
+stroke
+end grestore
+% ATRIG
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 260 108 moveto
+200 108 lineto
+200 72 lineto
+260 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 260 108 moveto
+200 108 lineto
+200 72 lineto
+260 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+208 85 moveto
+(ATRIG)
+[9.36 8.64 9.36 4.56 10.08]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->ATRIG
+newpath 288 144 moveto
+278 135 267 125 257 115 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 259 112 moveto
+249 108 lineto
+254 117 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 259 112 moveto
+249 108 lineto
+254 117 lineto
+closepath
+stroke
+end grestore
+% HYPCAT
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 350 108 moveto
+278 108 lineto
+278 72 lineto
+350 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 350 108 moveto
+278 108 lineto
+278 72 lineto
+350 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+285 85 moveto
+(HYPCAT)
+[10.08 10.08 7.68 9.12 9.36 8.64]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->HYPCAT
+newpath 310 144 moveto
+311 136 311 127 312 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 316 118 moveto
+312 108 lineto
+309 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 316 118 moveto
+312 108 lineto
+309 118 lineto
+closepath
+stroke
+end grestore
+% AHYP
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 424 108 moveto
+368 108 lineto
+368 72 lineto
+424 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 424 108 moveto
+368 108 lineto
+368 72 lineto
+424 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+376 85 moveto
+(AHYP)
+[10.08 10.08 10.08 7.68]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->AHYP
+newpath 330 144 moveto
+341 135 354 124 366 114 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 368 117 moveto
+374 108 lineto
+364 111 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 368 117 moveto
+374 108 lineto
+364 111 lineto
+closepath
+stroke
+end grestore
+% ELEMFUN
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 524 108 moveto
+442 108 lineto
+442 72 lineto
+524 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 524 108 moveto
+442 108 lineto
+442 72 lineto
+524 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+449 85 moveto
+(ELEMFUN)
+[8.64 8.64 8.64 12.48 7.68 10.08 10.08]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->ELEMFUN
+newpath 352 144 moveto
+377 134 407 121 433 111 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 434 114 moveto
+442 107 lineto
+431 108 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 434 114 moveto
+442 107 lineto
+431 108 lineto
+closepath
+stroke
+end grestore
+% TRIGCAT->Category
+newpath 176 72 moveto
+193 63 214 51 231 41 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 233 44 moveto
+240 36 lineto
+230 38 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 233 44 moveto
+240 36 lineto
+230 38 lineto
+closepath
+stroke
+end grestore
+% ATRIG->Category
+newpath 241 72 moveto
+245 64 251 54 257 45 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 260 46 moveto
+262 36 lineto
+254 43 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 260 46 moveto
+262 36 lineto
+254 43 lineto
+closepath
+stroke
+end grestore
+% HYPCAT->Category
+newpath 303 72 moveto
+299 64 293 54 287 45 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 290 43 moveto
+282 36 lineto
+284 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 290 43 moveto
+282 36 lineto
+284 46 lineto
+closepath
+stroke
+end grestore
+% AHYP->Category
+newpath 368 74 moveto
+352 64 330 52 312 41 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 313 38 moveto
+303 36 lineto
+310 44 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 313 38 moveto
+303 36 lineto
+310 44 lineto
+closepath
+stroke
+end grestore
+% ELEMFUN->Category
+newpath 442 75 moveto
+439 74 436 73 433 72 curveto
+393 58 348 43 316 32 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 317 29 moveto
+306 29 lineto
+315 35 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 317 29 moveto
+306 29 lineto
+315 35 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102primitivefunctioncategory.ps b/books/ps/v102primitivefunctioncategory.ps
new file mode 100644
index 0000000..2afcbaa
--- /dev/null
+++ b/books/ps/v102primitivefunctioncategory.ps
@@ -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 222 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 222 152
+%%PageOrientation: Portrait
+gsave
+36 36 186 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
+184 114 lineto
+184 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 114 lineto
+184 114 lineto
+184 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% PrimitiveFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 178 108 moveto
+0 108 lineto
+0 72 lineto
+178 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 178 108 moveto
+0 108 lineto
+0 72 lineto
+178 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 85 moveto
+(PrimitiveFunctionCategory\(\))
+[7.68 5.04 3.84 10.8 3.84 3.84 3.84 6.48 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 123 36 moveto
+55 36 lineto
+55 0 lineto
+123 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 123 36 moveto
+55 36 lineto
+55 0 lineto
+123 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+63 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% PrimitiveFunctionCategory()->Category
+newpath 89 72 moveto
+89 64 89 55 89 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 93 46 moveto
+89 36 lineto
+86 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 93 46 moveto
+89 36 lineto
+86 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102specialfunctioncategory.ps b/books/ps/v102specialfunctioncategory.ps
new file mode 100644
index 0000000..adc8305
--- /dev/null
+++ b/books/ps/v102specialfunctioncategory.ps
@@ -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 212 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 212 152
+%%PageOrientation: Portrait
+gsave
+36 36 176 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
+174 114 lineto
+174 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 114 lineto
+174 114 lineto
+174 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% SpecialFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 168 108 moveto
+0 108 lineto
+0 72 lineto
+168 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 168 108 moveto
+0 108 lineto
+0 72 lineto
+168 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 85 moveto
+(SpecialFunctionCategory\(\))
+[7.68 6.96 6.24 6.24 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 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+58 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% SpecialFunctionCategory()->Category
+newpath 84 72 moveto
+84 64 84 55 84 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 88 46 moveto
+84 36 lineto
+81 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 88 46 moveto
+84 36 lineto
+81 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102transcendentalfunctioncategory.ps b/books/ps/v102transcendentalfunctioncategory.ps
new file mode 100644
index 0000000..d1fa0af
--- /dev/null
+++ b/books/ps/v102transcendentalfunctioncategory.ps
@@ -0,0 +1,599 @@
+%!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 462 224
+%%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 462 224
+%%PageOrientation: Portrait
+gsave
+36 36 426 188 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 186 lineto
+424 186 lineto
+424 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 186 lineto
+424 186 lineto
+424 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% TranscendentalFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 314 180 moveto
+102 180 lineto
+102 144 lineto
+314 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 314 180 moveto
+102 180 lineto
+102 144 lineto
+314 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+110 157 moveto
+(TranscendentalFunctionCategory\(\))
+[7.92 4.8 6.24 6.96 5.52 6.24 6.24 6.96 6.96 6.24 6.96 4.08 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
+% TRIGCAT
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 76 108 moveto
+0 108 lineto
+0 72 lineto
+76 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 76 108 moveto
+0 108 lineto
+0 72 lineto
+76 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 85 moveto
+(TRIGCAT)
+[8.64 9.36 4.56 10.08 9.12 9.36 8.64]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->TRIGCAT
+newpath 165 144 moveto
+141 134 110 121 85 110 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 87 107 moveto
+76 106 lineto
+84 113 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 87 107 moveto
+76 106 lineto
+84 113 lineto
+closepath
+stroke
+end grestore
+% ATRIG
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 154 108 moveto
+94 108 lineto
+94 72 lineto
+154 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 154 108 moveto
+94 108 lineto
+94 72 lineto
+154 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+102 85 moveto
+(ATRIG)
+[9.36 8.64 9.36 4.56 10.08]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->ATRIG
+newpath 187 144 moveto
+177 135 164 124 153 115 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 155 112 moveto
+145 108 lineto
+150 117 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 155 112 moveto
+145 108 lineto
+150 117 lineto
+closepath
+stroke
+end grestore
+% HYPCAT
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 244 108 moveto
+172 108 lineto
+172 72 lineto
+244 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 244 108 moveto
+172 108 lineto
+172 72 lineto
+244 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+179 85 moveto
+(HYPCAT)
+[10.08 10.08 7.68 9.12 9.36 8.64]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->HYPCAT
+newpath 208 144 moveto
+208 136 208 127 208 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 212 118 moveto
+208 108 lineto
+205 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 212 118 moveto
+208 108 lineto
+205 118 lineto
+closepath
+stroke
+end grestore
+% AHYP
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 318 108 moveto
+262 108 lineto
+262 72 lineto
+318 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 318 108 moveto
+262 108 lineto
+262 72 lineto
+318 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+270 85 moveto
+(AHYP)
+[10.08 10.08 10.08 7.68]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->AHYP
+newpath 229 144 moveto
+239 135 251 124 262 115 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 265 117 moveto
+270 108 lineto
+260 112 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 265 117 moveto
+270 108 lineto
+260 112 lineto
+closepath
+stroke
+end grestore
+% ELEMFUN
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 418 108 moveto
+336 108 lineto
+336 72 lineto
+418 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 418 108 moveto
+336 108 lineto
+336 72 lineto
+418 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+343 85 moveto
+(ELEMFUN)
+[8.64 8.64 8.64 12.48 7.68 10.08 10.08]
+xshow
+end grestore
+end grestore
+% TranscendentalFunctionCategory()->ELEMFUN
+newpath 251 144 moveto
+274 134 302 122 327 112 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 328 115 moveto
+336 108 lineto
+325 109 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 328 115 moveto
+336 108 lineto
+325 109 lineto
+closepath
+stroke
+end grestore
+% Category
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 242 36 moveto
+174 36 lineto
+174 0 lineto
+242 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 242 36 moveto
+174 36 lineto
+174 0 lineto
+242 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+182 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% TRIGCAT->Category
+newpath 76 74 moveto
+102 63 137 49 165 37 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 166 40 moveto
+174 33 lineto
+163 34 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 166 40 moveto
+174 33 lineto
+163 34 lineto
+closepath
+stroke
+end grestore
+% ATRIG->Category
+newpath 145 72 moveto
+155 63 168 52 179 43 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 182 45 moveto
+187 36 lineto
+177 40 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 182 45 moveto
+187 36 lineto
+177 40 lineto
+closepath
+stroke
+end grestore
+% HYPCAT->Category
+newpath 208 72 moveto
+208 64 208 55 208 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 212 46 moveto
+208 36 lineto
+205 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 212 46 moveto
+208 36 lineto
+205 46 lineto
+closepath
+stroke
+end grestore
+% AHYP->Category
+newpath 269 72 moveto
+259 63 247 52 236 43 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 238 40 moveto
+228 36 lineto
+233 45 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 238 40 moveto
+228 36 lineto
+233 45 lineto
+closepath
+stroke
+end grestore
+% ELEMFUN->Category
+newpath 336 72 moveto
+310 61 277 47 251 36 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 253 33 moveto
+242 32 lineto
+250 39 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 253 33 moveto
+242 32 lineto
+250 39 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102trigonometricfunctioncategory.ps b/books/ps/v102trigonometricfunctioncategory.ps
new file mode 100644
index 0000000..648fa74
--- /dev/null
+++ b/books/ps/v102trigonometricfunctioncategory.ps
@@ -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
+% TrigonometricFunctionCategory()
+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
+(TrigonometricFunctionCategory\(\))
+[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 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
+% TrigonometricFunctionCategory()->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
diff --git a/changelog b/changelog
index 1f17334..f9e03cc 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,26 @@
+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
+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
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 5c3c9d8..4ab63a5 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -442,8 +442,6 @@ ore.spad.pamphlet (OREPCAT APPLYORE AUTOMOR OREPCTO ORESUP OREUP)
 plot3d.spad.pamphlet (PLOT3D)
 prtition.spad.pamphlet (PRTITION SYMPOLY)
 stream.spad.pamphlet (LZSTAGG CSTTOOLS STREAM STREAM1 STREAM2 STREAM3)
-trigcat.spad.pamphlet (ELEMFUN AHYP ATRIG HYPCAT TRANFUN TRIGCAT PRIMCAT
-                       LFCAT CFCAT SPFCAT)
 xlpoly.spad.pamphlet (MAGMA LWORD LIECAT FLALG XEXPPKG LPOLY PBWLB XPBWPOLY
                       LEXP)
 xpoly.spad.pamphlet (OFMONOID FMCAT FM1 XALG XFALG XPOLYC XPR XDPOLY XRPOLY
@@ -1300,7 +1298,7 @@ SPADFILES= \
  ${OUTSRC}/syssolp.spad ${OUTSRC}/system.spad \
  ${OUTSRC}/tableau.spad ${OUTSRC}/table.spad ${OUTSRC}/taylor.spad \
  ${OUTSRC}/tex.spad ${OUTSRC}/tools.spad ${OUTSRC}/transsolve.spad \
- ${OUTSRC}/tree.spad ${OUTSRC}/trigcat.spad ${OUTSRC}/triset.spad \
+ ${OUTSRC}/tree.spad ${OUTSRC}/triset.spad \
  ${OUTSRC}/tube.spad ${OUTSRC}/twofact.spad \
  ${OUTSRC}/unifact.spad ${OUTSRC}/updecomp.spad ${OUTSRC}/updivp.spad \
  ${OUTSRC}/utsode.spad \
@@ -1461,7 +1459,7 @@ DOCFILES= \
  ${DOC}/syssolp.spad.dvi ${DOC}/system.spad.dvi \
  ${DOC}/tableau.spad.dvi ${DOC}/table.spad.dvi ${DOC}/taylor.spad.dvi \
  ${DOC}/tex.spad.dvi ${DOC}/tools.spad.dvi ${DOC}/transsolve.spad.dvi \
- ${DOC}/tree.spad.dvi ${DOC}/trigcat.spad.dvi ${DOC}/triset.spad.dvi \
+ ${DOC}/tree.spad.dvi ${DOC}/triset.spad.dvi \
  ${DOC}/tube.spad.dvi ${DOC}/twofact.spad.dvi \
  ${DOC}/unifact.spad.dvi ${DOC}/updecomp.spad.dvi ${DOC}/updivp.spad.dvi \
  ${DOC}/utsode.spad.dvi \
diff --git a/src/algebra/trigcat.spad.pamphlet b/src/algebra/trigcat.spad.pamphlet
deleted file mode 100644
index 4e5529a..0000000
--- a/src/algebra/trigcat.spad.pamphlet
+++ /dev/null
@@ -1,388 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/algebra trigcat.spad}
-\author{Manuel Bronstein}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{category ELEMFUN ElementaryFunctionCategory}
-<<dot>>=
-"ELEMFUN" -> "CATEGORY"
-"ElementaryFunctionCategory()" -> "Category"
-@
-<<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)
-
-@
-\section{category AHYP ArcHyperbolicFunctionCategory}
-<<dot>>=
-"AHYP" -> "CATEGORY"
-"ArcHyperbolicFunctionCategory()" -> "Category"
-@
-<<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.
-
-@
-\section{category ATRIG ArcTrigonometricFunctionCategory}
-The [[asec]] and [[acsc]] functions were modified to include an
-intermediate test to check that the argument has a reciprocal values.
-<<dot>>=
-"ATRIG" -> "CATEGORY"
-"ArcTrigonometricFunctionCategory()" -> "Category"
-@
-<<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::$)
-
-@
-\section{category HYPCAT HyperbolicFunctionCategory}
-The [[csch]] and [[sech]] functions were modified to include an
-intermediate test to check that the argument has a reciprocal values.
-<<dot>>=
-"HYPCAT" -> "CATEGORY"
-"HyperbolicFunctionCategory()" -> "Category"
-@
-<<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::$)::$
-
-@
-\section{category TRANFUN TranscendentalFunctionCategory}
-The [[acsch]], [[asech]], and [[acoth]] functions were modified to
-include an intermediate test to check that the argument has a
-reciprocal values.
-<<dot>>=
-"TRANFUN" -> "TRIGCAT"
-"TranscendentalFunctionCategory()" ->
-    "TrigonometricFunctionCategory()"
-"TRANFUN" -> "ATRIG"
-"TranscendentalFunctionCategory()" ->
-    "ArcTrigonometricFunctionCategory()"
-"TRANFUN" -> "HYPCAT"
-"TranscendentalFunctionCategory()" ->
-    "HyperbolicFunctionCategory()"
-"TRANFUN" -> "AHYP"
-"TranscendentalFunctionCategory()" ->
-    "ArcHyperbolicFunctionCategory()"
-"TRANFUN" -> "ELEMFUN"
-"TranscendentalFunctionCategory()" ->
-    "ElementaryFunctionCategory()"
-@
-<<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::$
-
-@
-\section{category TRIGCAT TrigonometricFunctionCategory}
-The [[csc]] and [[sec]] functions were modified to include an
-intermediate test to check that the argument has a reciprocal values.
-<<dot>>=
-"TRIGCAT" -> "CATEGORY"
-"TrigonometricFunctionCategory()" -> "Category"
-@
-<<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
-
-@
-\section{category PRIMCAT PrimitiveFunctionCategory}
-<<dot>>=
-"PRIMCAT" -> "CATEGORY"
-"PrimitiveFunctionCategory()" -> "Category"
-@
-<<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.
-
-@
-\section{category LFCAT LiouvillianFunctionCategory}
-<<dot>>=
-"LFCAT" -> "PRIMCAT"
-"LiouvillianFunctionCategory()" -> "PrimitiveFunctionCategory()"
-"LFCAT" -> "TRANFUN"
-"LiouvillianFunctionCategory()" -> "TranscendentalFunctionCategory()"
-@
-<<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}.
-
-@
-\section{category CFCAT CombinatorialFunctionCategory}
-<<dot>>=
-"CFCAT" -> "CATEGORY" 
-"CombinatorialFunctionCategory()" -> "Category"
-@
-<<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)!}.
-
-@
-\section{category SPFCAT SpecialFunctionCategory}
-<<dot>>=
-"SPFCAT" -> "CATEGORY"
-"SpecialFunctionCategory()" -> "Category"
-@
-<<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)}.
-
-@
-\section{License}
-<<license>>=
---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
---All rights reserved.
---
---Redistribution and use in source and binary forms, with or without
---modification, are permitted provided that the following conditions are
---met:
---
---    - Redistributions of source code must retain the above copyright
---      notice, this list of conditions and the following disclaimer.
---
---    - Redistributions in binary form must reproduce the above copyright
---      notice, this list of conditions and the following disclaimer in
---      the documentation and/or other materials provided with the
---      distribution.
---
---    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
---      names of its contributors may be used to endorse or promote products
---      derived from this software without specific prior written permission.
---
---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-@
-<<*>>=
-<<license>>
-
-<<category ELEMFUN ElementaryFunctionCategory>>
-<<category TRIGCAT TrigonometricFunctionCategory>>
-<<category ATRIG ArcTrigonometricFunctionCategory>>
-<<category HYPCAT HyperbolicFunctionCategory>>
-<<category AHYP ArcHyperbolicFunctionCategory>>
-<<category TRANFUN TranscendentalFunctionCategory>>
-<<category PRIMCAT PrimitiveFunctionCategory>>
-<<category LFCAT LiouvillianFunctionCategory>>
-<<category CFCAT CombinatorialFunctionCategory>>
-<<category SPFCAT SpecialFunctionCategory>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
