axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] 20080918.01.tpd.patch (bookvol10.2 add BASTYPE, SETCAT


From: daly
Subject: [Axiom-developer] 20080918.01.tpd.patch (bookvol10.2 add BASTYPE, SETCAT, ABELSG)
Date: Thu, 18 Sep 2008 12:19:57 -0500

This patch moves BASTYPE, SETCAT, and ABELSG from catdef.spad to bookvol10.2

In addition all of the categories can now be reached from the graph
of categories, indexing directly into the PDF for the related page.
=======================================================================
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>>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]