diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 3307f21..941a873 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -724,6 +724,7 @@ digraph pic {
 \pagepic{ps/v102koerce.ps}{KOERCE}{1.00}
 
 {\bf See:}\\
+\pageto{FortranProgramCategory}{FORTCAT}
 \pageto{SetCategory}{SETCAT}
 \pagefrom{Category}{CATEGORY}
 
@@ -1519,6 +1520,7 @@ digraph pic {
 {\bf See:}\\
 \pageto{ExtensionField}{XF}
 \pageto{FiniteAlgebraicExtensionField}{FAXF}
+\pageto{FortranMachineTypeCategory}{FMTC}
 \pageto{FullyRetractableTo}{FRETRCT}
 \pageto{GradedAlgebra}{GRALG}
 \pageto{PolynomialCategory}{POLYCAT}
@@ -1823,6 +1825,7 @@ digraph pic {
 
 {\bf See:}\\
 \pageto{Aggregate}{AGG}
+\pageto{FortranProgramCategory}{FORTCAT}
 \pageto{FullyPatternMatchable}{FPATMAB}
 \pageto{SegmentCategory}{SEGCAT}
 \pagefrom{Category}{CATEGORY}
@@ -2209,6 +2212,98 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranProgramCategory}{FORTCAT}
+\pagepic{ps/v102fortranprogramcategory.ps}{FORTCAT}{1.00}
+
+{\bf See:}\\
+\pageto{FortranFunctionCategory}{FORTFN}
+\pageto{FortranMatrixCategory}{FMC}
+\pageto{FortranMatrixFunctionCategory}{FMFUN}
+\pageto{FortranVectorCategory}{FVC}
+\pageto{FortranVectorFunctionCategory}{FVFUN}
+\pagefrom{CoercibleTo}{KOERCE}
+\pagefrom{Type}{TYPE}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+\cross{FORTCAT}{coerce} &
+\cross{FORTCAT}{outputAsFortran}
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ outputAsFortran : % -> Void
+\end{verbatim}
+
+These exports come from \refto{CoercibleTo}(OutputForm):
+\begin{verbatim}
+ coerce : % -> OutputForm
+\end{verbatim}
+
+<<category FORTCAT FortranProgramCategory>>=
+)abbrev category FORTCAT FortranProgramCategory
+++ Author: Mike Dewar
+++ Date Created: November 1992
+++ Date Last Updated: 
+++ Basic Operations:
+++ Related Constructors: FortranType, FortranCode, Switch
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ \axiomType{FortranProgramCategory} provides various models of
+++ FORTRAN subprograms.  These can be transformed into actual FORTRAN
+++ code.
+FortranProgramCategory():Category == Join(Type,CoercibleTo OutputForm) with
+    outputAsFortran : $ -> Void
+    ++ \axiom{outputAsFortran(u)} translates \axiom{u} into a legal FORTRAN
+    ++ subprogram.
+
+@
+<<FORTCAT.dotabb>>=
+"FORTCAT"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FORTCAT"];
+"FORTCAT" -> "KOERCE"
+"FORTCAT" -> "TYPE"
+
+@
+<<FORTCAT.dotfull>>=
+"FortranProgramCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FORTCAT"];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+@
+<<FORTCAT.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FullyRetractableTo}{FRETRCT}
 \pagepic{ps/v102fullyretractableto.ps}{FRETRCT}{1.00}
 
@@ -3054,6 +3149,630 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranFunctionCategory}{FORTFN}
+\pagepic{ps/v102fortranfunctioncategory.ps}{FORTFN}{1.00}
+
+{\bf See:}\\
+\pagefrom{FortranProgramCategory}{FORTCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{FORTFN}{coerce} &
+\cross{FORTFN}{outputAsFortran} &
+\cross{FORTFN}{retract} &
+\cross{FORTFN}{retractIfCan} 
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ coerce : FortranCode -> %            
+ coerce : List FortranCode -> %
+ coerce : Record(localSymbols: SymbolTable,code: List FortranCode) -> %
+ retract : Expression Float -> %
+ retract : Expression Integer -> %    
+ retract : Polynomial Float -> %
+ retract : Polynomial Integer -> %    
+ retract : Fraction Polynomial Integer -> %
+ retract : Fraction Polynomial Float -> %
+ retractIfCan : Fraction Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Fraction Polynomial Float -> Union(%,"failed")
+ retractIfCan : Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Polynomial Float -> Union(%,"failed")
+ retractIfCan : Expression Integer -> Union(%,"failed")
+ retractIfCan : Expression Float -> Union(%,"failed")
+\end{verbatim}
+
+These exports come from \refto{FortranProgramCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm             
+ outputAsFortran : % -> Void
+\end{verbatim}
+
+<<category FORTFN FortranFunctionCategory>>=
+)abbrev category FORTFN FortranFunctionCategory
+++ Author: Mike Dewar
+++ Date Created: 13 January 1994
+++ Date Last Updated: 18 March 1994
+++ Related Constructors: FortranProgramCategory.
+++ Description:
+++ \axiomType{FortranFunctionCategory} is the category of arguments to
+++ NAG Library routines which return (sets of) function values.
+FortranFunctionCategory():Category == FortranProgramCategory with
+  coerce : List FortranCode -> $
+    ++ coerce(e) takes an object from \spadtype{List FortranCode} and
+    ++  uses it as the body of an ASP.
+  coerce : FortranCode -> $
+    ++ coerce(e) takes an object from \spadtype{FortranCode} and
+    ++  uses it as the body of an ASP.
+  coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
+    ++ coerce(e) takes the component of \spad{e} from
+    ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
+    ++ making the declarations in the \spadtype{SymbolTable} component.
+  retract : Expression Float -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Expression Float -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retract : Expression Integer -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Expression Integer -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retract : Polynomial Float -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Polynomial Float -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retract : Polynomial Integer -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Polynomial Integer -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retract : Fraction Polynomial Float -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Fraction Polynomial Float -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retract : Fraction Polynomial Integer -> $
+    ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+  retractIfCan : Fraction Polynomial Integer -> Union($,"failed")
+    ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+    ++  legal Fortran-77 is produced.
+
+  -- NB: These ASPs also have a coerce from an appropriate instantiation
+  --     of FortranExpression.
+
+@
+<<FORTFN.dotabb>>=
+"FORTFN"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FORTFN"];
+"FORTFN" -> "FORTCAT"
+
+@
+<<FORTFN.dotfull>>=
+"FortranFunctionCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FORTFN"];
+"FortranFunctionCategory()" -> "FortranProgramCategory()"
+
+@
+<<FORTFN.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranFunctionCategory()" [color=lightblue];
+"FortranFunctionCategory()" -> "FortranProgramCategory()"
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranMatrixCategory}{FMC}
+\pagepic{ps/v102fortranmatrixcategory.ps}{FMC}{1.00}
+
+{\bf See:}\\
+\pagefrom{FortranProgramCategory}{FORTCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{ll}
+\cross{FMC}{coerce} &
+\cross{FMC}{outputAsFortran} 
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ coerce : Matrix MachineFloat -> %    
+ coerce : List FortranCode -> %
+ coerce : FortranCode -> %            
+ coerce : Record(localSymbols: SymbolTable,code: List FortranCode) -> %
+\end{verbatim}
+
+These exports come from \refto{FortranProgramCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm
+ outputAsFortran : % -> Void          
+\end{verbatim}
+
+<<category FMC FortranMatrixCategory>>=
+)abbrev category FMC FortranMatrixCategory
+++ Author: Mike Dewar
+++ Date Created: 21 March 1994
+++ Date Last Updated: 
+++ Related Constructors: FortranProgramCategory.
+++ Description:
+++ \axiomType{FortranMatrixCategory} provides support for
+++ producing Functions and Subroutines when the input to these
+++ is an AXIOM object of type \axiomType{Matrix} or in domains
+++ involving \axiomType{FortranCode}.
+FortranMatrixCategory():Category == FortranProgramCategory with
+    coerce : Matrix MachineFloat -> $
+      ++ coerce(v) produces an ASP which returns the value of \spad{v}.
+    coerce : List FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
+      ++ coerce(e) takes the component of \spad{e} from
+      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
+      ++ making the declarations in the \spadtype{SymbolTable} component.
+
+@
+<<FMC.dotabb>>=
+"FMC"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMC"];
+"FMC" -> "FORTCAT"
+
+@
+<<FMC.dotfull>>=
+"FortranMatrixCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMC"];
+"FortranMatrixCategory()" -> "FortranProgramCategory()"
+
+@
+<<FMC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranMatrixCategory()" [color=lightblue];
+"FortranMatrixCategory()" -> "FortranProgramCategory()"
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranMatrixFunctionCategory}{FMFUN}
+\pagepic{ps/v102fortranmatrixfunctioncategory.ps}{FMFUN}{1.00}
+
+{\bf See:}\\
+\pagefrom{FortranProgramCategory}{FORTCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{FMFUN}{coerce} &
+\cross{FMFUN}{outputAsFortran} &
+\cross{FMFUN}{retract} &
+\cross{FMFUN}{retractIfCan} 
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ coerce : List FortranCode -> %
+ coerce : FortranCode -> %            
+ coerce : Record(localSymbols: SymbolTable,code: List FortranCode) -> %
+ retract : Matrix Expression Float -> %
+ retract : Matrix Expression Integer -> %
+ retract : Matrix Polynomial Float -> %
+ retract : Matrix Polynomial Integer -> %
+ retract : Matrix Fraction Polynomial Float -> %
+ retract : Matrix Fraction Polynomial Integer -> %
+ retractIfCan : Matrix Fraction Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Matrix Fraction Polynomial Float -> Union(%,"failed")
+ retractIfCan : Matrix Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Matrix Polynomial Float -> Union(%,"failed")
+ retractIfCan : Matrix Expression Integer -> Union(%,"failed")
+ retractIfCan : Matrix Expression Float -> Union(%,"failed")
+\end{verbatim}
+
+These exports come from \refto{FortranProgramCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm             
+ outputAsFortran : % -> Void
+\end{verbatim}
+
+<<category FMFUN FortranMatrixFunctionCategory>>=
+)abbrev category FMFUN FortranMatrixFunctionCategory
+++ Author: Mike Dewar
+++ Date Created: March 18 1994
+++ Date Last Updated: 
+++ Related Constructors: FortranProgramCategory.
+++ Description:
+++ \axiomType{FortranMatrixFunctionCategory} provides support for
+++ producing Functions and Subroutines representing matrices of
+++ expressions.
+
+FortranMatrixFunctionCategory():Category == FortranProgramCategory with
+    coerce : List FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
+      ++ coerce(e) takes the component of \spad{e} from
+      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
+      ++ making the declarations in the \spadtype{SymbolTable} component.
+    retract : Matrix Expression Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Expression Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Matrix Expression Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Expression Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Matrix Polynomial Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Polynomial Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Matrix Polynomial Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Polynomial Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Matrix Fraction Polynomial Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Fraction Polynomial Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Matrix Fraction Polynomial Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Matrix Fraction Polynomial Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+
+    -- NB: These ASPs also have a coerce from an appropriate instantiation
+    --     of Matrix FortranExpression.
+
+@
+<<FMFUN.dotabb>>=
+"FMFUN"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMFUN"];
+"FMFUN" -> "FORTCAT"
+
+@
+<<FMFUN.dotfull>>=
+"FortranMatrixFunctionCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMFUN"];
+"FortranMatrixFunctionCategory()" -> "FortranProgramCategory()"
+
+@
+<<FMFUN.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranMatrixFunctionCategory()" [color=lightblue];
+"FortranMatrixFunctionCategory()" -> "FortranProgramCategory()"
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranVectorCategory}{FVC}
+\pagepic{ps/v102fortranvectorcategory.ps}{FVC}{1.00}
+
+{\bf See:}\\
+\pagefrom{FortranProgramCategory}{FORTCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ coerce : FortranCode -> %            
+ coerce : List FortranCode -> %
+ coerce : Vector MachineFloat -> %    
+ coerce : Record(localSymbols: SymbolTable,code: List FortranCode) -> %
+\end{verbatim}
+
+These exports come from \refto{FortranProgramCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm
+ outputAsFortran : % -> Void          
+\end{verbatim}
+
+<<category FVC FortranVectorCategory>>=
+)abbrev category FVC FortranVectorCategory
+++ Author: Mike Dewar
+++ Date Created: October 1993
+++ Date Last Updated: 18 March 1994
+++ Related Constructors: FortranProgramCategory.
+++ Description:
+++ \axiomType{FortranVectorCategory} provides support for
+++ producing Functions and Subroutines when the input to these
+++ is an AXIOM object of type \axiomType{Vector} or in domains
+++ involving \axiomType{FortranCode}.
+FortranVectorCategory():Category == FortranProgramCategory with
+    coerce : Vector MachineFloat -> $
+      ++ coerce(v) produces an ASP which returns the value of \spad{v}.
+    coerce : List FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
+      ++ coerce(e) takes the component of \spad{e} from
+      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
+      ++ making the declarations in the \spadtype{SymbolTable} component.
+
+@
+<<FVC.dotabb>>=
+"FVC"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FVC"];
+"FVC" -> "FORTCAT"
+
+@
+<<FVC.dotfull>>=
+"FortranVectorCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FVC"];
+"FortranVectorCategory()" -> "FortranProgramCategory()"
+
+@
+<<FVC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranVectorCategory()" [color=lightblue];
+"FortranVectorCategory()" -> "FortranProgramCategory()"
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranVectorFunctionCategory}{FVFUN}
+\pagepic{ps/v102fortranvectorfunctioncategory.ps}{FVFUN}{1.00}
+
+{\bf See:}\\
+\pagefrom{FortranProgramCategory}{FORTCAT}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{FVFUN}{coerce} &
+\cross{FVFUN}{outputAsFortran} &
+\cross{FVFUN}{retract} &
+\cross{FVFUN}{retractIfCan} 
+\end{tabular}
+
+{\bf Attributes:}
+\begin{itemize}
+\item {\bf nil}
+\end{itemize}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ coerce : FortranCode -> %            
+ coerce : List FortranCode -> %
+ coerce : Record(localSymbols: SymbolTable,code: List FortranCode) -> %
+ retract : Vector Fraction Polynomial Integer -> %
+ retract : Vector Fraction Polynomial Float -> %
+ retract : Vector Polynomial Integer -> %
+ retract : Vector Polynomial Float -> %
+ retract : Vector Expression Integer -> %
+ retract : Vector Expression Float -> %
+ retractIfCan : Vector Fraction Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Vector Fraction Polynomial Float -> Union(%,"failed")
+ retractIfCan : Vector Polynomial Integer -> Union(%,"failed")
+ retractIfCan : Vector Polynomial Float -> Union(%,"failed")
+ retractIfCan : Vector Expression Integer -> Union(%,"failed")
+ retractIfCan : Vector Expression Float -> Union(%,"failed")
+\end{verbatim}
+
+These exports come from \refto{FortranProgramCategory}():
+\begin{verbatim}
+ coerce : % -> OutputForm             
+ outputAsFortran : % -> Void
+\end{verbatim}
+
+<<category FVFUN FortranVectorFunctionCategory>>=
+)abbrev category FVFUN FortranVectorFunctionCategory
+++ Author: Mike Dewar
+++ Date Created: 11 March 1994
+++ Date Last Updated: 18 March 1994
+++ Related Constructors: FortranProgramCategory.
+++ Description:
+++ \axiomType{FortranVectorFunctionCategory} is the catagory of arguments
+++ to NAG Library routines which return the values of vectors of functions.
+FortranVectorFunctionCategory():Category == FortranProgramCategory with
+    coerce : List FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : FortranCode -> $
+      ++ coerce(e) takes an object from \spadtype{FortranCode} and
+      ++  uses it as the body of an ASP.
+    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
+      ++ coerce(e) takes the component of \spad{e} from
+      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
+      ++ making the declarations in the \spadtype{SymbolTable} component.
+    retract : Vector Expression Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Expression Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Vector Expression Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Expression Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Vector Polynomial Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Polynomial Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Vector Polynomial Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Polynomial Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Vector Fraction Polynomial Float -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Fraction Polynomial Float -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retract : Vector Fraction Polynomial Integer -> $
+      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+    retractIfCan : Vector Fraction Polynomial Integer -> Union($,"failed")
+      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
+      ++  legal Fortran-77 is produced.
+
+    -- NB: These ASPs also have a coerce from an appropriate instantiation
+    --     of Vector FortranExpression.
+
+@
+<<FVFUN.dotabb>>=
+"FVFUN"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FVFUN"];
+"FVFUN" -> "FORTCAT"
+
+@
+<<FVFUN.dotfull>>=
+"FortranVectorFunctionCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FVFUN"];
+"FortranVectorFunctionCategory()" -> "FortranProgramCategory()"
+
+@
+<<FVFUN.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranVectorFunctionCategory()" [color=lightblue];
+"FortranVectorFunctionCategory()" -> "FortranProgramCategory()"
+
+"FortranProgramCategory()" [color=lightblue];
+"FortranProgramCategory()" -> "Type()"
+"FortranProgramCategory()" -> "CoercibleTo(OutputForm)"
+
+"Type()" [color=lightblue];
+"Type()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FullyEvalableOver}{FEVALAB}
 \pagepic{ps/v102fullyevalableover.ps}{FEVALAB}{0.75}
 
@@ -4266,6 +4985,7 @@ digraph pic {
 
 {\bf See:}\\
 \pageto{BitAggregate}{BTAGG}
+\pageto{FortranMachineTypeCategory}{FMTC}
 \pageto{OrderedAbelianSemiGroup}{OASGP}
 \pageto{OrderedFinite}{ORDFIN}
 \pageto{OrderedMonoid}{ORDMON}
@@ -14216,6 +14936,7 @@ digraph pic {
 
 {\bf See:}\\
 \pageto{BiModule}{BMODULE}
+\pageto{LeftAlgebra}{LALG}
 \pageto{Ring}{RING}
 \pagefrom{AbelianGroup}{ABELGRP}
 
@@ -18672,6 +19393,7 @@ digraph pic {
 \pageto{DifferentialExtension}{DIFEXT}
 \pageto{DifferentialRing}{DIFRING}
 \pageto{EntireRing}{ENTIRER}
+\pageto{LeftAlgebra}{LALG}
 \pageto{LinearlyExplicitRingOver}{LINEXP}
 \pageto{OrderedRing}{ORDRING}
 \pageto{PartialDifferentialRing}{PDRING}
@@ -20276,6 +20998,145 @@ digraph pic {
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{LeftAlgebra}{LALG}
+\pagepic{ps/v102leftalgebra.ps}{LALG}{1.00}
+
+{\bf See:}\\
+\pagefrom{LeftModule}{LMODULE}
+\pagefrom{Ring}{RING}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{LALG}{0} &
+\cross{LALG}{1} &
+\cross{LALG}{coerce} &
+\cross{LALG}{hash} &
+\cross{LALG}{latex} \\
+\cross{LALG}{one?} &
+\cross{LALG}{recip} &
+\cross{LALG}{sample} &
+\cross{LALG}{zero?} &
+\cross{LALG}{characteristic} \\
+\cross{LALG}{subtractIfCan} &
+\cross{LALG}{?*?} &
+\cross{LALG}{?+?} &
+\cross{LALG}{?-?} &
+\cross{LALG}{-?} \\
+\cross{LALG}{?=?} &
+\cross{LALG}{?\~{}=?} &
+\cross{LALG}{?**?} &
+\cross{LALG}{?\^{}?} &
+\end{tabular}
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{LALG}{unitsKnown}}
+is true if a monoid (a multiplicative semigroup with a 1) has 
+unitsKnown means that  the operation {\tt recip} can only return 
+``failed'' if its argument is not a unit.
+\end{itemize}
+
+These are implemented by this category:
+\begin{verbatim}
+ coerce : R -> %                      
+\end{verbatim}
+
+These exports come from \refto{Ring}():
+\begin{verbatim}
+ 0 : () -> %                          
+ 1 : () -> %
+ characteristic : () -> NonNegativeInteger
+ coerce : % -> OutputForm             
+ coerce : Integer -> %
+ hash : % -> SingleInteger
+ latex : % -> String                  
+ one? : % -> Boolean
+ recip : % -> Union(%,"failed")       
+ sample : () -> %
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ zero? : % -> Boolean                 
+ ?+? : (%,%) -> %
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean
+ ?*? : (NonNegativeInteger,%) -> %
+ ?*? : (PositiveInteger,%) -> %
+ ?*? : (Integer,%) -> %               
+ ?*? : (%,%) -> %
+ ?-? : (%,%) -> %                     
+ -? : % -> %
+ ?**? : (%,PositiveInteger) -> %      
+ ?**? : (%,NonNegativeInteger) -> %
+ ?^? : (%,NonNegativeInteger) -> %
+ ?^? : (%,PositiveInteger) -> %
+\end{verbatim}
+
+These exports come from \refto{LeftModule}(R:Type):
+\begin{verbatim}
+ ?*? : (R,%) -> %                     
+\end{verbatim}
+
+<<category LALG LeftAlgebra>>=
+)abbrev category LALG LeftAlgebra
+++ Author: Larry A. Lambe
+++ Date  : 03/01/89; revised 03/17/89; revised 12/02/90.
+++ Description: The category of all left algebras over an arbitrary
+++ ring.
+LeftAlgebra(R:Ring): Category == Join(Ring, LeftModule R) with
+      coerce: R -> %
+	++ coerce(r) returns r * 1 where 1 is the identity of the
+	++ left algebra.
+    add
+      coerce(x:R):% == x * 1$%
+
+@
+<<LALG.dotabb>>=
+"LALG"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=LALG"];
+"LALG" -> "LMODULE"
+"LALG" -> "RING"
+
+@
+<<LALG.dotfull>>=
+"LeftAlgebra(a:Ring)"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=LALG"];
+"LeftAlgebra(a:Ring)" -> "LeftModule(a:Ring)"
+"LeftAlgebra(a:Ring)" -> "Ring()"
+
+@
+<<LALG.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"LeftAlgebra(a:Ring)" [color=lightblue];
+"LeftAlgebra(a:Ring)" -> "LeftModule(a:Ring)"
+"LeftAlgebra(a:Ring)" -> "Ring()"
+
+"Ring()" [color=lightblue];
+"Ring()" -> "Rng()"
+"Ring()" -> "Monoid()"
+"Ring()" -> "LeftModule(a:Ring)"
+
+"Rng()" [color=lightblue];
+"Rng()" -> "ABELGRP..."
+"Rng()" -> "SGROUP..."
+
+"Monoid()" [color=lightblue];
+"Monoid()" -> "SGROUP..."
+
+"LeftModule(a:Ring)" [color=seagreen];
+"LeftModule(a:Ring)" -> "LeftModule(a:Rng)"
+
+"LeftModule(a:Rng)" [color=lightblue];
+"LeftModule(a:Rng)" -> "ABELGRP..."
+
+"SGROUP..." [color=lightblue];
+"ABELGRP..." [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{LinearlyExplicitRingOver}{LINEXP}
 \pagepic{ps/v102linearlyexplicitringover.ps}{LINEXP}{0.90}
 
@@ -23369,6 +24230,7 @@ digraph pic {
 \pagepic{ps/v102integraldomain.ps}{INTDOM}{0.65}
 
 {\bf See:}\\
+\pageto{FortranMachineTypeCategory}{FMTC}
 \pageto{GcdDomain}{GCDDOM}
 \pageto{OrderedIntegralDomain}{OINTDOM}
 \pageto{UnivariatePolynomialCategory}{UPOLYC}
@@ -23594,6 +24456,222 @@ digraph pic {
 @
 \chapter{Category Layer 13}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FortranMachineTypeCategory}{FMTC}
+\pagepic{ps/v102fortranmachinetypecategory.ps}{FMTC}{0.40}
+
+{\bf See:}\\
+\pagefrom{IntegralDomain}{INTDOM}
+\pagefrom{OrderedSet}{ORDSET}
+\pagefrom{RetractableTo}{RETRACT}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{FMTC}{0} &
+\cross{FMTC}{1} &
+\cross{FMTC}{associates?} &
+\cross{FMTC}{characteristic} &
+\cross{FMTC}{coerce} \\
+\cross{FMTC}{exquo} &
+\cross{FMTC}{hash} &
+\cross{FMTC}{latex} &
+\cross{FMTC}{max} &
+\cross{FMTC}{min} \\
+\cross{FMTC}{one?} &
+\cross{FMTC}{recip} &
+\cross{FMTC}{retract} &
+\cross{FMTC}{retractIfCan} &
+\cross{FMTC}{sample} \\
+\cross{FMTC}{subtractIfCan} &
+\cross{FMTC}{unit?} &
+\cross{FMTC}{unitCanonical} &
+\cross{FMTC}{unitNormal} &
+\cross{FMTC}{zero?} \\
+\cross{FMTC}{?\~{}=?} &
+\cross{FMTC}{?\^{}?} &
+\cross{FMTC}{?*?} &
+\cross{FMTC}{?**?} &
+\cross{FMTC}{?+?} \\
+\cross{FMTC}{?-?} &
+\cross{FMTC}{-?} &
+\cross{FMTC}{?$<$?} &
+\cross{FMTC}{?$<=$?} &
+\cross{FMTC}{?=?} \\
+\cross{FMTC}{?$>$?} &
+\cross{FMTC}{?$>=$?} &&&
+\end{tabular}
+
+{\bf Attributes Exported:}
+\begin{itemize}
+\item {\bf \cross{FMTC}{noZeroDivisors}}
+is true if $x * y ~= 0$ implies both x and y are non-zero.
+\item {\bf \cross{FMTC}{commutative("*")}}
+is true if it has an operation $"*": (D,D) -> D$
+which is commutative.
+\item {\bf \cross{FMTC}{unitsKnown}}
+is true if a monoid (a multiplicative semigroup with a 1) has 
+unitsKnown means that  the operation {\tt recip} can only return 
+``failed'' if its argument is not a unit.
+\item {\bf \cross{FMTC}{leftUnitary}}
+is true if $1 * x = x$ for all x.
+\item {\bf \cross{FMTC}{rightUnitary}}
+is true if $x * 1 = x$ for all x.
+\end{itemize}
+
+These exports come from \refto{IntegralDomain}():
+\begin{verbatim}
+ 0 : () -> %
+ 1 : () -> %                          
+ associates? : (%,%) -> Boolean
+ characteristic : () -> NonNegativeInteger
+ coerce : Integer -> %                
+ coerce : % -> OutputForm
+ coerce : % -> %
+ exquo : (%,%) -> Union(%,"failed")
+ hash : % -> SingleInteger            
+ latex : % -> String
+ one? : % -> Boolean                  
+ recip : % -> Union(%,"failed")
+ sample : () -> %
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ unit? : % -> Boolean                 
+ unitCanonical : % -> %
+ unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+ zero? : % -> Boolean                 
+ ?+? : (%,%) -> %                     
+ ?=? : (%,%) -> Boolean
+ ?~=? : (%,%) -> Boolean
+ ?*? : (%,%) -> %                     
+ ?*? : (Integer,%) -> %
+ ?*? : (NonNegativeInteger,%) -> %
+ ?*? : (PositiveInteger,%) -> %       
+ ?-? : (%,%) -> %
+ -? : % -> %                          
+ ?^? : (%,NonNegativeInteger) -> %
+ ?^? : (%,PositiveInteger) -> %       
+ ?**? : (%,NonNegativeInteger) -> %
+ ?**? : (%,PositiveInteger) -> %
+\end{verbatim}
+
+These exports come from \refto{OrderedSet}():
+\begin{verbatim}
+ max : (%,%) -> %                     
+ min : (%,%) -> %
+ ?<? : (%,%) -> Boolean
+ ?>? : (%,%) -> Boolean               
+ ?<=? : (%,%) -> Boolean              
+ ?>=? : (%,%) -> Boolean
+\end{verbatim}
+
+These exports come from \refto{RetractableTo}(Integer):
+\begin{verbatim}
+ coerce : Integer -> %                
+ retract : % -> Integer               
+ retractIfCan : % -> Union(Integer,"failed")
+\end{verbatim}
+
+<<category FMTC FortranMachineTypeCategory>>=
+)abbrev category FMTC FortranMachineTypeCategory
+++ Author: Mike Dewar
+++ Date Created:  December 1993
+++ Date Last Updated:
+++ Basic Operations:
+++ Related Domains:
+++ Also See: FortranExpression, MachineInteger, MachineFloat, MachineComplex
+++ AMS Classifications:
+++ Keywords:
+++ Examples:
+++ References:
+++ Description: A category of domains which model machine arithmetic
+++ used by machines in the AXIOM-NAG link.
+FortranMachineTypeCategory():Category == Join(IntegralDomain,OrderedSet,
+                                              RetractableTo(Integer) )
+
+@
+<<FMTC.dotabb>>=
+"FMTC"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMTC"];
+"FMTC" -> "INTDOM"
+"FMTC" -> "ORDSET"
+"FMTC" -> "RETRACT"
+
+@
+<<FMTC.dotfull>>=
+"FortranMachineTypeCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMTC"];
+"FortranMachineTypeCategory()" -> "IntegralDomain()"
+"FortranMachineTypeCategory()" -> "OrderedSet()"
+"FortranMachineTypeCategory()" -> "RetractableTo(Integer)"
+
+@
+<<FMTC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FortranMachineTypeCategory()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FMTC"];
+"FortranMachineTypeCategory()" -> "IntegralDomain()"
+"FortranMachineTypeCategory()" -> "OrderedSet()"
+"FortranMachineTypeCategory()" -> "RetractableTo(Integer)"
+
+"RetractableTo(Integer)"
+ [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"];
+"RetractableTo(Integer)" -> "RetractableTo(a:Type)"
+
+"RetractableTo(a:Type)"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=RETRACT"];
+"RetractableTo(a:Type)" -> "Category"
+
+"OrderedSet()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=ORDSET"];
+"OrderedSet()" -> "SetCategory()"
+
+"IntegralDomain()" [color=lightblue];
+"IntegralDomain()" -> "CommutativeRing()"
+"IntegralDomain()" -> "Algebra(a:CommutativeRing)"
+"IntegralDomain()" -> "EntireRing()"
+
+"CommutativeRing()" [color=lightblue];
+"CommutativeRing()" -> "RING..."
+"CommutativeRing()" -> "BMODULE..."
+
+"EntireRing()" [color=lightblue];
+"EntireRing()" -> "RING..."
+"EntireRing()" -> "BMODULE..."
+
+"Algebra(a:CommutativeRing)" [color=lightblue];
+"Algebra(a:CommutativeRing)" -> "RING..."
+"Algebra(a:CommutativeRing)" -> "Module(a:CommutativeRing)"
+
+"Module(a:CommutativeRing)" [color=lightblue];
+"Module(a:CommutativeRing)" ->
+  "BiModule(a:CommutativeRing,b:CommutativeRing)"
+
+"BiModule(a:CommutativeRing,b:CommutativeRing)" [color=seagreen];
+"BiModule(a:CommutativeRing,b:CommutativeRing)" -> "BMODULE..."
+
+"BMODULE..." [color=lightblue];
+"RING..." [color=lightblue];
+
+"SetCategory()" [color=lightblue];
+"SetCategory()" -> "BasicType()"
+"SetCategory()" -> "CoercibleTo(OutputForm)"
+
+"BasicType()" [color=lightblue];
+"BasicType()" -> "Category"
+
+"CoercibleTo(OutputForm)" [color=seagreen];
+"CoercibleTo(OutputForm)" -> "CoercibleTo(a:Type)"
+
+"CoercibleTo(a:Type)" [color=lightblue];
+"CoercibleTo(a:Type)" -> "Category"
+
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FramedNonAssociativeAlgebra}{FRNAALG}
 \pagepic{ps/v102framednonassociativealgebra.ps}{FRNAALG}{0.65}
 
@@ -41001,13 +42079,20 @@ Note that this code is not included in the generated catdef.spad file.
 <<category FINRALG FiniteRankAlgebra>>
 <<category FLAGG FiniteLinearAggregate>>
 <<category FLINEXP FullyLinearlyExplicitRingOver>>
+<<category FMFUN FortranMatrixFunctionCategory>>
+<<category FMTC FortranMachineTypeCategory>>
 <<category FNCAT FileNameCategory>>
+<<category FORTCAT FortranProgramCategory>>
+<<category FORTFN FortranFunctionCategory>>
+<<category FMC FortranMatrixCategory>>
 <<category FPATMAB FullyPatternMatchable>>
 <<category FPC FieldOfPrimeCharacteristic>>
 <<category FRAMALG FramedAlgebra>>
 <<category FRETRCT FullyRetractableTo>>
 <<category FRNAALG FramedNonAssociativeAlgebra>>
 <<category FSAGG FiniteSetAggregate>>
+<<category FVC FortranVectorCategory>>
+<<category FVFUN FortranVectorFunctionCategory>>
 <<category GCDDOM GcdDomain>>
 <<category GRALG GradedAlgebra>>
 <<category GRMOD GradedModule>>
@@ -41020,6 +42105,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category KDAGG KeyedDictionary>>
 <<category KOERCE CoercibleTo>>
 <<category KONVERT ConvertibleTo>>
+<<category LALG LeftAlgebra>>
 <<category LFCAT LiouvillianFunctionCategory>>
 <<category LINEXP LinearlyExplicitRingOver>>
 <<category LMODULE LeftModule>>
@@ -41141,13 +42227,20 @@ digraph dotabb {
 <<FINRALG.dotabb>>
 <<FLAGG.dotabb>>
 <<FLINEXP.dotabb>>
+<<FMFUN.dotabb>>
+<<FMTC.dotabb>>
 <<FNCAT.dotabb>>
+<<FORTCAT.dotabb>>
+<<FORTFN.dotabb>>
+<<FMC.dotabb>>
 <<FPATMAB.dotabb>>
 <<FPC.dotabb>>
 <<FRAMALG.dotabb>>
 <<FRETRCT.dotabb>>
 <<FRNAALG.dotabb>>
 <<FSAGG.dotabb>>
+<<FVC.dotabb>>
+<<FVFUN.dotabb>>
 <<GCDDOM.dotabb>>
 <<GRALG.dotabb>>
 <<GRMOD.dotabb>>
@@ -41159,6 +42252,7 @@ digraph dotabb {
 <<KDAGG.dotabb>>
 <<KOERCE.dotabb>>
 <<KONVERT.dotabb>>
+<<LALG.dotabb>>
 <<LFCAT.dotabb>>
 <<LINEXP.dotabb>>
 <<LMODULE.dotabb>>
@@ -41283,13 +42377,20 @@ digraph dotfull {
 <<FINRALG.dotfull>>
 <<FLAGG.dotfull>>
 <<FLINEXP.dotfull>>
+<<FMFUN.dotabb>>
+<<FMTC.dotfull>>
 <<FNCAT.dotfull>>
+<<FORTCAT.dotfull>>
+<<FORTFN.dotfull>>
+<<FMC.dotfull>>
 <<FPATMAB.dotfull>>
 <<FPC.dotfull>>
 <<FRAMALG.dotfull>>
 <<FRETRCT.dotfull>>
 <<FRNAALG.dotfull>>
 <<FSAGG.dotfull>>
+<<FVC.dotfull>>
+<<FVFUN.dotfull>>
 <<GCDDOM.dotfull>>
 <<GRALG.dotfull>>
 <<GRMOD.dotfull>>
@@ -41301,6 +42402,7 @@ digraph dotfull {
 <<KDAGG.dotfull>>
 <<KOERCE.dotfull>>
 <<KONVERT.dotfull>>
+<<LALG.dotfull>>
 <<LFCAT.dotfull>>
 <<LINEXP.dotfull>>
 <<LMODULE.dotfull>>
diff --git a/books/ps/v102fortranfunctioncategory.ps b/books/ps/v102fortranfunctioncategory.ps
new file mode 100644
index 0000000..131676b
--- /dev/null
+++ b/books/ps/v102fortranfunctioncategory.ps
@@ -0,0 +1,494 @@
+%!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 265 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 265 368
+%%PageOrientation: Portrait
+gsave
+36 36 229 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
+227 330 lineto
+227 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+227 330 lineto
+227 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 168 324 moveto
+0 324 lineto
+0 288 lineto
+168 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 168 324 moveto
+0 324 lineto
+0 288 lineto
+168 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 301 moveto
+(FortranFunctionCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 167 252 moveto
+1 252 lineto
+1 216 lineto
+167 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 167 252 moveto
+1 252 lineto
+1 216 lineto
+167 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranFunctionCategory()->FortranProgramCategory()
+newpath 84 288 moveto
+84 280 84 271 84 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 88 262 moveto
+84 252 lineto
+81 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 88 262 moveto
+84 252 lineto
+81 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 56 108 moveto
+2 108 lineto
+2 72 lineto
+56 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 56 108 moveto
+2 108 lineto
+2 72 lineto
+56 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+10 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 69 216 moveto
+62 206 53 193 48 180 curveto
+40 160 35 136 32 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 35 118 moveto
+31 108 lineto
+29 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 35 118 moveto
+31 108 lineto
+29 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 221 180 moveto
+57 180 lineto
+57 144 lineto
+221 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 221 180 moveto
+57 180 lineto
+57 144 lineto
+221 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+65 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 98 216 moveto
+104 208 112 197 119 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 122 190 moveto
+125 180 lineto
+116 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 122 190 moveto
+125 180 lineto
+116 186 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 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+58 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 43 72 moveto
+49 64 57 53 64 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 67 46 moveto
+70 36 lineto
+61 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 67 46 moveto
+70 36 lineto
+61 42 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 206 108 moveto
+74 108 lineto
+74 72 lineto
+206 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 206 108 moveto
+74 108 lineto
+74 72 lineto
+206 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+82 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 139 144 moveto
+140 136 140 127 140 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 144 118 moveto
+140 108 lineto
+137 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 144 118 moveto
+140 108 lineto
+137 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 126 72 moveto
+119 64 111 53 104 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 107 42 moveto
+98 36 lineto
+101 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 107 42 moveto
+98 36 lineto
+101 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranmachinetypecategory.ps b/books/ps/v102fortranmachinetypecategory.ps
new file mode 100644
index 0000000..6095c3c
--- /dev/null
+++ b/books/ps/v102fortranmachinetypecategory.ps
@@ -0,0 +1,1122 @@
+%!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 887 440
+%%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 887 440
+%%PageOrientation: Portrait
+gsave
+36 36 851 404 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 402 lineto
+849 402 lineto
+849 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 402 lineto
+849 402 lineto
+849 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranMachineTypeCategory()
+[ /Rect [ 424 360 618 396 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FMTC) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 618 396 moveto
+424 396 lineto
+424 360 lineto
+618 360 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 618 396 moveto
+424 396 lineto
+424 360 lineto
+618 360 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+431 373 moveto
+(FortranMachineTypeCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 12.48 6.24 6 6.96 3.84 6.96 6.24 7.2 6.96 6.96 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
+% IntegralDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 322 324 moveto
+208 324 lineto
+208 288 lineto
+322 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 322 324 moveto
+208 324 lineto
+208 288 lineto
+322 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+215 301 moveto
+(IntegralDomain\(\))
+[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 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranMachineTypeCategory()->IntegralDomain()
+newpath 457 360 moveto
+419 350 370 336 332 325 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 333 322 moveto
+322 322 lineto
+331 328 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 333 322 moveto
+322 322 lineto
+331 328 lineto
+closepath
+stroke
+end grestore
+% OrderedSet()
+[ /Rect [ 628 288 716 324 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=ORDSET) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 716 324 moveto
+628 324 lineto
+628 288 lineto
+716 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 716 324 moveto
+628 324 lineto
+628 288 lineto
+716 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+635 301 moveto
+(OrderedSet\(\))
+[10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranMachineTypeCategory()->OrderedSet()
+newpath 559 360 moveto
+579 350 604 339 625 329 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 627 332 moveto
+634 324 lineto
+624 326 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 627 332 moveto
+634 324 lineto
+624 326 lineto
+closepath
+stroke
+end grestore
+% RetractableTo(Integer)
+[ /Rect [ 450 288 592 324 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=RETRACT) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 592 324 moveto
+450 324 lineto
+450 288 lineto
+592 288 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 592 324 moveto
+450 324 lineto
+450 288 lineto
+592 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+457 301 moveto
+(RetractableTo\(Integer\))
+[9.12 6 3.84 4.8 6.24 6.24 4.08 6.24 6.96 3.84 6.24 7.44 6.96 4.56 4.56 6.96 3.84 6.24 6.72 6.24 4.8 4.56]
+xshow
+end grestore
+end grestore
+% FortranMachineTypeCategory()->RetractableTo(Integer)
+newpath 521 360 moveto
+521 352 521 343 521 334 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 525 334 moveto
+521 324 lineto
+518 334 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 525 334 moveto
+521 324 lineto
+518 334 lineto
+closepath
+stroke
+end grestore
+% CommutativeRing()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 128 252 moveto
+0 252 lineto
+0 216 lineto
+128 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 128 252 moveto
+0 252 lineto
+0 216 lineto
+128 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 229 moveto
+(CommutativeRing\(\))
+[9.36 6.96 10.8 10.8 6.96 4.08 6.24 3.84 3.84 6.48 6.24 9.36 3.84 6.96 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% IntegralDomain()->CommutativeRing()
+newpath 215 288 moveto
+187 278 153 266 124 255 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 125 252 moveto
+114 252 lineto
+123 258 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 125 252 moveto
+114 252 lineto
+123 258 lineto
+closepath
+stroke
+end grestore
+% Algebra(a:CommutativeRing)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 434 252 moveto
+250 252 lineto
+250 216 lineto
+434 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 434 252 moveto
+250 252 lineto
+250 216 lineto
+434 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+258 229 moveto
+(Algebra\(a:CommutativeRing\))
+[10.08 3.84 6.72 6.24 6.96 4.8 6.24 4.56 6.24 3.84 9.36 6.96 10.8 10.8 6.96 4.08 6.24 3.84 3.84 6.48 6.24 9.36 3.84 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% IntegralDomain()->Algebra(a:CommutativeRing)
+newpath 284 288 moveto
+294 279 305 269 315 259 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 318 261 moveto
+323 252 lineto
+313 256 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 318 261 moveto
+323 252 lineto
+313 256 lineto
+closepath
+stroke
+end grestore
+% EntireRing()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 232 252 moveto
+146 252 lineto
+146 216 lineto
+232 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 232 252 moveto
+146 252 lineto
+146 216 lineto
+232 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+153 229 moveto
+(EntireRing\(\))
+[8.64 6.96 3.84 3.84 4.8 6.24 9.36 3.84 6.96 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% IntegralDomain()->EntireRing()
+newpath 246 288 moveto
+236 279 225 269 215 259 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 218 257 moveto
+208 252 lineto
+213 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 218 257 moveto
+208 252 lineto
+213 262 lineto
+closepath
+stroke
+end grestore
+% SetCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 738 252 moveto
+644 252 lineto
+644 216 lineto
+738 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 738 252 moveto
+644 252 lineto
+644 216 lineto
+738 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+651 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
+% OrderedSet()->SetCategory()
+newpath 677 288 moveto
+679 280 681 271 683 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 686 263 moveto
+686 252 lineto
+680 261 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 686 263 moveto
+686 252 lineto
+680 261 lineto
+closepath
+stroke
+end grestore
+% RetractableTo(a:Type)
+[ /Rect [ 451 144 591 180 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=RETRACT) >>
+  /Subtype /Link
+/ANN pdfmark
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 591 180 moveto
+451 180 lineto
+451 144 lineto
+591 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 591 180 moveto
+451 180 lineto
+451 144 lineto
+591 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+458 157 moveto
+(RetractableTo\(a:Type\))
+[9.12 6 3.84 4.8 6.24 6.24 4.08 6.24 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
+% RetractableTo(Integer)->RetractableTo(a:Type)
+newpath 521 288 moveto
+521 263 521 219 521 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 525 190 moveto
+521 180 lineto
+518 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 525 190 moveto
+521 180 lineto
+518 190 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 709 36 moveto
+641 36 lineto
+641 0 lineto
+709 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 709 36 moveto
+641 36 lineto
+641 0 lineto
+709 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+649 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% RetractableTo(a:Type)->Category
+newpath 535 144 moveto
+549 125 575 94 600 72 curveto
+611 61 625 51 638 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 640 45 moveto
+646 36 lineto
+636 39 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 640 45 moveto
+646 36 lineto
+636 39 lineto
+closepath
+stroke
+end grestore
+% BasicType()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 843 108 moveto
+759 108 lineto
+759 72 lineto
+843 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 843 108 moveto
+759 108 lineto
+759 72 lineto
+843 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+766 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 737 216 moveto
+753 207 771 195 782 180 curveto
+795 162 799 137 800 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 803 118 moveto
+801 108 lineto
+797 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 803 118 moveto
+801 108 lineto
+797 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 773 180 moveto
+609 180 lineto
+609 144 lineto
+773 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 773 180 moveto
+609 180 lineto
+609 144 lineto
+773 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+617 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 691 216 moveto
+691 208 691 199 691 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 695 190 moveto
+691 180 lineto
+688 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 695 190 moveto
+691 180 lineto
+688 190 lineto
+closepath
+stroke
+end grestore
+% RING...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 158 180 moveto
+98 180 lineto
+98 144 lineto
+158 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 158 180 moveto
+98 180 lineto
+98 144 lineto
+158 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+105 157 moveto
+(RING...)
+[9.36 4.56 9.84 10.08 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% CommutativeRing()->RING...
+newpath 80 216 moveto
+88 207 97 197 105 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 108 190 moveto
+112 180 lineto
+103 185 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 108 190 moveto
+112 180 lineto
+103 185 lineto
+closepath
+stroke
+end grestore
+% BMODULE...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 235 36 moveto
+137 36 lineto
+137 0 lineto
+235 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 235 36 moveto
+137 36 lineto
+137 0 lineto
+235 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+145 13 moveto
+(BMODULE...)
+[9.36 12.48 10.08 10.08 10.08 8.64 8.64 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% CommutativeRing()->BMODULE...
+newpath 67 216 moveto
+71 197 78 167 89 144 curveto
+108 105 139 68 161 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 164 46 moveto
+168 36 lineto
+159 41 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 164 46 moveto
+168 36 lineto
+159 41 lineto
+closepath
+stroke
+end grestore
+% Algebra(a:CommutativeRing)->RING...
+newpath 288 216 moveto
+251 203 202 187 168 175 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 169 172 moveto
+158 172 lineto
+167 178 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 169 172 moveto
+158 172 lineto
+167 178 lineto
+closepath
+stroke
+end grestore
+% Module(a:CommutativeRing)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 433 180 moveto
+251 180 lineto
+251 144 lineto
+433 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 433 180 moveto
+251 180 lineto
+251 144 lineto
+433 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+258 157 moveto
+(Module\(a:CommutativeRing\))
+[12.48 6.96 6.96 6.96 3.84 6.24 4.56 6.24 3.84 9.36 6.96 10.8 10.8 6.96 4.08 6.24 3.84 3.84 6.48 6.24 9.36 3.84 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% Algebra(a:CommutativeRing)->Module(a:CommutativeRing)
+newpath 342 216 moveto
+342 208 342 199 342 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 346 190 moveto
+342 180 lineto
+339 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 346 190 moveto
+342 180 lineto
+339 190 lineto
+closepath
+stroke
+end grestore
+% EntireRing()->RING...
+newpath 174 216 moveto
+167 207 158 197 150 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 152 185 moveto
+143 180 lineto
+147 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 152 185 moveto
+143 180 lineto
+147 190 lineto
+closepath
+stroke
+end grestore
+% EntireRing()->BMODULE...
+newpath 189 216 moveto
+188 178 187 91 186 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 190 46 moveto
+186 36 lineto
+183 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 190 46 moveto
+186 36 lineto
+183 46 lineto
+closepath
+stroke
+end grestore
+% BiModule(a:CommutativeRing,b:CommutativeRing)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 526 108 moveto
+214 108 lineto
+214 72 lineto
+526 72 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 526 108 moveto
+214 108 lineto
+214 72 lineto
+526 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+221 85 moveto
+(BiModule\(a:CommutativeRing,b:CommutativeRing\))
+[9.36 3.84 12.48 6.96 6.96 6.96 3.84 6.24 4.56 6.24 3.84 9.36 6.96 10.8 10.8 6.96 4.08 6.24 3.84 3.84 6.48 6.24 9.36 3.84 6.96 6.96 3.6 6.96 3.84 9.36 6.96 10.8 10.8 6.96 4.08 6.24 3.84 3.84 6.48 6.24 9.36 3.84 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% Module(a:CommutativeRing)->BiModule(a:CommutativeRing,b:CommutativeRing)
+newpath 349 144 moveto
+352 136 356 126 359 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 363 119 moveto
+363 108 lineto
+356 116 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 363 119 moveto
+363 108 lineto
+356 116 lineto
+closepath
+stroke
+end grestore
+% BiModule(a:CommutativeRing,b:CommutativeRing)->BMODULE...
+newpath 324 72 moveto
+299 62 268 50 241 40 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 243 37 moveto
+232 36 lineto
+240 43 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 243 37 moveto
+232 36 lineto
+240 43 lineto
+closepath
+stroke
+end grestore
+% BasicType()->Category
+newpath 769 72 moveto
+753 63 733 51 715 41 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 716 38 moveto
+706 36 lineto
+713 44 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 716 38 moveto
+706 36 lineto
+713 44 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 741 108 moveto
+609 108 lineto
+609 72 lineto
+741 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 741 108 moveto
+609 108 lineto
+609 72 lineto
+741 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+617 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 687 144 moveto
+685 136 683 127 681 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 684 117 moveto
+679 108 lineto
+678 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 684 117 moveto
+679 108 lineto
+678 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 675 72 moveto
+675 64 675 55 675 46 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 679 46 moveto
+675 36 lineto
+672 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 679 46 moveto
+675 36 lineto
+672 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranmatrixcategory.ps b/books/ps/v102fortranmatrixcategory.ps
new file mode 100644
index 0000000..4e41e32
--- /dev/null
+++ b/books/ps/v102fortranmatrixcategory.ps
@@ -0,0 +1,494 @@
+%!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 264 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 264 368
+%%PageOrientation: Portrait
+gsave
+36 36 228 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
+226 330 lineto
+226 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+226 330 lineto
+226 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranMatrixCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 161 324 moveto
+5 324 lineto
+5 288 lineto
+161 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 161 324 moveto
+5 324 lineto
+5 288 lineto
+161 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+12 301 moveto
+(FortranMatrixCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 12.48 6.24 3.84 5.04 3.84 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 166 252 moveto
+0 252 lineto
+0 216 lineto
+166 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 166 252 moveto
+0 252 lineto
+0 216 lineto
+166 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranMatrixCategory()->FortranProgramCategory()
+newpath 83 288 moveto
+83 280 83 271 83 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 87 262 moveto
+83 252 lineto
+80 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 87 262 moveto
+83 252 lineto
+80 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 55 108 moveto
+1 108 lineto
+1 72 lineto
+55 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 55 108 moveto
+1 108 lineto
+1 72 lineto
+55 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+9 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 68 216 moveto
+61 206 52 193 47 180 curveto
+39 160 34 136 31 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 34 118 moveto
+30 108 lineto
+28 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 34 118 moveto
+30 108 lineto
+28 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 220 180 moveto
+56 180 lineto
+56 144 lineto
+220 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 220 180 moveto
+56 180 lineto
+56 144 lineto
+220 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+64 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 97 216 moveto
+103 208 111 197 118 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 121 190 moveto
+124 180 lineto
+115 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 121 190 moveto
+124 180 lineto
+115 186 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 117 36 moveto
+49 36 lineto
+49 0 lineto
+117 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 117 36 moveto
+49 36 lineto
+49 0 lineto
+117 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+57 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 42 72 moveto
+48 64 56 53 63 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 66 46 moveto
+69 36 lineto
+60 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 66 46 moveto
+69 36 lineto
+60 42 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 205 108 moveto
+73 108 lineto
+73 72 lineto
+205 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 205 108 moveto
+73 108 lineto
+73 72 lineto
+205 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+81 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 138 144 moveto
+139 136 139 127 139 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 143 118 moveto
+139 108 lineto
+136 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 143 118 moveto
+139 108 lineto
+136 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 125 72 moveto
+118 64 110 53 103 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 106 42 moveto
+97 36 lineto
+100 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 106 42 moveto
+97 36 lineto
+100 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranmatrixfunctioncategory.ps b/books/ps/v102fortranmatrixfunctioncategory.ps
new file mode 100644
index 0000000..8ad54a6
--- /dev/null
+++ b/books/ps/v102fortranmatrixfunctioncategory.ps
@@ -0,0 +1,494 @@
+%!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 284 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 284 368
+%%PageOrientation: Portrait
+gsave
+36 36 248 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
+246 330 lineto
+246 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+246 330 lineto
+246 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranMatrixFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 206 324 moveto
+0 324 lineto
+0 288 lineto
+206 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 206 324 moveto
+0 324 lineto
+0 288 lineto
+206 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 301 moveto
+(FortranMatrixFunctionCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 12.48 6.24 3.84 5.04 3.84 6.96 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 186 252 moveto
+20 252 lineto
+20 216 lineto
+186 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 186 252 moveto
+20 252 lineto
+20 216 lineto
+186 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+27 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranMatrixFunctionCategory()->FortranProgramCategory()
+newpath 103 288 moveto
+103 280 103 271 103 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 107 262 moveto
+103 252 lineto
+100 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 107 262 moveto
+103 252 lineto
+100 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 75 108 moveto
+21 108 lineto
+21 72 lineto
+75 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 75 108 moveto
+21 108 lineto
+21 72 lineto
+75 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+29 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 88 216 moveto
+81 206 72 193 67 180 curveto
+59 160 54 136 51 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 54 118 moveto
+50 108 lineto
+48 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 54 118 moveto
+50 108 lineto
+48 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 240 180 moveto
+76 180 lineto
+76 144 lineto
+240 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 240 180 moveto
+76 180 lineto
+76 144 lineto
+240 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+84 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 117 216 moveto
+123 208 131 197 138 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 141 190 moveto
+144 180 lineto
+135 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 141 190 moveto
+144 180 lineto
+135 186 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 137 36 moveto
+69 36 lineto
+69 0 lineto
+137 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 137 36 moveto
+69 36 lineto
+69 0 lineto
+137 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+77 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 62 72 moveto
+68 64 76 53 83 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 86 46 moveto
+89 36 lineto
+80 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 86 46 moveto
+89 36 lineto
+80 42 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 225 108 moveto
+93 108 lineto
+93 72 lineto
+225 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 225 108 moveto
+93 108 lineto
+93 72 lineto
+225 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+101 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 158 144 moveto
+159 136 159 127 159 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 163 118 moveto
+159 108 lineto
+156 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 163 118 moveto
+159 108 lineto
+156 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 145 72 moveto
+138 64 130 53 123 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 126 42 moveto
+117 36 lineto
+120 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 126 42 moveto
+117 36 lineto
+120 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranprogramcategory.ps b/books/ps/v102fortranprogramcategory.ps
new file mode 100644
index 0000000..131676b
--- /dev/null
+++ b/books/ps/v102fortranprogramcategory.ps
@@ -0,0 +1,494 @@
+%!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 265 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 265 368
+%%PageOrientation: Portrait
+gsave
+36 36 229 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
+227 330 lineto
+227 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+227 330 lineto
+227 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 168 324 moveto
+0 324 lineto
+0 288 lineto
+168 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 168 324 moveto
+0 324 lineto
+0 288 lineto
+168 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 301 moveto
+(FortranFunctionCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 167 252 moveto
+1 252 lineto
+1 216 lineto
+167 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 167 252 moveto
+1 252 lineto
+1 216 lineto
+167 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranFunctionCategory()->FortranProgramCategory()
+newpath 84 288 moveto
+84 280 84 271 84 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 88 262 moveto
+84 252 lineto
+81 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 88 262 moveto
+84 252 lineto
+81 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 56 108 moveto
+2 108 lineto
+2 72 lineto
+56 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 56 108 moveto
+2 108 lineto
+2 72 lineto
+56 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+10 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 69 216 moveto
+62 206 53 193 48 180 curveto
+40 160 35 136 32 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 35 118 moveto
+31 108 lineto
+29 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 35 118 moveto
+31 108 lineto
+29 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 221 180 moveto
+57 180 lineto
+57 144 lineto
+221 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 221 180 moveto
+57 180 lineto
+57 144 lineto
+221 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+65 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 98 216 moveto
+104 208 112 197 119 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 122 190 moveto
+125 180 lineto
+116 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 122 190 moveto
+125 180 lineto
+116 186 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 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 118 36 moveto
+50 36 lineto
+50 0 lineto
+118 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+58 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 43 72 moveto
+49 64 57 53 64 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 67 46 moveto
+70 36 lineto
+61 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 67 46 moveto
+70 36 lineto
+61 42 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 206 108 moveto
+74 108 lineto
+74 72 lineto
+206 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 206 108 moveto
+74 108 lineto
+74 72 lineto
+206 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+82 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 139 144 moveto
+140 136 140 127 140 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 144 118 moveto
+140 108 lineto
+137 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 144 118 moveto
+140 108 lineto
+137 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 126 72 moveto
+119 64 111 53 104 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 107 42 moveto
+98 36 lineto
+101 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 107 42 moveto
+98 36 lineto
+101 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranvectorcategory.ps b/books/ps/v102fortranvectorcategory.ps
new file mode 100644
index 0000000..6af87d5
--- /dev/null
+++ b/books/ps/v102fortranvectorcategory.ps
@@ -0,0 +1,494 @@
+%!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 264 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 264 368
+%%PageOrientation: Portrait
+gsave
+36 36 228 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
+226 330 lineto
+226 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+226 330 lineto
+226 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranVectorCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 161 324 moveto
+5 324 lineto
+5 288 lineto
+161 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 161 324 moveto
+5 324 lineto
+5 288 lineto
+161 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+13 301 moveto
+(FortranVectorCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 8.88 6.24 6.24 3.84 6.96 4.8 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
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 166 252 moveto
+0 252 lineto
+0 216 lineto
+166 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 166 252 moveto
+0 252 lineto
+0 216 lineto
+166 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranVectorCategory()->FortranProgramCategory()
+newpath 83 288 moveto
+83 280 83 271 83 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 87 262 moveto
+83 252 lineto
+80 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 87 262 moveto
+83 252 lineto
+80 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 55 108 moveto
+1 108 lineto
+1 72 lineto
+55 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 55 108 moveto
+1 108 lineto
+1 72 lineto
+55 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+9 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 68 216 moveto
+61 206 52 193 47 180 curveto
+39 160 34 136 31 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 34 118 moveto
+30 108 lineto
+28 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 34 118 moveto
+30 108 lineto
+28 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 220 180 moveto
+56 180 lineto
+56 144 lineto
+220 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 220 180 moveto
+56 180 lineto
+56 144 lineto
+220 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+64 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 97 216 moveto
+103 208 111 197 118 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 121 190 moveto
+124 180 lineto
+115 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 121 190 moveto
+124 180 lineto
+115 186 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 117 36 moveto
+49 36 lineto
+49 0 lineto
+117 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 117 36 moveto
+49 36 lineto
+49 0 lineto
+117 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+57 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 42 72 moveto
+48 64 56 53 63 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 66 46 moveto
+69 36 lineto
+60 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 66 46 moveto
+69 36 lineto
+60 42 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 205 108 moveto
+73 108 lineto
+73 72 lineto
+205 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 205 108 moveto
+73 108 lineto
+73 72 lineto
+205 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+81 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 138 144 moveto
+139 136 139 127 139 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 143 118 moveto
+139 108 lineto
+136 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 143 118 moveto
+139 108 lineto
+136 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 125 72 moveto
+118 64 110 53 103 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 106 42 moveto
+97 36 lineto
+100 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 106 42 moveto
+97 36 lineto
+100 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fortranvectorfunctioncategory.ps b/books/ps/v102fortranvectorfunctioncategory.ps
new file mode 100644
index 0000000..286b3e7
--- /dev/null
+++ b/books/ps/v102fortranvectorfunctioncategory.ps
@@ -0,0 +1,494 @@
+%!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 283 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 283 368
+%%PageOrientation: Portrait
+gsave
+36 36 247 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
+245 330 lineto
+245 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+245 330 lineto
+245 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FortranVectorFunctionCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 204 324 moveto
+0 324 lineto
+0 288 lineto
+204 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 204 324 moveto
+0 324 lineto
+0 288 lineto
+204 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 301 moveto
+(FortranVectorFunctionCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 8.88 6.24 6.24 3.84 6.96 4.8 7.44 6.96 6.96 6.24 3.84 3.84 6.96 6.96 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 185 252 moveto
+19 252 lineto
+19 216 lineto
+185 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 185 252 moveto
+19 252 lineto
+19 216 lineto
+185 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+26 229 moveto
+(FortranProgramCategory\(\))
+[7.44 6.96 5.04 3.84 4.8 6.24 6.96 7.68 4.8 6.96 7.2 4.8 6.24 10.8 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
+% FortranVectorFunctionCategory()->FortranProgramCategory()
+newpath 102 288 moveto
+102 280 102 271 102 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 106 262 moveto
+102 252 lineto
+99 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 106 262 moveto
+102 252 lineto
+99 262 lineto
+closepath
+stroke
+end grestore
+% Type()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 74 108 moveto
+20 108 lineto
+20 72 lineto
+74 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 74 108 moveto
+20 108 lineto
+20 72 lineto
+74 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+28 85 moveto
+(Type\(\))
+[7.2 6.96 6.96 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FortranProgramCategory()->Type()
+newpath 87 216 moveto
+80 206 71 193 66 180 curveto
+58 160 53 136 50 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 53 118 moveto
+49 108 lineto
+47 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 53 118 moveto
+49 108 lineto
+47 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(OutputForm)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 239 180 moveto
+75 180 lineto
+75 144 lineto
+239 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 239 180 moveto
+75 180 lineto
+75 144 lineto
+239 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+83 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
+% FortranProgramCategory()->CoercibleTo(OutputForm)
+newpath 116 216 moveto
+122 208 130 197 137 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 140 190 moveto
+143 180 lineto
+134 186 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 140 190 moveto
+143 180 lineto
+134 186 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 136 36 moveto
+68 36 lineto
+68 0 lineto
+136 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 136 36 moveto
+68 36 lineto
+68 0 lineto
+136 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+76 13 moveto
+(Category)
+[9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96]
+xshow
+end grestore
+end grestore
+% Type()->Category
+newpath 61 72 moveto
+67 64 75 53 82 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+88 36 lineto
+79 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 85 46 moveto
+88 36 lineto
+79 42 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 224 108 moveto
+92 108 lineto
+92 72 lineto
+224 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 224 108 moveto
+92 108 lineto
+92 72 lineto
+224 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+100 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 157 144 moveto
+158 136 158 127 158 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 162 118 moveto
+158 108 lineto
+155 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 162 118 moveto
+158 108 lineto
+155 118 lineto
+closepath
+stroke
+end grestore
+% CoercibleTo(a:Type)->Category
+newpath 144 72 moveto
+137 64 129 53 122 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 125 42 moveto
+116 36 lineto
+119 46 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 125 42 moveto
+116 36 lineto
+119 46 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102leftalgebra.ps b/books/ps/v102leftalgebra.ps
new file mode 100644
index 0000000..6780ff7
--- /dev/null
+++ b/books/ps/v102leftalgebra.ps
@@ -0,0 +1,626 @@
+%!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 334 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 334 368
+%%PageOrientation: Portrait
+gsave
+36 36 298 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
+296 330 lineto
+296 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+296 330 lineto
+296 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% LeftAlgebra(a:Ring)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 185 324 moveto
+55 324 lineto
+55 288 lineto
+185 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 185 324 moveto
+55 324 lineto
+55 288 lineto
+185 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+62 301 moveto
+(LeftAlgebra\(a:Ring\))
+[8.64 6.24 4.8 3.84 10.08 3.84 6.72 6.24 6.96 4.8 6.24 4.56 6.24 3.84 9.36 3.84 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% LeftModule(a:Ring)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 130 180 moveto
+0 180 lineto
+0 144 lineto
+130 144 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 130 180 moveto
+0 180 lineto
+0 144 lineto
+130 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 157 moveto
+(LeftModule\(a:Ring\))
+[8.64 6.24 4.8 3.84 12.48 6.96 6.96 6.96 3.84 6.24 4.56 6.24 3.84 9.36 3.84 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% LeftAlgebra(a:Ring)->LeftModule(a:Ring)
+newpath 113 288 moveto
+103 263 86 219 75 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 78 189 moveto
+72 180 lineto
+72 191 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 78 189 moveto
+72 180 lineto
+72 191 lineto
+closepath
+stroke
+end grestore
+% Ring()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 188 252 moveto
+134 252 lineto
+134 216 lineto
+188 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 188 252 moveto
+134 252 lineto
+134 216 lineto
+188 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+142 229 moveto
+(Ring\(\))
+[9.36 3.84 6.96 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% LeftAlgebra(a:Ring)->Ring()
+newpath 130 288 moveto
+135 280 140 270 146 261 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 149 262 moveto
+151 252 lineto
+143 259 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 149 262 moveto
+151 252 lineto
+143 259 lineto
+closepath
+stroke
+end grestore
+% LeftModule(a:Rng)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 137 108 moveto
+11 108 lineto
+11 72 lineto
+137 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 137 108 moveto
+11 108 lineto
+11 72 lineto
+137 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+19 85 moveto
+(LeftModule\(a:Rng\))
+[8.64 6.24 4.8 3.84 12.48 6.96 6.96 6.96 3.84 6.24 4.56 6.24 3.84 9.36 6.96 6.96 4.56]
+xshow
+end grestore
+end grestore
+% LeftModule(a:Ring)->LeftModule(a:Rng)
+newpath 67 144 moveto
+68 136 69 127 70 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 73 118 moveto
+72 108 lineto
+67 117 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 73 118 moveto
+72 108 lineto
+67 117 lineto
+closepath
+stroke
+end grestore
+% Ring()->LeftModule(a:Ring)
+newpath 137 216 moveto
+125 207 110 196 97 186 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 99 183 moveto
+89 180 lineto
+95 189 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 99 183 moveto
+89 180 lineto
+95 189 lineto
+closepath
+stroke
+end grestore
+% Rng()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 202 180 moveto
+148 180 lineto
+148 144 lineto
+202 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 202 180 moveto
+148 180 lineto
+148 144 lineto
+202 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+158 157 moveto
+(Rng\(\))
+[9.36 6.96 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Ring()->Rng()
+newpath 165 216 moveto
+166 208 168 199 170 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 173 190 moveto
+172 180 lineto
+167 189 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 173 190 moveto
+172 180 lineto
+167 189 lineto
+closepath
+stroke
+end grestore
+% Monoid()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 290 180 moveto
+220 180 lineto
+220 144 lineto
+290 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 290 180 moveto
+220 180 lineto
+220 144 lineto
+290 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+227 157 moveto
+(Monoid\(\))
+[12.48 6.96 6.96 6.96 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Ring()->Monoid()
+newpath 185 216 moveto
+196 207 211 196 224 186 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 226 189 moveto
+232 180 lineto
+222 183 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 226 189 moveto
+232 180 lineto
+222 183 lineto
+closepath
+stroke
+end grestore
+% ABELGRP...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 167 36 moveto
+77 36 lineto
+77 0 lineto
+167 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 167 36 moveto
+77 36 lineto
+77 0 lineto
+167 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+84 13 moveto
+(ABELGRP...)
+[10.08 9.36 8.64 8.64 10.08 9.36 6.24 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% Rng()->ABELGRP...
+newpath 170 144 moveto
+164 125 155 96 146 72 curveto
+142 63 138 54 134 45 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 137 44 moveto
+130 36 lineto
+131 47 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 137 44 moveto
+130 36 lineto
+131 47 lineto
+closepath
+stroke
+end grestore
+% SGROUP...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 286 108 moveto
+206 108 lineto
+206 72 lineto
+286 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 286 108 moveto
+206 108 lineto
+206 72 lineto
+286 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+214 85 moveto
+(SGROUP...)
+[7.68 10.08 8.64 10.08 10.08 6.24 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% Rng()->SGROUP...
+newpath 193 144 moveto
+202 135 212 125 221 116 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 224 118 moveto
+228 108 lineto
+219 113 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 224 118 moveto
+228 108 lineto
+219 113 lineto
+closepath
+stroke
+end grestore
+% Monoid()->SGROUP...
+newpath 253 144 moveto
+252 136 251 127 250 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 253 117 moveto
+248 108 lineto
+247 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 253 117 moveto
+248 108 lineto
+247 118 lineto
+closepath
+stroke
+end grestore
+% LeftModule(a:Rng)->ABELGRP...
+newpath 86 72 moveto
+91 64 98 54 104 44 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 107 46 moveto
+110 36 lineto
+101 42 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 107 46 moveto
+110 36 lineto
+101 42 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index b906a78..02e2bca 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,15 @@
+20081006 tpd books/bookvol10.2.pamphlet add categories
+20081006 tpd src/algebra/Makefile remove fortcat.spad
+20081006 tpd src/algebra/fortcat.spad.pamphlet absorbed into bookvol10.2
+20081006 tpd books/ps/v102fortranfunctioncategory.ps added
+20081006 tpd books/ps/v102fortranmachinetypecategory.ps added
+20081006 tpd books/ps/v102fortranmatrixcategory.ps added
+20081006 tpd books/ps/v102fortranmatrixfunctioncategory.ps added
+20081006 tpd books/ps/v102fortranprogramcategory.ps added
+20081006 tpd books/ps/v102fortranvectorcategory.ps added
+20081006 tpd books/ps/v102fortranvectorfunctioncategory.ps added
+20081006 tpd src/algebra/derham.spad move LALG to bookvol10.2
+20081006 tpd books/ps/v102leftalgebra.ps added
 20081005 tpd books/bookvol10.2 add categores
 20081005 tpd books/ps/v102fullyevalableover.ps added
 20081005 tpd src/algebra/equation2.spad move FEVALAB to bookvol10.2
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index e3030a0..f932feb 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -330,7 +330,6 @@ LAYER7=\
 \subsubsection{Completed spad files}
 \begin{verbatim}
 card.spad.pamphlet (CARD)
-fortcat.spad.pamphlet (FORTFN FMC FORTCAT FVC FMTC FMFUN FVFUN)
 \end{verbatim}
 
 <<layer8>>=
@@ -1211,7 +1210,7 @@ SPADFILES= \
  ${OUTSRC}/ffp.spad ${OUTSRC}/ffx.spad \
  ${OUTSRC}/files.spad ${OUTSRC}/float.spad ${OUTSRC}/fmod.spad \
  ${OUTSRC}/fname.spad ${OUTSRC}/fnla.spad ${OUTSRC}/formula.spad \
- ${OUTSRC}/fortcat.spad ${OUTSRC}/fortmac.spad ${OUTSRC}/fortpak.spad \
+ ${OUTSRC}/fortmac.spad ${OUTSRC}/fortpak.spad \
  ${OUTSRC}/fortran.spad ${OUTSRC}/forttyp.spad ${OUTSRC}/fourier.spad \
  ${OUTSRC}/fparfrac.spad ${OUTSRC}/fraction.spad ${OUTSRC}/free.spad \
  ${OUTSRC}/fr.spad ${OUTSRC}/fs2expxp.spad ${OUTSRC}/fs2ups.spad \
@@ -1371,7 +1370,7 @@ DOCFILES= \
  ${DOC}/ffp.spad.dvi ${DOC}/ffrac.as.dvi ${DOC}/ffx.spad.dvi \
  ${DOC}/files.spad.dvi ${DOC}/float.spad.dvi ${DOC}/fmod.spad.dvi \
  ${DOC}/fname.spad.dvi ${DOC}/fnla.spad.dvi ${DOC}/formula.spad.dvi \
- ${DOC}/fortcat.spad.dvi ${DOC}/fortmac.spad.dvi ${DOC}/fortpak.spad.dvi \
+ ${DOC}/fortmac.spad.dvi ${DOC}/fortpak.spad.dvi \
  ${DOC}/fortran.spad.dvi ${DOC}/forttyp.spad.dvi ${DOC}/fourier.spad.dvi \
  ${DOC}/fparfrac.spad.dvi ${DOC}/fraction.spad.dvi ${DOC}/free.spad.dvi \
  ${DOC}/fr.spad.dvi ${DOC}/fs2expxp.spad.dvi ${DOC}/fs2ups.spad.dvi \
diff --git a/src/algebra/derham.spad.pamphlet b/src/algebra/derham.spad.pamphlet
index 1055a99..2bfa12d 100644
--- a/src/algebra/derham.spad.pamphlet
+++ b/src/algebra/derham.spad.pamphlet
@@ -9,22 +9,6 @@
 \eject
 \tableofcontents
 \eject
-\section{category LALG LeftAlgebra}
-<<category LALG LeftAlgebra>>=
-)abbrev category LALG LeftAlgebra
-++ Author: Larry A. Lambe
-++ Date  : 03/01/89; revised 03/17/89; revised 12/02/90.
-++ Description: The category of all left algebras over an arbitrary
-++ ring.
-LeftAlgebra(R:Ring): Category == Join(Ring, LeftModule R) with
-    --operations
-      coerce: R -> %
-	++ coerce(r) returns r * 1 where 1 is the identity of the
-	++ left algebra.
-    add
-      coerce(x:R):% == x * 1$%
-
-@
 \section{domain EAB ExtAlgBasis}
 <<domain EAB ExtAlgBasis>>=
 )abbrev domain EAB ExtAlgBasis
@@ -1034,7 +1018,6 @@ DeRhamComplex(CoefRing,listIndVar:List Symbol): Export == Implement where
 <<*>>=
 <<license>>
 
-<<category LALG LeftAlgebra>>
 <<domain EAB ExtAlgBasis>>
 <<domain ANTISYM AntiSymm>>
 <<domain DERHAM DeRhamComplex>>
diff --git a/src/algebra/fortcat.spad.pamphlet b/src/algebra/fortcat.spad.pamphlet
deleted file mode 100644
index 16daa51..0000000
--- a/src/algebra/fortcat.spad.pamphlet
+++ /dev/null
@@ -1,345 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/algebra fortcat.spad}
-\author{Mike Dewar}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{category FORTFN FortranFunctionCategory}
-<<category FORTFN FortranFunctionCategory>>=
-)abbrev category FORTFN FortranFunctionCategory
-++ Author: Mike Dewar
-++ Date Created: 13 January 1994
-++ Date Last Updated: 18 March 1994
-++ Related Constructors: FortranProgramCategory.
-++ Description:
-++ \axiomType{FortranFunctionCategory} is the category of arguments to
-++ NAG Library routines which return (sets of) function values.
-FortranFunctionCategory():Category == FortranProgramCategory with
-    coerce : List FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
-      ++ coerce(e) takes the component of \spad{e} from
-      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
-      ++ making the declarations in the \spadtype{SymbolTable} component.
-    retract : Expression Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Expression Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Expression Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Expression Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Fraction Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Fraction Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Fraction Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Fraction Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-
-    -- NB: These ASPs also have a coerce from an appropriate instantiation
-    --     of FortranExpression.
-
-
-@
-\section{category FMC FortranMatrixCategory}
-<<category FMC FortranMatrixCategory>>=
-)abbrev category FMC FortranMatrixCategory
-++ Author: Mike Dewar
-++ Date Created: 21 March 1994
-++ Date Last Updated: 
-++ Related Constructors: FortranProgramCategory.
-++ Description:
-++ \axiomType{FortranMatrixCategory} provides support for
-++ producing Functions and Subroutines when the input to these
-++ is an AXIOM object of type \axiomType{Matrix} or in domains
-++ involving \axiomType{FortranCode}.
-FortranMatrixCategory():Category == FortranProgramCategory with
-    coerce : Matrix MachineFloat -> $
-      ++ coerce(v) produces an ASP which returns the value of \spad{v}.
-    coerce : List FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
-      ++ coerce(e) takes the component of \spad{e} from
-      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
-      ++ making the declarations in the \spadtype{SymbolTable} component.
-
-@
-\section{category FORTCAT FortranProgramCategory}
-<<category FORTCAT FortranProgramCategory>>=
-)abbrev category FORTCAT FortranProgramCategory
-++ Author: Mike Dewar
-++ Date Created: November 1992
-++ Date Last Updated: 
-++ Basic Operations:
-++ Related Constructors: FortranType, FortranCode, Switch
-++ Also See:
-++ AMS Classifications:
-++ Keywords:
-++ References:
-++ Description:
-++ \axiomType{FortranProgramCategory} provides various models of
-++ FORTRAN subprograms.  These can be transformed into actual FORTRAN
-++ code.
-FortranProgramCategory():Category == Join(Type,CoercibleTo OutputForm) with
-    outputAsFortran : $ -> Void
-    ++ \axiom{outputAsFortran(u)} translates \axiom{u} into a legal FORTRAN
-    ++ subprogram.
-
-@
-\section{category FVC FortranVectorCategory}
-<<category FVC FortranVectorCategory>>=
-)abbrev category FVC FortranVectorCategory
-++ Author: Mike Dewar
-++ Date Created: October 1993
-++ Date Last Updated: 18 March 1994
-++ Related Constructors: FortranProgramCategory.
-++ Description:
-++ \axiomType{FortranVectorCategory} provides support for
-++ producing Functions and Subroutines when the input to these
-++ is an AXIOM object of type \axiomType{Vector} or in domains
-++ involving \axiomType{FortranCode}.
-FortranVectorCategory():Category == FortranProgramCategory with
-    coerce : Vector MachineFloat -> $
-      ++ coerce(v) produces an ASP which returns the value of \spad{v}.
-    coerce : List FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
-      ++ coerce(e) takes the component of \spad{e} from
-      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
-      ++ making the declarations in the \spadtype{SymbolTable} component.
-
-@
-\section{category FMTC FortranMachineTypeCategory}
-<<category FMTC FortranMachineTypeCategory>>=
-)abbrev category FMTC FortranMachineTypeCategory
-++ Author: Mike Dewar
-++ Date Created:  December 1993
-++ Date Last Updated:
-++ Basic Operations:
-++ Related Domains:
-++ Also See: FortranExpression, MachineInteger, MachineFloat, MachineComplex
-++ AMS Classifications:
-++ Keywords:
-++ Examples:
-++ References:
-++ Description: A category of domains which model machine arithmetic
-++ used by machines in the AXIOM-NAG link.
-FortranMachineTypeCategory():Category == Join(IntegralDomain,OrderedSet,
-                                              RetractableTo(Integer) )
-
-@
-\section{category FMFUN FortranMatrixFunctionCategory}
-<<category FMFUN FortranMatrixFunctionCategory>>=
-)abbrev category FMFUN FortranMatrixFunctionCategory
-++ Author: Mike Dewar
-++ Date Created: March 18 1994
-++ Date Last Updated: 
-++ Related Constructors: FortranProgramCategory.
-++ Description:
-++ \axiomType{FortranMatrixFunctionCategory} provides support for
-++ producing Functions and Subroutines representing matrices of
-++ expressions.
-
-FortranMatrixFunctionCategory():Category == FortranProgramCategory with
-    coerce : List FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
-      ++ coerce(e) takes the component of \spad{e} from
-      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
-      ++ making the declarations in the \spadtype{SymbolTable} component.
-    retract : Matrix Expression Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Expression Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Matrix Expression Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Expression Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Matrix Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Matrix Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Matrix Fraction Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Fraction Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Matrix Fraction Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Matrix Fraction Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-
-    -- NB: These ASPs also have a coerce from an appropriate instantiation
-    --     of Matrix FortranExpression.
-
-@
-\section{category FVFUN FortranVectorFunctionCategory}
-<<category FVFUN FortranVectorFunctionCategory>>=
-)abbrev category FVFUN FortranVectorFunctionCategory
-++ Author: Mike Dewar
-++ Date Created: 11 March 1994
-++ Date Last Updated: 18 March 1994
-++ Related Constructors: FortranProgramCategory.
-++ Description:
-++ \axiomType{FortranVectorFunctionCategory} is the catagory of arguments
-++ to NAG Library routines which return the values of vectors of functions.
-FortranVectorFunctionCategory():Category == FortranProgramCategory with
-    coerce : List FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{List FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : FortranCode -> $
-      ++ coerce(e) takes an object from \spadtype{FortranCode} and
-      ++  uses it as the body of an ASP.
-    coerce : Record(localSymbols:SymbolTable,code:List(FortranCode)) -> $
-      ++ coerce(e) takes the component of \spad{e} from
-      ++ \spadtype{List FortranCode} and uses it as the body of the ASP,
-      ++ making the declarations in the \spadtype{SymbolTable} component.
-    retract : Vector Expression Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Expression Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Vector Expression Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Expression Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Vector Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Vector Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Vector Fraction Polynomial Float -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Fraction Polynomial Float -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retract : Vector Fraction Polynomial Integer -> $
-      ++ retract(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-    retractIfCan : Vector Fraction Polynomial Integer -> Union($,"failed")
-      ++ retractIfCan(e) tries to convert \spad{e} into an ASP, checking that
-      ++  legal Fortran-77 is produced.
-
-    -- NB: These ASPs also have a coerce from an appropriate instantiation
-    --     of Vector FortranExpression.
-
-@
-\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 FORTFN FortranFunctionCategory>>
-<<category FMC FortranMatrixCategory>>
-<<category FORTCAT FortranProgramCategory>>
-<<category FVC FortranVectorCategory>>
-<<category FMTC FortranMachineTypeCategory>>
-<<category FMFUN FortranMatrixFunctionCategory>>
-<<category FVFUN FortranVectorFunctionCategory>>
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
