diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 57d4df1..940e136 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -41,6 +41,11 @@
 \includegraphics[scale=#3]{#1}%
 \index{images!#2}}
 %%
+%% \refto is a link to a referenced page that returns it arg
+%%
+\newcommand{\refto}[1]{% e.g. \refto{name}
+(p\pageref{#1}) #1}
+%%
 %% pageto is a forward link to a referenced page
 %%
 \newcommand{\pageto}[2]{% e.g. \pageto{abb}{name}
@@ -1333,6 +1338,7 @@ digraph pic {
 \pagepic{ps/v102retractableto.ps}{RETRACT}{1.00}
 
 {\bf See:}\\
+\pageto{ExtensionField}{XF}
 \pageto{FullyRetractableTo}{FRETRCT}
 \pageto{GradedAlgebra}{GRALG}
 \pagefrom{Category}{CATEGORY}
@@ -1423,6 +1429,10 @@ RetractableTo(S: Type): Category == with
  [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"];
 "RetractableTo(CommutativeRing)" -> "RetractableTo(a:Type)"
 
+"RetractableTo(Field)"
+ [color=seagreen,href="bookvol10.2.pdf#nameddest=RETRACT"];
+"RetractableTo(Field)" -> "RetractableTo(a:Type)"
+
 @
 <<RETRACT.dotpic>>=
 digraph pic {
@@ -1820,7 +1830,7 @@ These are implemented by this category:
  qsetelt! : (%,Dom,Im) -> Im if $ has shallowlyMutable
 \end{verbatim}
 
-This export comes from Eltable:
+These exports come from \refto{Eltable}():
 \begin{verbatim}
  ?.? : (%,Dom) -> Im
 \end{verbatim}
@@ -1925,7 +1935,7 @@ eval : (%,Equation R) -> %
 eval : (%,List R,List R) -> %
 \end{verbatim}
 
-These exports come from InnerEvalable(R:SetCategory,R:SetCategory):
+These exports come from \refto{InnerEvalable}(R:SetCategory,R:SetCategory):
 \begin{verbatim}
  eval : (%,R,R) -> %                   
 \end{verbatim}
@@ -2028,7 +2038,7 @@ These are implemented by this category:
      if S has RETRACT FRAC INT
 \end{verbatim}
 
-These exports come from RetractableTo(S:Type):
+These exports come from \refto{RetractableTo}(S:Type):
 \begin{verbatim}
  coerce : S -> %                       
  retract : % -> S
@@ -2135,7 +2145,7 @@ These are implemented by this category:
  ?\/? : (%,%) -> %                    
 \end{verbatim}
 
-These exports come from BasicType():
+These exports come from \refto{BasicType}():
 \begin{verbatim}
  ?=? : (%,%) -> Boolean
  ?~=? : (%,%) -> Boolean              
@@ -2222,13 +2232,13 @@ These are implemented by this category:
  latex : % -> String
 \end{verbatim}
 
-These exports come from BasicType():
+These exports come from \refto{BasicType}():
 \begin{verbatim}
  ?=? : (%,%) -> Boolean               
  ?~=? : (%,%) -> Boolean              
 \end{verbatim}
 
-These exports come from CoercibleTo(OutputForm):
+These exports come from \refto{CoercibleTo}(OutputForm):
 \begin{verbatim}
  coerce : % -> OutputForm
 \end{verbatim}
@@ -2352,7 +2362,7 @@ These are implemented by this category:
  pi : () -> %
 \end{verbatim}
 
-These exports come from TrigonometricFunctionCategory():
+These exports come from \refto{TrigonometricFunctionCategory}():
 \begin{verbatim}
  cos : % -> %
  cot : % -> %
@@ -2362,7 +2372,7 @@ These exports come from TrigonometricFunctionCategory():
  tan : % -> %                         
 \end{verbatim}
 
-These exports come from ArcTrigonometricFunctionCategory():
+These exports come from \refto{ArcTrigonometricFunctionCategory}():
 \begin{verbatim}
  acos : % -> %
  acot : % -> %
@@ -2372,7 +2382,7 @@ These exports come from ArcTrigonometricFunctionCategory():
  atan : % -> %
 \end{verbatim}
 
-These exports come from HyperbolicFunctionCategory():
+These exports come from \refto{HyperbolicFunctionCategory}():
 \begin{verbatim}
  cosh : % -> %                        
  coth : % -> %                        
@@ -2382,7 +2392,7 @@ These exports come from HyperbolicFunctionCategory():
  tanh : % -> %
 \end{verbatim}
 
-These exports come from ArcHyperbolicFunctionCategory():
+These exports come from \refto{ArcHyperbolicFunctionCategory}():
 \begin{verbatim}
  acosh : % -> %                       
  acoth : % -> %                       
@@ -2392,7 +2402,7 @@ These exports come from ArcHyperbolicFunctionCategory():
  atanh : % -> %                       
 \end{verbatim}
 
-These exports come from ElementaryFunctionCategory():
+These exports come from \refto{ElementaryFunctionCategory}():
 \begin{verbatim}
  ?**? : (%,%) -> %                    
  exp : % -> %
@@ -2524,7 +2534,7 @@ These are implemented by this category:
  ?*? : (PositiveInteger,%) -> %       
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -2640,7 +2650,7 @@ These are directly exported but not implemented:
  size : () -> NonNegativeInteger
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -2763,7 +2773,7 @@ These are implemented by this category:
  ?-? : (%,%) -> %
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger
@@ -2938,7 +2948,7 @@ These are implemented by this category:
  ?=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from Aggregate:
+These exports come from \refto{Aggregate}:
 \begin{verbatim}
  copy : % -> %
  empty : () -> %
@@ -2950,7 +2960,7 @@ These exports come from Aggregate:
  size? : (%,NonNegativeInteger) -> Boolean
 \end{verbatim}
 
-These exports come from Evalable(a:Type):
+These exports come from \refto{Evalable}(a:Type):
 \begin{verbatim}
  eval : (%,List S,List S) -> % 
           if S has EVALAB S and S has SETCAT
@@ -2960,7 +2970,7 @@ These exports come from Evalable(a:Type):
           if S has EVALAB S and S has SETCAT
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  hash : % -> SingleInteger if S has SETCAT
  ?~=? : (%,%) -> Boolean if S has SETCAT
@@ -3150,13 +3160,13 @@ These are directly exported but not implemented:
  Si : % -> %
 \end{verbatim}
 
-These exports come from PrimitiveFunctionCategory()
+These exports come from \refto{PrimitiveFunctionCategory}()
 \begin{verbatim}
  integral : (%,Symbol) -> %
  integral : (%,SegmentBinding %) -> %
 \end{verbatim}
 
-These exports come from TranscendentalFunctionCategory():
+These exports come from \refto{TranscendentalFunctionCategory}():
 \begin{verbatim}
  ?**? : (%,%) -> %                    
  acos : % -> %                        
@@ -3308,7 +3318,7 @@ These are implemented by this category:
  ?**? : (%,PositiveInteger) -> %
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -3454,7 +3464,7 @@ These are implemented by this category:
  ?<=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -3584,7 +3594,7 @@ These are implemented by this category:
  ?^? : (%,PositiveInteger) -> %
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm             
  hash : % -> SingleInteger
@@ -3698,7 +3708,7 @@ These are directly exported but not implemented:
  nextItem : % -> Union(%,"failed")
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -3814,7 +3824,7 @@ These are implemented by this category:
  ?*? : (NonNegativeInteger,%) -> %
 \end{verbatim}
 
-These exports come from AbelianSemiGroup():
+These exports come from \refto{AbelianSemiGroup}():
 \begin{verbatim}
  coerce : % -> OutputForm             
  hash : % -> SingleInteger
@@ -3977,7 +3987,7 @@ These are implemented by this category:
  bag : List S -> %
 \end{verbatim}
 
-These exports come from HomogeneousAggregate(S:Type):
+These exports come from \refto{HomogeneousAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -4164,7 +4174,7 @@ These are implemented by this category:
  #? : % -> NonNegativeInteger if $ has finiteAggregate
 \end{verbatim}
 
-These exports come from HomogeneousAggregate(S:Type):
+These exports come from \refto{HomogeneousAggregate}(S:Type):
 \begin{verbatim}
  coerce : % -> OutputForm if S has SETCAT
  copy : % -> %
@@ -4198,7 +4208,7 @@ These exports come from HomogeneousAggregate(S:Type):
  ?~=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from ConvertibleTo(S:Type):
+These exports come from \refto{ConvertibleTo}(S:Type):
 \begin{verbatim}
  convert : % -> InputForm if S has KONVERT INFORM
 \end{verbatim}
@@ -4377,7 +4387,7 @@ These are implemented by this category:
  ?*? : (R,%) -> %
 \end{verbatim}
 
-These exports come from GradedModule(R, E)\\
+These exports come from \refto{GradedModule}(R, E)\\
 where R:CommutativeRing and E:AbelianMonoid:
 \begin{verbatim}
  coerce : % -> OutputForm
@@ -4391,7 +4401,7 @@ where R:CommutativeRing and E:AbelianMonoid:
  ?+? : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from ,RetractableTo(R:CommutativeRing):
+These exports come from \refto{RetractableTo}(R:CommutativeRing):
 \begin{verbatim}
  coerce : R -> %                      
  retract : % -> R                     
@@ -4574,7 +4584,7 @@ These are implemented by this category:
  swap! : (%,Index,Index) -> Void if $ has shallowlyMutable
 \end{verbatim}
 
-These exports come from HomogeneousAggregate(Entry:Type):
+These exports come from \refto{HomogeneousAggregate}(Entry:Type):
 \begin{verbatim}
  any? : ((Entry -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -4612,7 +4622,7 @@ These exports come from HomogeneousAggregate(Entry:Type):
  ?=? : (%,%) -> Boolean if Entry has SETCAT
 \end{verbatim}
 
-These exports come from EltableAggregate(Index:SetCategory,Entry:Type):
+These exports come from \refto{EltableAggregate}(Index:SetCategory,Entry:Type):
 \begin{verbatim}
  qelt : (%,Index) -> Entry
  qsetelt! : (%,Index,Entry) -> Entry if $ has shallowlyMutable
@@ -4807,7 +4817,7 @@ These are implemented by this category:
  ?**? : (%,NonNegativeInteger) -> %
 \end{verbatim}
 
-These exports come from Monad():
+These exports come from \refto{Monad}():
 \begin{verbatim}
  coerce : % -> OutputForm             
  hash : % -> SingleInteger
@@ -4981,7 +4991,7 @@ These are implemented by this category:
  ?**? : (%,NonNegativeInteger) -> %
 \end{verbatim}
 
-These exports come from SemiGroup():
+These exports come from \refto{SemiGroup}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -5121,7 +5131,7 @@ digraph pic {
 \cross{ORDFIN}{?$>=$?} \\
 \end{tabular}
 
-These exports come from OrderedSet():
+These exports come from \refto{OrderedSet}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -5136,7 +5146,7 @@ These exports come from OrderedSet():
  ?>=? : (%,%) -> Boolean              
 \end{verbatim}
 
-These exports come from Finite():
+These exports come from \refto{Finite}():
 \begin{verbatim}
  index : PositiveInteger -> %
  lookup : % -> PositiveInteger
@@ -5287,7 +5297,7 @@ These are implemented by this category:
  ?.value : (%,value) -> S
 \end{verbatim}
 
-These exports come from HomogeneousAggregate(S:Type):
+These exports come from \refto{HomogeneousAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -5543,7 +5553,7 @@ These are implemented by this category:
  ?=? : (%,%) -> Boolean if R has SETCAT
 \end{verbatim}
 
-These exports come from HomogeneousAggregate(R:Type)
+These exports come from \refto{HomogeneousAggregate}(R:Type)
 \begin{verbatim}
  empty : () -> %                      
  empty? : % -> Boolean
@@ -6060,7 +6070,7 @@ These are implemented by this category:
  ?.left : (%,left) -> %
 \end{verbatim}
 
-These exports come from RecursiveAggregate(S:Type)
+These exports come from \refto{RecursiveAggregate}(S:Type)
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -6280,7 +6290,7 @@ These are directly exported but not implemented:
  subtractIfCan : (%,%) -> Union(%,"failed")
 \end{verbatim}
 
-These exports come from AbelianMonoid():
+These exports come from \refto{AbelianMonoid}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -6447,7 +6457,7 @@ These are implemented by this category:
  dictionary : () -> %
 \end{verbatim}
 
-These exports come from BagAggregate(S:SetCategory):
+These exports come from \refto{BagAggregate}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -6488,7 +6498,7 @@ These exports come from BagAggregate(S:SetCategory):
  ?~=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from Collection(S:SetCategory)
+These exports come from \refto{Collection}(S:SetCategory)
 \begin{verbatim}
  convert : % -> InputForm if S has KONVERT INFORM
  find : ((S -> Boolean),%) -> Union(S,"failed")
@@ -6679,7 +6689,7 @@ These are directly exported but not implemented:
  tail : % -> %
 \end{verbatim}
 
-These exports come from RecursiveAggregate(S:Type):
+These exports come from \refto{RecursiveAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -6865,11 +6875,11 @@ These are implemented by this category:
  ?**? : (%,Integer) -> %
 \end{verbatim}
 
-These exports come from Aggregate:
+These exports come from \refto{Aggregate}:
 \begin{verbatim}
 \end{verbatim}
 
-These exports come from Monoid():
+These exports come from \refto{Monoid}():
 \begin{verbatim}
  1 : () -> %
  coerce : % -> OutputForm             
@@ -7094,7 +7104,7 @@ These are implemented by this category:
  maxIndex : % -> Integer if Integer has ORDSET
 \end{verbatim}
 
-These exports come from IndexedAggregate(Integer,S:Type)
+These exports come from \refto{IndexedAggregate}(Integer,S:Type)
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -7145,7 +7155,7 @@ These exports come from IndexedAggregate(Integer,S:Type)
  ?=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from Collection(S:Type):
+These exports come from \refto{Collection}(S:Type):
 \begin{verbatim}
  construct : List S -> %              
  convert : % -> InputForm if S has KONVERT INFORM
@@ -7325,7 +7335,7 @@ digraph pic {
 \cross{OASGP}{?$>=$?} &&&&
 \end{tabular}
 
-These exports come from OrderedSet():
+These exports come from \refto{OrderedSet}():
 \begin{verbatim}
  coerce : % -> OutputForm              
  hash : % -> SingleInteger
@@ -7340,7 +7350,7 @@ These exports come from OrderedSet():
  ?~=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from AbelianMonoid():
+These exports come from \refto{AbelianMonoid}():
 \begin{verbatim}
  0 : () -> %
  sample : () -> %
@@ -7458,7 +7468,7 @@ digraph pic {
 \cross{ORDMON}{?\^{}?} &&
 \end{tabular}
 
-These exports come from Monoid():
+These exports come from \refto{Monoid}():
 \begin{verbatim}
  1 : () -> %
  coerce : % -> OutputForm
@@ -7476,7 +7486,7 @@ These exports come from Monoid():
  ?~=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from OrderedSet():
+These exports come from \refto{OrderedSet}():
 \begin{verbatim}
  max : (%,%) -> %                     
  min : (%,%) -> %
@@ -7625,7 +7635,7 @@ These are directly exported but not implemented:
  merge! : (%,%) -> %
 \end{verbatim}
 
-These exports come from BagAggregate(S:OrderedSet):
+These exports come from \refto{BagAggregate}(S:OrderedSet):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -7801,7 +7811,7 @@ These are implemented by this category:
  rotate! : % -> %                     
 \end{verbatim}
 
-These exports come from BagAggregate(S:Type):
+These exports come from \refto{BagAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -8003,7 +8013,7 @@ These are implemented by this category:
  union : (%,S) -> %
 \end{verbatim}
 
-These exports come from SetCategory():
+These exports come from \refto{SetCategory}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger
@@ -8012,7 +8022,7 @@ These exports come from SetCategory():
  ?~=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from Collection(S:SetCategory):
+These exports come from \refto{Collection}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
      if $ has finiteAggregate
@@ -8266,7 +8276,7 @@ These are directly exported but not implemented:
  top : % -> S
 \end{verbatim}
 
-These exports come from BagAggregate(S:Type):
+These exports come from \refto{BagAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -8505,7 +8515,7 @@ These are implemented by this category:
  ?.rest : (%,rest) -> %
 \end{verbatim}
 
-These exports come from RecursiveAggregate(S:Type):
+These exports come from \refto{RecursiveAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -8888,7 +8898,7 @@ These are implemented by this category:
  ?-? : (%,%) -> %
 \end{verbatim}
 
-These exports come from CancellationAbelianMonoid():
+These exports come from \refto{CancellationAbelianMonoid}():
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm
@@ -9069,7 +9079,7 @@ These are implemented by this category:
  remove! : ((S -> Boolean),%) -> % if $ has finiteAggregate
 \end{verbatim}
 
-These exports come from DictionaryOperations(S:SetCategory):
+These exports come from \refto{DictionaryOperations}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -9295,7 +9305,7 @@ These are directly exported but not implemented:
  top! : % -> S
 \end{verbatim}
 
-These exports come from StackAggregate(S:Type):
+These exports come from \refto{StackAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -9342,7 +9352,7 @@ These exports come from StackAggregate(S:Type):
  ?~=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from QueueAggregate(S:Type):
+These exports come from \refto{QueueAggregate}(S:Type):
 \begin{verbatim}
  back : % -> S                        
  dequeue! : % -> S
@@ -9551,7 +9561,7 @@ These are implemented by this category:
  select : ((S -> Boolean),%) -> % if $ has finiteAggregate
 \end{verbatim}
 
-These exports come from LinearAggregate(S:Type):
+These exports come from \refto{LinearAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -9855,7 +9865,7 @@ These are implemented by this category:
           if S has ORDSET and $ has shallowlyMutable
 \end{verbatim}
 
-These exports come from LinearAggregate(S:Type):
+These exports come from \refto{LinearAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -9944,7 +9954,7 @@ These exports come from LinearAggregate(S:Type):
  ?=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from OrderedSet:
+These exports come from \refto{OrderedSet}:
 \begin{verbatim}
  max : (%,%) -> % if S has ORDSET
  min : (%,%) -> % if S has ORDSET
@@ -10142,7 +10152,7 @@ These are directly exported but not implemented:
  duplicates : % -> List Record(entry:S,count:NonNegativeInteger)
 \end{verbatim}
 
-These exports come from DictionaryOperations(S:SetCategory):
+These exports come from \refto{DictionaryOperations}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -10309,7 +10319,7 @@ digraph pic {
 \cross{OAMON}{?*?} &&&
 \end{tabular}
 
-These exports come from OrderedAbelianSemiGroup():
+These exports come from \refto{OrderedAbelianSemiGroup}():
 \begin{verbatim}
  coerce : % -> OutputForm             
  hash : % -> SingleInteger
@@ -10324,7 +10334,7 @@ These exports come from OrderedAbelianSemiGroup():
  ?~=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from AbelianMonoid():
+These exports come from \refto{AbelianMonoid}():
 \begin{verbatim}
  0 : () -> %
  sample : () -> %
@@ -10506,7 +10516,7 @@ These are implemented by this category:
  ?.? : (%,UniversalSegment Integer) -> %
 \end{verbatim}
 
-These exports come from UnaryRecursiveAggregate(S:Type):
+These exports come from \refto{UnaryRecursiveAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -10589,7 +10599,7 @@ These exports come from UnaryRecursiveAggregate(S:Type):
  ?.value : (%,value) -> S
 \end{verbatim}
 
-These exports come from LinearAggregate(S:Type):
+These exports come from \refto{LinearAggregate}(S:Type):
 \begin{verbatim}
  construct : List S -> %
  delete : (%,Integer) -> %            
@@ -10819,7 +10829,7 @@ These are implemented by this category:
  commutator : (%,%) -> %              
 \end{verbatim}
 
-These exports come from AbelianGroup():
+These exports come from \refto{AbelianGroup}():
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm
@@ -10838,7 +10848,7 @@ These exports come from AbelianGroup():
  -? : % -> %                          
 \end{verbatim}
 
-These exports come from Monad():
+These exports come from \refto{Monad}():
 \begin{verbatim}
  leftPower : (%,PositiveInteger) -> %
  rightPower : (%,PositiveInteger) -> %
@@ -11053,7 +11063,7 @@ These are implemented by this category:
  ?<? : (%,%) -> Boolean if S has ORDSET
 \end{verbatim}
 
-These exports come from FiniteLinearAggregate(S:Type):
+These exports come from \refto{FiniteLinearAggregate}(S:Type):
 \begin{verbatim}
  concat : (S,%) -> %                   
  concat : (%,S) -> %
@@ -11518,7 +11528,7 @@ These are implemented by this category:
  ?=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from Dictionary(S:SetCategory):
+These exports come from \refto{Dictionary}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
      if $ has finiteAggregate
@@ -11590,7 +11600,7 @@ These exports come from Dictionary(S:SetCategory):
  ?~=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from SetAggregate(S:SetCategory):
+These exports come from \refto{SetAggregate}(S:SetCategory):
 \begin{verbatim}
  brace : () -> %
  difference : (%,S) -> %
@@ -11811,7 +11821,7 @@ These are implemented by this category:
  keys : % -> List Key                  
 \end{verbatim}
 
-These exports come from Dictionary(R) \\
+These exports come from \refto{Dictionary}(R) \\
 where R=Record(a:SetCategory,b:SetCategory))\\
 and S=Record(key: Key,entry: Entry)
 \begin{verbatim}
@@ -12001,7 +12011,7 @@ These are directly exported but not implemented:
  ?*? : (R,%) -> %                     
 \end{verbatim}
 
-These exports come from AbelianGroup():
+These exports come from \refto{AbelianGroup}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -12241,7 +12251,7 @@ These are implemented by this category:
  ?<? : (%,%) -> Boolean if S has ORDSET
 \end{verbatim}
 
-These exports come from StreamAggregate(S:Type):
+These exports come from \refto{StreamAggregate}(S:Type):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -12361,7 +12371,7 @@ These exports come from StreamAggregate(S:Type):
  ?~=? : (%,%) -> Boolean if S has SETCAT
 \end{verbatim}
 
-These exports come from FiniteLinearAggregate(S:Type)
+These exports come from \refto{FiniteLinearAggregate}(S:Type)
 \begin{verbatim}
  max : (%,%) -> % if S has ORDSET
  merge : (%,%) -> % if S has ORDSET
@@ -12377,7 +12387,7 @@ These exports come from FiniteLinearAggregate(S:Type)
  ?>=? : (%,%) -> Boolean if S has ORDSET
 \end{verbatim}
 
-These exports come from ExtensibleLinearAggregate(S:Type):
+These exports come from \refto{ExtensibleLinearAggregate}(S:Type):
 \begin{verbatim}
  merge! : (%,%) -> % if S has ORDSET
  remove! : (S,%) -> % if S has SETCAT
@@ -12717,7 +12727,7 @@ digraph pic {
 \cross{MSETAGG}{?=?} &
 \end{tabular}
 
-These exports come from MultiDictionary(S:SetCategory):
+These exports come from \refto{MultiDictionary}(S:SetCategory):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
  bag : List S -> %                    
@@ -12782,7 +12792,7 @@ These exports come from MultiDictionary(S:SetCategory):
  ?=? : (%,%) -> Boolean
 \end{verbatim}
 
-These exports come from SetAggregate(S:SetCategory):
+These exports come from \refto{SetAggregate}(S:SetCategory):
 \begin{verbatim}
  brace : () -> %
  brace : List S -> %                  
@@ -12889,7 +12899,7 @@ digraph pic {
 \cross{OCAMON}{?$>=$?} &&&
 \end{tabular}
 
-These exports come from OrderedAbelianMonoid():
+These exports come from \refto{OrderedAbelianMonoid}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -12910,7 +12920,7 @@ These exports come from OrderedAbelianMonoid():
  ?+? : (%,%) -> %
 \end{verbatim}
 
-These exports come from CancellationAbelianMonoid():
+These exports come from \refto{CancellationAbelianMonoid}():
 \begin{verbatim}
  subtractIfCan : (%,%) -> Union(%,"failed")
 \end{verbatim}
@@ -13009,7 +13019,7 @@ These are directly exported but not implemented:
  ?*? : (%,R) -> %                     
 \end{verbatim}
 
-These exports come from AbelianGroup():
+These exports come from \refto{AbelianGroup}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -13121,7 +13131,7 @@ Rng is a Ring that does not necessarily have a unit.
 \cross{RNG}{?\^{}?} \\
 \end{tabular}
 
-These exports come from AbelianGroup():
+These exports come from \refto{AbelianGroup}():
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm             
@@ -13140,7 +13150,7 @@ These exports come from AbelianGroup():
  -? : % -> %                          
 \end{verbatim}
 
-These exports come from SemiGroup():
+These exports come from \refto{SemiGroup}():
 \begin{verbatim}
  ?*? : (%,%) -> %                     
  ?**? : (%,PositiveInteger) -> %
@@ -13336,7 +13346,7 @@ These are implemented by this category:
  ?.? : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from OneDimensionalArrayAggregate(Character):
+These exports come from \refto{OneDimensionalArrayAggregate}(Character):
 \begin{verbatim}
  any? : ((Character -> Boolean),%) -> Boolean 
           if $ has finiteAggregate
@@ -13738,7 +13748,7 @@ These are implemented by this category:
           or Record(key: Key,entry: Entry) has SETCAT
 \end{verbatim}
 
-These exports come from KeyedDictionary(Key,Entry)\\
+These exports come from \refto{KeyedDictionary}(Key,Entry)\\
 where Key:SetCategory and Entry:SetCategory\\
 and RecKE=Record(key: Key,entry: Entry):
 \begin{verbatim}
@@ -13820,7 +13830,7 @@ and RecKE=Record(key: Key,entry: Entry):
           or RecKE has SETCAT
 \end{verbatim}
 
-These exports come from IndexedAggregate(Key,Entry))\\
+These exports come from \refto{IndexedAggregate}(Key,Entry))\\
 where Key:SetCategory and Entry:SetCategory\\
 and RecKE=Record(key: Key,entry: Entry):
 \begin{verbatim}
@@ -14182,7 +14192,7 @@ These are directly exported but not implemented:
  assoc : (Key,%) -> Union(Record(key: Key,entry: Entry),"failed")
 \end{verbatim}
 
-These exports come from TableAggregate(Key, Entry)\\
+These exports come from \refto{TableAggregate}(Key, Entry)\\
 where Key:SetCategory and Entry:SetCategory\\
 and RecKE = Record(key: Key,entry: Entry)
 \begin{verbatim}
@@ -14352,7 +14362,7 @@ and RecKE = Record(key: Key,entry: Entry)
  ?.? : (%,Key) -> Entry               
 \end{verbatim}
 
-These exports come from ListAggregate(a)\\
+These exports come from \refto{ListAggregate}(a)\\
 where a is  Record(key:Key,entry:Entry)\\
 and RecKE=Record(key: Key,entry: Entry)
 \begin{verbatim}
@@ -14594,7 +14604,7 @@ is true if $1 * x = x$ for all x.
 is true if $x * 1 = x$ for all x.
 \end{itemize}
 
-These exports come from LeftModule(R:Ring):
+These exports come from \refto{LeftModule}(R:Ring):
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm
@@ -14614,7 +14624,7 @@ These exports come from LeftModule(R:Ring):
  -? : % -> %                          
 \end{verbatim}
 
-These exports come from RightModule(S:Ring):
+These exports come from \refto{RightModule}(S:Ring):
 \begin{verbatim}
  ?*? : (%,S) -> %                     
 \end{verbatim}
@@ -14803,7 +14813,7 @@ These are implemented by this category:
  nor : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from OrderedSet():
+These exports come from \refto{OrderedSet}():
 \begin{verbatim}
  coerce : % -> OutputForm
  hash : % -> SingleInteger            
@@ -14821,7 +14831,7 @@ These exports come from OrderedSet():
 TPDHERE: Note that none of the exports of Logic are needed.
 Perhaps this can be eliminated.
 
-These exports come from OneDimensionalArrayAggregate(Boolean):
+These exports come from \refto{OneDimensionalArrayAggregate}(Boolean):
 \begin{verbatim}
  any? : ((Boolean -> Boolean),%) -> Boolean 
      if $ has finiteAggregate
@@ -15089,7 +15099,7 @@ These are implemented by this category:
  coerce : Integer -> %                
 \end{verbatim}
 
-These exports come from NonAssociativeRng():
+These exports come from \refto{NonAssociativeRng}():
 \begin{verbatim}
  0 : () -> %
  antiCommutator : (%,%) -> %          
@@ -15115,7 +15125,7 @@ These exports come from NonAssociativeRng():
  ?**? : (%,PositiveInteger) -> %
 \end{verbatim}
 
-These exports come from MonadWithUnit():
+These exports come from \refto{MonadWithUnit}():
 \begin{verbatim}
  1 : () -> %                          
  leftPower : (%,NonNegativeInteger) -> %
@@ -15242,7 +15252,7 @@ digraph pic {
 \cross{OAGROUP}{?$>=$?} &
 \end{tabular}
 
-These exports come from OrderedCancellationAbelianMonoid():
+These exports come from \refto{OrderedCancellationAbelianMonoid}():
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm
@@ -15264,7 +15274,7 @@ These exports come from OrderedCancellationAbelianMonoid():
  ?+? : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from AbelianGroup():
+These exports come from \refto{AbelianGroup}():
 \begin{verbatim}
  -? : % -> %
  ?*? : (Integer,%) -> %               
@@ -15361,7 +15371,7 @@ These are directly exported but not implemented:
  sup : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from OrderedCancellationAbelianMonoid():
+These exports come from \refto{OrderedCancellationAbelianMonoid}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -15528,7 +15538,7 @@ These are directly exported but not implemented:
  min : % -> S
 \end{verbatim}
 
-These exports come from MultisetAggregate(S:OrderedSet):
+These exports come from \refto{MultisetAggregate}(S:OrderedSet):
 \begin{verbatim}
  any? : ((S -> Boolean),%) -> Boolean if $ has finiteAggregate
  bag : List S -> %                    
@@ -15611,7 +15621,7 @@ These exports come from MultisetAggregate(S:OrderedSet):
  ?<? : (%,%) -> Boolean               
 \end{verbatim}
 
-These exports come from PriorityQueueAggregate(S:OrderedSet):
+These exports come from \refto{PriorityQueueAggregate}(S:OrderedSet):
 \begin{verbatim}
  max : % -> S                         
  merge : (%,%) -> %
@@ -15760,7 +15770,7 @@ These are implemented by this category:
  coerce : Integer -> %
 \end{verbatim}
 
-These exports come from Rng():
+These exports come from \refto{Rng}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm             
@@ -15782,7 +15792,7 @@ These exports come from Rng():
  ?^? : (%,PositiveInteger) -> %       
 \end{verbatim}
 
-These exports come from Monoid():
+These exports come from \refto{Monoid}():
 \begin{verbatim}
  1 : () -> %                          
  one? : % -> Boolean
@@ -15888,6 +15898,7 @@ digraph pic {
 \pagepic{ps/v102characteristicnonzero.ps}{CHARNZ}{0.90}
 
 {\bf See:}\\
+\pageto{FieldOfPrimeCharacteristic}{FPC}
 \pageto{FiniteRankAlgebra}{FINRALG}
 \pagefrom{Ring}{RING}
 
@@ -15920,7 +15931,7 @@ These are directly exported but not implemented:
  charthRoot : % -> Union(%,"failed")
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  1 : () -> %                          
  0 : () -> %
@@ -16053,7 +16064,7 @@ digraph pic {
 \cross{CHARZ}{?=?} \\
 \end{tabular}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  1 : () -> %                          
  0 : () -> %
@@ -16193,7 +16204,7 @@ which is commutative.
 \end{itemize}
 
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -16356,7 +16367,7 @@ These are implemented by this category:
  differentiate : (%,NonNegativeInteger) -> %
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  1 : () -> %                          
  0 : () -> %
@@ -16519,7 +16530,7 @@ digraph pic {
 is true if $x * y ~= 0$ implies both x and y are non-zero.
 \end{itemize}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -16677,7 +16688,7 @@ These are directly exported but not implemented:
  reducedSystem : Matrix % -> Matrix R
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -16842,7 +16853,7 @@ These are implemented by this category:
  sign : % -> Integer
 \end{verbatim}
 
-These exports come from OrderedAbelianGroup():
+These exports come from \refto{OrderedAbelianGroup}():
 \begin{verbatim}
  0 : () -> %
  coerce : % -> OutputForm
@@ -16867,7 +16878,7 @@ These exports come from OrderedAbelianGroup():
  ?-? : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  1 : () -> %                          
  characteristic : () -> NonNegativeInteger
@@ -16884,7 +16895,7 @@ These exports come from Ring():
 TPDHERE: Note that none of the exports of Monoid are needed.
 Perhaps this can be eliminated.
 
-These exports come from Monoid();
+These exports come from \refto{Monoid}();
 \begin{verbatim}
 \end{verbatim}
 
@@ -17039,7 +17050,7 @@ These are implemented by this category:
  D : (%,List S,List NonNegativeInteger) -> %
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  characteristic : () -> NonNegativeInteger
  0 : () -> %
@@ -17245,7 +17256,7 @@ These are implemented by this category:
  differentiate : (%,Symbol) -> % if R has PDRING SYMBOL
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -17274,7 +17285,7 @@ These exports come from Ring():
  ?^? : (%,PositiveInteger) -> %       
 \end{verbatim}
 
-These exports come from DifferentialRing():
+These exports come from \refto{DifferentialRing}():
 \begin{verbatim}
  D : % -> % if R has DIFRING          
  D : (%,NonNegativeInteger) -> % if R has DIFRING
@@ -17282,7 +17293,7 @@ These exports come from DifferentialRing():
      if R has DIFRING
 \end{verbatim}
 
-These exports come from PartialDifferentialRing(Symbol):
+These exports come from \refto{PartialDifferentialRing}(Symbol):
 \begin{verbatim}
  differentiate : (%,List Symbol) -> % 
      if R has PDRING SYMBOL
@@ -17444,7 +17455,7 @@ These are implemented by this category:
           if R has LINEXP INT
 \end{verbatim}
 
-These exports come from LinearlyExplicitRingOver(a:Ring):
+These exports come from \refto{LinearlyExplicitRingOver}(a:Ring):
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -17603,7 +17614,7 @@ These are implemented by this category:
  ?*? : (%,R) -> %                     
 \end{verbatim}
 
-These exports come from BiModule(a:Ring,b:Ring):
+These exports come from \refto{BiModule}(a:Ring,b:Ring):
 \begin{verbatim}
  0 : () -> %                          
  coerce : % -> OutputForm
@@ -17738,7 +17749,7 @@ These are implemented by this category:
  coerce : R -> %
 \end{verbatim}
 
-These exports come from Ring():
+These exports come from \refto{Ring}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -17767,7 +17778,7 @@ These exports come from Ring():
  ?^? : (%,PositiveInteger) -> %       
 \end{verbatim}
 
-These exports come from Module(R:CommutativeRing):
+These exports come from \refto{Module}(R:CommutativeRing):
 \begin{verbatim}
  ?*? : (R,%) -> %                     
  ?*? : (%,R) -> %
@@ -17920,7 +17931,7 @@ These are implemented by this category:
  plenaryPower : (%,PositiveInteger) -> %
 \end{verbatim}
 
-These exports come from NonAssociativeRng():
+These exports come from \refto{NonAssociativeRng}():
 \begin{verbatim}
  0 : () -> %                          
  antiCommutator : (%,%) -> %
@@ -17946,7 +17957,7 @@ These exports come from NonAssociativeRng():
  ?**? : (%,PositiveInteger) -> %
 \end{verbatim}
 
-These exports come from Module(R:CommutativeRing):
+These exports come from \refto{Module}(R:CommutativeRing):
 \begin{verbatim}
  ?*? : (R,%) -> %                     
  ?*? : (%,R) -> %
@@ -18050,6 +18061,7 @@ digraph pic {
 \pagepic{ps/v102vectorspace.ps}{VSPACE}{1.00}
 
 {\bf See:}\\
+\pageto{ExtensionField}{XF}
 \pagefrom{Module}{MODULE}
 
 {\bf Exports:}\\
@@ -18081,7 +18093,7 @@ These are implemented by this category:
  ?/? : (%,S) -> %
 \end{verbatim}
 
-These exports come from Module():
+These exports come from \refto{Module}():
 \begin{verbatim}
  ?*? : (%,S) -> %                     
  0 : () -> %
@@ -18221,7 +18233,7 @@ These are implemented by this category:
  ?**? : (%,Integer) -> %
 \end{verbatim}
 
-These exports come from EntireRing():
+These exports come from \refto{EntireRing}():
 \begin{verbatim}
  0 : () -> %                          
  1 : () -> %
@@ -18250,7 +18262,7 @@ These exports come from EntireRing():
  ?**? : (%,PositiveInteger) -> %      
 \end{verbatim}
 
-These exports come from Algebra(Fraction(Integer)):
+These exports come from \refto{Algebra}(Fraction(Integer)):
 \begin{verbatim}
  coerce : Fraction Integer -> %
  ?*? : (%,Fraction Integer) -> %      
@@ -18497,7 +18509,7 @@ These are implemented by this category:
  structuralConstants : Vector % -> Vector Matrix R
 \end{verbatim}
 
-These exports come from NonAssociativeAlgebra(R:CommutativeRing):
+These exports come from \refto{NonAssociativeAlgebra}(R:CommutativeRing):
 \begin{verbatim}
  0 : () -> %                          
  antiCommutator : (%,%) -> %          
@@ -19311,7 +19323,7 @@ These are implemented by this category:
  unitNormal : % -> Record(unit: %,canonical: %,associate: %)
 \end{verbatim}
 
-These exports come from CommutativeRing():
+These exports come from \refto{CommutativeRing}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -19342,7 +19354,7 @@ These exports come from CommutativeRing():
 
 TPDHERE: Should we construct this coercion?
 
-These exports come from Algebra(a:IntegralDomain):
+These exports come from \refto{Algebra}(a:IntegralDomain):
 \begin{verbatim}
  coerce : % -> %                      
 \end{verbatim}
@@ -19582,7 +19594,7 @@ These are implemented by this category:
  unit : () -> Union(%,"failed") if R has INTDOM
 \end{verbatim}
 
-These exports come from FiniteRankNonAssociativeAlgebra(R)\\
+These exports come from \refto{FiniteRankNonAssociativeAlgebra}(R)\\
 where R:CommutativeRing:
 \begin{verbatim}
  0 : () -> %                          
@@ -20097,7 +20109,7 @@ These are implemented by this category:
  lcm : List % -> %
 \end{verbatim}
 
-These exports come from IntegralDomain():
+These exports come from \refto{IntegralDomain}():
 \begin{verbatim}
  associates? : (%,%) -> Boolean
  exquo : (%,%) -> Union(%,"failed")
@@ -20294,7 +20306,7 @@ digraph pic {
 \cross{OINTDOM}{?\~{}=?} &
 \end{tabular}
 
-These exports come from IntegralDomain():
+These exports come from \refto{IntegralDomain}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -20330,7 +20342,7 @@ These exports come from IntegralDomain():
  ?^? : (%,PositiveInteger) -> %       
 \end{verbatim}
 
-These exports come from OrderedRing():
+These exports come from \refto{OrderedRing}():
 \begin{verbatim}
  abs : % -> %
  max : (%,%) -> %                     
@@ -20471,7 +20483,7 @@ These are directly exported but not implemented:
  principalIdeal : List % -> Record(coef: List %,generator: %)
 \end{verbatim}
 
-These exports come from GcdDomain():
+These exports come from \refto{GcdDomain}():
 \begin{verbatim}
  associates? : (%,%) -> Boolean
  exquo : (%,%) -> Union(%,"failed")
@@ -20653,7 +20665,7 @@ These are implemented by this category:
  squareFreePart : % -> %
 \end{verbatim}
 
-These exports come from GcdDomain():
+These exports come from \refto{GcdDomain}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -20854,7 +20866,7 @@ These are implemented by this category:
  ?rem? : (%,%) -> %                   
 \end{verbatim}
 
-These exports come from PrincipalIdealDomain():
+These exports come from \refto{PrincipalIdealDomain}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -21171,7 +21183,7 @@ These are implemented by this category:
       Union(List SparseUnivariatePolynomial %,"failed")
 \end{verbatim}
 
-These exports come from UniqueFactorizationDomain():
+These exports come from \refto{UniqueFactorizationDomain}():
 \begin{verbatim}
  factor : % -> Factored %
  squareFree : % -> Factored %         
@@ -21355,6 +21367,8 @@ digraph pic {
 \pagepic{ps/v102field.ps}{FIELD}{1.00}
 
 {\bf See:}\\
+\pageto{ExtensionField}{XF}
+\pageto{FieldOfPrimeCharacteristic}{FPC}
 \pageto{FiniteRankAlgebra}{FINRALG}
 \pagefrom{DivisionRing}{DIVRING}
 \pagefrom{EuclideanDomain}{EUCDOM}
@@ -21433,7 +21447,7 @@ These are implemented by this category:
  ?/? : (%,%) -> %                     
 \end{verbatim}
 
-These exports come from EuclideanDomain():
+These exports come from \refto{EuclideanDomain}():
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -21478,12 +21492,12 @@ These exports come from EuclideanDomain():
  ?rem? : (%,%) -> %
 \end{verbatim}
 
-These exports come from UniqueFactorizationDomain():
+These exports come from \refto{UniqueFactorizationDomain}():
 \begin{verbatim}
  squareFreePart : % -> %
 \end{verbatim}
 
-These exports come from DivisionRing():
+These exports come from \refto{DivisionRing}():
 \begin{verbatim}
  coerce : Fraction Integer -> %
  ?*? : (Fraction Integer,%) -> %      
@@ -21581,6 +21595,222 @@ digraph pic {
 @
 \chapter{Category Layer 17}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{FieldOfPrimeCharacteristic}{FPC}
+\pagepic{ps/v102fieldofprimecharacteristic.ps}{FPC}{1.00}
+
+{\bf See:}\\
+\pagefrom{CharacteristicNonZero}{CHARNZ}
+\pagefrom{Field}{FIELD}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{FPC}{0} &
+\cross{FPC}{1} &
+\cross{FPC}{associates?} &
+\cross{FPC}{characteristic} &
+\cross{FPC}{charthRoot} \\
+\cross{FPC}{coerce} &
+\cross{FPC}{discreteLog} &
+\cross{FPC}{divide} &
+\cross{FPC}{euclideanSize} &
+\cross{FPC}{expressIdealMember} \\
+\cross{FPC}{exquo} &
+\cross{FPC}{extendedEuclidean} &
+\cross{FPC}{factor} &
+\cross{FPC}{gcd} &
+\cross{FPC}{gcdPolynomial} \\
+\cross{FPC}{hash} &
+\cross{FPC}{inv} &
+\cross{FPC}{latex} &
+\cross{FPC}{lcm} &
+\cross{FPC}{multiEuclidean} \\
+\cross{FPC}{one?} &
+\cross{FPC}{order} &
+\cross{FPC}{prime?} &
+\cross{FPC}{primeFrobenius} &
+\cross{FPC}{principalIdeal} \\
+\cross{FPC}{recip} &
+\cross{FPC}{sample} &
+\cross{FPC}{sizeLess?} &
+\cross{FPC}{squareFree} &
+\cross{FPC}{squareFreePart} \\
+\cross{FPC}{subtractIfCan} &
+\cross{FPC}{unit?} &
+\cross{FPC}{unitCanonical} &
+\cross{FPC}{unitNormal} &
+\cross{FPC}{zero?} \\
+\cross{FPC}{?*?} &
+\cross{FPC}{?**?} &
+\cross{FPC}{?+?} &
+\cross{FPC}{?-?} &
+\cross{FPC}{-?} \\
+\cross{FPC}{?/?} &
+\cross{FPC}{?=?} &
+\cross{FPC}{?\^{}?} &
+\cross{FPC}{?rem?} &
+\cross{FPC}{?quo?} \\
+\cross{FPC}{?\~{}=?} &&&&
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ order : % -> OnePointCompletion PositiveInteger
+ discreteLog : (%,%) -> Union(NonNegativeInteger,"failed")
+\end{verbatim}
+
+These are implemented by this category:
+\begin{verbatim}
+ primeFrobenius : % -> %
+ primeFrobenius : (%,NonNegativeInteger) -> %
+\end{verbatim}
+
+These exports come from \refto{Field}():
+\begin{verbatim}
+ 0 : () -> %
+ 1 : () -> %                          
+ associates? : (%,%) -> Boolean       
+ characteristic : () -> NonNegativeInteger
+ coerce : % -> %                      
+ coerce : Integer -> %
+ coerce : % -> OutputForm             
+ coerce : Fraction Integer -> %
+ divide : (%,%) -> Record(quotient: %,remainder: %)
+ euclideanSize : % -> NonNegativeInteger
+ expressIdealMember : (List %,%) -> Union(List %,"failed")
+ extendedEuclidean : (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed")
+ extendedEuclidean : (%,%) -> Record(coef1: %,coef2: %,generator: %)
+ exquo : (%,%) -> Union(%,"failed")
+ factor : % -> Factored %
+ gcd : (%,%) -> %
+ gcd : List % -> %                    
+ gcdPolynomial : (SparseUnivariatePolynomial %,
+                  SparseUnivariatePolynomial %) ->
+                      SparseUnivariatePolynomial %
+ hash : % -> SingleInteger            
+ inv : % -> %
+ latex : % -> String                  
+ lcm : List % -> %
+ lcm : (%,%) -> %                     
+ multiEuclidean : (List %,%) -> Union(List %,"failed")
+ one? : % -> Boolean
+ prime? : % -> Boolean                
+ principalIdeal : List % -> Record(coef: List %,generator: %)
+ recip : % -> Union(%,"failed")
+ sample : () -> %
+ sizeLess? : (%,%) -> Boolean         
+ squareFree : % -> Factored %
+ squareFreePart : % -> %              
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ unit? : % -> Boolean
+ unitCanonical : % -> %               
+ unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+ zero? : % -> Boolean
+ ?+? : (%,%) -> %
+ ?=? : (%,%) -> Boolean
+ ?~=? : (%,%) -> Boolean              
+ ?*? : (Fraction Integer,%) -> %      
+ ?*? : (%,Fraction Integer) -> %
+ ?*? : (%,%) -> %                     
+ ?*? : (Integer,%) -> %
+ ?*? : (PositiveInteger,%) -> %       
+ ?*? : (NonNegativeInteger,%) -> %
+ ?-? : (%,%) -> %                     
+ -? : % -> %
+ ?**? : (%,Integer) -> %
+ ?**? : (%,PositiveInteger) -> %      
+ ?**? : (%,NonNegativeInteger) -> %
+ ?^? : (%,PositiveInteger) -> %
+ ?^? : (%,NonNegativeInteger) -> %
+ ?/? : (%,%) -> %                     
+ ?quo? : (%,%) -> %                   
+ ?rem? : (%,%) -> %                   
+\end{verbatim}
+
+These exports come from \refto{CharacteristicNonZero}():
+\begin{verbatim}
+ charthRoot : % -> Union(%,"failed")
+\end{verbatim}
+
+<<category FPC FieldOfPrimeCharacteristic>>=
+)abbrev category FPC FieldOfPrimeCharacteristic
+++ Author: J. Grabmeier, A. Scheerhorn
+++ Date Created: 10 March 1991
+++ Date Last Updated: 31 March 1991
+++ Basic Operations: _+, _*
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords: field, finite field, prime characteristic
+++ References:
+++  J. Grabmeier, A. Scheerhorn: Finite Fields in AXIOM.
+++  AXIOM Technical Report Series, ATR/5 NP2522.
+++ Description:
+++  FieldOfPrimeCharacteristic is the category of fields of prime
+++  characteristic, e.g. finite fields, algebraic closures of
+++  fields of prime characteristic, transcendental extensions of
+++  of fields of prime characteristic.
+FieldOfPrimeCharacteristic:Category == _
+ Join(Field,CharacteristicNonZero) with
+   order: $ -> OnePointCompletion PositiveInteger
+     ++ order(a) computes the order of an element in the multiplicative
+     ++ group of the field.
+     ++ Error: if \spad{a} is 0.
+   discreteLog: ($,$) -> Union(NonNegativeInteger,"failed")
+     ++ discreteLog(b,a) computes s with \spad{b**s = a} if such an s exists.
+   primeFrobenius: $ -> $
+     ++ primeFrobenius(a) returns \spad{a**p} where p is the characteristic.
+   primeFrobenius: ($,NonNegativeInteger) -> $
+     ++ primeFrobenius(a,s) returns \spad{a**(p**s)} where p
+     ++ is the characteristic.
+ add
+   primeFrobenius(a) == a ** characteristic()
+   primeFrobenius(a,s) == a ** (characteristic()**s)
+
+@
+<<FPC.dotabb>>=
+"FPC"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FPC"];
+"FPC" -> "CHARNZ"
+"FPC" -> "FIELD"
+
+@
+<<FPC.dotfull>>=
+"FieldOfPrimeCharacteristic()"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=FPC"];
+"FieldOfPrimeCharacteristic()" -> "CharacteristicNonZero()"
+
+@
+<<FPC.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"FieldOfPrimeCharacteristic()" [color=lightblue];
+"FieldOfPrimeCharacteristic()" -> "CHARNZ..."
+"FieldOfPrimeCharacteristic()" -> "Field()"
+
+"Field()" [color=lightblue];
+"Field()" -> "EuclideanDomain()"
+"Field()" -> "UniqueFactorizationDomain()"
+"Field()" -> "DIVRING..."
+
+"EuclideanDomain()" [color=lightblue];
+"EuclideanDomain()" -> "PrincipalIdealDomain()"
+
+"UniqueFactorizationDomain()" [color=lightblue];
+"UniqueFactorizationDomain()" -> "GCDDOM..."
+
+"PrincipalIdealDomain()" [color=lightblue];
+"PrincipalIdealDomain()" -> "GCDDOM..."
+
+"GCDDOM..." [color=lightblue];
+"DIVRING..." [color=lightblue];
+"CHARNZ..." [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FiniteRankAlgebra}{FINRALG}
 \pagepic{ps/v102finiterankalgebra.ps}{FINRALG}{0.45}
 
@@ -21644,7 +21874,7 @@ These are implemented by this category:
  traceMatrix : Vector % -> Matrix R
 \end{verbatim}
 
-These exports come from Algebra(R:CommutativeRing):
+These exports come from \refto{Algebra}(R:CommutativeRing):
 \begin{verbatim}
  0 : () -> %
  1 : () -> %                          
@@ -21673,19 +21903,19 @@ These exports come from Algebra(R:CommutativeRing):
  ?^? : (%,NonNegativeInteger) -> %
 \end{verbatim}
 
-These exports come from Field():
+These exports come from \refto{Field}():
 \begin{verbatim}
  ?*? : (R,%) -> %                     
  ?*? : (%,R) -> %
  coerce : R -> %
 \end{verbatim}
 
-These exports come from CharacteristicNonZero():
+These exports come from \refto{CharacteristicNonZero}():
 \begin{verbatim}
  charthRoot : % -> Union(%,"failed") if R has CHARNZ
 \end{verbatim}
 
-These exports come from CharacteristicZero():
+These exports come from \refto{CharacteristicZero}():
 \begin{verbatim}
 \end{verbatim}
 
@@ -21975,6 +22205,306 @@ digraph pic {
 @
 \chapter{Category Layer 18}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pagehead{ExtensionField}{XF}
+\pagepic{ps/v102extensionfield.ps}{XF}{0.75}
+
+{\bf See:}\\
+\pagefrom{Field}{FIELD}
+\pagefrom{RetractableTo}{RETRACT}
+\pagefrom{VectorSpace}{VSPACE}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{XF}{0} &
+\cross{XF}{1} &
+\cross{XF}{algebraic?} &
+\cross{XF}{associates?} \\
+\cross{XF}{characteristic} &
+\cross{XF}{charthRoot} &
+\cross{XF}{coerce} &
+\cross{XF}{degree} \\
+\cross{XF}{discreteLog} &
+\cross{XF}{divide} &
+\cross{XF}{euclideanSize} &
+\cross{XF}{expressIdealMember} \\
+\cross{XF}{exquo} &
+\cross{XF}{extendedEuclidean} &
+\cross{XF}{extensionDegree} &
+\cross{XF}{dimension} \\
+\cross{XF}{factor} &
+\cross{XF}{Frobenius} &
+\cross{XF}{gcd} &
+\cross{XF}{gcdPolynomial} \\
+\cross{XF}{hash} &
+\cross{XF}{inGroundField?} &
+\cross{XF}{inv} &
+\cross{XF}{latex} \\
+\cross{XF}{lcm} &
+\cross{XF}{multiEuclidean} &
+\cross{XF}{one?} &
+\cross{XF}{order} \\
+\cross{XF}{prime?} &
+\cross{XF}{primeFrbenius} &
+\cross{XF}{principalIdeal} &
+\cross{XF}{recip} \\
+\cross{XF}{retract} &
+\cross{XF}{retractIfCan} &
+\cross{XF}{sample} &
+\cross{XF}{sizeLess?} \\
+\cross{XF}{squareFree} &
+\cross{XF}{squareFreePart} &
+\cross{XF}{subtractIfCan} &
+\cross{XF}{transcendenceDegree} \\
+\cross{XF}{transcendent?} &
+\cross{XF}{unit?} &
+\cross{XF}{unitCanonical} &
+\cross{XF}{unitNormal} \\
+\cross{XF}{zero?} &
+\cross{XF}{?*?} &
+\cross{XF}{?**?} &
+\cross{XF}{?+?} \\
+\cross{XF}{?-?} &
+\cross{XF}{-?} &
+\cross{XF}{?/?} &
+\cross{XF}{?=?} \\
+\cross{XF}{?\^{}?} &
+\cross{XF}{?quo?} &
+\cross{XF}{?rem?} &
+\cross{XF}{?\~{}=?}\\
+\end{tabular}
+
+These are directly exported but not implemented:
+\begin{verbatim}
+ inGroundField? : % -> Boolean
+ degree : % -> OnePointCompletion PositiveInteger
+ extensionDegree : () -> OnePointCompletion PositiveInteger
+ transcendenceDegree : () -> NonNegativeInteger
+\end{verbatim}
+
+These are implemented by this category:
+\begin{verbatim}
+ algebraic? : % -> Boolean
+ Frobenius : % -> % if F has FINITE
+ Frobenius : (%,NonNegativeInteger) -> % if F has FINITE
+ transcendent? : % -> Boolean         
+\end{verbatim}
+
+
+These exports come from \refto{Field}():
+\begin{verbatim}
+ 0 : () -> %                          
+ 1 : () -> %
+ associates? : (%,%) -> Boolean       
+ characteristic : () -> NonNegativeInteger
+ coerce : % -> %
+ coerce : Integer -> %                
+ coerce : % -> OutputForm
+ coerce : Fraction Integer -> %       
+ divide : (%,%) -> Record(quotient: %,remainder: %)
+ euclideanSize : % -> NonNegativeInteger
+ expressIdealMember : (List %,%) -> Union(List %,"failed")
+ exquo : (%,%) -> Union(%,"failed")
+ extendedEuclidean : (%,%,%) -> 
+   Union(Record(coef1: %,coef2: %),"failed")
+ extendedEuclidean : (%,%) -> 
+   Record(coef1: %,coef2: %,generator: %)
+ factor : % -> Factored %
+ gcd : List % -> %                    
+ gcd : (%,%) -> %
+ gcdPolynomial : (SparseUnivariatePolynomial %,
+                  SparseUnivariatePolynomial %) ->
+                      SparseUnivariatePolynomial %
+ hash : % -> SingleInteger            
+ inv : % -> %                         
+ latex : % -> String
+ lcm : List % -> %                    
+ lcm : (%,%) -> %
+ multiEuclidean : (List %,%) -> Union(List %,"failed")
+ one? : % -> Boolean                  
+ prime? : % -> Boolean
+ principalIdeal : List % -> Record(coef: List %,generator: %)
+ recip : % -> Union(%,"failed")
+ sample : () -> %                     
+ squareFree : % -> Factored %         
+ squareFreePart : % -> %
+ sizeLess? : (%,%) -> Boolean
+ subtractIfCan : (%,%) -> Union(%,"failed")
+ unit? : % -> Boolean
+ unitCanonical : % -> %               
+ unitNormal : % -> Record(unit: %,canonical: %,associate: %)
+ zero? : % -> Boolean
+ ?/? : (%,%) -> %
+ ?+? : (%,%) -> %
+ ?=? : (%,%) -> Boolean               
+ ?~=? : (%,%) -> Boolean              
+ ?*? : (%,%) -> %                     
+ ?*? : (Integer,%) -> %
+ ?*? : (PositiveInteger,%) -> %       
+ ?*? : (NonNegativeInteger,%) -> %
+ ?*? : (Fraction Integer,%) -> %      
+ ?*? : (%,Fraction Integer) -> %
+ ?*? : (F,%) -> %                     
+ ?*? : (%,F) -> %
+ ?-? : (%,%) -> %                     
+ -? : % -> %
+ ?**? : (%,NonNegativeInteger) -> %
+ ?**? : (%,PositiveInteger) -> %      
+ ?**? : (%,Integer) -> %
+ ?^? : (%,Integer) -> %
+ ?^? : (%,PositiveInteger) -> %       
+ ?^? : (%,NonNegativeInteger) -> %
+ ?quo? : (%,%) -> %                   
+ ?rem? : (%,%) -> %                   
+\end{verbatim}
+
+These exports come from \refto{RetractableTo}(F:Field):
+\begin{verbatim}
+ coerce : F -> %
+ retract : % -> F
+ retractIfCan : % -> Union(F,"failed")
+\end{verbatim}
+
+These exports come from \refto{VectorSpace}(F:Field):
+\begin{verbatim}
+ dimension : () -> CardinalNumber     
+ ?/? : (%,F) -> %                     
+\end{verbatim}
+
+These exports come from \refto{FieldOfPrimeCharacteristic}():
+\begin{verbatim}
+ charthRoot : % -> Union(%,"failed") 
+     if F has CHARNZ or F has FINITE
+ discreteLog : (%,%) -> Union(NonNegativeInteger,"failed") 
+     if F has CHARNZ or F has FINITE
+ order : % -> OnePointCompletion PositiveInteger 
+     if F has CHARNZ or F has FINITE
+ primeFrobenius : % -> % 
+     if F has CHARNZ or F has FINITE
+ primeFrobenius : (%,NonNegativeInteger) -> % 
+     if F has CHARNZ or F has FINITE
+\end{verbatim}
+
+<<category XF ExtensionField>>=
+)abbrev category XF ExtensionField
+++ Author: J. Grabmeier, A. Scheerhorn
+++ Date Created: 10 March 1991
+++ Date Last Updated: 31 March 1991
+++ Basic Operations: _+, _*, extensionDegree, algebraic?, transcendent?
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords: field, extension field
+++ References:
+++  J. Grabmeier, A. Scheerhorn: Finite Fields in AXIOM.
+++  AXIOM Technical Report Series, ATR/5 NP2522.
+++ Description:
+++  ExtensionField {\em F} is the category of fields which extend
+++  the field F
+ExtensionField(F:Field) : Category  == _
+  Join(Field,RetractableTo F,VectorSpace F) with
+    if F has CharacteristicZero then CharacteristicZero
+    if F has CharacteristicNonZero then FieldOfPrimeCharacteristic
+    algebraic? : $ -> Boolean
+      ++ algebraic?(a) tests whether an element \spad{a} is algebraic with
+      ++ respect to the ground field F.
+    transcendent? : $ -> Boolean
+      ++ transcendent?(a) tests whether an element \spad{a} is transcendent
+      ++ with respect to the ground field F.
+    inGroundField?: $ -> Boolean
+      ++ inGroundField?(a) tests whether an element \spad{a}
+      ++ is already in the ground field F.
+    degree : $ -> OnePointCompletion PositiveInteger
+      ++ degree(a) returns the degree of minimal polynomial of an element
+      ++ \spad{a} if \spad{a} is algebraic
+      ++ with respect to the ground field F, and \spad{infinity} otherwise.
+    extensionDegree : () -> OnePointCompletion PositiveInteger
+      ++ extensionDegree() returns the degree of the field extension if the
+      ++ extension is algebraic, and \spad{infinity} if it is not.
+    transcendenceDegree : () -> NonNegativeInteger
+      ++ transcendenceDegree() returns the transcendence degree of the
+      ++ field extension, 0 if the extension is algebraic.
+    -- perhaps more absolute degree functions
+    if F has Finite then
+      FieldOfPrimeCharacteristic
+      Frobenius: $ -> $
+        ++ Frobenius(a) returns \spad{a ** q} where q is the \spad{size()$F}.
+      Frobenius:   ($,NonNegativeInteger) -> $
+        ++ Frobenius(a,s) returns \spad{a**(q**s)} where q is the size()$F.
+  add
+    algebraic?(a) == not infinite? (degree(a)@OnePointCompletion_
+      (PositiveInteger))$OnePointCompletion(PositiveInteger)
+    transcendent? a == infinite?(degree(a)@OnePointCompletion _
+      (PositiveInteger))$OnePointCompletion(PositiveInteger)
+    if F has Finite then
+      Frobenius(a) == a ** size()$F
+      Frobenius(a,s) == a ** (size()$F ** s)
+
+@
+<<XF.dotabb>>=
+"XF"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=XF"];
+"XF" -> "FIELD"
+"XF" -> "RETRACT"
+"XF" -> "VSPACE"
+"XF" -> "FPC"
+
+@
+<<XF.dotfull>>=
+"ExtensionField(a:Field)"
+ [color=lightblue,href="bookvol10.2.pdf#nameddest=XF"];
+"ExtensionField(a:Field)" -> "Field()"
+"ExtensionField(a:Field)" -> "RetractableTo(Field)"
+"ExtensionField(a:Field)" -> "VectorSpace(a:Field)"
+"ExtensionField(a:Field)" -> "FieldOfPrimeCharacteristic()"
+
+@
+<<XF.dotpic>>=
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"ExtensionField(a:Field)" [color=lightblue];
+"ExtensionField(a:Field)" -> "Field()"
+"ExtensionField(a:Field)" -> "RetractableTo(Field)"
+"ExtensionField(a:Field)" -> "VectorSpace(a:Field)"
+
+"FieldOfPrimeCharacteristic()" [color=lightblue];
+"FieldOfPrimeCharacteristic()" -> "CHARNZ..."
+"FieldOfPrimeCharacteristic()" -> "Field()"
+
+"Field()" [color=lightblue];
+"Field()" -> "EuclideanDomain()"
+"Field()" -> "UniqueFactorizationDomain()"
+"Field()" -> "DIVRING..."
+
+"EuclideanDomain()" [color=lightblue];
+"EuclideanDomain()" -> "PrincipalIdealDomain()"
+
+"UniqueFactorizationDomain()" [color=lightblue];
+"UniqueFactorizationDomain()" -> "GCDDOM..."
+
+"PrincipalIdealDomain()" [color=lightblue];
+"PrincipalIdealDomain()" -> "GCDDOM..."
+
+"RetractableTo(Field)" [color=seagreen];
+"RetractableTo(Field)" -> "RetractableTo(a:Type)"
+
+"RetractableTo(a:Type)" [color=lightblue];
+"RetractableTo(a:Type)" -> "Category"
+
+"VectorSpace(a:Field)" [color=lightblue];
+"VectorSpace(a:Field)" -> "MODULE..."
+
+"MODULE..." [color=lightblue];
+"DIVRING..." [color=lightblue];
+"GCDDOM..." [color=lightblue];
+"CHARNZ..." [color=lightblue];
+"Category" [color=lightblue];
+}
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \pagehead{FunctionFieldCategory}{FFCAT}
 \pagepic{ps/v102functionfieldcategory.ps}{FFCAT}{0.70}
 
@@ -22461,15 +22991,15 @@ These are implemented by this category:
  yCoordinates : % -> Record(num: Vector UP,den: UP)
 \end{verbatim}
 
-These exports come from Aggregate:
+These exports come from \refto{Aggregate}:
 \begin{verbatim}
 \end{verbatim}
 
-These exports come from Evalable(a:Type):
+These exports come from \refto{Evalable}(a:Type):
 \begin{verbatim}
 \end{verbatim}
 
-These exports come from SetCategory:
+These exports come from \refto{SetCategory}:
 \begin{verbatim}
 \end{verbatim}
 
@@ -22998,7 +23528,7 @@ These are implemented by this category:
  traceMatrix : () -> Matrix R
 \end{verbatim}
 
-These exports come from FiniteRankAlgebra(R, UP)\\
+These exports come from \refto{FiniteRankAlgebra}(R, UP)\\
 where R:CommutativeRing and UP:UnivariatePolynomialCategory R):
 \begin{verbatim}
  0 : () -> %
@@ -29161,6 +29691,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category FFCAT FunctionFieldCategory>>
 <<category FLAGG FiniteLinearAggregate>>
 <<category FLINEXP FullyLinearlyExplicitRingOver>>
+<<category FPC FieldOfPrimeCharacteristic>>
 <<category FRAMALG FramedAlgebra>>
 <<category FRETRCT FullyRetractableTo>>
 <<category FRNAALG FramedNonAssociativeAlgebra>>
@@ -29230,6 +29761,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<category UFD UniqueFactorizationDomain>>
 <<category URAGG UnaryRecursiveAggregate>>
 <<category VSPACE VectorSpace>>
+<<category XF ExtensionField>>
 @
 <<dotabb>>=
 digraph dotabb {
@@ -29280,6 +29812,7 @@ digraph dotabb {
 <<FFCAT.dotabb>>
 <<FLAGG.dotabb>>
 <<FLINEXP.dotabb>>
+<<FPC.dotabb>>
 <<FRAMALG.dotabb>>
 <<FRETRCT.dotabb>>
 <<FRNAALG.dotabb>>
@@ -29348,6 +29881,7 @@ digraph dotabb {
 <<UFD.dotabb>>
 <<URAGG.dotabb>>
 <<VSPACE.dotabb>>
+<<XF.dotabb>>
 }
 @
 <<dotfull>>=
@@ -29401,6 +29935,7 @@ digraph dotfull {
 <<FFCAT.dotfull>>
 <<FLAGG.dotfull>>
 <<FLINEXP.dotfull>>
+<<FPC.dotfull>>
 <<FRAMALG.dotfull>>
 <<FRETRCT.dotfull>>
 <<FRNAALG.dotfull>>
@@ -29469,6 +30004,7 @@ digraph dotfull {
 <<UFD.dotfull>>
 <<URAGG.dotfull>>
 <<VSPACE.dotfull>>
+<<XF.dotfull>>
 }
 @
 \eject
@@ -29481,6 +30017,8 @@ AMS, Providence, 1968
 Academic Press, New York, 1966
 \bibitem{5} R. Wisbauer: Bimodule Structure of Algebra
 Lecture Notes Univ. Duesseldorf 1991
+\bibitem{6} J. Grabmeier, A. Scheerhorn: Finite Fields in AXIOM.
+AXIOM Technical Report Series, ATR/5 NP2522.
 \end{thebibliography}
 \printindex
 \end{document}
diff --git a/books/ps/v102extensionfield.ps b/books/ps/v102extensionfield.ps
new file mode 100644
index 0000000..af26994
--- /dev/null
+++ b/books/ps/v102extensionfield.ps
@@ -0,0 +1,883 @@
+%!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 574 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 574 440
+%%PageOrientation: Portrait
+gsave
+36 36 538 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
+536 402 lineto
+536 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 402 lineto
+536 402 lineto
+536 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% ExtensionField(a:Field)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 303 396 moveto
+155 396 lineto
+155 360 lineto
+303 360 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 303 396 moveto
+155 396 lineto
+155 360 lineto
+303 360 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+163 373 moveto
+(ExtensionField\(a:Field\))
+[8.64 6.96 3.84 6.24 6.96 5.52 3.84 6.96 6.96 7.44 3.84 6.24 3.84 6.96 4.56 6.24 3.84 7.44 3.84 6.24 3.84 6.96 4.56]
+xshow
+end grestore
+end grestore
+% Field()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 228 252 moveto
+174 252 lineto
+174 216 lineto
+228 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 228 252 moveto
+174 252 lineto
+174 216 lineto
+228 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+182 229 moveto
+(Field\(\))
+[7.44 3.84 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% ExtensionField(a:Field)->Field()
+newpath 211 360 moveto
+203 350 194 337 189 324 curveto
+182 304 186 280 191 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 194 263 moveto
+194 252 lineto
+188 261 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 194 263 moveto
+194 252 lineto
+188 261 lineto
+closepath
+stroke
+end grestore
+% RetractableTo(Field)
+gsave 10 dict begin
+filled
+0.404 0.667 0.545 nodecolor
+0.404 0.667 0.545 nodecolor
+newpath 140 324 moveto
+8 324 lineto
+8 288 lineto
+140 288 lineto
+closepath
+fill
+0.404 0.667 0.545 nodecolor
+newpath 140 324 moveto
+8 324 lineto
+8 288 lineto
+140 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+16 301 moveto
+(RetractableTo\(Field\))
+[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 7.44 3.84 6.24 3.84 6.96 4.56]
+xshow
+end grestore
+end grestore
+% ExtensionField(a:Field)->RetractableTo(Field)
+newpath 190 360 moveto
+169 350 144 339 122 328 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 124 325 moveto
+113 324 lineto
+121 331 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 124 325 moveto
+113 324 lineto
+121 331 lineto
+closepath
+stroke
+end grestore
+% VectorSpace(a:Field)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 530 324 moveto
+396 324 lineto
+396 288 lineto
+530 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 530 324 moveto
+396 324 lineto
+396 288 lineto
+530 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+403 301 moveto
+(VectorSpace\(a:Field\))
+[8.88 6.24 6.24 3.84 6.96 4.8 7.68 6.96 6.24 6.24 6.24 4.56 6.24 3.84 7.44 3.84 6.24 3.84 6.96 4.56]
+xshow
+end grestore
+end grestore
+% ExtensionField(a:Field)->VectorSpace(a:Field)
+newpath 288 360 moveto
+321 350 361 337 395 327 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 396 330 moveto
+405 324 lineto
+394 324 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 396 330 moveto
+405 324 lineto
+394 324 lineto
+closepath
+stroke
+end grestore
+% FieldOfPrimeCharacteristic()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 378 324 moveto
+198 324 lineto
+198 288 lineto
+378 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 378 324 moveto
+198 324 lineto
+198 288 lineto
+378 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+206 301 moveto
+(FieldOfPrimeCharacteristic\(\))
+[7.44 3.84 6.24 3.84 6.96 10.08 4.56 7.68 5.04 3.84 10.8 6.24 9.36 6.96 6.24 4.8 6.24 6.24 3.84 6.24 5.04 3.84 5.28 3.84 3.84 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% ExtensionField(a:Field)->FieldOfPrimeCharacteristic()
+newpath 244 360 moveto
+251 351 259 341 267 332 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 270 334 moveto
+273 324 lineto
+264 330 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 270 334 moveto
+273 324 lineto
+264 330 lineto
+closepath
+stroke
+end grestore
+% EuclideanDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 389 180 moveto
+263 180 lineto
+263 144 lineto
+389 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 389 180 moveto
+263 180 lineto
+263 144 lineto
+389 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+270 157 moveto
+(EuclideanDomain\(\))
+[8.64 6.96 6.24 3.84 3.84 6.96 6.24 6.24 6.96 10.08 6.96 10.8 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Field()->EuclideanDomain()
+newpath 228 218 moveto
+245 209 267 196 286 185 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 288 188 moveto
+295 180 lineto
+285 182 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 288 188 moveto
+295 180 lineto
+285 182 lineto
+closepath
+stroke
+end grestore
+% UniqueFactorizationDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 228 108 moveto
+44 108 lineto
+44 72 lineto
+228 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 228 108 moveto
+44 108 lineto
+44 72 lineto
+228 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+51 85 moveto
+(UniqueFactorizationDomain\(\))
+[9.6 6.96 3.84 6.72 6.96 6.24 7.2 6.24 6.24 3.84 6.96 5.04 3.84 6.24 6.24 3.84 3.84 6.96 6.96 10.08 6.96 10.8 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Field()->UniqueFactorizationDomain()
+newpath 179 216 moveto
+169 206 157 194 150 180 curveto
+141 161 137 137 136 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 140 118 moveto
+136 108 lineto
+133 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 140 118 moveto
+136 108 lineto
+133 118 lineto
+closepath
+stroke
+end grestore
+% DIVRING...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 245 180 moveto
+159 180 lineto
+159 144 lineto
+245 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 245 180 moveto
+159 180 lineto
+159 144 lineto
+245 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+166 157 moveto
+(DIVRING...)
+[10.08 4.56 10.08 9.36 4.56 9.84 10.08 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% Field()->DIVRING...
+newpath 201 216 moveto
+202 208 202 199 202 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 206 190 moveto
+202 180 lineto
+199 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 206 190 moveto
+202 180 lineto
+199 190 lineto
+closepath
+stroke
+end grestore
+% RetractableTo(a:Type)
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 140 252 moveto
+0 252 lineto
+0 216 lineto
+140 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 140 252 moveto
+0 252 lineto
+0 216 lineto
+140 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+7 229 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(Field)->RetractableTo(a:Type)
+newpath 73 288 moveto
+72 280 72 271 72 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 75 262 moveto
+71 252 lineto
+69 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 75 262 moveto
+71 252 lineto
+69 262 lineto
+closepath
+stroke
+end grestore
+% MODULE...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 507 252 moveto
+419 252 lineto
+419 216 lineto
+507 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 507 252 moveto
+419 252 lineto
+419 216 lineto
+507 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+427 229 moveto
+(MODULE...)
+[12.48 10.08 10.08 10.08 8.64 8.64 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% VectorSpace(a:Field)->MODULE...
+newpath 463 288 moveto
+463 280 463 271 463 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 467 262 moveto
+463 252 lineto
+460 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 467 262 moveto
+463 252 lineto
+460 262 lineto
+closepath
+stroke
+end grestore
+% FieldOfPrimeCharacteristic()->Field()
+newpath 266 288 moveto
+255 279 242 268 231 258 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 233 255 moveto
+223 252 lineto
+229 261 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 233 255 moveto
+223 252 lineto
+229 261 lineto
+closepath
+stroke
+end grestore
+% CHARNZ...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 330 252 moveto
+246 252 lineto
+246 216 lineto
+330 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 330 252 moveto
+246 252 lineto
+246 216 lineto
+330 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+253 229 moveto
+(CHARNZ...)
+[9.36 10.08 10.08 9.36 10.08 8.64 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% FieldOfPrimeCharacteristic()->CHARNZ...
+newpath 288 288 moveto
+288 280 288 271 288 262 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 292 262 moveto
+288 252 lineto
+285 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 292 262 moveto
+288 252 lineto
+285 262 lineto
+closepath
+stroke
+end grestore
+% PrincipalIdealDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 398 108 moveto
+248 108 lineto
+248 72 lineto
+398 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 398 108 moveto
+248 108 lineto
+248 72 lineto
+398 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+256 85 moveto
+(PrincipalIdealDomain\(\))
+[7.68 5.04 3.84 6.96 6.24 3.84 6.96 6.24 3.84 4.56 6.96 6.24 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
+% EuclideanDomain()->PrincipalIdealDomain()
+newpath 325 144 moveto
+324 136 324 127 324 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 328 118 moveto
+324 108 lineto
+321 118 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 328 118 moveto
+324 108 lineto
+321 118 lineto
+closepath
+stroke
+end grestore
+% GCDDOM...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 274 36 moveto
+184 36 lineto
+184 0 lineto
+274 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 274 36 moveto
+184 36 lineto
+184 0 lineto
+274 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+192 13 moveto
+(GCDDOM...)
+[10.08 9.36 10.08 10.08 10.08 12.48 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% UniqueFactorizationDomain()->GCDDOM...
+newpath 159 72 moveto
+170 63 185 52 198 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 200 45 moveto
+206 36 lineto
+196 39 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 200 45 moveto
+206 36 lineto
+196 39 lineto
+closepath
+stroke
+end grestore
+% PrincipalIdealDomain()->GCDDOM...
+newpath 299 72 moveto
+288 63 273 52 260 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 262 39 moveto
+252 36 lineto
+258 45 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 262 39 moveto
+252 36 lineto
+258 45 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 103 180 moveto
+35 180 lineto
+35 144 lineto
+103 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 103 180 moveto
+35 180 lineto
+35 144 lineto
+103 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+43 157 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 70 216 moveto
+69 208 69 199 69 190 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 73 190 moveto
+69 180 lineto
+66 190 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 73 190 moveto
+69 180 lineto
+66 190 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/books/ps/v102fieldofprimecharacteristic.ps b/books/ps/v102fieldofprimecharacteristic.ps
new file mode 100644
index 0000000..c5412b9
--- /dev/null
+++ b/books/ps/v102fieldofprimecharacteristic.ps
@@ -0,0 +1,585 @@
+%!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 396 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 396 368
+%%PageOrientation: Portrait
+gsave
+36 36 360 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
+358 330 lineto
+358 -6 lineto
+closepath
+fill
+0.167 0.600 1.000 graphcolor
+newpath -6 -6 moveto
+-6 330 lineto
+358 330 lineto
+358 -6 lineto
+closepath
+stroke
+0.000 0.000 0.000 graphcolor
+14.00 /Times-Roman set_font
+% FieldOfPrimeCharacteristic()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 282 324 moveto
+102 324 lineto
+102 288 lineto
+282 288 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 282 324 moveto
+102 324 lineto
+102 288 lineto
+282 288 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+110 301 moveto
+(FieldOfPrimeCharacteristic\(\))
+[7.44 3.84 6.24 3.84 6.96 10.08 4.56 7.68 5.04 3.84 10.8 6.24 9.36 6.96 6.24 4.8 6.24 6.24 3.84 6.24 5.04 3.84 5.28 3.84 3.84 6.24 4.56 4.56]
+xshow
+end grestore
+end grestore
+% CHARNZ...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 191 252 moveto
+107 252 lineto
+107 216 lineto
+191 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 191 252 moveto
+107 252 lineto
+107 216 lineto
+191 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+114 229 moveto
+(CHARNZ...)
+[9.36 10.08 10.08 9.36 10.08 8.64 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% FieldOfPrimeCharacteristic()->CHARNZ...
+newpath 181 288 moveto
+176 280 170 270 165 261 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 168 259 moveto
+160 252 lineto
+162 262 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 168 259 moveto
+160 252 lineto
+162 262 lineto
+closepath
+stroke
+end grestore
+% Field()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 263 252 moveto
+209 252 lineto
+209 216 lineto
+263 216 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 263 252 moveto
+209 252 lineto
+209 216 lineto
+263 216 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+217 229 moveto
+(Field\(\))
+[7.44 3.84 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% FieldOfPrimeCharacteristic()->Field()
+newpath 203 288 moveto
+208 280 214 270 220 261 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 223 262 moveto
+225 252 lineto
+217 259 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 223 262 moveto
+225 252 lineto
+217 259 lineto
+closepath
+stroke
+end grestore
+% EuclideanDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 161 180 moveto
+35 180 lineto
+35 144 lineto
+161 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 161 180 moveto
+35 180 lineto
+35 144 lineto
+161 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+42 157 moveto
+(EuclideanDomain\(\))
+[8.64 6.96 6.24 3.84 3.84 6.96 6.24 6.24 6.96 10.08 6.96 10.8 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Field()->EuclideanDomain()
+newpath 209 220 moveto
+190 210 164 196 142 185 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 143 182 moveto
+133 180 lineto
+140 188 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 143 182 moveto
+133 180 lineto
+140 188 lineto
+closepath
+stroke
+end grestore
+% UniqueFactorizationDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 352 108 moveto
+168 108 lineto
+168 72 lineto
+352 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 352 108 moveto
+168 108 lineto
+168 72 lineto
+352 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+175 85 moveto
+(UniqueFactorizationDomain\(\))
+[9.6 6.96 3.84 6.72 6.96 6.24 7.2 6.24 6.24 3.84 6.96 5.04 3.84 6.24 6.24 3.84 3.84 6.96 6.96 10.08 6.96 10.8 6.24 3.84 6.96 4.56 4.56]
+xshow
+end grestore
+end grestore
+% Field()->UniqueFactorizationDomain()
+newpath 239 216 moveto
+243 191 250 147 255 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 258 118 moveto
+257 108 lineto
+252 117 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 258 118 moveto
+257 108 lineto
+252 117 lineto
+closepath
+stroke
+end grestore
+% DIVRING...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 350 180 moveto
+264 180 lineto
+264 144 lineto
+350 144 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 350 180 moveto
+264 180 lineto
+264 144 lineto
+350 144 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+271 157 moveto
+(DIVRING...)
+[10.08 4.56 10.08 9.36 4.56 9.84 10.08 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% Field()->DIVRING...
+newpath 254 216 moveto
+263 207 273 197 282 188 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 285 190 moveto
+289 180 lineto
+280 185 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 285 190 moveto
+289 180 lineto
+280 185 lineto
+closepath
+stroke
+end grestore
+% PrincipalIdealDomain()
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 150 108 moveto
+0 108 lineto
+0 72 lineto
+150 72 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 150 108 moveto
+0 108 lineto
+0 72 lineto
+150 72 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+8 85 moveto
+(PrincipalIdealDomain\(\))
+[7.68 5.04 3.84 6.96 6.24 3.84 6.96 6.24 3.84 4.56 6.96 6.24 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
+% EuclideanDomain()->PrincipalIdealDomain()
+newpath 92 144 moveto
+89 136 86 127 84 118 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 87 117 moveto
+81 108 lineto
+81 119 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 87 117 moveto
+81 108 lineto
+81 119 lineto
+closepath
+stroke
+end grestore
+% GCDDOM...
+gsave 10 dict begin
+filled
+0.537 0.247 0.902 nodecolor
+0.537 0.247 0.902 nodecolor
+newpath 212 36 moveto
+122 36 lineto
+122 0 lineto
+212 0 lineto
+closepath
+fill
+0.537 0.247 0.902 nodecolor
+newpath 212 36 moveto
+122 36 lineto
+122 0 lineto
+212 0 lineto
+closepath
+stroke
+gsave 10 dict begin
+0.000 0.000 0.000 nodecolor
+130 13 moveto
+(GCDDOM...)
+[10.08 9.36 10.08 10.08 10.08 12.48 3.6 3.6 3.6]
+xshow
+end grestore
+end grestore
+% UniqueFactorizationDomain()->GCDDOM...
+newpath 237 72 moveto
+226 63 211 52 198 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 200 39 moveto
+190 36 lineto
+196 45 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 200 39 moveto
+190 36 lineto
+196 45 lineto
+closepath
+stroke
+end grestore
+% PrincipalIdealDomain()->GCDDOM...
+newpath 98 72 moveto
+109 63 124 52 136 42 curveto
+stroke
+gsave 10 dict begin
+solid
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 138 45 moveto
+144 36 lineto
+134 39 lineto
+closepath
+fill
+0.000 0.000 0.000 edgecolor
+newpath 138 45 moveto
+144 36 lineto
+134 39 lineto
+closepath
+stroke
+end grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index f9e03cc..0cb9bd1 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20080930 tpd books/ps/v102fieldofprimecharacteristic.ps added
+20080930 tpd books/ps/v102extensionfield.ps added
+20080930 tpd books/bookvol10.2 add XF, FPC from ffcat
+20080930 tpd src/algebra/ffcat.spad move XF, FPC to  bookvol10.2
 20080928 tpd books/bookvol10.2 add trigcat categories
 20080928 tpd books/ps/v102trigonometricfunctioncategory.ps
 20080928 tpd books/ps/v102transcendentalfunctioncategory.ps
diff --git a/src/algebra/ffcat.spad.pamphlet b/src/algebra/ffcat.spad.pamphlet
index 9505c55..3872c81 100644
--- a/src/algebra/ffcat.spad.pamphlet
+++ b/src/algebra/ffcat.spad.pamphlet
@@ -24,99 +24,6 @@
 
 -- Fields with finite characteristic
 \end{verbatim}
-\section{category FPC FieldOfPrimeCharacteristic}
-<<category FPC FieldOfPrimeCharacteristic>>=
-)abbrev category FPC FieldOfPrimeCharacteristic
-++ Author: J. Grabmeier, A. Scheerhorn
-++ Date Created: 10 March 1991
-++ Date Last Updated: 31 March 1991
-++ Basic Operations: _+, _*
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords: field, finite field, prime characteristic
-++ References:
-++  J. Grabmeier, A. Scheerhorn: Finite Fields in AXIOM.
-++  AXIOM Technical Report Series, ATR/5 NP2522.
-++ Description:
-++  FieldOfPrimeCharacteristic is the category of fields of prime
-++  characteristic, e.g. finite fields, algebraic closures of
-++  fields of prime characteristic, transcendental extensions of
-++  of fields of prime characteristic.
-FieldOfPrimeCharacteristic:Category == _
-  Join(Field,CharacteristicNonZero) with
-    order: $ -> OnePointCompletion PositiveInteger
-      ++ order(a) computes the order of an element in the multiplicative
-      ++ group of the field.
-      ++ Error: if \spad{a} is 0.
-    discreteLog: ($,$) -> Union(NonNegativeInteger,"failed")
-      ++ discreteLog(b,a) computes s with \spad{b**s = a} if such an s exists.
-    primeFrobenius: $ -> $
-      ++ primeFrobenius(a) returns \spad{a ** p} where p is the characteristic.
-    primeFrobenius: ($,NonNegativeInteger) -> $
-      ++ primeFrobenius(a,s) returns \spad{a**(p**s)} where p
-      ++ is the characteristic.
-  add
-    primeFrobenius(a) == a ** characteristic()
-    primeFrobenius(a,s) == a ** (characteristic()**s)
-
-@
-\section{category XF ExtensionField}
-<<category XF ExtensionField>>=
-)abbrev category XF ExtensionField
-++ Author: J. Grabmeier, A. Scheerhorn
-++ Date Created: 10 March 1991
-++ Date Last Updated: 31 March 1991
-++ Basic Operations: _+, _*, extensionDegree, algebraic?, transcendent?
-++ Related Constructors:
-++ Also See:
-++ AMS Classifications:
-++ Keywords: field, extension field
-++ References:
-++  J. Grabmeier, A. Scheerhorn: Finite Fields in AXIOM.
-++  AXIOM Technical Report Series, ATR/5 NP2522.
-++ Description:
-++  ExtensionField {\em F} is the category of fields which extend
-++  the field F
-ExtensionField(F:Field) : Category  == Join(Field,RetractableTo F,VectorSpace F) with
-    if F has CharacteristicZero then CharacteristicZero
-    if F has CharacteristicNonZero then FieldOfPrimeCharacteristic
-    algebraic? : $ -> Boolean
-      ++ algebraic?(a) tests whether an element \spad{a} is algebraic with
-      ++ respect to the ground field F.
-    transcendent? : $ -> Boolean
-      ++ transcendent?(a) tests whether an element \spad{a} is transcendent
-      ++ with respect to the ground field F.
-    inGroundField?: $ -> Boolean
-      ++ inGroundField?(a) tests whether an element \spad{a}
-      ++ is already in the ground field F.
-    degree : $ -> OnePointCompletion PositiveInteger
-      ++ degree(a) returns the degree of minimal polynomial of an element
-      ++ \spad{a} if \spad{a} is algebraic
-      ++ with respect to the ground field F, and \spad{infinity} otherwise.
-    extensionDegree : () -> OnePointCompletion PositiveInteger
-      ++ extensionDegree() returns the degree of the field extension if the
-      ++ extension is algebraic, and \spad{infinity} if it is not.
-    transcendenceDegree : () -> NonNegativeInteger
-      ++ transcendenceDegree() returns the transcendence degree of the
-      ++ field extension, 0 if the extension is algebraic.
-    -- perhaps more absolute degree functions
-    if F has Finite then
-      FieldOfPrimeCharacteristic
-      Frobenius: $ -> $
-        ++ Frobenius(a) returns \spad{a ** q} where q is the \spad{size()$F}.
-      Frobenius:   ($,NonNegativeInteger) -> $
-        ++ Frobenius(a,s) returns \spad{a**(q**s)} where q is the size()$F.
-  add
-    algebraic?(a) == not infinite? (degree(a)@OnePointCompletion_
-      (PositiveInteger))$OnePointCompletion(PositiveInteger)
-    transcendent? a == infinite?(degree(a)@OnePointCompletion _
-      (PositiveInteger))$OnePointCompletion(PositiveInteger)
-    if F has Finite then
-      Frobenius(a) == a ** size()$F
-      Frobenius(a,s) == a ** (size()$F ** s)
-
-@
 \section{category FAXF FiniteAlgebraicExtensionField}
 <<category FAXF FiniteAlgebraicExtensionField>>=
 )abbrev category FAXF FiniteAlgebraicExtensionField
@@ -860,8 +767,6 @@ FiniteFieldSolveLinearPolynomialEquation(F:FiniteFieldCategory,
 <<license>>
 
 <<package DLP DiscreteLogarithmPackage>>
-<<category FPC FieldOfPrimeCharacteristic>>
-<<category XF ExtensionField>>
 <<category FAXF FiniteAlgebraicExtensionField>>
 <<category FFIELDC FiniteFieldCategory>>
 <<package FFSLPE FiniteFieldSolveLinearPolynomialEquation>>
