diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 635a0c6..5c69035 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -731,6 +731,8 @@ digraph pic {
 {\bf See:}\\
 \pageto{DirectProductCategory}{DIRPCAT}
 \pageto{FortranProgramCategory}{FORTCAT}
+\pageto{PlottablePlaneCurveCategory}{PPCURVE}
+\pageto{PlottableSpaceCurveCategory}{PSCURVE}
 \pageto{PolynomialSetCategory}{PSETCAT}
 \pageto{SetCategory}{SETCAT}
 \pagefrom{Category}{CATEGORY}
@@ -2214,84 +2216,6 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\pagehead{RealConstant}{REAL}
-\pagepic{ps/v102realconstant.ps}{REAL}{1.00}
-
-{\bf See:}\\
-\pageto{IntegerNumberSystem}{INS}
-\pageto{QuotientFieldCategory}{QFCAT}
-\pageto{RealNumberSystem}{RNS}
-\pagefrom{ConvertibleTo}{KONVERT}
-
-{\bf Exports:}\\
-\begin{tabular}{l}
-\cross{REAL}{convert}
-\end{tabular}
-
-These exports come from \refto{ConvertibleTo}(DoubleFloat):
-\begin{verbatim}
- convert : % -> DoubleFloat
-\end{verbatim}
-
-These exports come from \refto{ConvertibleTo}(Float):
-\begin{verbatim}
- convert : % -> Float                 
-\end{verbatim}
-
-<<category REAL RealConstant>>=
-)abbrev category REAL RealConstant
-++ Author:
-++ Date Created:
-++ Date Last Updated:
-++ Basic Functions:
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ The category of real numeric domains, i.e. convertible to floats.
-RealConstant(): Category ==
-  Join(ConvertibleTo DoubleFloat, ConvertibleTo Float)
-
-@
-<<REAL.dotabb>>=
-"REAL"
- [color=lightblue,href="bookvol10.2.pdf#nameddest=REAL"];
-"REAL" -> "KONVERT"
-
-@
-<<REAL.dotfull>>=
-"RealConstant()"
- [color=lightblue,href="bookvol10.2.pdf#nameddest=REAL"];
-"RealConstant()" -> "ConvertibleTo(DoubleFloat)"
-"RealConstant()" -> "ConvertibleTo(Float)"
-
-@
-<<REAL.dotpic>>=
-digraph pic {
- fontsize=10;
- bgcolor="#FFFF66";
- node [shape=box, color=white, style=filled];
-
-"RealConstant()" [color=lightblue];
-"RealConstant()" -> "ConvertibleTo(DoubleFloat)"
-"RealConstant()" -> "ConvertibleTo(Float)"
-
-"ConvertibleTo(DoubleFloat)" [color=seagreen];
-"ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)"
-
-"ConvertibleTo(Float)" [color=seagreen];
-"ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)"
-
-"ConvertibleTo(a:Type)" [color=lightblue];
-"ConvertibleTo(a:Type)" -> "Category"
-
-"Category" [color=lightblue];
-}
-
-@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{EltableAggregate}{ELTAGG}
 \pagepic{ps/v102eltableaggregate.ps}{ELTAGG}{0.75}
 
@@ -2920,6 +2844,277 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{PlottablePlaneCurveCategory}{PPCURVE}
+\pagepic{ps/v102plottableplanecurvecategory.ps}{PPCURVE}{1.00}
+
+{\bf See:}\\
+\pagefrom{CoercibleTo}{KOERCE}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{PPCURVE}{coerce} &
+\cross{PPCURVE}{listBranches} &
+\cross{PPCURVE}{xRange} &
+\cross{PPCURVE}{yRange} 
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ listBranches : % -> List List Point DoubleFloat
+ xRange : % -> Segment DoubleFloat
+ yRange : % -> Segment DoubleFloat    
+\end{verbatim}
+
+These exports come from \refto{CoercibleTo}(OutputForm):
+\begin{verbatim}
+ coerce : % -> OutputForm             
+\end{verbatim}
+
+<<category PPCURVE PlottablePlaneCurveCategory>>=
+)abbrev category PPCURVE PlottablePlaneCurveCategory
+++ Author: Clifton J. Williamson
+++ Date Created: 11 January 1990
+++ Date Last Updated: 15 June 1990
+++ Basic Operations: listBranches, xRange, yRange
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords: plot, graphics
+++ References:
+++ Description: PlottablePlaneCurveCategory is the category of curves in the 
+++ plane which may be plotted via the graphics facilities.  Functions are 
+++ provided for obtaining lists of lists of points, representing the
+++ branches of the curve, and for determining the ranges of the
+++ x-coordinates and y-coordinates of the points on the curve.
+ 
+PlottablePlaneCurveCategory(): Category == Definition where
+  L     ==> List
+  SEG   ==> Segment
+  SF    ==> DoubleFloat
+  POINT ==> Point DoubleFloat
+ 
+  Definition ==> CoercibleTo OutputForm with
+ 
+    listBranches: % -> L L POINT
+      ++ listBranches(c) returns a list of lists of points, representing the
+      ++ branches of the curve c.
+    xRange: % -> SEG SF
+      ++ xRange(c) returns the range of the x-coordinates of the points
+      ++ on the curve c.
+    yRange: % -> SEG SF
+      ++ yRange(c) returns the range of the y-coordinates of the points
+      ++ on the curve c.
+
+@
+<<PPCURVE.dotabb>>=
+"PPCURVE"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PPCURVE"];
+"PPCURVE" -> "KOERCE"
+
+@
+<<PPCURVE.dotfull>>=
+"PlottablePlaneCurveCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PPCURVE"];
+"PlottablePlaneCurveCategory()" -> "CoercibleTo(OutputForm)"
+
+@
+<<PPCURVE.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"PlottablePlaneCurveCategory()" [color=lightblue];
+"PlottablePlaneCurveCategory()" -> "CoercibleTo(OutputForm)"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{PlottableSpaceCurveCategory}{PSCURVE}
+\pagepic{ps/v102plottablespacecurvecategory.ps}{PSCURVE}{1.00}
+
+{\bf See:}\\
+\pagefrom{CoercibleTo}{KOERCE}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{PSCURVE}{coerce} &
+\cross{PSCURVE}{listBranches} &
+\cross{PSCURVE}{xRange} &
+\cross{PSCURVE}{yRange} &
+\cross{PSCURVE}{zRange} 
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ listBranches : % -> List List Point DoubleFloat
+ xRange : % -> Segment DoubleFloat
+ yRange : % -> Segment DoubleFloat    
+ zRange : % -> Segment DoubleFloat
+\end{verbatim}
+
+These exports come from \refto{CoercibleTo}(OutputForm):
+\begin{verbatim}
+ coerce : % -> OutputForm             
+\end{verbatim}
+
+<<category PSCURVE PlottableSpaceCurveCategory>>=
+)abbrev category PSCURVE PlottableSpaceCurveCategory
+++ Author: Clifton J. Williamson
+++ Date Created: 11 January 1990
+++ Date Last Updated: 15 June 1990
+++ Basic Operations: listBranches, xRange, yRange, zRange
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords: plot, graphics
+++ References:
+++ Description: PlottableSpaceCurveCategory is the category of curves in 
+++ 3-space which may be plotted via the graphics facilities.  Functions are 
+++ provided for obtaining lists of lists of points, representing the
+++ branches of the curve, and for determining the ranges of the
+++ x-, y-, and z-coordinates of the points on the curve.
+ 
+PlottableSpaceCurveCategory(): Category == Definition where
+  L     ==> List
+  SEG   ==> Segment
+  SF    ==> DoubleFloat
+  POINT ==> Point DoubleFloat
+ 
+  Definition ==> CoercibleTo OutputForm with
+ 
+    listBranches: % -> L L POINT
+      ++ listBranches(c) returns a list of lists of points, representing the
+      ++ branches of the curve c.
+    xRange: % -> SEG SF
+      ++ xRange(c) returns the range of the x-coordinates of the points
+      ++ on the curve c.
+    yRange: % -> SEG SF
+      ++ yRange(c) returns the range of the y-coordinates of the points
+      ++ on the curve c.
+    zRange: % -> SEG SF
+      ++ zRange(c) returns the range of the z-coordinates of the points
+      ++ on the curve c.
+
+@
+<<PSCURVE.dotabb>>=
+"PSCURVE"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PSCURVE"];
+"PSCURVE" -> "KOERCE"
+
+@
+<<PSCURVE.dotfull>>=
+"PlottableSpaceCurveCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=PSCURVE"];
+"PlottableSpaceCurveCategory()" -> "CoercibleTo(OutputForm)"
+
+@
+<<PSCURVE.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"PlottableSpaceCurveCategory()" [color=lightblue];
+"PlottableSpaceCurveCategory()" -> "CoercibleTo(OutputForm)"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{RealConstant}{REAL}
+\pagepic{ps/v102realconstant.ps}{REAL}{1.00}
+
+{\bf See:}\\
+\pageto{IntegerNumberSystem}{INS}
+\pageto{QuotientFieldCategory}{QFCAT}
+\pageto{RealNumberSystem}{RNS}
+\pagefrom{ConvertibleTo}{KONVERT}
+
+{\bf Exports:}\\
+\begin{tabular}{l}
+\cross{REAL}{convert}
+\end{tabular}
+
+These exports come from \refto{ConvertibleTo}(DoubleFloat):
+\begin{verbatim}
+ convert : % -> DoubleFloat
+\end{verbatim}
+
+These exports come from \refto{ConvertibleTo}(Float):
+\begin{verbatim}
+ convert : % -> Float                 
+\end{verbatim}
+
+<<category REAL RealConstant>>=
+)abbrev category REAL RealConstant
+++ Author:
+++ Date Created:
+++ Date Last Updated:
+++ Basic Functions:
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ The category of real numeric domains, i.e. convertible to floats.
+RealConstant(): Category ==
+  Join(ConvertibleTo DoubleFloat, ConvertibleTo Float)
+
+@
+<<REAL.dotabb>>=
+"REAL"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=REAL"];
+"REAL" -> "KONVERT"
+
+@
+<<REAL.dotfull>>=
+"RealConstant()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=REAL"];
+"RealConstant()" -> "ConvertibleTo(DoubleFloat)"
+"RealConstant()" -> "ConvertibleTo(Float)"
+
+@
+<<REAL.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"RealConstant()" [color=lightblue];
+"RealConstant()" -> "ConvertibleTo(DoubleFloat)"
+"RealConstant()" -> "ConvertibleTo(Float)"
+
+"ConvertibleTo(DoubleFloat)" [color=seagreen];
+"ConvertibleTo(DoubleFloat)" -> "ConvertibleTo(a:Type)"
+
+"ConvertibleTo(Float)" [color=seagreen];
+"ConvertibleTo(Float)" -> "ConvertibleTo(a:Type)"
+
+"ConvertibleTo(a:Type)" [color=lightblue];
+"ConvertibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{SegmentCategory}{SEGCAT}
 \pagepic{ps/v102segmentcategory.ps}{SEGCAT}{1.00}
 
@@ -20479,6 +20674,7 @@ digraph pic {
 \pagepic{ps/v102regulartriangularsetcategory.ps}{RSETCAT}{0.35}
 
 {\bf See:}\\
+\pageto{NormalizedTriangularSetCategory}{NTSCAT}
 \pageto{SquareFreeRegularTriangularSetCategory}{SFRTCAT}
 \pagefrom{TriangularSetCategory}{TSETCAT}
 
@@ -23415,6 +23611,355 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{NormalizedTriangularSetCategory}{NTSCAT}
+\pagepic{ps/v102normalizedtriangularsetcategory.ps}{NTSCAT}{0.45}
+
+{\bf See:}\\
+\pagefrom{RegularTriangularSetCategory}{RSETCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+\cross{NTSCAT}{algebraic?} &
+\cross{NTSCAT}{algebraicCoefficients?} \\
+\cross{NTSCAT}{algebraicVariables} &
+\cross{NTSCAT}{any?} \\
+\cross{NTSCAT}{augment} &
+\cross{NTSCAT}{autoReduced?} \\
+\cross{NTSCAT}{basicSet} &
+\cross{NTSCAT}{coerce} \\
+\cross{NTSCAT}{coHeight} &
+\cross{NTSCAT}{collect} \\
+\cross{NTSCAT}{collectQuasiMonic} &
+\cross{NTSCAT}{collectUnder} \\
+\cross{NTSCAT}{collectUpper} &
+\cross{NTSCAT}{construct} \\
+\cross{NTSCAT}{copy} &
+\cross{NTSCAT}{convert} \\
+\cross{NTSCAT}{count} &
+\cross{NTSCAT}{degree} \\
+\cross{NTSCAT}{empty} &
+\cross{NTSCAT}{empty?} \\
+\cross{NTSCAT}{eq?} &
+\cross{NTSCAT}{eval} \\
+\cross{NTSCAT}{every?} &
+\cross{NTSCAT}{extend} \\
+\cross{NTSCAT}{extendIfCan} &
+\cross{NTSCAT}{find} \\
+\cross{NTSCAT}{first} &
+\cross{NTSCAT}{hash} \\
+\cross{NTSCAT}{headReduce} &
+\cross{NTSCAT}{headReduced?} \\
+\cross{NTSCAT}{headRemainder} &
+\cross{NTSCAT}{infRittWu?} \\
+\cross{NTSCAT}{initiallyReduce} &
+\cross{NTSCAT}{initiallyReduced?} \\
+\cross{NTSCAT}{initials} &
+\cross{NTSCAT}{internalAugment} \\
+\cross{NTSCAT}{intersect} &
+\cross{NTSCAT}{invertible?} \\
+\cross{NTSCAT}{invertibleElseSplit?} &
+\cross{NTSCAT}{invertibleSet} \\
+\cross{NTSCAT}{last} &
+\cross{NTSCAT}{lastSubResultant} \\
+\cross{NTSCAT}{lastSubResultantElseSplit} &
+\cross{NTSCAT}{latex} \\
+\cross{NTSCAT}{less?} &
+\cross{NTSCAT}{mainVariable?} \\
+\cross{NTSCAT}{mainVariables} &
+\cross{NTSCAT}{map} \\
+\cross{NTSCAT}{map!} &
+\cross{NTSCAT}{member?} \\
+\cross{NTSCAT}{members} &
+\cross{NTSCAT}{more?} \\
+\cross{NTSCAT}{mvar} &
+\cross{NTSCAT}{normalized?} \\
+\cross{NTSCAT}{parts} &
+\cross{NTSCAT}{purelyAlgebraic?} \\
+\cross{NTSCAT}{purelyAlgebraicLeadingMonomial?} &
+\cross{NTSCAT}{purelyTranscendental?} \\
+\cross{NTSCAT}{quasiComponent} &
+\cross{NTSCAT}{reduce} \\
+\cross{NTSCAT}{reduceByQuasiMonic} &
+\cross{NTSCAT}{reduced?} \\
+\cross{NTSCAT}{remainder} &
+\cross{NTSCAT}{remove} \\
+\cross{NTSCAT}{removeDuplicates} &
+\cross{NTSCAT}{removeZero} \\
+\cross{NTSCAT}{rest} &
+\cross{NTSCAT}{retract} \\
+\cross{NTSCAT}{retractIfCan} &
+\cross{NTSCAT}{rewriteIdealWithHeadRemainder} \\
+\cross{NTSCAT}{rewriteIdealWithRemainder} &
+\cross{NTSCAT}{rewriteSetWithReduction} \\
+\cross{NTSCAT}{roughBase?} &
+\cross{NTSCAT}{roughEqualIdeals?} \\
+\cross{NTSCAT}{roughSubIdeal?} &
+\cross{NTSCAT}{roughUnitIdeal?} \\
+\cross{NTSCAT}{sample} &
+\cross{NTSCAT}{select} \\
+\cross{NTSCAT}{size?} &
+\cross{NTSCAT}{sort} \\
+\cross{NTSCAT}{squareFreePart} &
+\cross{NTSCAT}{stronglyReduce} \\
+\cross{NTSCAT}{stronglyReduced?} &
+\cross{NTSCAT}{triangular?} \\
+\cross{NTSCAT}{trivialIdeal?} &
+\cross{NTSCAT}{variables} \\
+\cross{NTSCAT}{zeroSetSplit} &
+\cross{NTSCAT}{zeroSetSplitIntoTriangularSystems} \\
+\cross{NTSCAT}{\#?} &
+\cross{NTSCAT}{?=?} \\
+\cross{NTSCAT}{?\~{}=?} &
+\end{tabular}
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{NTSCAT}{shallowlyMutable}}
+is true if its values have immediate components that are 
+updateable (mutable). Note: the properties of any component 
+domain are irrevelant to the shallowlyMutable proper.
+\item {\bf \cross{NTSCAT}{finiteAggregate}}
+is true if it is an aggregate with a finite number of elements.
+\item {\bf nil}
+\end{itemize}
+
+These exports come from \refto{RegularTriangularSetCategory}(R,E,V,P)\\
+where R:GcdDomain, E:OrderedAbelianMonoidSup, V:OrderedSet,\\
+P:RecursivePolynomialCategory(R,E,V)):
+\begin{verbatim}
+ algebraic? : (V,%) -> Boolean
+ algebraicCoefficients? : (P,%) -> Boolean
+ algebraicVariables : % -> List V     
+ any? : ((P -> Boolean),%) -> Boolean if $ has finiteAggregate
+ augment : (List P,List %) -> List %
+ augment : (List P,%) -> List %
+ augment : (P,List %) -> List %       
+ augment : (P,%) -> List %
+ autoReduced? : (%,((P,List P) -> Boolean)) -> Boolean
+ basicSet :
+  (List P,(P -> Boolean),((P,P) -> Boolean)) ->
+    Union(Record(bas: %,top: List P),"failed")
+ basicSet :
+  (List P,((P,P) -> Boolean)) ->
+    Union(Record(bas: %,top: List P),"failed")
+ coerce : % -> List P                 
+ coerce : % -> OutputForm
+ coHeight : % -> NonNegativeInteger if V has FINITE
+ collect : (%,V) -> %                 
+ collectQuasiMonic : % -> %
+ collectUnder : (%,V) -> %            
+ collectUpper : (%,V) -> %
+ construct : List P -> %              
+ copy : % -> %
+ convert : % -> InputForm if P has KONVERT INFORM
+ count : ((P -> Boolean),%) -> NonNegativeInteger 
+   if $ has finiteAggregate
+ count : (P,%) -> NonNegativeInteger 
+   if P has SETCAT 
+   and $ has finiteAggregate
+ degree : % -> NonNegativeInteger     
+ empty : () -> %
+ empty? : % -> Boolean                
+ eq? : (%,%) -> Boolean
+ eval : (%,List Equation P) -> % if P has EVALAB P and P has SETCAT
+ eval : (%,Equation P) -> % if P has EVALAB P and P has SETCAT
+ eval : (%,P,P) -> % if P has EVALAB P and P has SETCAT
+ eval : (%,List P,List P) -> % if P has EVALAB P and P has SETCAT
+ every? : ((P -> Boolean),%) -> Boolean if $ has finiteAggregate
+ extend : (List P,List %) -> List %
+ extend : (List P,%) -> List %        
+ extend : (P,List %) -> List %
+ extend : (P,%) -> List %             
+ extend : (%,P) -> %
+ extendIfCan : (%,P) -> Union(%,"failed")
+ find : ((P -> Boolean),%) -> Union(P,"failed")
+ first : % -> Union(P,"failed")       
+ hash : % -> SingleInteger
+ headReduce : (P,%) -> P              
+ headReduced? : % -> Boolean
+ headReduced? : (P,%) -> Boolean      
+ headRemainder : (P,%) -> Record(num: P,den: R) if R has INTDOM
+ infRittWu? : (%,%) -> Boolean
+ initiallyReduce : (P,%) -> P         
+ initiallyReduced? : % -> Boolean
+ initiallyReduced? : (P,%) -> Boolean
+ initials : % -> List P               
+ internalAugment : (P,%) -> %
+ internalAugment : (List P,%) -> %
+ intersect : (P,List %) -> List %     
+ intersect : (List P,%) -> List %
+ intersect : (P,%) -> List %          
+ intersect : (List P,List %) -> List %
+ invertible? : (P,%) -> Boolean
+ invertible? : (P,%) -> List Record(val: Boolean,tower: %)
+ invertibleElseSplit? : (P,%) -> Union(Boolean,List %)
+ invertibleSet : (P,%) -> List %      
+ last : % -> Union(P,"failed")
+ lastSubResultant : (P,P,%) -> List Record(val: P,tower: %)
+ lastSubResultantElseSplit : (P,P,%) -> Union(P,List %)
+ latex : % -> String                  
+ less? : (%,NonNegativeInteger) -> Boolean
+ mainVariable? : (V,%) -> Boolean
+ mainVariables : % -> List V          
+ map : ((P -> P),%) -> %
+ map! : ((P -> P),%) -> % if $ has shallowlyMutable
+ member? : (P,%) -> Boolean if P has SETCAT and $ has finiteAggregate
+ members : % -> List P if $ has finiteAggregate
+ more? : (%,NonNegativeInteger) -> Boolean
+ mvar : % -> V                        
+ normalized? : % -> Boolean
+ normalized? : (P,%) -> Boolean       
+ parts : % -> List P if $ has finiteAggregate
+ purelyAlgebraic? : (P,%) -> Boolean
+ purelyAlgebraic? : % -> Boolean
+ purelyAlgebraicLeadingMonomial? : (P,%) -> Boolean
+ purelyTranscendental? : (P,%) -> Boolean
+ quasiComponent : % -> Record(close: List P,open: List P)
+ reduce : (P,%,((P,P) -> P),((P,P) -> Boolean)) -> P
+ reduce : (((P,P) -> P),%) -> P if $ has finiteAggregate
+ reduce : (((P,P) -> P),%,P) -> P if $ has finiteAggregate
+ reduce : (((P,P) -> P),%,P,P) -> P 
+   if P has SETCAT 
+   and $ has finiteAggregate
+ reduceByQuasiMonic : (P,%) -> P      
+ reduced? : (P,%,((P,P) -> Boolean)) -> Boolean
+ remainder : (P,%) -> Record(rnum: R,polnum: P,den: R) 
+   if R has INTDOM
+ remove : ((P -> Boolean),%) -> % if $ has finiteAggregate
+ remove : (P,%) -> % if P has SETCAT and $ has finiteAggregate
+ removeDuplicates : % -> % if P has SETCAT and $ has finiteAggregate
+ removeZero : (P,%) -> P
+ rest : % -> Union(%,"failed")        
+ retract : List P -> %
+ retractIfCan : List P -> Union(%,"failed")
+ rewriteIdealWithHeadRemainder : (List P,%) -> List P if R has INTDOM
+ rewriteIdealWithRemainder : (List P,%) -> List P if R has INTDOM
+ rewriteSetWithReduction :
+    (List P,%,((P,P) -> P),((P,P) -> Boolean)) -> List P
+ roughBase? : % -> Boolean if R has INTDOM
+ roughEqualIdeals? : (%,%) -> Boolean if R has INTDOM
+ roughSubIdeal? : (%,%) -> Boolean if R has INTDOM
+ roughUnitIdeal? : % -> Boolean if R has INTDOM
+ sample : () -> %                     
+ select : (%,V) -> Union(P,"failed")
+ select : ((P -> Boolean),%) -> % if $ has finiteAggregate
+ size? : (%,NonNegativeInteger) -> Boolean
+ sort : (%,V) -> Record(under: %,floor: %,upper: %)
+ squareFreePart : (P,%) -> List Record(val: P,tower: %)
+ stronglyReduce : (P,%) -> P
+ stronglyReduced? : (P,%) -> Boolean
+ stronglyReduced? : % -> Boolean      
+ triangular? : % -> Boolean if R has INTDOM
+ trivialIdeal? : % -> Boolean
+ variables : % -> List V              
+ zeroSetSplit : List P -> List %
+ zeroSetSplit : (List P,Boolean) -> List %
+ zeroSetSplitIntoTriangularSystems : 
+   List P -> List Record(close: %,open: List P)
+ #? : % -> NonNegativeInteger if $ has finiteAggregate
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean              
+\end{verbatim}
+
+<<category NTSCAT NormalizedTriangularSetCategory>>=
+)abbrev category NTSCAT NormalizedTriangularSetCategory
+++ Author: Marc Moreno Maza
+++ Date Created: 10/07/1998
+++ Date Last Updated: 12/12/1998
+++ Basic Functions:
+++ Related Constructors:
+++ Also See: essai Graphisme
+++ AMS Classifications:
+++ Keywords: polynomial, multivariate, ordered variables set
+++ Description:
+++ The category of normalized triangular sets. A triangular
+++ set \spad{ts} is said normalized if for every algebraic
+++ variable \spad{v} of \spad{ts} the polynomial \spad{select(ts,v)}
+++ is normalized w.r.t. every polynomial in \spad{collectUnder(ts,v)}.
+++ A polynomial \spad{p} is said normalized w.r.t. a non-constant 
+++ polynomial \spad{q} if \spad{p} is constant or \spad{degree(p,mdeg(q)) = 0}
+++ and \spad{init(p)} is normalized w.r.t. \spad{q}. One of the important
+++ features of normalized triangular sets is that they are regular sets.\newline
+++ References :
+++  [1] D. LAZARD "A new method for solving algebraic systems of 
+++      positive dimension" Discr. App. Math. 33:147-160,1991
+++  [2] P. AUBRY, D. LAZARD and M. MORENO MAZA "On the Theories
+++      of Triangular Sets" Journal of Symbol. Comp. (to appear)
+++  [3] M. MORENO MAZA and R. RIOBOO "Computations of gcd over
+++      algebraic towers of simple extensions" In proceedings of AAECC11
+++      Paris, 1995.
+++  [4] M. MORENO MAZA "Calculs de pgcd au-dessus des tours
+++      d'extensions simples et resolution des systemes d'equations
+++      algebriques" These, Universite P.etM. Curie, Paris, 1997.
+
+
+NormalizedTriangularSetCategory(R:GcdDomain,E:OrderedAbelianMonoidSup,_
+ V:OrderedSet,P:RecursivePolynomialCategory(R,E,V)):
+         Category ==  RegularTriangularSetCategory(R,E,V,P) 
+
+@
+<<NTSCAT.dotabb>>=
+"NTSCAT"
+"NTSCAT" -> "RSETCAT"
+
+@
+<<NTSCAT.dotfull>>=
+"NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=SFRTCAT"];
+"NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ ->
+"RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+
+@
+<<NTSCAT.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=lightblue];
+"NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ ->
+"RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+
+"RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=lightblue];
+"RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+  ->
+"TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+
+"TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=seagreen];
+"TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ ->
+"TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+"TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=lightblue];
+"TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+  -> "PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+
+"PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))" 
+ [color=seagreen];
+"PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))" 
+  -> "PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+
+"PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ [color=lightblue];
+"PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ -> "SETCAT..."
+"PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ -> "CLAGG..."
+"PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))"
+ -> "KOERCE..."
+
+"SETCAT..." [color=lightblue];
+"KOERCE..." [color=lightblue];
+"CLAGG..." [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{OrderedAbelianGroup}{OAGROUP}
 \pagepic{ps/v102orderedabeliangroup.ps}{OAGROUP}{1.00}
 
@@ -66118,6 +66663,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category NAALG NonAssociativeAlgebra>>
 <<category NARNG NonAssociativeRng>>
 <<category NASRING NonAssociativeRing>>
+<<category NTSCAT NormalizedTriangularSetCategory>>
 <<category NUMINT NumericalIntegrationCategory>>
 <<category OAGROUP OrderedAbelianGroup>>
 <<category OAMON OrderedAbelianMonoid>>
@@ -66143,6 +66689,8 @@ Note that this code is not included in the generated catdef.spad file.
 <<category PFECAT PolynomialFactorizationExplicit>>
 <<category PID PrincipalIdealDomain>>
 <<category POLYCAT PolynomialCategory>>
+<<category PPCURVE PlottablePlaneCurveCategory>>
+<<category PSCURVE PlottableSpaceCurveCategory>>
 <<category PRIMCAT PrimitiveFunctionCategory>>
 <<category PRQAGG PriorityQueueAggregate>>
 <<category PSCAT PowerSeriesCategory>>
@@ -66315,6 +66863,7 @@ digraph dotabb {
 <<NAALG.dotabb>>
 <<NARNG.dotabb>>
 <<NASRING.dotabb>>
+<<NTSCAT.dotabb>>
 <<NUMINT.dotabb>>
 <<OAGROUP.dotabb>>
 <<OAMON.dotabb>>
@@ -66340,6 +66889,8 @@ digraph dotabb {
 <<PFECAT.dotabb>>
 <<PID.dotabb>>
 <<POLYCAT.dotabb>>
+<<PPCURVE.dotabb>>
+<<PSCURVE.dotabb>>
 <<PRIMCAT.dotabb>>
 <<PRQAGG.dotabb>>
 <<PSCAT.dotabb>>
@@ -66515,6 +67066,7 @@ digraph dotfull {
 <<NAALG.dotfull>>
 <<NARNG.dotfull>>
 <<NASRING.dotfull>>
+<<NTSCAT.dotfull>>
 <<NUMINT.dotfull>>
 <<OAGROUP.dotfull>>
 <<OAMON.dotfull>>
@@ -66540,6 +67092,8 @@ digraph dotfull {
 <<PFECAT.dotfull>>
 <<PID.dotfull>>
 <<POLYCAT.dotfull>>
+<<PPCURVE.dotfull>>
+<<PSCURVE.dotfull>>
 <<PRIMCAT.dotfull>>
 <<PRQAGG.dotfull>>
 <<PSCAT.dotfull>>
diff --git a/books/ps/v102normalizedtriangularsetcategory.ps b/books/ps/v102normalizedtriangularsetcategory.ps
new file mode 100644
index 0000000..d058493
--- /dev/null
+++ b/books/ps/v102normalizedtriangularsetcategory.ps
@@ -0,0 +1,611 @@
+%!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 854 512
+%%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 854 512
+%%PageOrientation: Portrait
+gsave
+36 36 818 476 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 474 lineto
+816 474 lineto
+816 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 474 lineto
+816 474 lineto
+816 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 810 468 moveto
+0 468 lineto
+0 432 lineto
+810 432 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 810 468 moveto
+0 468 lineto
+0 432 lineto
+810 432 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 445 moveto
+(NormalizedRegularTriangularSetCategory\(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[9.84 6.96 5.04 10.8 6.24 3.84 3.84 6.24 6.24 6.96 9.12 6.24 6.96 6.96 3.84 6.24 4.8 7.92 5.04 3.84 6.24 6.96 6.96 6.96 3.84 6.24 4.8 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.84 10.08 6.24 6.96 10.08 6.96 10.8 6.24 3.84 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 777 396 moveto
+33 396 lineto
+33 360 lineto
+777 360 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 777 396 moveto
+33 396 lineto
+33 360 lineto
+777 360 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+41 373 moveto
+(RegularTriangularSetCategory\(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[9.12 6.24 6.96 6.96 3.84 6.24 4.8 7.92 5.04 3.84 6.24 6.96 6.96 6.96 3.84 6.24 4.8 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.84 10.08 6.24 6.96 10.08 6.96 10.8 6.24 3.84 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% NormalizedRegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+newpath 405 432 moveto
+405 424 405 415 405 406 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 406 moveto
+405 396 lineto
+402 406 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 406 moveto
+405 396 lineto
+402 406 lineto
+closepath
+stroke
+end grestore
+% TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 755 324 moveto
+55 324 lineto
+55 288 lineto
+755 288 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 755 324 moveto
+55 324 lineto
+55 288 lineto
+755 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+63 301 moveto
+(TriangularSetCategory\(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[7.92 5.04 3.84 6.24 6.96 6.96 6.96 3.84 6.24 4.8 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.84 10.08 6.24 6.96 10.08 6.96 10.8 6.24 3.84 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% RegularTriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+newpath 405 360 moveto
+405 352 405 343 405 334 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 334 moveto
+405 324 lineto
+402 334 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 334 moveto
+405 324 lineto
+402 334 lineto
+closepath
+stroke
+end grestore
+% TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 765 252 moveto
+45 252 lineto
+45 216 lineto
+765 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 765 252 moveto
+45 252 lineto
+45 216 lineto
+765 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+53 229 moveto
+(TriangularSetCategory\(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[7.92 5.04 3.84 6.24 6.96 6.96 6.96 3.84 6.24 4.8 7.68 6 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.84 4.56 6.96 3.84 6.24 7.2 4.8 6.24 3.84 10.08 6.96 10.8 6.24 3.84 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% TriangularSetCategory(a:GcdDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+newpath 405 288 moveto
+405 280 405 271 405 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 262 moveto
+405 252 lineto
+402 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 262 moveto
+405 252 lineto
+402 262 lineto
+closepath
+stroke
+end grestore
+% PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 768 180 moveto
+42 180 lineto
+42 144 lineto
+768 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 768 180 moveto
+42 180 lineto
+42 144 lineto
+768 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+50 157 moveto
+(PolynomialSetCategory\(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 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 6.24 3.84 4.56 6.96 3.84 6.24 7.2 4.8 6.24 3.84 10.08 6.96 10.8 6.24 3.84 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% TriangularSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+newpath 405 216 moveto
+405 208 405 199 405 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 190 moveto
+405 180 lineto
+402 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 190 moveto
+405 180 lineto
+402 190 lineto
+closepath
+stroke
+end grestore
+% PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 737 108 moveto
+73 108 lineto
+73 72 lineto
+737 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 737 108 moveto
+73 108 lineto
+73 72 lineto
+737 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+81 85 moveto
+(PolynomialSetCategory\(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory\(a,b,c\)\))
+[7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 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 6.24 3.84 9.36 3.84 6.96 6.96 3.6 6.96 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 9.84 6.96 6.24 3.84 3.84 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.96 7.68 6.96 6.96 3.6 6.24 3.84 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 3.6 6.96 3.84 9.12 6.24 6.24 6.96 4.8 5.52 3.84 6.48 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.6 6.96 3.6 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% PolynomialSetCategory(a:IntegralDomain,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))
+newpath 405 144 moveto
+405 136 405 127 405 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 118 moveto
+405 108 lineto
+402 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 118 moveto
+405 108 lineto
+402 118 lineto
+closepath
+stroke
+end grestore
+% SETCAT...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 350 36 moveto
+272 36 lineto
+272 0 lineto
+350 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 350 36 moveto
+272 36 lineto
+272 0 lineto
+350 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+280 13 moveto
+(SETCAT...)
+[7.68 8.64 8.64 9.12 9.36 7.44 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->SETCAT...
+newpath 381 72 moveto
+370 63 355 52 342 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 344 39 moveto
+334 36 lineto
+340 45 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 344 39 moveto
+334 36 lineto
+340 45 lineto
+closepath
+stroke
+end grestore
+% CLAGG...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 442 36 moveto
+368 36 lineto
+368 0 lineto
+442 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 442 36 moveto
+368 36 lineto
+368 0 lineto
+442 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+375 13 moveto
+(CLAGG...)
+[9.36 8.64 9.36 10.08 10.08 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->CLAGG...
+newpath 405 72 moveto
+405 64 405 55 405 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 409 46 moveto
+405 36 lineto
+402 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 409 46 moveto
+405 36 lineto
+402 46 lineto
+closepath
+stroke
+end grestore
+% KOERCE...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 542 36 moveto
+460 36 lineto
+460 0 lineto
+542 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 542 36 moveto
+460 36 lineto
+460 0 lineto
+542 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+467 13 moveto
+(KOERCE...)
+[9.12 10.08 8.64 8.88 9.36 8.64 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% PolynomialSetCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet,d:RecursivePolynomialCategory(a,b,c))->KOERCE...
+newpath 429 72 moveto
+441 63 456 52 469 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 471 45 moveto
+477 36 lineto
+467 39 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 471 45 moveto
+477 36 lineto
+467 39 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102plottableplanecurvecategory.ps b/books/ps/v102plottableplanecurvecategory.ps
new file mode 100644
index 0000000..d323209
--- /dev/null
+++ b/books/ps/v102plottableplanecurvecategory.ps
@@ -0,0 +1,381 @@
+%!PS-Adobe-2.0
+%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006)
+%%For: (root) root
+%%Title: pic
+%%Pages: (atend)
+%%BoundingBox: 36 36 236 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 236 296
+%%PageOrientation: Portrait
+gsave
+36 36 200 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
+198 258 lineto
+198 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 258 lineto
+198 258 lineto
+198 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% PlottablePlaneCurveCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 192 252 moveto
+0 252 lineto
+0 216 lineto
+192 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 192 252 moveto
+0 252 lineto
+0 216 lineto
+192 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 229 moveto
+(PlottablePlaneCurveCategory\(\))
+[7.68 3.84 6.72 3.84 4.08 6.24 6.96 3.84 6.24 7.68 3.84 6.24 6.96 6.24 9.36 6.96 5.04 6.48 6.24 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
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 178 180 moveto
+14 180 lineto
+14 144 lineto
+178 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 178 180 moveto
+14 180 lineto
+14 144 lineto
+178 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+22 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
+% PlottablePlaneCurveCategory()->CoercibleTo(OutputForm)
+newpath 96 216 moveto
+96 208 96 199 96 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 100 190 moveto
+96 180 lineto
+93 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 100 190 moveto
+96 180 lineto
+93 190 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 162 108 moveto
+30 108 lineto
+30 72 lineto
+162 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 162 108 moveto
+30 108 lineto
+30 72 lineto
+162 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+38 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 96 144 moveto
+96 136 96 127 96 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 100 118 moveto
+96 108 lineto
+93 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 100 118 moveto
+96 108 lineto
+93 118 lineto
+closepath
+stroke
+end grestore
+% Category
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 130 36 moveto
+62 36 lineto
+62 0 lineto
+130 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 130 36 moveto
+62 36 lineto
+62 0 lineto
+130 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+70 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 96 72 moveto
+96 64 96 55 96 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 100 46 moveto
+96 36 lineto
+93 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 100 46 moveto
+96 36 lineto
+93 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102plottablespacecurvecategory.ps b/books/ps/v102plottablespacecurvecategory.ps
new file mode 100644
index 0000000..fea411b
--- /dev/null
+++ b/books/ps/v102plottablespacecurvecategory.ps
@@ -0,0 +1,381 @@
+%!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 238 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 238 296
+%%PageOrientation: Portrait
+gsave
+36 36 202 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
+200 258 lineto
+200 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 258 lineto
+200 258 lineto
+200 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% PlottableSpaceCurveCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 194 252 moveto
+0 252 lineto
+0 216 lineto
+194 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 194 252 moveto
+0 252 lineto
+0 216 lineto
+194 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 229 moveto
+(PlottableSpaceCurveCategory\(\))
+[7.68 3.84 6.72 3.84 4.08 6.24 6.96 3.84 6.24 7.68 6.96 6.24 6.24 6.24 9.36 6.96 5.04 6.48 6.24 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
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 179 180 moveto
+15 180 lineto
+15 144 lineto
+179 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 179 180 moveto
+15 180 lineto
+15 144 lineto
+179 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+23 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
+% PlottableSpaceCurveCategory()->CoercibleTo(OutputForm)
+newpath 97 216 moveto
+97 208 97 199 97 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 101 190 moveto
+97 180 lineto
+94 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 101 190 moveto
+97 180 lineto
+94 190 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 163 108 moveto
+31 108 lineto
+31 72 lineto
+163 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 163 108 moveto
+31 108 lineto
+31 72 lineto
+163 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+39 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 97 144 moveto
+97 136 97 127 97 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 101 118 moveto
+97 108 lineto
+94 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 101 118 moveto
+97 108 lineto
+94 118 lineto
+closepath
+stroke
+end grestore
+% Category
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 131 36 moveto
+63 36 lineto
+63 0 lineto
+131 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 131 36 moveto
+63 36 lineto
+63 0 lineto
+131 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+71 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 97 72 moveto
+97 64 97 55 97 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 101 46 moveto
+97 36 lineto
+94 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 101 46 moveto
+97 36 lineto
+94 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 d95f312..099ffff 100644
--- a/changelog
+++ b/changelog
@@ -1,4 +1,13 @@
+20081110 tpd books/bookvol10.2 add categories
+20081110 tpd books/ps/v102normalizedtriangularsetcategory.ps added
+20081110 tpd src/algebra/nregset.spad move NTSCAT to bookvol10.2
+20081110 tpd books/ps/v102plottableplanecurvecategory.ps added
+20081110 tpd books/ps/v102plottablespacecurvecategory.ps added
+20081110 tpd src/algebra/Makefile remove pcurve.spad
+20081110 tpd src/algebra/pcurve.spad merged with bookvol10.2
 20081109 tpd books/bookvol10.2 add categories
+20081109 tpd books/ps/v102pointcategory.ps revised
+20081109 tpd src/algebra/polset.spad.pamphlet 
 20081109 tpd books/ps/v102squarefreeregulartriangularsetcategory.ps added
 20081109 tpd src/algebra/sregset.spad.pamphlet move SFRTCAT to bookvol10.2
 20081109 tpd books/ps/v102regulartriangularsetcategory.ps added
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 69818c4..5ff5e10 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -194,7 +194,6 @@ LAYER0=\
 \begin{verbatim}
 ituple.spad.pamphlet   (ITFUN2 ITFUN3 ITUPLE)
 mkrecord.spad.pamphlet (MKRECORD)
-pcurve.spad.pamphlet   (PPCURVE PSCURVE)
 \end{verbatim}
 
 <<layer1>>=
@@ -1261,7 +1260,7 @@ SPADFILES= \
  ${OUTSRC}/outform.spad ${OUTSRC}/out.spad \
  ${OUTSRC}/pade.spad ${OUTSRC}/padiclib.spad ${OUTSRC}/padic.spad \
  ${OUTSRC}/paramete.spad ${OUTSRC}/partperm.spad ${OUTSRC}/patmatch1.spad \
- ${OUTSRC}/patmatch2.spad ${OUTSRC}/pattern.spad ${OUTSRC}/pcurve.spad \
+ ${OUTSRC}/patmatch2.spad ${OUTSRC}/pattern.spad \
  ${OUTSRC}/pdecomp.spad ${OUTSRC}/perman.spad ${OUTSRC}/permgrps.spad \
  ${OUTSRC}/perm.spad ${OUTSRC}/pfbr.spad ${OUTSRC}/pfo.spad \
  ${OUTSRC}/pfr.spad ${OUTSRC}/pf.spad ${OUTSRC}/pgcd.spad \
@@ -1422,7 +1421,7 @@ DOCFILES= \
  ${DOC}/outform.spad.dvi ${DOC}/out.spad.dvi \
  ${DOC}/pade.spad.dvi ${DOC}/padiclib.spad.dvi ${DOC}/padic.spad.dvi \
  ${DOC}/paramete.spad.dvi ${DOC}/partperm.spad.dvi ${DOC}/patmatch1.spad.dvi \
- ${DOC}/patmatch2.spad.dvi ${DOC}/pattern.spad.dvi ${DOC}/pcurve.spad.dvi \
+ ${DOC}/patmatch2.spad.dvi ${DOC}/pattern.spad.dvi \
  ${DOC}/pdecomp.spad.dvi ${DOC}/perman.spad.dvi ${DOC}/permgrps.spad.dvi \
  ${DOC}/perm.spad.dvi ${DOC}/pfbr.spad.dvi ${DOC}/pfo.spad.dvi \
  ${DOC}/pfr.spad.dvi ${DOC}/pf.spad.dvi ${DOC}/pgcd.spad.dvi \
diff --git a/src/algebra/nregset.spad.pamphlet b/src/algebra/nregset.spad.pamphlet
index a1ad85f..fe0243d 100644
--- a/src/algebra/nregset.spad.pamphlet
+++ b/src/algebra/nregset.spad.pamphlet
@@ -9,44 +9,6 @@
 \eject
 \tableofcontents
 \eject
-\section{category NTSCAT NormalizedTriangularSetCategory}
-<<category NTSCAT NormalizedTriangularSetCategory>>=
-)abbrev category NTSCAT NormalizedTriangularSetCategory
-++ Author: Marc Moreno Maza
-++ Date Created: 10/07/1998
-++ Date Last Updated: 12/12/1998
-++ Basic Functions:
-++ Related Constructors:
-++ Also See: essai Graphisme
-++ AMS Classifications:
-++ Keywords: polynomial, multivariate, ordered variables set
-++ Description:
-++ The category of normalized triangular sets. A triangular
-++ set \spad{ts} is said normalized if for every algebraic
-++ variable \spad{v} of \spad{ts} the polynomial \spad{select(ts,v)}
-++ is normalized w.r.t. every polynomial in \spad{collectUnder(ts,v)}.
-++ A polynomial \spad{p} is said normalized w.r.t. a non-constant 
-++ polynomial \spad{q} if \spad{p} is constant or \spad{degree(p,mdeg(q)) = 0}
-++ and \spad{init(p)} is normalized w.r.t. \spad{q}. One of the important
-++ features of normalized triangular sets is that they are regular sets.\newline
-++ References :
-++  [1] D. LAZARD "A new method for solving algebraic systems of 
-++      positive dimension" Discr. App. Math. 33:147-160,1991
-++  [2] P. AUBRY, D. LAZARD and M. MORENO MAZA "On the Theories
-++      of Triangular Sets" Journal of Symbol. Comp. (to appear)
-++  [3] M. MORENO MAZA and R. RIOBOO "Computations of gcd over
-++      algebraic towers of simple extensions" In proceedings of AAECC11
-++      Paris, 1995.
-++  [4] M. MORENO MAZA "Calculs de pgcd au-dessus des tours
-++      d'extensions simples et resolution des systemes d'equations
-++      algebriques" These, Universite P.etM. Curie, Paris, 1997.
-
-
-NormalizedTriangularSetCategory(R:GcdDomain,E:OrderedAbelianMonoidSup,_
- V:OrderedSet,P:RecursivePolynomialCategory(R,E,V)):
-         Category ==  RegularTriangularSetCategory(R,E,V,P) 
-
-@
 \section{package NORMPK NormalizationPackage}
 <<package NORMPK NormalizationPackage>>=
 )abbrev package NORMPK NormalizationPackage
@@ -136,7 +98,8 @@ NormalizationPackage(R,E,V,P,TS): Exports == Implementation where
 
        outputArgs(s1:S, s2: S, p:P,ts:TS): Void ==
          if not empty? s1 then output(s1, p::OutputForm)$OutputPackage
-         if not empty? s1 then output(s1,(convert(p)@String)::OutputForm)$OutputPackage
+         if not empty? s1 then _
+              output(s1,(convert(p)@String)::OutputForm)$OutputPackage
          output(" ")$OutputPackage
          if not empty? s2 then output(s2, ts::OutputForm)$OutputPackage       
          empty? s2 => void()
@@ -162,10 +125,12 @@ NormalizationPackage(R,E,V,P,TS): Exports == Implementation where
        ts_v := select(ts,v)::P
        if mdeg(p) < mdeg(ts_v)
          then
-           hesrg: Record (gcd : P, coef2 : P)  := halfExtendedSubResultantGcd2(ts_v,p)$P
+           hesrg: Record (gcd : P, coef2 : P)  := _
+                    halfExtendedSubResultantGcd2(ts_v,p)$P
            d: P :=  hesrg.gcd; n: P := hesrg.coef2
          else
-           hesrg: Record (gcd : P, coef1 : P) := halfExtendedSubResultantGcd1(p,ts_v)$P
+           hesrg: Record (gcd : P, coef1 : P) := _
+                    halfExtendedSubResultantGcd1(p,ts_v)$P
            d: P :=  hesrg.gcd; n: P := hesrg.coef1
        g := gcd(n,d)
        (n, d) := ((n exquo g)::P, (d exquo g)::P)
@@ -206,7 +171,8 @@ NormalizationPackage(R,E,V,P,TS): Exports == Implementation where
                  tp := qr.num * tp
                  zero? ip =>
                      outputArgs("p = ", " ts = ",p,ts)
-                     error "in normalizedAssociate$NORMPK: should never happen !"
+                     error _
+                       "in normalizedAssociate$NORMPK: should never happen !"
            else
              tp := tail(ip) * mp + tp
              mp := mainMonomial(ip) * mp
@@ -278,7 +244,6 @@ NormalizationPackage(R,E,V,P,TS): Exports == Implementation where
 <<*>>=
 <<license>>
 
-<<category NTSCAT NormalizedTriangularSetCategory>>
 <<package NORMPK NormalizationPackage>>
 @
 \eject
diff --git a/src/algebra/pcurve.spad.pamphlet b/src/algebra/pcurve.spad.pamphlet
deleted file mode 100644
index 9fa0757..0000000
--- a/src/algebra/pcurve.spad.pamphlet
+++ /dev/null
@@ -1,132 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/algebra pcurve.spad}
-\author{Clifton J. Williamson}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{category PPCURVE PlottablePlaneCurveCategory}
-<<category PPCURVE PlottablePlaneCurveCategory>>=
-)abbrev category PPCURVE PlottablePlaneCurveCategory
-++ Author: Clifton J. Williamson
-++ Date Created: 11 January 1990
-++ Date Last Updated: 15 June 1990
-++ Basic Operations: listBranches, xRange, yRange
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords: plot, graphics
-++ References:
-++ Description: PlottablePlaneCurveCategory is the category of curves in the 
-++ plane which may be plotted via the graphics facilities.  Functions are 
-++ provided for obtaining lists of lists of points, representing the
-++ branches of the curve, and for determining the ranges of the
-++ x-coordinates and y-coordinates of the points on the curve.
- 
-PlottablePlaneCurveCategory(): Category == Definition where
-  L     ==> List
-  SEG   ==> Segment
-  SF    ==> DoubleFloat
-  POINT ==> Point DoubleFloat
- 
-  Definition ==> CoercibleTo OutputForm with
- 
-    listBranches: % -> L L POINT
-      ++ listBranches(c) returns a list of lists of points, representing the
-      ++ branches of the curve c.
-    xRange: % -> SEG SF
-      ++ xRange(c) returns the range of the x-coordinates of the points
-      ++ on the curve c.
-    yRange: % -> SEG SF
-      ++ yRange(c) returns the range of the y-coordinates of the points
-      ++ on the curve c.
-
-@
-\section{category PSCURVE PlottableSpaceCurveCategory}
-<<category PSCURVE PlottableSpaceCurveCategory>>=
-)abbrev category PSCURVE PlottableSpaceCurveCategory
-++ Author: Clifton J. Williamson
-++ Date Created: 11 January 1990
-++ Date Last Updated: 15 June 1990
-++ Basic Operations: listBranches, xRange, yRange, zRange
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords: plot, graphics
-++ References:
-++ Description: PlottableSpaceCurveCategory is the category of curves in 
-++ 3-space which may be plotted via the graphics facilities.  Functions are 
-++ provided for obtaining lists of lists of points, representing the
-++ branches of the curve, and for determining the ranges of the
-++ x-, y-, and z-coordinates of the points on the curve.
- 
-PlottableSpaceCurveCategory(): Category == Definition where
-  L     ==> List
-  SEG   ==> Segment
-  SF    ==> DoubleFloat
-  POINT ==> Point DoubleFloat
- 
-  Definition ==> CoercibleTo OutputForm with
- 
-    listBranches: % -> L L POINT
-      ++ listBranches(c) returns a list of lists of points, representing the
-      ++ branches of the curve c.
-    xRange: % -> SEG SF
-      ++ xRange(c) returns the range of the x-coordinates of the points
-      ++ on the curve c.
-    yRange: % -> SEG SF
-      ++ yRange(c) returns the range of the y-coordinates of the points
-      ++ on the curve c.
-    zRange: % -> SEG SF
-      ++ zRange(c) returns the range of the z-coordinates of the points
-      ++ on the curve c.
-
-@
-\section{License}
-<<license>>=
---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
---All rights reserved.
---
---Redistribution and use in source and binary forms, with or without
---modification, are permitted provided that the following conditions are
---met:
---
---    - Redistributions of source code must retain the above copyright
---      notice, this list of conditions and the following disclaimer.
---
---    - Redistributions in binary form must reproduce the above copyright
---      notice, this list of conditions and the following disclaimer in
---      the documentation and/or other materials provided with the
---      distribution.
---
---    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
---      names of its contributors may be used to endorse or promote products
---      derived from this software without specific prior written permission.
---
---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-@
-<<*>>=
-<<license>>
- 
-<<category PPCURVE PlottablePlaneCurveCategory>>
-<<category PSCURVE PlottableSpaceCurveCategory>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
