diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 9ae7057..87e140e 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -6,9 +6,29 @@
 \makeindex
 \usepackage{graphicx}
 %%
+%% Note that this file will eventually generate a dvi file
+%% which will eventually be processed by dvipdfm to create a pdf.
+%% The categories/domains/packages will be placed in a graphviz graph.
+%% The graphviz dot syntax allows an href parameter.
+%% The href parameter will reference this file. 
+%% pdf href syntax allows named destinations.
+%% This macro creates a named destination using \special
+%% Thus, you reference http://thispdf#nameddest=ABBREV 
+%% and you end up at the right page.
+%% This macro is called implicitly by \pagehead so every 
+%% category/domain/package can be referenced by fullname or abbrev.
+%%
+%% dest will give the ability to use nameddest= in html pdfs
+%%
+\newcommand{\dest}[1]{% e.g. \dest{abb}
+\special{pdf:dest (#1) [ @thispage /FitH @ypos ]}}
+%%
+%%
 %% pagehead consolidates standard page indexing
 %%
 \newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb}
+\dest{#1}%
+\dest{#2}%
 \section{#1 (#2)}
 \label{#1}%
 \label{#2}%
@@ -36,7 +56,6 @@
 \newcommand{\cross}[2]{% e.g. \pagefrom{cat}{funcname}
 \index{#1!#2}%
 \index{#2!#1}}
-%%
 
 
 % special meanings for math characters
@@ -262,6 +281,7 @@ A ``yellow'' color indicates a domain.
 This is the root of the category hierarchy and is not represented by code.
 
 {\bf See:}\\
+\pageto{BasicType}{BASTYPE}
 \pageto{Eltable}{ELTAB}
 \pageto{CoercibleTo}{KOERCE}
 \pageto{ConvertibleTo}{KONVERT}
@@ -269,6 +289,75 @@ This is the root of the category hierarchy and is not represented by code.
 \pageto{Type}{TYPE}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{BasicType}{BASTYPE}
+\pagepic{ps/v102basictype.ps}{BASTYPE}
+
+{\bf See:}\\
+\pagefrom{Category}{CATEGORY}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+ ?=? &  ?\~{}=?
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ ?=? : (%,%) -> Boolean                
+\end{verbatim}
+
+These are implemented by this category:
+\begin{verbatim}
+ ?~=? : (%,%) -> Boolean
+\end{verbatim}
+
+<<category BASTYPE BasicType>>=
+)abbrev category BASTYPE BasicType
+--% BasicType
+++ Author:
+++ Date Created:
+++ Date Last Updated:
+++ Basic Functions:
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ \spadtype{BasicType} is the basic category for describing a collection
+++ of elements with \spadop{=} (equality).
+BasicType(): Category == with
+      "=": (%,%) -> Boolean    ++ x=y tests if x and y are equal.
+      "~=": (%,%) -> Boolean   ++ x~=y tests if x and y are not equal.
+   add
+      _~_=(x:%,y:%) : Boolean == not(x=y)
+
+@
+<<BASTYPE.dotabb>>=
+"BASTYPE"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"];
+"BASTYPE" -> "CATEGORY"
+
+@
+<<BASTYPE.dotfull>>=
+"BasicType()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BASTYPE"];
+"BasicType()" -> "Category"
+
+@
+<<BASTYPE.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"BasicType()" [color=lightblue];
+"BasicType()" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{CoercibleTo}{KOERCE}
 \pagepic{ps/v102koerce.ps}{KOERCE}
 
@@ -302,17 +391,20 @@ CoercibleTo(S:Type): Category == with
 
 @
 <<KOERCE.dotabb>>=
-"KOERCE" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KOERCE" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"];
 "KOERCE" -> "CATEGORY"
 
 @
 <<KOERCE.dotfull>>=
-"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CoercibleTo(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"];
 "CoercibleTo(a:Type)" -> "Category"
 
-"CoercibleTo(OutputForm)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"CoercibleTo(OutputForm)"
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KOERCE"];
 "CoercibleTo(OutputForm)" ->
     "CoercibleTo(a:Type)"
+
 @
 <<KOERCE.dotpic>>=
 digraph pic {
@@ -320,10 +412,10 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"CoercibleTo(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CoercibleTo(a:Type)" [color=lightblue];
 "CoercibleTo(a:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -363,73 +455,74 @@ ConvertibleTo(S:Type): Category == with
 
 @
 <<KONVERT.dotabb>>=
-"KONVERT" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KONVERT"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "KONVERT" -> "CATEGORY"
 
 @
 <<KONVERT.dotfull>>=
 "ConvertibleTo(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(a:Type)" -> "Category"
 
 "ConvertibleTo(DoubleFloat)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Float)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(InputForm)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Integer)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Integer)" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Pattern(Integer))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Pattern(Integer))" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Pattern(Float))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Pattern(Float))" -> "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Complex(Float))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Complex(Float))" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Complex(DoubleFloat))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Complex(DoubleFloat))" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(String)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(String)" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Symbol)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Symbol)" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(SExpression)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(SExpression)" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(Pattern(Base))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(Pattern(Base))" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(List(Integer))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(List(Integer))" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(List(Character))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(List(Character))" ->  "ConvertibleTo(a:Type)"
 
 "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=KONVERT"];
 "ConvertibleTo(UnivariatePolynomialCategory(CommutativeRing))" ->
     "ConvertibleTo(a:Type)"
 @
@@ -439,11 +532,10 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"ConvertibleTo(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ConvertibleTo(a:Type)" [color=lightblue];
 "ConvertibleTo(a:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -491,13 +583,13 @@ Eltable(S:SetCategory, Index:Type): Category == with
 
 @
 <<ELTAB.dotabb>>=
-"ELTAB" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ELTAB" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"];
 "ELTAB" -> "CATEGORY"
 
 @
 <<ELTAB.dotfull>>=
 "Eltable(a:SetCategory,b:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAB"];
 "Eltable(a:SetCategory,b:Type)" -> "Category"
 
 @
@@ -507,11 +599,10 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Eltable(a:SetCategory,b:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Eltable(a:SetCategory,b:Type)" [color=lightblue];
 "Eltable(a:SetCategory,b:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -568,45 +659,46 @@ RetractableTo(S: Type): Category == with
 
 @
 <<RETRACT.dotabb>>=
-"RETRACT" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RETRACT"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RETRACT" -> "CATEGORY"
 
 @
 <<RETRACT.dotfull>>=
 "RetractableTo(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(a:Type)" -> "Category"
 
 "RetractableTo(SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(SetCategory)" -> "RetractableTo(a:Type)"
 
 "RetractableTo(Symbol)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(Symbol)" -> "RetractableTo(a:Type)"
 
 "RetractableTo(Integer)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(Integer)" -> "RetractableTo(a:Type)"
 
 "RetractableTo(NonNegativeInteger)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(NonNegativeInteger)" -> "RetractableTo(a:Type)"
 
 "RetractableTo(Fraction(Integer))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(Fraction(Integer))" -> "RetractableTo(a:Type)"
 
 "RetractableTo(Float)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(Float)" -> "RetractableTo(a:Type)"
 
 "RetractableTo(Kernel(ExpressionSpace))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(Kernel(ExpressionSpace))" -> "RetractableTo(a:Type)"
 
 "RetractableTo(CommutativeRing)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=RETRACT"];
 "RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)"
 @
 <<RETRACT.dotpic>>=
@@ -615,11 +707,10 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"RetractableTo(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RetractableTo(a:Type)" [color=lightblue];
 "RetractableTo(a:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -641,12 +732,12 @@ Type(): Category == with nil
 
 @
 <<TYPE.dotabb>>=
-"TYPE" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"TYPE" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"];
 "TYPE" -> "CATEGORY"
 
 @
 <<TYPE.dotfull>>=
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TYPE"];
 "Type()" -> "Category"
 
 @
@@ -656,10 +747,10 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -748,12 +839,13 @@ Aggregate: Category == Type with
 
 @
 <<AGG.dotabb>>=
-"AGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"];
 "AGG" -> "TYPE"
 
 @
 <<AGG.dotfull>>=
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=AGG"];
 "Aggregate()" -> "Type()"
 
 @
@@ -763,13 +855,13 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -862,13 +954,13 @@ EltableAggregate(Dom:SetCategory, Im:Type): Category ==
 
 @
 <<ELTAGG.dotabb>>=
-"ELTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ELTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"];
 "ELTAGG" -> "ELTAB"
 
 @
 <<ELTAGG.dotfull>>=
 "EltableAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELTAGG"];
 "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)"
 
 @
@@ -878,20 +970,237 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"EltableAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)"
 
-"Eltable(a:SetCategory,b:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Eltable(a:SetCategory,b:Type)" [color=lightblue];
 "Eltable(a:SetCategory,b:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{SetCategory}{SETCAT}
+\pagepic{ps/v102setcategory.ps}{SETCAT}
+
+{\bf See:}\\
+\pageto{AbelianSemiGroup}{ABELSG}
+\pageto{HomogeneousAggregate}{HOAGG}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+coerce & hash & latex & ?=? & ?\~{}=?
+\end{tabular}
+
+\cross{SETCAT}{coerce}
+\cross{SETCAT}{hash}
+\cross{SETCAT}{latex}
+\cross{SETCAT}{?=?}
+\cross{SETCAT}{?\~{}=?}
+
+These are implemented by this category:
+\begin{verbatim}
+ hash : % -> SingleInteger            
+ latex : % -> String
+\end{verbatim}
+
+These exports come from BasicType():
+\begin{verbatim}
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean              
+\end{verbatim}
+
+These exports come from CoercibleTo(OutputForm):
+\begin{verbatim}
+ coerce : % -> OutputForm
+\end{verbatim}
+
+<<category SETCAT SetCategory>>=
+)abbrev category SETCAT SetCategory
+++ Author:
+++ Date Created:
+++ Date Last Updated:
+++   09/09/92   RSS   added latex and hash
+++ Basic Functions:
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ \spadtype{SetCategory} is the basic category for describing a collection
+++ of elements with \spadop{=} (equality) and \spadfun{coerce} to output form.
+++
+++ Conditional Attributes:
+++    canonical\tab{15}data structure equality is the same as \spadop{=}
+SetCategory(): Category == Join(BasicType,CoercibleTo OutputForm) with
+    --operations
+      hash: % -> SingleInteger  ++ hash(s) calculates a hash code for s.
+      latex: % -> String       ++ latex(s) returns a LaTeX-printable output
+                               ++ representation of s.
+  add
+      hash(s : %):  SingleInteger == 0$SingleInteger
+      latex(s : %): String       == "\mbox{\bf Unimplemented}"
+
+@
+<<SETCAT.dotabb>>=
+"SETCAT" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"];
+"SETCAT" -> "BASTYPE"
+"SETCAT" -> "KOERCE"
+
+@
+<<SETCAT.dotfull>>=
+"SetCategory()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETCAT"];
+"SetCategory()" -> "BasicType()"
+"SetCategory()" -> "CoercibleTo(OutputForm)"
+
+@
+<<SETCAT.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"SetCategory()" [color=lightblue];
+"SetCategory()" -> "BasicType()"
+"SetCategory()" -> "CoercibleTo(OutputForm)"
+
+"BasicType()" [color=lightblue];
+"BasicType()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+
 }
 
 @
 \chapter{Category Layer 3}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{AbelianSemiGroup}{ABELSG}
+\pagepic{ps/v102abeliansemigroup.ps}{ABELSG}
+
+{\bf See:}\\
+\pagefrom{SetCategory}{SETCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{lllllll}
+ coerce & hash & latex & ?*? & ?+? & ?=? & ?\~{}=? 
+\end{tabular}
+
+\cross{ABELSG}{coerce}
+\cross{ABELSG}{hash}
+\cross{ABELSG}{latex}
+\cross{ABELSG}{?*?}
+\cross{ABELSG}{?+?}
+\cross{ABELSG}{?=?}
+\cross{ABELSG}{?\~{}=?}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ ?+? : (%,%) -> %
+\end{verbatim}
+
+These are implemented by this category:
+\begin{verbatim}
+ ?*? : (PositiveInteger,%) -> %       
+\end{verbatim}
+
+These exports come from SetCategory():
+\begin{verbatim}
+ coerce : % -> OutputForm
+ hash : % -> SingleInteger            
+ latex : % -> String
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean              
+\end{verbatim}
+
+<<category ABELSG AbelianSemiGroup>>=
+)abbrev category ABELSG AbelianSemiGroup
+++ Author:
+++ Date Created:
+++ Date Last Updated:
+++ Basic Functions:
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ the class of all additive (commutative) semigroups, i.e.
+++ a set with a commutative and associative operation \spadop{+}.
+++
+++ Axioms:
+++   \spad{associative("+":(%,%)->%)}\tab{30}\spad{ (x+y)+z = x+(y+z) }
+++   \spad{commutative("+":(%,%)->%)}\tab{30}\spad{ x+y = y+x }
+AbelianSemiGroup(): Category == SetCategory with
+    --operations
+      "+": (%,%) -> %                  ++ x+y computes the sum of x and y.
+      "*": (PositiveInteger,%) -> %
+        ++ n*x computes the left-multiplication of x by the positive integer n.
+        ++ This is equivalent to adding x to itself n times.
+    add
+      import RepeatedDoubling(%)
+      if not (% has Ring) then
+        n:PositiveInteger * x:% == double(n,x)
+
+@
+<<ABELSG.dotabb>>=
+"ABELSG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"];
+"ABELSG" -> "SETCAT"
+"ABELSG" -> "REPDB"
+
+@
+<<ABELSG.dotfull>>=
+"AbelianSemiGroup()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ABELSG"];
+"AbelianSemiGroup()" -> "SetCategory()"
+"AbelianSemiGroup()" -> "RepeatedDoubling(S:SetCategory)"
+
+<<ABELSG.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"AbelianSemiGroup()" [color=lightblue];
+"AbelianSemiGroup()" -> "SetCategory()"
+"AbelianSemiGroup()" -> "RepeatedDoubling(S:AbelianSemiGroup)"
+
+"SetCategory()" [color=lightblue];
+"SetCategory()" -> "BasicType()"
+"SetCategory()" -> "CoercibleTo(OutputForm)"
+
+"BasicType()" [color=lightblue];
+"BasicType()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" ->
+    "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"RepeatedDoubling(S:AbelianSemiGroup)" [color="#00EE00"];
+"RepeatedDoubling(S:AbelianSemiGroup)" -> "RepeatedDoubling(S:SetCategory)"
+
+"RepeatedDoubling(S:SetCategory)" [color="#00EE00"];
+"RepeatedDoubling(S:SetCategory)" -> "Package"
+
+"Package" [color="#00EE00"];
+
+"Category" [color=lightblue];
+}
+
+@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{HomogeneousAggregate}{HOAGG}
 \pagepic{ps/v102homogeneousaggregate.ps}{HOAGG}
 
@@ -1070,13 +1379,13 @@ HomogeneousAggregate(S:Type): Category == Aggregate with
 
 @
 <<HOAGG.dotabb>>=
-"HOAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HOAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"];
 "HOAGG" -> "AGG"
 
 @
 <<HOAGG.dotfull>>=
 "HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=HOAGG"];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
 @
@@ -1086,23 +1395,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 "HomogeneousAggregate(a:Type)" -> "Evalable(a:Type)"
-"HomogeneousAggregate(a:Type)" -> "SetCategory"
+"HomogeneousAggregate(a:Type)" -> "SetCategory()"
 
-"Evalable(a:Type)" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"Evalable(a:Type)" [color="#00EE00"];
 
-"SetCategory" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"SetCategory()" [color="#00EE00"];
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.pamphlet"];
+"Category" [color=lightblue];
 
 }
 
@@ -1242,16 +1550,17 @@ BagAggregate(S:Type): Category == HomogeneousAggregate S with
 
 @
 <<BGAGG.dotabb>>=
-"BGAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BGAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"];
 "BGAGG" -> "HOAGG"
 
 @
 <<BGAGG.dotfull>>=
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
 "BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=BGAGG"];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
 @
@@ -1261,20 +1570,19 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -1483,15 +1791,17 @@ Collection(S:Type): Category == HomogeneousAggregate(S) with
 
 @
 <<CLAGG.dotabb>>=
-"CLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"];
 "CLAGG" -> "HOAGG"
 
 @
 <<CLAGG.dotfull>>=
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)"
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=CLAGG"];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
 @
@@ -1501,29 +1811,26 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 "Collection(a:Type)" -> "ConvertibleTo(InputForm)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"ConvertibleTo(InputForm)"
-    [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"ConvertibleTo(InputForm)" [color="#00EE00"];
 "ConvertibleTo(InputForm)" -> "ConvertibleTo(a:Type)"
 
-"ConvertibleTo(a:Type)"
-    [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"ConvertibleTo(a:Type)" [color="#00EE00"];
 "ConvertibleTo(a:Type)" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -1741,26 +2048,26 @@ IndexedAggregate(Index: SetCategory, Entry: Type): Category ==
 
 @
 <<IXAGG.dotabb>>=
-"IXAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IXAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"];
 "IXAGG" -> "HOAGG"
 "IXAGG" -> "ELTAGG"
 
 @
 <<IXAGG.dotfull>>=
 "IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "EltableAggregate(a:SetCategory,b:Type)"
 
 "IndexedAggregate(a:SetCategory,b:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"];
 "IndexedAggregate(a:SetCategory,b:SetCategory)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
 "IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=IXAGG"];
 "IndexedAggregate(b:Integer,a:Type)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
@@ -1771,32 +2078,28 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "EltableAggregate(a:SetCategory,b:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"EltableAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"EltableAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "EltableAggregate(a:SetCategory,b:Type)" -> "Eltable(a:SetCategory,b:Type)"
 
-"Eltable(a:SetCategory,b:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Eltable(a:SetCategory,b:Type)" [color=lightblue];
 "Eltable(a:SetCategory,b:Type)" -> "Category"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -1982,13 +2285,13 @@ RecursiveAggregate(S:Type): Category == HomogeneousAggregate(S) with
 
 @
 <<RCAGG.dotabb>>=
-"RCAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RCAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"];
 "RCAGG" -> "HOAGG"
 
 @
 <<RCAGG.dotfull>>=
 "RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=RCAGG"];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
 @
@@ -1998,21 +2301,19 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RecursiveAggregate(a:Type)" [color=lightblue];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -2268,13 +2569,13 @@ BinaryRecursiveAggregate(S:Type):Category == RecursiveAggregate S with
 
 @
 <<BRAGG.dotabb>>=
-"BRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"];
 "BRAGG" -> "RCAGG"
 
 @
 <<BRAGG.dotfull>>=
 "BinaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BRAGG"];
 "BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
 @
@@ -2284,25 +2585,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"BinaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BinaryRecursiveAggregate(a:Type)" [color=lightblue];
 "BinaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
-"RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RecursiveAggregate(a:Type)" [color=lightblue];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -2487,14 +2785,14 @@ DictionaryOperations(S:SetCategory): Category ==
 
 @
 <<DIOPS.dotabb>>=
-"DIOPS" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DIOPS" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"];
 "DIOPS" -> "BGAGG"
 "DIOPS" -> "CLAGG"
 
 @
 <<DIOPS.dotfull>>=
 "DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIOPS"];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
@@ -2505,35 +2803,32 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DictionaryOperations(a:SetCategory)" [color=lightblue];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
-"BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:SetCategory)" [color=seagreen];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)" [color=seagreen];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -2718,13 +3013,13 @@ DoublyLinkedAggregate(S:Type): Category == RecursiveAggregate S with
 
 @
 <<DLAGG.dotabb>>=
-"DLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"];
 "DLAGG" -> "RCAGG"
 
 @
 <<DLAGG.dotfull>>=
 "DoublyLinkedAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DLAGG"];
 "DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
 @
@@ -2734,25 +3029,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"DoublyLinkedAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DoublyLinkedAggregate(a:Type)" [color=lightblue];
 "DoublyLinkedAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
-"RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RecursiveAggregate(a:Type)" [color=lightblue];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -3013,13 +3305,14 @@ LinearAggregate(S:Type): Category ==
 
 @
 <<LNAGG.dotabb>>=
-"LNAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LNAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"];
 "LNAGG" -> "IXAGG"
 "LNAGG" -> "CLAGG"
 
 @
 <<LNAGG.dotfull>>=
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" 
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LNAGG"];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "Collection(a:Type)"
 
@@ -3030,34 +3323,31 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "Collection(a:Type)"
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.pamphlet"];
+"Category" [color=lightblue];
 
 }
 @
@@ -3185,21 +3475,21 @@ PriorityQueueAggregate(S:OrderedSet): Category == BagAggregate S with
 
 @
 <<PRQAGG.dotabb>>=
-"PRQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"PRQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"];
 "PRQAGG" -> "BGAGG"
 
 @
 <<PRQAGG.dotfull>>=
 "PriorityQueueAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"];
 "PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
 "PriorityQueueAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"];
 "PriorityQueueAggregate(a:SetCategory)" -> "PriorityQueueAggregate(a:Type)"
 
 "PriorityQueueAggregate(a:OrderedSet)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=PRQAGG"];
 "PriorityQueueAggregate(a:OrderedSet)" ->
    "PriorityQueueAggregate(a:SetCategory)"
 
@@ -3210,24 +3500,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"PriorityQueueAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"PriorityQueueAggregate(a:Type)" [color=lightblue];
 "PriorityQueueAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -3374,16 +3662,17 @@ QueueAggregate(S:Type): Category == BagAggregate S with
 
 @
 <<QUAGG.dotabb>>=
-"QUAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"QUAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"];
 "QUAGG" -> "BGAGG"
 
 @
 <<QUAGG.dotfull>>=
-"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"QueueAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"];
 "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
 "QueueAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=QUAGG"];
 "QueueAggregate(a:SetCategory)" -> "QueueAggregate(a:Type)"
 
 @
@@ -3393,23 +3682,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"QueueAggregate(a:Type)" [color=lightblue];
 "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -3546,16 +3834,17 @@ StackAggregate(S:Type): Category == BagAggregate S with
 
 @
 <<SKAGG.dotabb>>=
-"SKAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"SKAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"];
 "SKAGG" -> "BGAGG"
 
 @
 <<SKAGG.dotfull>>=
-"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StackAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"];
 "StackAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
 "StackAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=SKAGG"];
 "StackAggregate(a:SetCategory)" -> "StackAggregate(a:Type)"
 
 @
@@ -3565,23 +3854,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StackAggregate(a:Type)" [color=lightblue];
 "StackAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -4016,13 +4304,13 @@ UnaryRecursiveAggregate(S:Type): Category == RecursiveAggregate S with
 
 @
 <<URAGG.dotabb>>=
-"URAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"URAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"];
 "URAGG" -> "RCAGG"
 
 @
 <<URAGG.dotfull>>=
 "UnaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=URAGG"];
 "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
 @
@@ -4032,25 +4320,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"UnaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"UnaryRecursiveAggregate(a:Type)" [color=lightblue];
 "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
-"RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RecursiveAggregate(a:Type)" [color=lightblue];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -4222,17 +4507,17 @@ Dictionary(S:SetCategory): Category ==
 
 @
 <<DIAGG.dotabb>>=
-"DIAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DIAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"];
 "DIAGG" -> "DIOPS"
 
 @
 <<DIAGG.dotfull>>=
 "Dictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"];
 "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
 "Dictionary(Record(a:SetCategory,b:SetCategory))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DIAGG"];
 "Dictionary(Record(a:SetCategory,b:SetCategory))" ->
     "Dictionary(a:SetCategory)"
 
@@ -4243,39 +4528,35 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Dictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Dictionary(a:SetCategory)" [color=lightblue];
 "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
-"DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DictionaryOperations(a:SetCategory)" [color=lightblue];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
-"BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:SetCategory)" [color=seagreen];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)" [color=seagreen];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "Aggregate()"
 
-"Aggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Aggregate()" [color=lightblue];
 "Aggregate()" -> "Type()"
 
-"Type()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Type()" [color=lightblue];
 "Type()" -> "Category"
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category" [color=lightblue];
 }
 
 @
@@ -4470,18 +4751,19 @@ DequeueAggregate(S:Type):
 
 @
 <<DQAGG.dotabb>>=
-"DQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DQAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"];
 "DQAGG" -> "SKAGG"
 "DQAGG" -> "QUAGG"
 
 @
 <<DQAGG.dotfull>>=
-"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DequeueAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"];
 "DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)"
 "DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)"
 
 "DequeueAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=DQAGG"];
 "DequeueAggregate(a:SetCategory)" -> "DequeueAggregate(a:Type)"
 
 @
@@ -4491,24 +4773,23 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"DequeueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DequeueAggregate(a:Type)" [color=lightblue];
 "DequeueAggregate(a:Type)" -> "StackAggregate(a:Type)"
 "DequeueAggregate(a:Type)" -> "QueueAggregate(a:Type)"
 
-"StackAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StackAggregate(a:Type)" [color=lightblue];
 "StackAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
-"QueueAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"QueueAggregate(a:Type)" [color=lightblue];
 "QueueAggregate(a:Type)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "..."
 
-"..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"..." [color=lightblue];
 }
 
 @
@@ -4769,13 +5050,13 @@ ExtensibleLinearAggregate(S:Type):Category == LinearAggregate S with
 
 @
 <<ELAGG.dotabb>>=
-"ELAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ELAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"];
 "ELAGG" -> "LNAGG"
 
 @
 <<ELAGG.dotfull>>=
 "ExtensibleLinearAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ELAGG"];
 "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
 @
@@ -4785,32 +5066,28 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"ExtensibleLinearAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ExtensibleLinearAggregate(a:Type)" [color=lightblue];
 "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "Collection(a:Type)"
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "..."
 
-"..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"..." [color=lightblue];
 }
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5112,13 +5389,13 @@ FiniteLinearAggregate(S:Type): Category == LinearAggregate S with
 
 @
 <<FLAGG.dotabb>>=
-"FLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FLAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"];
 "FLAGG" -> "LNAGG"
 
 @
 <<FLAGG.dotfull>>=
 "FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FLAGG"];
 "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
 @
@@ -5128,35 +5405,31 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FiniteLinearAggregate(a:Type)" [color=lightblue];
 "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 "FiniteLinearAggregate(a:Type)" -> "OrderedSet"
 
-"OrderedSet" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"OrderedSet" [color="#00EE00"];
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "Collection(a:Type)"
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "..."
 
-"..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"..." [color=lightblue];
 }
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5165,7 +5438,6 @@ digraph pic {
 
 {\bf See:}\\
 \pagefrom{DictionaryOperations}{DIOPS}
-<<category MDAGG MultiDictionary>>=
 
 {\bf Exports:}\\
 \begin{tabular}{lllll}
@@ -5214,9 +5486,9 @@ digraph pic {
 \cross{MDAGG}{select}
 \cross{MDAGG}{select!}
 \cross{MDAGG}{size?}
-\cross{MDAGG}{#?}
+\cross{MDAGG}{\#?}
 \cross{MDAGG}{?=?}
-\cross{MDAGG}{?~=?}
+\cross{MDAGG}{?\~{}=?}
 
 These are directly exported but not implemented:
 \begin{verbatim}
@@ -5288,6 +5560,7 @@ These exports come from DictionaryOperations(a:SetCategory):
  ?~=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
+<<category MDAGG MultiDictionary>>=
 )abbrev category MDAGG MultiDictionary
 ++ Author: Michael Monagan; revised by Manuel Bronstein and Richard Jenks
 ++ Date Created: August 87 through August 88
@@ -5319,13 +5592,13 @@ MultiDictionary(S:SetCategory): Category == DictionaryOperations S with
 
 @
 <<MDAGG.dotabb>>=
-"MDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"MDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"];
 "MDAGG" -> "DIOPS"
 
 @
 <<MDAGG.dotfull>>=
 "MultiDictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MDAGG"];
 "MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
 @
@@ -5335,33 +5608,29 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"MultiDictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"MultiDictionary(a:SetCategory)" [color=lightblue];
 "MultiDictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
-"DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DictionaryOperations(a:SetCategory)" [color=lightblue];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
-"BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:SetCategory)" [color=seagreen];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)" [color=seagreen];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "..."
 
-"..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"..." [color=lightblue];
 }
 
 @
@@ -5684,13 +5953,14 @@ StreamAggregate(S:Type): Category ==
 
 @
 <<STAGG.dotabb>>=
-"STAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"STAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"];
 "STAGG" -> "RCAGG"
 "STAGG" -> "LNAGG"
 
 @
 <<STAGG.dotfull>>=
-"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StreamAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=STAGG"];
 "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)"
 "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
@@ -5701,40 +5971,35 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StreamAggregate(a:Type)" [color=lightblue];
 "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)"
 "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"UnaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"UnaryRecursiveAggregate(a:Type)" [color=lightblue];
 "UnaryRecursiveAggregate(a:Type)" -> "RecursiveAggregate(a:Type)"
 
-"RecursiveAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"RecursiveAggregate(a:Type)" [color=lightblue];
 "RecursiveAggregate(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "Collection(a:Type)"
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> 
     "HomogeneousAggregate(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HomogeneousAggregate(a:Type)"
 
-"HomogeneousAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HomogeneousAggregate(a:Type)" [color=lightblue];
 "HomogeneousAggregate(a:Type)" -> "..."
 
-"..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"..." [color=lightblue];
 
 }
 @
@@ -6189,23 +6454,23 @@ OneDimensionalArrayAggregate(S:Type): Category ==
 
 @
 <<A1AGG.dotabb>>=
-"A1AGG" [color=lightblue,style=filled];
+"A1AGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"];
 "A1AGG" -> "FLAGG"
 
 @
 <<A1AGG.dotfull>>=
 "OneDimensionalArrayAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"];
 "OneDimensionalArrayAggregate(a:Type)" -> 
     "FiniteLinearAggregate(a:Type)"
 
 "OneDimensionalArrayAggregate(Character)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"];
 "OneDimensionalArrayAggregate(Character)" ->
     "OneDimensionalArrayAggregate(a:Type)"
 
 "OneDimensionalArrayAggregate(Boolean)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=A1AGG"];
 "OneDimensionalArrayAggregate(Boolean)" ->    
     "OneDimensionalArrayAggregate(a:Type)"
 
@@ -6216,25 +6481,22 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"OneDimensionalArrayAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"OneDimensionalArrayAggregate(a:Type)" [color=lightblue];
 "OneDimensionalArrayAggregate(a:Type)" -> 
     "FiniteLinearAggregate(a:Type)"
 
-"FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FiniteLinearAggregate(a:Type)" [color=lightblue];
 "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "CLAGG..."
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" -> "IXAGG..."
 
-"CLAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"IXAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CLAGG..." [color=lightblue];
+"IXAGG..." [color=lightblue];
 }
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -6424,13 +6686,13 @@ KeyedDictionary(Key:SetCategory, Entry:SetCategory): Category ==
 
 @
 <<KDAGG.dotabb>>=
-"KDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KDAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KDAGG"];
 "KDAGG" -> "DIAGG"
 
 @
 <<KDAGG.dotfull>>=
 "KeyedDictionary(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=KDAGG"];
 "KeyedDictionary(a:SetCategory,b:SetCategory)" -> 
     "Dictionary(Record(a:SetCategory,b:SetCategory))"
 
@@ -6441,39 +6703,34 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"KeyedDictionary(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KeyedDictionary(a:SetCategory,b:SetCategory)" [color=lightblue];
 "KeyedDictionary(a:SetCategory,b:SetCategory)" -> 
     "Dictionary(Record(a:SetCategory,b:SetCategory))"
 
-"Dictionary(Record(a:SetCategory,b:SetCategory))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Dictionary(Record(a:SetCategory,b:SetCategory))" [color=seagreen];
 "Dictionary(Record(a:SetCategory,b:SetCategory))" ->
     "Dictionary(a:SetCategory)"
 
-"Dictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Dictionary(a:SetCategory)" [color=lightblue];
 "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
-"DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DictionaryOperations(a:SetCategory)" [color=lightblue];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
-"BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:SetCategory)" [color=seagreen];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HOAGG..."
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)" [color=seagreen];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HOAGG..."
 
-"HOAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"HOAGG..." [color=lightblue];
 }
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -6985,19 +7242,20 @@ ListAggregate(S:Type): Category == Join(StreamAggregate S,
 
 @
 <<LSAGG.dotabb>>=
-"LSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"];
 "LSAGG" -> "FLAGG"
 "LSAGG" -> "ELAGG"
 
 @
 <<LSAGG.dotfull>>=
-"ListAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ListAggregate(a:Type)"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"];
 "ListAggregate(a:Type)" -> "StreamAggregate(a:Type)"
 "ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)"
 "ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)"
 
 "ListAggregate(Record(a:SetCategory,b:SetCategory))" 
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+ [color=seagreen,href="books/bookvol10.2.pamphlet#nameddest=LSAGG"];
 "ListAggregate(Record(a:SetCategory,b:SetCategory))" ->
     "ListAggregate(a:Type)"
 
@@ -7008,34 +7266,31 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"ListAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ListAggregate(a:Type)" [color=lightblue];
 "ListAggregate(a:Type)" -> "StreamAggregate(a:Type)"
 "ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)"
 "ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)"
 
-"StreamAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StreamAggregate(a:Type)" [color=lightblue];
 "StreamAggregate(a:Type)" -> "UnaryRecursiveAggregate(a:Type)"
 "StreamAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FiniteLinearAggregate(a:Type)" [color=lightblue];
 "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"ExtensibleLinearAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ExtensibleLinearAggregate(a:Type)" [color=lightblue];
 "ExtensibleLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"UnaryRecursiveAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"UnaryRecursiveAggregate(a:Type)" [color=lightblue];
 "UnaryRecursiveAggregate(a:Type)" -> "RCAGG..."
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IXAGG..."
 "LinearAggregate(a:Type)" -> "CLAGG..."
 
-"CLAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"IXAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"RCAGG..."  [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CLAGG..." [color=lightblue];
+"IXAGG..." [color=lightblue];
+"RCAGG..." [color=lightblue];
 }
 
 @
@@ -7418,12 +7673,13 @@ StringAggregate: Category == OneDimensionalArrayAggregate Character with
 
 @
 <<SRAGG.dotabb>>=
-"SRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"SRAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SRAGG"];
 "SRAGG" -> "A1AGG"
 
 @
 <<SRAGG.dotfull>>=
-"StringAggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StringAggregate()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SRAGG"];
 "StringAggregate()" -> "OneDimensionalArrayAggregate(Character)"
 
 @
@@ -7433,33 +7689,29 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"StringAggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"StringAggregate()" [color=lightblue];
 "StringAggregate()" -> "OneDimensionalArrayAggregate(Character)"
 
-"OneDimensionalArrayAggregate(Character)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"OneDimensionalArrayAggregate(Character)" [color=seagreen];
 "OneDimensionalArrayAggregate(Character)" ->
     "OneDimensionalArrayAggregate(a:Type)"
 
-"OneDimensionalArrayAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"OneDimensionalArrayAggregate(a:Type)" [color=lightblue];
 "OneDimensionalArrayAggregate(a:Type)" -> 
     "FiniteLinearAggregate(a:Type)"
 
-"FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FiniteLinearAggregate(a:Type)" [color=lightblue];
 "FiniteLinearAggregate(a:Type)" -> "LinearAggregate(a:Type)"
 
-"LinearAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"LinearAggregate(a:Type)" [color=lightblue];
 "LinearAggregate(a:Type)" -> "IndexedAggregate(b:Integer,a:Type)"
 "LinearAggregate(a:Type)" -> "CLAGG..."
 
-"IndexedAggregate(b:Integer,a:Type)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(b:Integer,a:Type)" [color=seagreen];
 "IndexedAggregate(b:Integer,a:Type)" -> "IXAGG..."
 
-"CLAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"IXAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CLAGG..." [color=lightblue];
+"IXAGG..." [color=lightblue];
 }
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -7789,14 +8041,14 @@ TableAggregate(Key:SetCategory, Entry:SetCategory): Category ==
 
 @
 <<TBAGG.dotabb>>=
-"TBAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"TBAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TBAGG"];
 "TBAGG" -> "KDAGG"
 "TBAGG" -> "IXAGG"
 
 @
 <<TBAGG.dotfull>>=
 "TableAggregate(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=TBAGG"];
 "TableAggregate(a:SetCategory,b:SetCategory)" -> 
     "KeyedDictionary(a:SetCategory,b:SetCategory)"
 "TableAggregate(a:SetCategory,b:SetCategory)" -> 
@@ -7809,57 +8061,49 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"TableAggregate(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"TableAggregate(a:SetCategory,b:SetCategory)" [color=lightblue];
 "TableAggregate(a:SetCategory,b:SetCategory)" -> 
     "KeyedDictionary(a:SetCategory,b:SetCategory)"
 "TableAggregate(a:SetCategory,b:SetCategory)" -> 
     "IndexedAggregate(a:SetCategory,b:SetCategory)"
 
-"IndexedAggregate(a:SetCategory,b:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:SetCategory)" [color=seagreen];
 "IndexedAggregate(a:SetCategory,b:SetCategory)" ->
     "IndexedAggregate(a:SetCategory,b:Type)"
 
-"IndexedAggregate(a:SetCategory,b:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:Type)" [color=lightblue];
 "IndexedAggregate(a:SetCategory,b:Type)" -> "HOAGG..."
 "IndexedAggregate(a:SetCategory,b:Type)" -> "ELTAGG..."
 
-"KeyedDictionary(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KeyedDictionary(a:SetCategory,b:SetCategory)" [color=lightblue];
 "KeyedDictionary(a:SetCategory,b:SetCategory)" -> 
     "Dictionary(Record(a:SetCategory,b:SetCategory))"
 
-"Dictionary(Record(a:SetCategory,b:SetCategory))"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Dictionary(Record(a:SetCategory,b:SetCategory))" [color=seagreen];
 "Dictionary(Record(a:SetCategory,b:SetCategory))" ->
     "Dictionary(a:SetCategory)"
 
-"Dictionary(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Dictionary(a:SetCategory)" [color=lightblue];
 "Dictionary(a:SetCategory)" -> "DictionaryOperations(a:SetCategory)"
 
-"DictionaryOperations(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"DictionaryOperations(a:SetCategory)" [color=lightblue];
 "DictionaryOperations(a:SetCategory)" -> "BagAggregate(a:SetCategory)"
 "DictionaryOperations(a:SetCategory)" -> "Collection(a:SetCategory)"
 
-"BagAggregate(a:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:SetCategory)" [color=seagreen];
 "BagAggregate(a:SetCategory)" -> "BagAggregate(a:Type)"
 
-"BagAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BagAggregate(a:Type)" [color=lightblue];
 "BagAggregate(a:Type)" -> "HOAGG..."
 
-"Collection(a:SetCategory)" [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"Collection(a:SetCategory)" [color=seagreen];
 "Collection(a:SetCategory)" -> "Collection(a:Type)"
 
-"Collection(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Collection(a:Type)" [color=lightblue];
 "Collection(a:Type)" -> "HOAGG..."
 
-"ELTAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"HOAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ELTAGG..." [color=lightblue];
+"HOAGG..." [color=lightblue];
 }
 @
 \chapter{Category Layer 8}
@@ -8236,14 +8480,14 @@ AssociationListAggregate(Key:SetCategory,Entry:SetCategory): Category ==
 
 @
 <<ALAGG.dotabb>>=
-"ALAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ALAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ALAGG"];
 "ALAGG" -> "TBAGG"
 "ALAGG" -> "LSAGG"
 
 @
 <<ALAGG.dotfull>>=
 "AssociationListAggregate(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=ALAGG"];
 "AssociationListAggregate(a:SetCategory,b:SetCategory)" ->
     "TableAggregate(a:SetCategory,b:SetCategory)"
 "AssociationListAggregate(a:SetCategory,b:SetCategory)" ->
@@ -8256,43 +8500,37 @@ digraph pic {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"AssociationListAggregate(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"AssociationListAggregate(a:SetCategory,b:SetCategory)" [color=lightblue];
 "AssociationListAggregate(a:SetCategory,b:SetCategory)" ->
     "TableAggregate(a:SetCategory,b:SetCategory)"
 "AssociationListAggregate(a:SetCategory,b:SetCategory)" ->
     "ListAggregate(Record(a:SetCategory,b:SetCategory))"
 
-"TableAggregate(a:SetCategory,b:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"TableAggregate(a:SetCategory,b:SetCategory)" [color=lightblue];
 "TableAggregate(a:SetCategory,b:SetCategory)" -> "KDAGG..."
 "TableAggregate(a:SetCategory,b:SetCategory)" -> 
     "IndexedAggregate(a:SetCategory,b:SetCategory)"
 
-"IndexedAggregate(a:SetCategory,b:SetCategory)"
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"IndexedAggregate(a:SetCategory,b:SetCategory)" [color=seagreen];
 "IndexedAggregate(a:SetCategory,b:SetCategory)" -> "IXAGG..."
 
-"ListAggregate(Record(a:SetCategory,b:SetCategory))" 
-    [color=seagreen,href="books/bookvol10.2.pamphlet"];
+"ListAggregate(Record(a:SetCategory,b:SetCategory))" [color=seagreen];
 "ListAggregate(Record(a:SetCategory,b:SetCategory))" -> 
     "ListAggregate(a:Type)"
 
-"ListAggregate(a:Type)" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ListAggregate(a:Type)" [color=lightblue];
 "ListAggregate(a:Type)" -> "FiniteLinearAggregate(a:Type)"
 "ListAggregate(a:Type)" -> "ExtensibleLinearAggregate(a:Type)"
 
-"FiniteLinearAggregate(a:Type)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FiniteLinearAggregate(a:Type)" [color=lightblue];
 "FiniteLinearAggregate(a:Type)" -> "LSAGG..."
 
-"ExtensibleLinearAggregate(a:Type)" 
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"ExtensibleLinearAggregate(a:Type)" [color=lightblue];
 "ExtensibleLinearAggregate(a:Type)" -> "LSAGG..."
 
-"KDAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"IXAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
-"LSAGG..." [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"KDAGG..." [color=lightblue];
+"IXAGG..." [color=lightblue];
+"LSAGG..." [color=lightblue];
 }
 
 @
@@ -8397,14 +8635,14 @@ FiniteSetAggregate(S:SetCategory): Category ==
 
 @
 <<FSAGG.dotabb>>=
-"FSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"FSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FSAGG"];
 "FSAGG" -> "DIAGG"
 "FSAGG" -> "SETAGG"
 
 @
 <<FSAGG.dotfull>>=
 "FiniteSetAggregate(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=FSAGG"];
 "FiniteSetAggregate(a:SetCategory)" -> "Dictionary(a:SetCategory)"
 "FiniteSetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)"
 
@@ -8459,14 +8697,15 @@ BitAggregate(): Category ==
 
 @
 <<BTAGG.dotabb>>=
-"BTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BTAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BTAGG"];
 "BTAGG" -> "ORDSET"
 "BTAGG" -> "LOGIC"
 "BTAGG" -> "A1AGG"
 
 @
 <<BTAGG.dotfull>>=
-"BitAggregate()" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"BitAggregate()"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=BTAGG"];
 "BitAggregate()" -> "OrderedSet()"
 "BitAggregate()" -> "Logic()"
 "BitAggregate()" -> "OneDimensionalArrayAggregate(Boolean)"
@@ -8492,14 +8731,15 @@ MultisetAggregate(S:SetCategory):
 
 @
 <<MSETAGG.dotabb>>=
-"MSETAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"MSETAGG"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MSETAGG"];
 "MSETAGG" -> "MDAGG"
 "MSETAGG" -> "SETAGG"
 
 @
 <<MSETAGG.dotfull>>=
 "MultisetAggregate(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=MSETAGG"];
 "MultisetAggregate(a:SetCategory)" -> "MultiDictionary(a:SetCategory)"
 "MultisetAggregate(a:SetCategory)" -> "SetAggregate(a:SetCategory)"
 
@@ -8531,14 +8771,14 @@ OrderedMultisetAggregate(S:OrderedSet): Category ==
 
 @
 <<OMSAGG.dotabb>>=
-"OMSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"OMSAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OMSAGG"];
 "OMSAGG" -> "MSETAGG"
 "OMSAGG" -> "PRQAGG"
 
 @
 <<OMSAGG.dotfull>>=
 "OrderedMultisetAggregate(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=OMSAGG"];
 "OrderedMultisetAggregate(a:SetCategory)" -> "MultisetAggregate(a:SetCategory)"
 "OrderedMultisetAggregate(a:SetCategory)" -> 
    "PriorityQueueAggregate(a:SetCategory)"
@@ -8625,14 +8865,14 @@ SetAggregate(S:SetCategory):
 
 @
 <<SETAGG.dotabb>>=
-"SETAGG" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"SETAGG" [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"];
 "SETAGG" -> "SETCAT"
 "SETAGG" -> "CLAGG"
 
 @
 <<SETAGG.dotfull>>=
 "SetAggregate(a:SetCategory)"
-    [color=lightblue,href="books/bookvol10.2.pamphlet"];
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=SETAGG"];
 "SetAggregate(a:SetCategory)" -> "SetCategory()"
 "SetAggregate(a:SetCategory)" -> "Collection(a:SetCategory)"
 
@@ -8641,22 +8881,141 @@ SetAggregate(S:SetCategory):
 \pagehead{Evalable}{EVALAB}
 \pageto{HomogeneousAggregate}{HOAGG}
 <<EVALAB.dotfull>>=
-"Evalable(a:Type)" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"Evalable(a:Type)"
+ [color="#00EE00",href="books/bookvol10.2.pamphlet#nameddest=EVALAB"];
 @
 
 \pagehead{OrderedSet}{ORDSET}
 \pageto{FiniteLinearAggregate}{FLAGG}
 <<ORDSET.dotfull>>=
-"OrderedSet" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
-@
-
-\pagehead{SetCategory}{SETCAT}
-\pageto{HomogeneousAggregate}{HOAGG}
-<<SETCAT.dotfull>>=
-"SetCategory" [color="#00EE00",href="books/bookvol10.2.pamphlet"];
+"OrderedSet"
+ [color="#00EE00",href="books/bookvol10.2.pamphlet#nameddest=ORDSET"];
 @
 
 \chapter{The bootstrap code}
+\section{ABELSG.lsp BOOTSTRAP}
+{\bf ABELSG} needs
+{\bf SETCAT} which needs
+{\bf SINT} which needs 
+{\bf UFD} which needs
+{\bf GCDDOM} which needs
+{\bf COMRING} which needs
+{\bf RING} which needs
+{\bf RNG} which needs
+{\bf ABELGRP} which needs
+{\bf CABMON} which needs
+{\bf ABELMON} which needs
+{\bf ABELSG}. 
+We break this chain with {\bf ABELSG.lsp} which we
+cache here. We need to break this cycle to build
+the algebra. So we keep a cached copy of the translated {\bf ABELSG}
+category which we can write into the {\bf MID} directory. We compile 
+the lisp code and copy the {\bf ABELSG.o} file to the {\bf OUT} directory.
+This is eventually forcibly replaced by a recompiled version.
+
+Note that this code is not included in the generated catdef.spad file.
+
+<<ABELSG.lsp BOOTSTRAP>>=
+
+(|/VERSIONCHECK| 2) 
+
+(SETQ |AbelianSemiGroup;AL| (QUOTE NIL)) 
+
+(DEFUN |AbelianSemiGroup| NIL 
+  (LET (#:G82568) 
+    (COND 
+      (|AbelianSemiGroup;AL|)
+      (T (SETQ |AbelianSemiGroup;AL| (|AbelianSemiGroup;|)))))) 
+
+(DEFUN |AbelianSemiGroup;| NIL 
+  (PROG (#1=#:G82566) 
+    (RETURN 
+      (PROG1 
+        (LETT #1# 
+          (|Join| 
+            (|SetCategory|)
+            (|mkCategory| 
+              (QUOTE |domain|)
+              (QUOTE (
+                ((|+| (|$| |$| |$|)) T)
+                ((|*| (|$| (|PositiveInteger|) |$|)) T)))
+              NIL
+              (QUOTE ((|PositiveInteger|)))
+              NIL))
+            |AbelianSemiGroup|)
+        (SETELT #1# 0 (QUOTE (|AbelianSemiGroup|))))))) 
+
+(MAKEPROP (QUOTE |AbelianSemiGroup|) (QUOTE NILADIC) T) 
+@
+\section{ABELSG-.lsp BOOTSTRAP}
+{\bf ABELSG-} needs
+{\bf SETCAT} which needs
+{\bf SINT} which needs 
+{\bf UFD} which needs
+{\bf GCDDOM} which needs
+{\bf COMRING} which needs
+{\bf RING} which needs
+{\bf RNG} which needs
+{\bf ABELGRP} which needs
+{\bf CABMON} which needs
+{\bf ABELMON} which needs
+{\bf ABELSG-}. 
+We break this chain with {\bf ABELSG-.lsp} which we
+cache here. We need to break this cycle to build
+the algebra. So we keep a cached copy of the translated {\bf ABELSG-}
+category which we can write into the {\bf MID} directory. We compile 
+the lisp code and copy the {\bf ABELSG-.o} file to the {\bf OUT} directory.
+This is eventually forcibly replaced by a recompiled version.
+
+Note that this code is not included in the generated catdef.spad file.
+
+<<ABELSG-.lsp BOOTSTRAP>>=
+
+(|/VERSIONCHECK| 2) 
+
+(DEFUN |ABELSG-;*;Pi2S;1| (|n| |x| |$|) (SPADCALL |n| |x| (QREFELT |$| 9))) 
+
+(DEFUN |AbelianSemiGroup&| (|#1|) 
+  (PROG (|DV$1| |dv$| |$| |pv$|) 
+    (RETURN 
+      (PROGN 
+        (LETT |DV$1| (|devaluate| |#1|) . #1=(|AbelianSemiGroup&|))
+        (LETT |dv$| (LIST (QUOTE |AbelianSemiGroup&|) |DV$1|) . #1#)
+        (LETT |$| (GETREFV 11) . #1#)
+        (QSETREFV |$| 0 |dv$|)
+        (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #1#))
+        (|stuffDomainSlots| |$|)
+        (QSETREFV |$| 6 |#1|)
+        (COND 
+          ((|HasCategory| |#1| (QUOTE (|Ring|))))
+          ((QUOTE T) 
+            (QSETREFV |$| 10 
+              (CONS (|dispatchFunction| |ABELSG-;*;Pi2S;1|) |$|))))
+        |$|)))) 
+
+(MAKEPROP 
+  (QUOTE |AbelianSemiGroup&|)
+  (QUOTE |infovec|)
+  (LIST 
+    (QUOTE 
+      #(NIL NIL NIL NIL NIL NIL
+        (|local| |#1|)
+        (|PositiveInteger|)
+        (|RepeatedDoubling| 6)
+        (0 . |double|)
+        (6 . |*|)))
+    (QUOTE #(|*| 12))
+    (QUOTE NIL)
+    (CONS
+      (|makeByteWordVec2| 1 (QUOTE NIL))
+      (CONS 
+        (QUOTE #()) 
+        (CONS 
+          (QUOTE #())
+          (|makeByteWordVec2| 10 
+            (QUOTE (2 8 6 7 6 9 2 0 0 7 0 10 2 0 0 7 0 10))))))
+    (QUOTE |lookupComplete|))) 
+@
 \section{ALAGG.lsp BOOTSTRAP}
 {\bf ALAGG} depends on a chain of files. We need to break this cycle to build
 the algebra. So we keep a cached copy of the translated {\bf ALAGG}
@@ -10747,6 +11106,132 @@ Note that this code is not included in the generated catdef.spad file.
        0 0 7 0 14 2 0 0 0 7 13 2 0 0 0 0 10 2 0 0 0 7 15))))))
   (QUOTE |lookupComplete|))) 
 @
+\section{SETCAT.lsp BOOTSTRAP}
+{\bf SETCAT} needs 
+{\bf SINT} which needs 
+{\bf UFD} which needs
+{\bf GCDDOM} which needs
+{\bf COMRING} which needs
+{\bf RING} which needs
+{\bf RNG} which needs
+{\bf ABELGRP} which needs
+{\bf CABMON} which needs
+{\bf ABELMON} which needs
+{\bf ABELSG} which needs
+{\bf SETCAT}. We break this chain with {\bf SETCAT.lsp} which we
+cache here. We need to break this cycle to build
+the algebra. So we keep a cached copy of the translated {\bf SETCAT}
+category which we can write into the {\bf MID} directory. We compile 
+the lisp code and copy the {\bf SETCAT.o} file to the {\bf OUT} directory.
+This is eventually forcibly replaced by a recompiled version.
+
+Note that this code is not included in the generated catdef.spad file.
+
+<<SETCAT.lsp BOOTSTRAP>>=
+
+(|/VERSIONCHECK| 2) 
+
+(SETQ |SetCategory;AL| (QUOTE NIL)) 
+
+(DEFUN |SetCategory| NIL 
+  (LET (#:G82359) 
+    (COND 
+      (|SetCategory;AL|) 
+      (T (SETQ |SetCategory;AL| (|SetCategory;|)))))) 
+
+(DEFUN |SetCategory;| NIL 
+  (PROG (#1=#:G82357) 
+    (RETURN 
+      (PROG1 
+        (LETT #1# 
+          (|sublisV| 
+            (PAIR 
+              (QUOTE (#2=#:G82356))
+              (LIST (QUOTE (|OutputForm|))))
+            (|Join| 
+              (|BasicType|)
+              (|CoercibleTo| (QUOTE #2#))
+              (|mkCategory| 
+                (QUOTE |domain|)
+                (QUOTE (
+                  ((|hash| ((|SingleInteger|) |$|)) T)
+                  ((|latex| ((|String|) |$|)) T)))
+                NIL
+                (QUOTE ((|String|) (|SingleInteger|)))
+                NIL)))
+          |SetCategory|)
+        (SETELT #1# 0 (QUOTE (|SetCategory|))))))) 
+
+(MAKEPROP (QUOTE |SetCategory|) (QUOTE NILADIC) T) 
+
+@
+\section{SETCAT-.lsp BOOTSTRAP}
+{\bf SETCAT-} is the implementation of the operations exported
+by {\bf SETCAT}. It comes into existance whenever {\bf SETCAT}
+gets compiled by Axiom. However this will not happen at the
+lisp level so we also cache this information here. See the
+explanation under the {\bf SETCAT.lsp} section for more details.
+
+Note that this code is not included in the generated catdef.spad file.
+
+<<SETCAT-.lsp BOOTSTRAP>>=
+
+(|/VERSIONCHECK| 2) 
+
+(PUT 
+  (QUOTE |SETCAT-;hash;SSi;1|)
+  (QUOTE |SPADreplace|)
+  (QUOTE (XLAM (|s|) 0))) 
+
+(DEFUN |SETCAT-;hash;SSi;1| (|s| |$|) 0) 
+
+(PUT 
+  (QUOTE |SETCAT-;latex;SS;2|)
+  (QUOTE |SPADreplace|)
+  (QUOTE (XLAM (|s|) "\\mbox{\\bf Unimplemented}"))) 
+
+(DEFUN |SETCAT-;latex;SS;2| (|s| |$|) 
+  "\\mbox{\\bf Unimplemented}") 
+
+(DEFUN |SetCategory&| (|#1|) 
+ (PROG (|DV$1| |dv$| |$| |pv$|)
+   (RETURN 
+     (PROGN 
+       (LETT |DV$1| (|devaluate| |#1|) . #1=(|SetCategory&|))
+       (LETT |dv$| (LIST (QUOTE |SetCategory&|) |DV$1|) . #1#)
+       (LETT |$| (GETREFV 11) . #1#)
+       (QSETREFV |$| 0 |dv$|)
+       (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #1#))
+       (|stuffDomainSlots| |$|)
+       (QSETREFV |$| 6 |#1|)
+       |$|)))) 
+
+(MAKEPROP
+  (QUOTE |SetCategory&|)
+  (QUOTE |infovec|)
+  (LIST 
+    (QUOTE
+      #(NIL NIL NIL NIL NIL NIL 
+        (|local| |#1|)
+        (|SingleInteger|)
+        |SETCAT-;hash;SSi;1| 
+        (|String|)
+        |SETCAT-;latex;SS;2|))
+    (QUOTE 
+      #(|latex| 0 |hash| 5))
+    (QUOTE NIL) 
+    (CONS 
+      (|makeByteWordVec2| 1 (QUOTE NIL))
+      (CONS 
+        (QUOTE #())
+        (CONS 
+          (QUOTE #())
+          (|makeByteWordVec2| 
+            10 
+            (QUOTE (1 0 9 0 10 1 0 7 0 8))))))
+    (QUOTE |lookupComplete|))) 
+
+@
 \section{STAGG.lsp BOOTSTRAP}
 {\bf STAGG} depends on a chain of files. We need to break this cycle to build
 the algebra. So we keep a cached copy of the translated {\bf STAGG}
@@ -11895,9 +12380,11 @@ Note that this code is not included in the generated catdef.spad file.
 @
 \chapter{Chunk collections}
 <<algebra>>=
+<<category ABELSG AbelianSemiGroup>>
 <<category AGG Aggregate>>
 <<category ALAGG AssociationListAggregate>>
 <<category A1AGG OneDimensionalArrayAggregate>>
+<<category BASTYPE BasicType>>
 <<category BGAGG BagAggregate>>
 <<category BRAGG BinaryRecursiveAggregate>>
 <<category BTAGG BitAggregate>>
@@ -11926,6 +12413,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category RCAGG RecursiveAggregate>>
 <<category RETRACT RetractableTo>>
 <<category SETAGG SetAggregate>>
+<<category SETCAT SetCategory>>
 <<category SKAGG StackAggregate>>
 <<category SRAGG StringAggregate>>
 <<category STAGG StreamAggregate>>
@@ -11939,11 +12427,14 @@ digraph dotabb {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"CATEGORY" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"CATEGORY"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CATEGORY"];
 
+<<ABELSG.dotabb>>
 <<AGG.dotabb>>
 <<ALAGG.dotabb>>
 <<A1AGG.dotabb>>
+<<BASTYPE.dotabb>>
 <<BGAGG.dotabb>>
 <<BRAGG.dotabb>>
 <<BTAGG.dotabb>>
@@ -11972,6 +12463,7 @@ digraph dotabb {
 <<RCAGG.dotabb>>
 <<RETRACT.dotabb>>
 <<SETAGG.dotabb>>
+<<SETCAT.dotabb>>
 <<SKAGG.dotabb>>
 <<SRAGG.dotabb>>
 <<STAGG.dotabb>>
@@ -11988,11 +12480,14 @@ digraph dotfull {
  bgcolor="#FFFF66";
  node [shape=box, color=white, style=filled];
 
-"Category" [color=lightblue,href="books/bookvol10.2.pamphlet"];
+"Category"
+ [color=lightblue,href="books/bookvol10.2.pamphlet#nameddest=CATEGORY"];
 
+<<ABELSG.dotfull>>
 <<AGG.dotfull>>
 <<ALAGG.dotfull>>
 <<A1AGG.dotfull>>
+<<BASTYPE.dotfull>>
 <<BGAGG.dotfull>>
 <<BRAGG.dotfull>>
 <<BTAGG.dotfull>>
@@ -12021,6 +12516,7 @@ digraph dotfull {
 <<RCAGG.dotfull>>
 <<RETRACT.dotfull>>
 <<SETAGG.dotfull>>
+<<SETCAT.dotfull>>
 <<SKAGG.dotfull>>
 <<SRAGG.dotfull>>
 <<STAGG.dotfull>>
diff --git a/books/ps/v102abeliansemigroup.ps b/books/ps/v102abeliansemigroup.ps
new file mode 100644
index 0000000..c21f701
--- /dev/null
+++ b/books/ps/v102abeliansemigroup.ps
@@ -0,0 +1,677 @@
+%!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 530 368
+%%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 530 368
+%%PageOrientation: Portrait
+gsave
+36 36 494 332 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 330 lineto
+492 330 lineto
+492 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+492 330 lineto
+492 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% AbelianSemiGroup()
+[ /Rect [ 195 288 329 324 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 329 324 moveto
+195 324 lineto
+195 288 lineto
+329 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 329 324 moveto
+195 324 lineto
+195 288 lineto
+329 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+202 301 moveto
+(AbelianSemiGroup\(\))
+[9.84 6.96 6.24 3.84 3.84 6.24 6.96 7.68 6.24 10.8 3.84 10.08 4.8 6.96 6.96 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% SetCategory()
+[ /Rect [ 117 216 211 252 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 211 252 moveto
+117 252 lineto
+117 216 lineto
+211 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 211 252 moveto
+117 252 lineto
+117 216 lineto
+211 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+124 229 moveto
+(SetCategory\(\))
+[7.68 6 3.84 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
+% AbelianSemiGroup()->SetCategory()
+newpath 237 288 moveto
+225 279 210 268 196 258 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 198 255 moveto
+188 252 lineto
+194 261 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 198 255 moveto
+188 252 lineto
+194 261 lineto
+closepath
+stroke
+end grestore
+% RepeatedDoubling(S:AbelianSemiGroup)
+[ /Rect [ 236 216 486 252 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.333 1.000 0.933 nodecolor
+0.333 1.000 0.933 nodecolor
+newpath 486 252 moveto
+236 252 lineto
+236 216 lineto
+486 216 lineto
+closepath
+fill
+0.333 1.000 0.933 nodecolor
+newpath 486 252 moveto
+236 252 lineto
+236 216 lineto
+486 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+244 229 moveto
+(RepeatedDoubling\(S:AbelianSemiGroup\))
+[9.12 6.24 6.96 6.24 6.24 3.84 6.24 6.96 10.08 6.96 6.96 6.96 3.84 3.84 6.96 6.96 4.56 7.68 3.84 9.84 6.96 6.24 3.84 3.84 6.24 6.96 7.68 6.24 10.8 3.84 10.08 4.8 6.96 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% AbelianSemiGroup()->RepeatedDoubling(S:AbelianSemiGroup)
+newpath 287 288 moveto
+299 279 314 268 328 258 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 330 261 moveto
+336 252 lineto
+326 255 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 330 261 moveto
+336 252 lineto
+326 255 lineto
+closepath
+stroke
+end grestore
+% BasicType()
+[ /Rect [ 0 72 84 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 85 moveto
+(BasicType\(\))
+[9.36 6.24 5.52 3.84 6.24 7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% SetCategory()->BasicType()
+newpath 121 216 moveto
+104 207 86 195 73 180 curveto
+59 162 51 137 47 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 50 117 moveto
+45 108 lineto
+44 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 50 117 moveto
+45 108 lineto
+44 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+[ /Rect [ 82 144 246 180 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 246 180 moveto
+82 180 lineto
+82 144 lineto
+246 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 246 180 moveto
+82 180 lineto
+82 144 lineto
+246 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+90 157 moveto
+(CoercibleTo\(OutputForm\))
+[9.36 6.96 6.24 4.8 6.24 3.84 6.96 3.84 6.24 7.44 6.96 4.56 10.08 6.96 3.84 6.96 6.96 3.84 7.44 6.96 5.04 10.8 4.56]
+xshow
+end grestore
+end grestore
+% SetCategory()->CoercibleTo(OutputForm)
+newpath 164 216 moveto
+164 208 164 199 164 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 168 190 moveto
+164 180 lineto
+161 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 168 190 moveto
+164 180 lineto
+161 190 lineto
+closepath
+stroke
+end grestore
+% RepeatedDoubling(S:SetCategory)
+[ /Rect [ 264 144 474 180 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.333 1.000 0.933 nodecolor
+0.333 1.000 0.933 nodecolor
+newpath 474 180 moveto
+264 180 lineto
+264 144 lineto
+474 144 lineto
+closepath
+fill
+0.333 1.000 0.933 nodecolor
+newpath 474 180 moveto
+264 180 lineto
+264 144 lineto
+474 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+271 157 moveto
+(RepeatedDoubling\(S:SetCategory\))
+[9.12 6.24 6.96 6.24 6.24 3.84 6.24 6.96 10.08 6.96 6.96 6.96 3.84 3.84 6.96 6.96 4.56 7.68 3.84 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56]
+xshow
+end grestore
+end grestore
+% RepeatedDoubling(S:AbelianSemiGroup)->RepeatedDoubling(S:SetCategory)
+newpath 363 216 moveto
+364 208 365 199 366 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 369 190 moveto
+367 180 lineto
+363 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 369 190 moveto
+367 180 lineto
+363 190 lineto
+closepath
+stroke
+end grestore
+% Category
+[ /Rect [ 71 0 139 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 139 36 moveto
+71 36 lineto
+71 0 lineto
+139 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 139 36 moveto
+71 36 lineto
+71 0 lineto
+139 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+79 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% BasicType()->Category
+newpath 58 72 moveto
+66 63 75 53 82 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+89 36 lineto
+80 41 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+89 36 lineto
+80 41 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)
+[ /Rect [ 102 72 234 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 234 108 moveto
+102 108 lineto
+102 72 lineto
+234 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 234 108 moveto
+102 108 lineto
+102 72 lineto
+234 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+110 85 moveto
+(CoercibleTo\(a:Type\))
+[9.36 6.96 6.24 4.8 6.24 3.84 6.96 3.84 6.24 7.44 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56]
+xshow
+end grestore
+end grestore
+% CoercibleTo(OutputForm)->CoercibleTo(a:Type)
+newpath 165 144 moveto
+166 136 166 127 166 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 169 118 moveto
+167 108 lineto
+163 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 169 118 moveto
+167 108 lineto
+163 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 152 72 moveto
+144 63 135 53 128 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 130 41 moveto
+121 36 lineto
+125 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 130 41 moveto
+121 36 lineto
+125 46 lineto
+closepath
+stroke
+end grestore
+% Package
+[ /Rect [ 338 72 400 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.333 1.000 0.933 nodecolor
+0.333 1.000 0.933 nodecolor
+newpath 400 108 moveto
+338 108 lineto
+338 72 lineto
+400 72 lineto
+closepath
+fill
+0.333 1.000 0.933 nodecolor
+newpath 400 108 moveto
+338 108 lineto
+338 72 lineto
+400 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+345 85 moveto
+(Package)
+[7.44 6.24 6 6.96 6.24 6.72 6.24]
+xshow
+end grestore
+end grestore
+% RepeatedDoubling(S:SetCategory)->Package
+newpath 369 144 moveto
+369 136 369 127 369 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 373 118 moveto
+369 108 lineto
+366 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 373 118 moveto
+369 108 lineto
+366 118 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102basictype.ps b/books/ps/v102basictype.ps
new file mode 100644
index 0000000..87d2ee1
--- /dev/null
+++ b/books/ps/v102basictype.ps
@@ -0,0 +1,299 @@
+%!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 128 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 128 152
+%%PageOrientation: Portrait
+gsave
+36 36 92 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
+90 114 lineto
+90 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 114 lineto
+90 114 lineto
+90 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% BasicType()
+[ /Rect [ 0 72 84 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 85 moveto
+(BasicType\(\))
+[9.36 6.24 5.52 3.84 6.24 7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Category
+[ /Rect [ 8 0 76 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 76 36 moveto
+8 36 lineto
+8 0 lineto
+76 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 76 36 moveto
+8 36 lineto
+8 0 lineto
+76 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+16 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% BasicType()->Category
+newpath 42 72 moveto
+42 64 42 55 42 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 46 46 moveto
+42 36 lineto
+39 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 46 46 moveto
+42 36 lineto
+39 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102setcategory.ps b/books/ps/v102setcategory.ps
new file mode 100644
index 0000000..ba73fd5
--- /dev/null
+++ b/books/ps/v102setcategory.ps
@@ -0,0 +1,473 @@
+%!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 290 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 290 296
+%%PageOrientation: Portrait
+gsave
+36 36 254 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
+252 258 lineto
+252 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 258 lineto
+252 258 lineto
+252 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% SetCategory()
+[ /Rect [ 58 216 152 252 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 152 252 moveto
+58 252 lineto
+58 216 lineto
+152 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 152 252 moveto
+58 252 lineto
+58 216 lineto
+152 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+65 229 moveto
+(SetCategory\(\))
+[7.68 6 3.84 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
+% BasicType()
+[ /Rect [ 0 72 84 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 84 108 moveto
+0 108 lineto
+0 72 lineto
+84 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 85 moveto
+(BasicType\(\))
+[9.36 6.24 5.52 3.84 6.24 7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% SetCategory()->BasicType()
+newpath 93 216 moveto
+86 206 78 192 73 180 curveto
+64 160 55 136 50 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 53 117 moveto
+47 108 lineto
+47 119 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 53 117 moveto
+47 108 lineto
+47 119 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+[ /Rect [ 82 144 246 180 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 246 180 moveto
+82 180 lineto
+82 144 lineto
+246 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 246 180 moveto
+82 180 lineto
+82 144 lineto
+246 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+90 157 moveto
+(CoercibleTo\(OutputForm\))
+[9.36 6.96 6.24 4.8 6.24 3.84 6.96 3.84 6.24 7.44 6.96 4.56 10.08 6.96 3.84 6.96 6.96 3.84 7.44 6.96 5.04 10.8 4.56]
+xshow
+end grestore
+end grestore
+% SetCategory()->CoercibleTo(OutputForm)
+newpath 120 216 moveto
+127 207 135 197 143 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 146 190 moveto
+149 180 lineto
+140 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 146 190 moveto
+149 180 lineto
+140 186 lineto
+closepath
+stroke
+end grestore
+% Category
+[ /Rect [ 71 0 139 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 139 36 moveto
+71 36 lineto
+71 0 lineto
+139 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 139 36 moveto
+71 36 lineto
+71 0 lineto
+139 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+79 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% BasicType()->Category
+newpath 58 72 moveto
+66 63 75 53 82 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+89 36 lineto
+80 41 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+89 36 lineto
+80 41 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)
+[ /Rect [ 102 72 234 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (books/bookvol10.2.pamphlet) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 234 108 moveto
+102 108 lineto
+102 72 lineto
+234 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 234 108 moveto
+102 108 lineto
+102 72 lineto
+234 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+110 85 moveto
+(CoercibleTo\(a:Type\))
+[9.36 6.96 6.24 4.8 6.24 3.84 6.96 3.84 6.24 7.44 6.96 4.56 6.24 3.84 7.2 6.96 6.96 6.24 4.56]
+xshow
+end grestore
+end grestore
+% CoercibleTo(OutputForm)->CoercibleTo(a:Type)
+newpath 165 144 moveto
+166 136 166 127 166 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 169 118 moveto
+167 108 lineto
+163 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 169 118 moveto
+167 108 lineto
+163 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 152 72 moveto
+144 63 135 53 128 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 130 41 moveto
+121 36 lineto
+125 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 130 41 moveto
+121 36 lineto
+125 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 c184379..74e0af1 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20080917 tpd src/algebra/catdef.spad remove BASTYPE, SETCAT, ABELSG
+20080917 tpd books/ps/v102abeliansemigroup.ps ABELSG graph
+20080917 tpd books/ps/v102setcategory.ps SETCAT graph
+20080917 tpd books/ps/v102basictype.ps BASTYPE graph
+20080917 tpd books/bookvol10.2 add pdf destinations
+20080917 tpd books/bookvol10.2 add BASTYPE, SETCAT, ABELSG	
 20080917 wsp src/algebra/mkfunc.spad add parse to InputForm
 20080917 tpd books/bookvol10.2 remove duplicate function def in FLAGG	
 20080916 tpd books/ps/v102streamaggregate.ps
diff --git a/src/algebra/catdef.spad.pamphlet b/src/algebra/catdef.spad.pamphlet
index b16f4b2..bd42900 100644
--- a/src/algebra/catdef.spad.pamphlet
+++ b/src/algebra/catdef.spad.pamphlet
@@ -374,168 +374,11 @@ Note that this code is not included in the generated catdef.spad file.
    (QUOTE |lookupComplete|))) 
 
 @
-\section{category ABELSG AbelianSemiGroup}
-<<dot>>=
-"ABELSG" -> "SETCAT"
-"AbelianSemiGroup()" -> "SetCategory()"
-@
-<<category ABELSG AbelianSemiGroup>>=
-)abbrev category ABELSG AbelianSemiGroup
-++ Author:
-++ Date Created:
-++ Date Last Updated:
-++ Basic Functions:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ the class of all additive (commutative) semigroups, i.e.
-++ a set with a commutative and associative operation \spadop{+}.
-++
-++ Axioms:
-++   \spad{associative("+":(%,%)->%)}\tab{30}\spad{ (x+y)+z = x+(y+z) }
-++   \spad{commutative("+":(%,%)->%)}\tab{30}\spad{ x+y = y+x }
-AbelianSemiGroup(): Category == SetCategory with
-    --operations
-      "+": (%,%) -> %                  ++ x+y computes the sum of x and y.
-      "*": (PositiveInteger,%) -> %
-        ++ n*x computes the left-multiplication of x by the positive integer n.
-        ++ This is equivalent to adding x to itself n times.
-    add
-      import RepeatedDoubling(%)
-      if not (% has Ring) then
-        n:PositiveInteger * x:% == double(n,x)
-
-@
-\section{ABELSG.lsp BOOTSTRAP}
-{\bf ABELSG} needs
-{\bf SETCAT} which needs
-{\bf SINT} which needs 
-{\bf UFD} which needs
-{\bf GCDDOM} which needs
-{\bf COMRING} which needs
-{\bf RING} which needs
-{\bf RNG} which needs
-{\bf ABELGRP} which needs
-{\bf CABMON} which needs
-{\bf ABELMON} which needs
-{\bf ABELSG}. 
-We break this chain with {\bf ABELSG.lsp} which we
-cache here. We need to break this cycle to build
-the algebra. So we keep a cached copy of the translated {\bf ABELSG}
-category which we can write into the {\bf MID} directory. We compile 
-the lisp code and copy the {\bf ABELSG.o} file to the {\bf OUT} directory.
-This is eventually forcibly replaced by a recompiled version.
-
-Note that this code is not included in the generated catdef.spad file.
-
-<<ABELSG.lsp BOOTSTRAP>>=
-
-(|/VERSIONCHECK| 2) 
-
-(SETQ |AbelianSemiGroup;AL| (QUOTE NIL)) 
-
-(DEFUN |AbelianSemiGroup| NIL 
-  (LET (#:G82568) 
-    (COND 
-      (|AbelianSemiGroup;AL|)
-      (T (SETQ |AbelianSemiGroup;AL| (|AbelianSemiGroup;|)))))) 
-
-(DEFUN |AbelianSemiGroup;| NIL 
-  (PROG (#1=#:G82566) 
-    (RETURN 
-      (PROG1 
-        (LETT #1# 
-          (|Join| 
-            (|SetCategory|)
-            (|mkCategory| 
-              (QUOTE |domain|)
-              (QUOTE (
-                ((|+| (|$| |$| |$|)) T)
-                ((|*| (|$| (|PositiveInteger|) |$|)) T)))
-              NIL
-              (QUOTE ((|PositiveInteger|)))
-              NIL))
-            |AbelianSemiGroup|)
-        (SETELT #1# 0 (QUOTE (|AbelianSemiGroup|))))))) 
-
-(MAKEPROP (QUOTE |AbelianSemiGroup|) (QUOTE NILADIC) T) 
-@
-\section{ABELSG-.lsp BOOTSTRAP}
-{\bf ABELSG-} needs
-{\bf SETCAT} which needs
-{\bf SINT} which needs 
-{\bf UFD} which needs
-{\bf GCDDOM} which needs
-{\bf COMRING} which needs
-{\bf RING} which needs
-{\bf RNG} which needs
-{\bf ABELGRP} which needs
-{\bf CABMON} which needs
-{\bf ABELMON} which needs
-{\bf ABELSG-}. 
-We break this chain with {\bf ABELSG-.lsp} which we
-cache here. We need to break this cycle to build
-the algebra. So we keep a cached copy of the translated {\bf ABELSG-}
-category which we can write into the {\bf MID} directory. We compile 
-the lisp code and copy the {\bf ABELSG-.o} file to the {\bf OUT} directory.
-This is eventually forcibly replaced by a recompiled version.
-
-Note that this code is not included in the generated catdef.spad file.
-
-<<ABELSG-.lsp BOOTSTRAP>>=
-
-(|/VERSIONCHECK| 2) 
-
-(DEFUN |ABELSG-;*;Pi2S;1| (|n| |x| |$|) (SPADCALL |n| |x| (QREFELT |$| 9))) 
-
-(DEFUN |AbelianSemiGroup&| (|#1|) 
-  (PROG (|DV$1| |dv$| |$| |pv$|) 
-    (RETURN 
-      (PROGN 
-        (LETT |DV$1| (|devaluate| |#1|) . #1=(|AbelianSemiGroup&|))
-        (LETT |dv$| (LIST (QUOTE |AbelianSemiGroup&|) |DV$1|) . #1#)
-        (LETT |$| (GETREFV 11) . #1#)
-        (QSETREFV |$| 0 |dv$|)
-        (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #1#))
-        (|stuffDomainSlots| |$|)
-        (QSETREFV |$| 6 |#1|)
-        (COND 
-          ((|HasCategory| |#1| (QUOTE (|Ring|))))
-          ((QUOTE T) 
-            (QSETREFV |$| 10 
-              (CONS (|dispatchFunction| |ABELSG-;*;Pi2S;1|) |$|))))
-        |$|)))) 
-
-(MAKEPROP 
-  (QUOTE |AbelianSemiGroup&|)
-  (QUOTE |infovec|)
-  (LIST 
-    (QUOTE 
-      #(NIL NIL NIL NIL NIL NIL
-        (|local| |#1|)
-        (|PositiveInteger|)
-        (|RepeatedDoubling| 6)
-        (0 . |double|)
-        (6 . |*|)))
-    (QUOTE #(|*| 12))
-    (QUOTE NIL)
-    (CONS
-      (|makeByteWordVec2| 1 (QUOTE NIL))
-      (CONS 
-        (QUOTE #()) 
-        (CONS 
-          (QUOTE #())
-          (|makeByteWordVec2| 10 
-            (QUOTE (2 8 6 7 6 9 2 0 0 7 0 10 2 0 0 7 0 10))))))
-    (QUOTE |lookupComplete|))) 
-@
 \section{category ALGEBRA Algebra}
 <<dot>>=
 "ALGEBRA" -> "RING"
 "Algebra(a:CommutativeRing)" -> "Ring()"
+"Algebra(a:Field)" -> "Algebra(a:CommutativeRing)"
 "ALGEBRA" -> "MODULE"
 "Algebra(a:CommutativeRing)" -> "Module(a:CommutativeRing)"
 "Algebra(Fraction(Integer))" -> "Algebra(a:CommutativeRing)"
@@ -569,33 +412,6 @@ Algebra(R:CommutativeRing): Category ==
   coerce(x:R):% == x * 1$%
 
 @
-\section{category BASTYPE BasicType}
-<<dot>>=
-"BASTYPE" -> "CATEGORY"
-"BasicType()" -> "Category"
-@
-<<category BASTYPE BasicType>>=
-)abbrev category BASTYPE BasicType
---% BasicType
-++ Author:
-++ Date Created:
-++ Date Last Updated:
-++ Basic Functions:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ \spadtype{BasicType} is the basic category for describing a collection
-++ of elements with \spadop{=} (equality).
-BasicType(): Category == with
-      "=": (%,%) -> Boolean    ++ x=y tests if x and y are equal.
-      "~=": (%,%) -> Boolean   ++ x~=y tests if x and y are not equal.
-   add
-      _~_=(x:%,y:%) : Boolean == not(x=y)
-
-@
 \section{category BMODULE BiModule}
 <<dot>>=
 "BMODULE" -> "LMODULE"
@@ -2987,6 +2803,8 @@ LeftModule(R:Rng):Category == AbelianGroup with
 "LINEXP" -> "RING"
 "LinearlyExplicitRingOver(a:Ring)" -> "Ring()"
 "LinearlyExplicitRingOver(Integer)" -> "LinearlyExplicitRingOver(a:Ring)"
+"LinearlyExplicitRingOver(Fraction(Integer))" -> 
+    "LinearlyExplicitRingOver(a:Ring)"
 @
 <<category LINEXP LinearlyExplicitRingOver>>=
 )abbrev category LINEXP LinearlyExplicitRingOver
@@ -4184,167 +4002,6 @@ SemiGroup(): Category == SetCategory with
       _^(x:%, n:PositiveInteger):% == x ** n
 
 @
-\section{category SETCAT SetCategory}
-<<dot>>=
-"SETCAT" -> "BASTYPE"
-"SetCategory()" -> "BasicType()"
-"SETCAT" -> "KOERCE"
-"SetCategory()" -> "CoercibleTo(OutputForm)"
-@
-<<category SETCAT SetCategory>>=
-)abbrev category SETCAT SetCategory
-++ Author:
-++ Date Created:
-++ Date Last Updated:
-++   09/09/92   RSS   added latex and hash
-++ Basic Functions:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ \spadtype{SetCategory} is the basic category for describing a collection
-++ of elements with \spadop{=} (equality) and \spadfun{coerce} to output form.
-++
-++ Conditional Attributes:
-++    canonical\tab{15}data structure equality is the same as \spadop{=}
-SetCategory(): Category == Join(BasicType,CoercibleTo OutputForm) with
-    --operations
-      hash: % -> SingleInteger  ++ hash(s) calculates a hash code for s.
-      latex: % -> String       ++ latex(s) returns a LaTeX-printable output
-                               ++ representation of s.
-  add
-      hash(s : %):  SingleInteger == 0$SingleInteger
-      latex(s : %): String       == "\mbox{\bf Unimplemented}"
-
-@
-\section{SETCAT.lsp BOOTSTRAP}
-{\bf SETCAT} needs 
-{\bf SINT} which needs 
-{\bf UFD} which needs
-{\bf GCDDOM} which needs
-{\bf COMRING} which needs
-{\bf RING} which needs
-{\bf RNG} which needs
-{\bf ABELGRP} which needs
-{\bf CABMON} which needs
-{\bf ABELMON} which needs
-{\bf ABELSG} which needs
-{\bf SETCAT}. We break this chain with {\bf SETCAT.lsp} which we
-cache here. We need to break this cycle to build
-the algebra. So we keep a cached copy of the translated {\bf SETCAT}
-category which we can write into the {\bf MID} directory. We compile 
-the lisp code and copy the {\bf SETCAT.o} file to the {\bf OUT} directory.
-This is eventually forcibly replaced by a recompiled version.
-
-Note that this code is not included in the generated catdef.spad file.
-
-<<SETCAT.lsp BOOTSTRAP>>=
-
-(|/VERSIONCHECK| 2) 
-
-(SETQ |SetCategory;AL| (QUOTE NIL)) 
-
-(DEFUN |SetCategory| NIL 
-  (LET (#:G82359) 
-    (COND 
-      (|SetCategory;AL|) 
-      (T (SETQ |SetCategory;AL| (|SetCategory;|)))))) 
-
-(DEFUN |SetCategory;| NIL 
-  (PROG (#1=#:G82357) 
-    (RETURN 
-      (PROG1 
-        (LETT #1# 
-          (|sublisV| 
-            (PAIR 
-              (QUOTE (#2=#:G82356))
-              (LIST (QUOTE (|OutputForm|))))
-            (|Join| 
-              (|BasicType|)
-              (|CoercibleTo| (QUOTE #2#))
-              (|mkCategory| 
-                (QUOTE |domain|)
-                (QUOTE (
-                  ((|hash| ((|SingleInteger|) |$|)) T)
-                  ((|latex| ((|String|) |$|)) T)))
-                NIL
-                (QUOTE ((|String|) (|SingleInteger|)))
-                NIL)))
-          |SetCategory|)
-        (SETELT #1# 0 (QUOTE (|SetCategory|))))))) 
-
-(MAKEPROP (QUOTE |SetCategory|) (QUOTE NILADIC) T) 
-
-@
-\section{SETCAT-.lsp BOOTSTRAP}
-{\bf SETCAT-} is the implementation of the operations exported
-by {\bf SETCAT}. It comes into existance whenever {\bf SETCAT}
-gets compiled by Axiom. However this will not happen at the
-lisp level so we also cache this information here. See the
-explanation under the {\bf SETCAT.lsp} section for more details.
-
-Note that this code is not included in the generated catdef.spad file.
-
-<<SETCAT-.lsp BOOTSTRAP>>=
-
-(|/VERSIONCHECK| 2) 
-
-(PUT 
-  (QUOTE |SETCAT-;hash;SSi;1|)
-  (QUOTE |SPADreplace|)
-  (QUOTE (XLAM (|s|) 0))) 
-
-(DEFUN |SETCAT-;hash;SSi;1| (|s| |$|) 0) 
-
-(PUT 
-  (QUOTE |SETCAT-;latex;SS;2|)
-  (QUOTE |SPADreplace|)
-  (QUOTE (XLAM (|s|) "\\mbox{\\bf Unimplemented}"))) 
-
-(DEFUN |SETCAT-;latex;SS;2| (|s| |$|) 
-  "\\mbox{\\bf Unimplemented}") 
-
-(DEFUN |SetCategory&| (|#1|) 
- (PROG (|DV$1| |dv$| |$| |pv$|)
-   (RETURN 
-     (PROGN 
-       (LETT |DV$1| (|devaluate| |#1|) . #1=(|SetCategory&|))
-       (LETT |dv$| (LIST (QUOTE |SetCategory&|) |DV$1|) . #1#)
-       (LETT |$| (GETREFV 11) . #1#)
-       (QSETREFV |$| 0 |dv$|)
-       (QSETREFV |$| 3 (LETT |pv$| (|buildPredVector| 0 0 NIL) . #1#))
-       (|stuffDomainSlots| |$|)
-       (QSETREFV |$| 6 |#1|)
-       |$|)))) 
-
-(MAKEPROP
-  (QUOTE |SetCategory&|)
-  (QUOTE |infovec|)
-  (LIST 
-    (QUOTE
-      #(NIL NIL NIL NIL NIL NIL 
-        (|local| |#1|)
-        (|SingleInteger|)
-        |SETCAT-;hash;SSi;1| 
-        (|String|)
-        |SETCAT-;latex;SS;2|))
-    (QUOTE 
-      #(|latex| 0 |hash| 5))
-    (QUOTE NIL) 
-    (CONS 
-      (|makeByteWordVec2| 1 (QUOTE NIL))
-      (CONS 
-        (QUOTE #())
-        (CONS 
-          (QUOTE #())
-          (|makeByteWordVec2| 
-            10 
-            (QUOTE (1 0 9 0 10 1 0 7 0 8))))))
-    (QUOTE |lookupComplete|))) 
-
-@
 \section{category STEP StepThrough}
 <<dot>>=
 "STEP" -> "SETCAT"
@@ -4664,13 +4321,10 @@ VectorSpace(S:Field): Category ==  Module(S) with
 <<*>>=
 <<license>>
 
-<<category BASTYPE BasicType>>
-<<category SETCAT SetCategory>>
 <<category STEP StepThrough>>
 <<category SGROUP SemiGroup>>
 <<category MONOID Monoid>>
 <<category GROUP Group>>
-<<category ABELSG AbelianSemiGroup>>
 <<category ABELMON AbelianMonoid>>
 <<category CABMON CancellationAbelianMonoid>>
 <<category ABELGRP AbelianGroup>>
