diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 3d9290d..818fdb9 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -28811,6 +28811,7 @@ d P
 )spool
 )lisp (bye)
 \end{chunk}
+
 \begin{chunk}{DeRhamComplex.help}
 ====================================================================
 DeRhamComplex examples
@@ -29061,193 +29062,1464 @@ o )help Operator
 o )show DeRhamComplex
 
 \end{chunk}
-\pagehead{DeRhamComplex}{DERHAM}
-\pagepic{ps/v103derhamcomplex.ps}{DERHAM}{1.00}
-{\bf See}\\
-\pageto{ExtAlgBasis}{EAB}
-\pageto{AntiSymm}{ANTISYM}
 
-{\bf Exports:}\\
-\begin{tabular}{llll}
-\cross{DERHAM}{0} &
-\cross{DERHAM}{1} &
-\cross{DERHAM}{characteristic} &
-\cross{DERHAM}{coefficient} \\
-\cross{DERHAM}{coerce} &
-\cross{DERHAM}{degree} &
-\cross{DERHAM}{exteriorDifferential} &
-\cross{DERHAM}{generator} \\
-\cross{DERHAM}{hash} &
-\cross{DERHAM}{homogeneous?} &
-\cross{DERHAM}{latex} &
-\cross{DERHAM}{leadingBasisTerm} \\
-\cross{DERHAM}{leadingCoefficient} &
-\cross{DERHAM}{map} &
-\cross{DERHAM}{one?} &
-\cross{DERHAM}{recip} \\
-\cross{DERHAM}{reductum} &
-\cross{DERHAM}{retract} &
-\cross{DERHAM}{retractable?} &
-\cross{DERHAM}{retractIfCan} \\
-\cross{DERHAM}{sample} &
-\cross{DERHAM}{subtractIfCan} &
-\cross{DERHAM}{totalDifferential} &
-\cross{DERHAM}{zero?} \\
-\cross{DERHAM}{?\~{}=?} &
-\cross{DERHAM}{?*?} &
-\cross{DERHAM}{?**?} &
-\cross{DERHAM}{?\^{}?} \\
-\cross{DERHAM}{?+?} &
-\cross{DERHAM}{?-?} &
-\cross{DERHAM}{-?} &
-\cross{DERHAM}{?=?} 
-\end{tabular}
+\begin{chunk}{leadingCoefficient.help}
+====================================================================
+leadingCoefficient from DeRhamComplex (DERHAM)
+====================================================================
 
-\begin{chunk}{domain DERHAM DeRhamComplex}
-)abbrev domain DERHAM DeRhamComplex
-++ Author: Larry A. Lambe and Kurt Pagani
-++ Date    : 01/26/91.
-++ Revised : 12/01/91.
-++ Description:
-++ The deRham complex of Euclidean space, that is, the
-++ class of differential forms of arbitary degree over a coefficient ring.
-++ See Flanders, Harley, Differential Forms, With Applications to the Physical
-++ Sciences, New York, Academic Press, 1963.
- 
-DeRhamComplex(CoefRing,listIndVar:List Symbol): Export == Implement where
-  CoefRing :  Join(Ring, OrderedSet)
-  ASY     ==> AntiSymm(R,listIndVar)
-  DIFRING ==> DifferentialRing
-  LALG    ==> LeftAlgebra
-  FMR     ==> FreeMod(R,EAB)
-  I       ==> Integer
-  L       ==> List
-  EAB     ==> ExtAlgBasis  -- these are exponents of basis elements in order
-  NNI     ==> NonNegativeInteger
-  O       ==> OutputForm
-  R       ==> Expression(CoefRing)
-  SMR     ==> SquareMatrix(#listIndVar,R)
- 
-  Export == Join(LALG(R), RetractableTo(R)) with
-      leadingCoefficient : %           -> R
-        ++ leadingCoefficient(df) returns the leading
-        ++ coefficient of differential form df.
-      leadingBasisTerm   : %           -> %
-        ++ leadingBasisTerm(df) returns the leading
-        ++ basis term of differential form df.
-      reductum           : %           -> %
-        ++ reductum(df), where df is a differential form, 
-        ++ returns df minus the leading
-        ++ term of df if df has two or more terms, and
-        ++ 0 otherwise.
-      coefficient        : (%,%)     -> R 
-        ++ coefficient(df,u), where df is a differential form,
-        ++ returns the coefficient of df containing the basis term u
-        ++ if such a term exists, and 0 otherwise.
-      generator          : NNI         -> %
-        ++ generator(n) returns the nth basis term for a differential form.
-      homogeneous?       : %           -> Boolean
-        ++  homogeneous?(df) tests if all of the terms of 
-        ++  differential form df have the same degree.
-      retractable?       : %           -> Boolean
-        ++  retractable?(df) tests if differential form df is a 0-form,
-        ++  i.e., if degree(df) = 0.
-      degree             : %           -> NNI
-        ++  degree(df) returns the homogeneous degree of differential form df.
-      map                : (R -> R, %) -> %
-        ++  map(f,df) replaces each coefficient x of differential 
-        ++  form df by \spad{f(x)}.
-      totalDifferential    : R -> %
-        ++  totalDifferential(x) returns the total differential 
-        ++  (gradient) form for element x.
-      exteriorDifferential : % -> %
-        ++  exteriorDifferential(df) returns the exterior 
-        ++  derivative (gradient, curl, divergence, ...) of
-        ++  the differential form df.
-      dim : % -> NNI
-        ++ dimension of the underlying space
-        ++ that is, dim ExtAlg = 2^dim
-      hodgeStar : (%,SMR) -> %
-        ++ computes the Hodge dual of the differential form % with respect
-        ++ to the metric g.
-      dot : (%,%,SMR) -> R
-        ++ compute the inner product of two differential forms w.r.t. g
-      proj : (%,NNI) -> %
-        ++ projection to homogeneous terms of degree p
-      interiorProduct : (Vector(R),%,SMR) -> %
-        ++ calculates the interior product i_X(a) of the vector field X
-        ++ with the differential form a (w.r.t. metric g)
-      lieDerivative : (Vector(R),%,SMR) -> %
-        ++ calculates the Lie derivative L_X(a) of the differential
-        ++ form a with respect to the vector field X (w.r.t. metric g)
+NAME
+====
 
-  Implement == ASY add
-      Rep := ASY 
+   leadingCoefficient
 
-      dim := #listIndVar
+DOMAIN
+======
 
-      totalDifferential(f) ==
-        divs:=[differentiate(f,listIndVar.i)*generator(i)$ASY for i in 1..dim]
-        reduce("+",divs)
+   DeRhamComplex (DERHAM)
 
-      termDiff : (R, %) -> %
-      termDiff(r,e) ==
-        totalDifferential(r) * e
+SYNOPSYS
+========
 
-      exteriorDifferential(x) ==
-        x = 0 => 0
-        termDiff(leadingCoefficient(x)$Rep,leadingBasisTerm x) + _
-          exteriorDifferential(reductum x)
+   leadingCoefficient : % -> Expression(CoefRing)
 
-      lv := [concat("d",string(liv))$String::Symbol for liv in listIndVar]
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
 
-      displayList:EAB -> O
-      displayList(x):O ==
-        le: L I := exponents(x)$EAB
-        reduce(_*,[(lv.i)::O for i in 1..dim | ((le.i) = 1)])$L(O)
+DESCRIPTION
+===========
 
-      makeTerm:(R,EAB) -> O
-      makeTerm(r,x) ==
-      -- we know that r ^= 0
-        x = Nul(dim)$EAB  => r::O
-        (r = 1) => displayList(x)
-        r::O * displayList(x)
+   leadingCoefficient(df) returns the leading coefficient of 
+   differential form df.
 
-      terms : % -> List Record(k: EAB, c: R)
-      terms(a) ==
-        -- it is the case that there are at least two terms in a
-        a pretend List Record(k: EAB, c: R)
-        
-      err1:="CoefRing has no IntegralDomain"
-      err2:="Not Implemented"
-      err3:="Degenerate metric"
-      err4:="Index out of range"
+ARGUMENTS
+=========
 
-      -- coord space dimension
-      dim(f) == dim
+   A DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
 
-      -- flip 0->1, 1->0
-      flip(b:ExtAlgBasis):ExtAlgBasis ==
-        bl := b pretend List(NNI)
-        [(i+1) rem 2 for i in bl] pretend ExtAlgBasis
+RETURN VALUE
+============
 
-      -- list the positions of a's (a=0,1) in x
-      pos(x:EAB, a:NNI):List(NNI) ==
-        y:= x pretend List(NNI)
-        [j for j in 1..#y | y.j=a]
+   Expression(CoefRing)
 
-      -- compute dot of singletons
-      dot1(r:Record(k:EAB,c:R),s:Record(k:EAB,c:R),g:SMR):R ==
-        not CoefRing has IntegralDomain => error(err1)
-        test(r.k ^= s.k) => 0::R
-        idx := pos(r.k,1)
-        idx = [] => r.c * s.c
-        reduce("*",[1/g(j,j) for j in idx]::List(R))*r.c*s.c
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
 
-      -- export
-      dot(x,y,g) ==
-        tx:=terms(x)
-        ty:=terms(y)
+EXAMPLES
+========
+
+   der:=DERHAM(Integer,[x,y,z])
+   [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   leadingCoefficient sigma
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op leadingCoefficient
+
+\end{chunk}
+
+\begin{chunk}{leadingBasisTerm.help}
+====================================================================
+leadingBasisTerm from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   leadingBasisTerm
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   leadingBasisTerm : % -> %
+
+DESCRIPTION
+===========
+
+   leadingBasisTerm(df) returns the leading basis term of differential form df.
+
+ARGUMENTS
+=========
+
+   A DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   A DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+
+EXAMPLES
+========
+
+   der:=DERHAM(Integer,[x,y,z])
+   [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   leadingBasisTerm sigma
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op leadingBasisTerm
+
+\end{chunk}
+
+\begin{chunk}{reductum.help}
+====================================================================
+reductum from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   reductum
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   reductum : % -> %
+
+DESCRIPTION
+===========
+
+   reductum(df), where df is a differential form, returns df minus 
+   the leading term of df if df has two or more terms, and 0 otherwise.
+
+ARGUMENTS
+=========
+
+   A DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element of a DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+EXAMPLES
+========
+
+   der:=DERHAM(Integer,[x,y,z])
+   [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   reductum sigma
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op reductum
+
+\end{chunk}
+
+\begin{chunk}{coefficient.help}
+====================================================================
+coefficient from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   coefficient
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   coefficient : (%,%) -> R 
+
+DESCRIPTION
+===========
+
+   coefficient(df,u), where df is a differential form,
+   returns the coefficient of df containing the basis term u
+   if such a term exists, and 0 otherwise.
+
+ARGUMENTS
+=========
+
+   Both arguments are an element of a DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   Expression(CoefRing)
+
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   R := Expression(Integer)
+   [dx,dy,dz] := [generator(i)$der for i in 1..3]
+   f : R := x**2*y*z-5*x**3*y**2*z**5
+   g : R := z**2*y*cos(z)-7*sin(x**3*y**2)*z**2 
+   h : R :=x*y*z-2*x**3*y*z**2 
+   alpha : der := f*dx + g*dy + h*dz
+   beta  : der := cos(tan(x*y*z)+x*y*z)*dx + x*dy
+   gamma := alpha * beta
+   coefficient(gamma, dx*dy)
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op coefficient
+
+\end{chunk}
+
+\begin{chunk}{generator.help}
+====================================================================
+generator from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   generator
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   generator : NonNegativeInteger -> %
+
+DESCRIPTION
+===========
+
+   generator(n) returns the nth basis term for a differential form.
+
+ARGUMENTS
+=========
+
+   The argument is a non-negative integer
+
+RETURN VALUE
+============
+
+   An element of a DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   [dx,dy,dz] := [generator(i)$der for i in 1..3]
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op generator
+
+\end{chunk}
+
+\begin{chunk}{homogeneous?.help}
+====================================================================
+homogeneous? from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   homogeneous?
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   homogeneous? : % -> Boolean
+
+DESCRIPTION
+===========
+
+   homogeneous?(df) tests if all of the terms of differential form df
+   have the same degree.
+
+
+ARGUMENTS
+=========
+
+   An element of a DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element of Boolean
+
+EXAMPLES
+========
+
+   der:=DERHAM(Integer,[x,y,z])
+   [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   homogeneous? sigma
+   a:BOP:=operator('a)
+   b:BOP:=operator('b)
+   c:BOP:=operator('c)
+   theta:=a(x,y,z)*dx*dy + b(x,y,z)*dx*dz + c(x,y,z)*dy*dz
+   homogeneous? (sigma+theta)
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op homogeneous?
+
+\end{chunk}
+
+\begin{chunk}{retractable?.help}
+====================================================================
+retractable? from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   retractable?
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   retractable? : % -> Boolean
+
+DESCRIPTION
+===========
+
+   retractable?(df) tests if differential form df is a 0-form,
+   i.e., if degree(df) = 0.
+
+ARGUMENTS
+=========
+
+   An element of a DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element of Boolean
+
+EXAMPLES
+========
+
+   der:=DERHAM(Integer,[x,y,z])
+   [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   retractable? sigma
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op retractable?
+
+\end{chunk}
+
+\begin{chunk}{degree.help}
+====================================================================
+degree from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   degree
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   degree : % -> NonNegativeInteger
+
+DESCRIPTION
+===========
+
+   degree(df) returns the homogeneous degree of differential form df.
+
+ARGUMENTS
+=========
+
+   An element of a DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element of NonNegativeInteger
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   t1 := generator(1)$der
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   a:BOP:=operator('a)
+   b:BOP:=operator('b)
+   c:BOP:=operator('c)
+   theta:der:=a(x,y,z)*dx*dy + b(x,y,z)*dx*dz + c(x,y,z)*dy*dz
+   [degree x for x in [sigma,theta,t1]]
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op degree
+
+\end{chunk}
+
+\begin{chunk}{map.help}
+====================================================================
+map from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   map
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   map : (R -> R, %) -> %
+
+DESCRIPTION
+===========
+
+   degree(df) returns the homogeneous degree of differential form df.
+
+ARGUMENTS
+=========
+
+   Given R := Expression(CoefRing)
+
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+   The first argument is a function from R to R.
+
+   The second argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   R := Expression(Integer)
+   T(x:R):R == x^2
+   map(T,sigma)
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op map
+
+\end{chunk}
+
+\begin{chunk}{totalDifferential.help}
+====================================================================
+totalDifferential from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   totalDifferential
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   totalDifferential : R -> %
+
+DESCRIPTION
+===========
+
+   totalDifferential(x) returns the total differential (gradient) form
+   for element x.
+
+ARGUMENTS
+=========
+
+   Expression(CoefRing)
+
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   a : BOP := operator('a)
+   totalDifferential(a(x,y,z))$der 
+   totalDifferential(x^2+y^2+sin(x)*z^2)$der
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op totalDifferential
+
+\end{chunk}
+
+\begin{chunk}{exteriorDifferential.help}
+====================================================================
+exteriorDifferential from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   exteriorDifferential
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   exteriorDifferential : % -> %
+
+DESCRIPTION
+===========
+
+   exteriorDifferential(df) returns the exterior 
+   derivative (gradient, curl, divergence, ...) of the differential form df.
+
+ARGUMENTS
+=========
+
+   An element from DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   R := Expression(Integer)
+   [dx,dy,dz] := [generator(i)$der for i in 1..3]
+   f : R := x**2*y*z-5*x**3*y**2*z**5
+   g : R := z**2*y*cos(z)-7*sin(x**3*y**2)*z**2 
+   h : R :=x*y*z-2*x**3*y*z**2 
+   alpha : der := f*dx + g*dy + h*dz
+   exteriorDifferential alpha
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op exteriorDifferential
+
+\end{chunk}
+
+\begin{chunk}{dim.help}
+====================================================================
+dim from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   dim
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   dim : % -> NonNegativeInteger
+
+DESCRIPTION
+===========
+
+   dimension of the underlying space that is, dim ExtAlg = 2^dim
+
+ARGUMENTS
+=========
+
+   An element from DeRhamComplex, such as DeRhamComplex(Integer,[x,y,z])
+
+RETURN VALUE
+============
+
+   An element from NonNegativeInteger
+
+EXAMPLES
+========
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op dim
+
+\end{chunk}
+
+\begin{chunk}{hodgeStar.help}
+====================================================================
+hodgeStar from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   hodgeStar
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   hodgeStar : (%,SMR) -> %
+
+DESCRIPTION
+===========
+
+   Computes the Hodge dual of the differential form with respect
+   to the metric g.
+
+ARGUMENTS
+=========
+
+   The first argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The second argument is an element of SquareMatrix(#listIndVar,R)
+
+RETURN VALUE
+============
+
+   An element from NonNegativeInteger
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   G:SquareMatrix(3,Integer):=diagonalMatrix([1,1,1])
+   hodgeStar(sigma,G)
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op hodgeStar
+
+\end{chunk}
+
+\begin{chunk}{dot.help}
+====================================================================
+dot from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   dot
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   dot : (%,%,SMR) -> R
+
+DESCRIPTION
+===========
+
+   Compute the inner product of two differential forms w.r.t. g
+
+ARGUMENTS
+=========
+
+   The first argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The second argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The third argument is an element of SquareMatrix(#listIndVar,R)
+
+RETURN VALUE
+============
+
+   Expression(CoefRing)
+
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+EXAMPLES
+========
+
+   der := DeRhamComplex(Integer,[x,y,z])
+   f:BOP:=operator('f)
+   g:BOP:=operator('g)
+   h:BOP:=operator('h)
+   sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+   G:SquareMatrix(3,Integer):=diagonalMatrix([1,1,1])
+   dot(sigma,sigma,G)
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op dot
+
+\end{chunk}
+
+\begin{chunk}{proj.help}
+====================================================================
+proj from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   proj
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   proj : (%,NNI) -> %
+
+DESCRIPTION
+===========
+
+   Projection to homogeneous terms of degree p
+
+ARGUMENTS
+=========
+
+   The first argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The second argument is an element from NonNegativeInteger
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex such as DeRhamComplex(Integer,[x,y,z]).
+
+EXAMPLES
+========
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op proj
+
+\end{chunk}
+
+\begin{chunk}{interiorProduct.help}
+====================================================================
+interiorProduct from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   interiorProduct
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   interiorProduct : (Vector(R),%,SMR) -> %
+
+DESCRIPTION
+===========
+
+   Calculates the interior product i_X(a) of the vector field X
+   with the differential form a (w.r.t. metric g)
+
+ARGUMENTS
+=========
+
+   The first element is a Vector(Expression(CoefRing))
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+   The second argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The third argument is an element of SquareMatrix(#listIndVar,R)
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex such as DeRhamComplex(Integer,[x,y,z]).
+
+EXAMPLES
+========
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op interiorProduct
+
+\end{chunk}
+
+\begin{chunk}{lieDerivative.help}
+====================================================================
+lieDerivative from DeRhamComplex (DERHAM)
+====================================================================
+
+NAME
+====
+
+   lieDerivative
+
+DOMAIN
+======
+
+   DeRhamComplex (DERHAM)
+
+SYNOPSYS
+========
+
+   lieDerivative : (Vector(R),%,SMR) -> %
+
+DESCRIPTION
+===========
+
+   Calculates the Lie derivative L_X(a) of the differential
+   form a with respect to the vector field X (w.r.t. metric g)
+
+ARGUMENTS
+=========
+
+   The first element is a Vector(Expression(CoefRing))
+   where CoefRing is part of the constructor signature:
+   DeRhamComplex(CoefRing,listIndVar:List Symbol)
+
+   The second argument is an element from DeRhamComplex, 
+   such as DeRhamComplex(Integer,[x,y,z]).
+
+   The third argument is an element of SquareMatrix(#listIndVar,R)
+
+RETURN VALUE
+============
+
+   An element from DeRhamComplex such as DeRhamComplex(Integer,[x,y,z]).
+
+EXAMPLES
+========
+
+NOTES
+=====
+
+REFERENCES
+==========
+
+Flanders, Harley, 
+"Differential Forms, With Applications to the Physical Sciences", 
+New York, Academic Press, 1963.
+
+SEE ALSO
+========
+
+o )show DeRhamComplex
+o )d op lieDerivative
+
+\end{chunk}
+
+\pagehead{DeRhamComplex}{DERHAM}
+\pagepic{ps/v103derhamcomplex.ps}{DERHAM}{1.00}
+{\bf See}\\
+\pageto{ExtAlgBasis}{EAB}
+\pageto{AntiSymm}{ANTISYM}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{DERHAM}{0} &
+\cross{DERHAM}{1} &
+\cross{DERHAM}{characteristic} &
+\cross{DERHAM}{coefficient} \\
+\cross{DERHAM}{coerce} &
+\cross{DERHAM}{degree} &
+\cross{DERHAM}{exteriorDifferential} &
+\cross{DERHAM}{generator} \\
+\cross{DERHAM}{hash} &
+\cross{DERHAM}{homogeneous?} &
+\cross{DERHAM}{latex} &
+\cross{DERHAM}{leadingBasisTerm} \\
+\cross{DERHAM}{leadingCoefficient} &
+\cross{DERHAM}{map} &
+\cross{DERHAM}{one?} &
+\cross{DERHAM}{recip} \\
+\cross{DERHAM}{reductum} &
+\cross{DERHAM}{retract} &
+\cross{DERHAM}{retractable?} &
+\cross{DERHAM}{retractIfCan} \\
+\cross{DERHAM}{sample} &
+\cross{DERHAM}{subtractIfCan} &
+\cross{DERHAM}{totalDifferential} &
+\cross{DERHAM}{zero?} \\
+\cross{DERHAM}{?\~{}=?} &
+\cross{DERHAM}{?*?} &
+\cross{DERHAM}{?**?} &
+\cross{DERHAM}{?\^{}?} \\
+\cross{DERHAM}{?+?} &
+\cross{DERHAM}{?-?} &
+\cross{DERHAM}{-?} &
+\cross{DERHAM}{?=?} 
+\end{tabular}
+
+\begin{chunk}{domain DERHAM DeRhamComplex}
+)abbrev domain DERHAM DeRhamComplex
+++ Author: Larry A. Lambe and Kurt Pagani
+++ Date    : 01/26/91.
+++ Revised : 12/01/91.
+++ Description:
+++ The deRham complex of Euclidean space, that is, the
+++ class of differential forms of arbitary degree over a coefficient ring.
+++ See Flanders, Harley, Differential Forms, With Applications to the Physical
+++ Sciences, New York, Academic Press, 1963.
+ 
+DeRhamComplex(CoefRing,listIndVar:List Symbol): Export == Implement where
+  CoefRing :  Join(Ring, OrderedSet)
+  ASY     ==> AntiSymm(R,listIndVar)
+  DIFRING ==> DifferentialRing
+  LALG    ==> LeftAlgebra
+  FMR     ==> FreeMod(R,EAB)
+  I       ==> Integer
+  L       ==> List
+  EAB     ==> ExtAlgBasis  -- these are exponents of basis elements in order
+  NNI     ==> NonNegativeInteger
+  O       ==> OutputForm
+  R       ==> Expression(CoefRing)
+  SMR     ==> SquareMatrix(#listIndVar,R)
+ 
+  Export == Join(LALG(R), RetractableTo(R)) with
+
+      leadingCoefficient : % -> R
+        ++ leadingCoefficient(df) returns the leading
+        ++ coefficient of differential form df.
+        ++
+        ++X der:=DERHAM(Integer,[x,y,z])
+        ++X [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X leadingCoefficient sigma
+
+      leadingBasisTerm : % -> %
+        ++ leadingBasisTerm(df) returns the leading
+        ++ basis term of differential form df.
+        ++
+        ++X der:=DERHAM(Integer,[x,y,z])
+        ++X [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X leadingBasisTerm sigma
+
+      reductum : % -> %
+        ++ reductum(df), where df is a differential form, returns df minus 
+        ++ the leading term of df if df has two or more terms, and
+        ++ 0 otherwise.
+        ++
+        ++X der:=DERHAM(Integer,[x,y,z])
+        ++X [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X reductum sigma
+
+      coefficient : (%,%) -> R 
+        ++ coefficient(df,u), where df is a differential form,
+        ++ returns the coefficient of df containing the basis term u
+        ++ if such a term exists, and 0 otherwise.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X R := Expression(Integer)
+        ++X [dx,dy,dz] := [generator(i)$der for i in 1..3]
+        ++X f : R := x**2*y*z-5*x**3*y**2*z**5
+        ++X g : R := z**2*y*cos(z)-7*sin(x**3*y**2)*z**2 
+        ++X h : R :=x*y*z-2*x**3*y*z**2 
+        ++X alpha : der := f*dx + g*dy + h*dz
+        ++X beta  : der := cos(tan(x*y*z)+x*y*z)*dx + x*dy
+        ++X gamma := alpha * beta
+        ++X coefficient(gamma, dx*dy)
+
+      generator : NNI -> %
+        ++ generator(n) returns the nth basis term for a differential form.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X [dx,dy,dz] := [generator(i)$der for i in 1..3]
+
+      homogeneous? : % -> Boolean
+        ++  homogeneous?(df) tests if all of the terms of 
+        ++  differential form df have the same degree.
+        ++
+        ++X der:=DERHAM(Integer,[x,y,z])
+        ++X [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X homogeneous? sigma
+        ++X a:BOP:=operator('a)
+        ++X b:BOP:=operator('b)
+        ++X c:BOP:=operator('c)
+        ++X theta:=a(x,y,z)*dx*dy + b(x,y,z)*dx*dz + c(x,y,z)*dy*dz
+        ++X homogeneous? (sigma+theta)
+
+      retractable? : % -> Boolean
+        ++  retractable?(df) tests if differential form df is a 0-form,
+        ++  i.e., if degree(df) = 0.
+        ++
+        ++X der:=DERHAM(Integer,[x,y,z])
+        ++X [dx,dy,dz]:=[generator(i)$der for i in 1..3]
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X retractable? sigma
+
+      degree : % -> NNI
+        ++  degree(df) returns the homogeneous degree of differential form df.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X t1 := generator(1)$der
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X a:BOP:=operator('a)
+        ++X b:BOP:=operator('b)
+        ++X c:BOP:=operator('c)
+        ++X theta:der:=a(x,y,z)*dx*dy + b(x,y,z)*dx*dz + c(x,y,z)*dy*dz
+        ++X [degree x for x in [sigma,theta,t1]]
+
+      map : (R -> R, %) -> %
+        ++  map(f,df) replaces each coefficient x of differential 
+        ++  form df by \spad{f(x)}.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X R := Expression(Integer)
+        ++X T(x:R):R == x^2
+        ++X map(T,sigma)
+
+      totalDifferential : R -> %
+        ++  totalDifferential(x) returns the total differential 
+        ++  (gradient) form for element x.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X a : BOP := operator('a)
+        ++X totalDifferential(a(x,y,z))$der 
+        ++X totalDifferential(x^2+y^2+sin(x)*z^2)$der
+
+      exteriorDifferential : % -> %
+        ++  exteriorDifferential(df) returns the exterior 
+        ++  derivative (gradient, curl, divergence, ...) of
+        ++  the differential form df.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X R := Expression(Integer)
+        ++X [dx,dy,dz] := [generator(i)$der for i in 1..3]
+        ++X f : R := x**2*y*z-5*x**3*y**2*z**5
+        ++X g : R := z**2*y*cos(z)-7*sin(x**3*y**2)*z**2 
+        ++X h : R :=x*y*z-2*x**3*y*z**2 
+        ++X alpha : der := f*dx + g*dy + h*dz
+        ++X exteriorDifferential alpha
+
+      dim : % -> NNI
+        ++ dimension of the underlying space
+        ++ that is, dim ExtAlg = 2^dim
+
+      hodgeStar : (%,SMR) -> %
+        ++ computes the Hodge dual of the differential form with respect
+        ++ to the metric g.
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X G:SquareMatrix(3,Integer):=diagonalMatrix([1,1,1])
+        ++X hodgeStar(sigma,G)
+
+      dot : (%,%,SMR) -> R
+        ++ compute the inner product of two differential forms w.r.t. g
+        ++
+        ++X der := DeRhamComplex(Integer,[x,y,z])
+        ++X f:BOP:=operator('f)
+        ++X g:BOP:=operator('g)
+        ++X h:BOP:=operator('h)
+        ++X sigma:der:=f(x,y,z)*dx + g(x,y,z)*dy + h(x,y,z)*dz
+        ++X G:SquareMatrix(3,Integer):=diagonalMatrix([1,1,1])
+        ++X dot(sigma,sigma,G)
+
+      proj : (%,NNI) -> %
+        ++ projection to homogeneous terms of degree p
+
+      interiorProduct : (Vector(R),%,SMR) -> %
+        ++ calculates the interior product i_X(a) of the vector field X
+        ++ with the differential form a (w.r.t. metric g)
+
+      lieDerivative : (Vector(R),%,SMR) -> %
+        ++ calculates the Lie derivative L_X(a) of the differential
+        ++ form a with respect to the vector field X (w.r.t. metric g)
+
+  Implement == ASY add
+      Rep := ASY 
+
+      dim := #listIndVar
+
+      totalDifferential(f) ==
+        divs:=[differentiate(f,listIndVar.i)*generator(i)$ASY for i in 1..dim]
+        reduce("+",divs)
+
+      termDiff : (R, %) -> %
+      termDiff(r,e) ==
+        totalDifferential(r) * e
+
+      exteriorDifferential(x) ==
+        x = 0 => 0
+        termDiff(leadingCoefficient(x)$Rep,leadingBasisTerm x) + _
+          exteriorDifferential(reductum x)
+
+      lv := [concat("d",string(liv))$String::Symbol for liv in listIndVar]
+
+      displayList:EAB -> O
+      displayList(x):O ==
+        le: L I := exponents(x)$EAB
+        reduce(_*,[(lv.i)::O for i in 1..dim | ((le.i) = 1)])$L(O)
+
+      makeTerm:(R,EAB) -> O
+      makeTerm(r,x) ==
+      -- we know that r ^= 0
+        x = Nul(dim)$EAB  => r::O
+        (r = 1) => displayList(x)
+        r::O * displayList(x)
+
+      terms : % -> List Record(k: EAB, c: R)
+      terms(a) ==
+        -- it is the case that there are at least two terms in a
+        a pretend List Record(k: EAB, c: R)
+        
+      err1:="CoefRing has no IntegralDomain"
+      err2:="Not Implemented"
+      err3:="Degenerate metric"
+      err4:="Index out of range"
+
+      -- coord space dimension
+      dim(f) == dim
+
+      -- flip 0->1, 1->0
+      flip(b:ExtAlgBasis):ExtAlgBasis ==
+        bl := b pretend List(NNI)
+        [(i+1) rem 2 for i in bl] pretend ExtAlgBasis
+
+      -- list the positions of a's (a=0,1) in x
+      pos(x:EAB, a:NNI):List(NNI) ==
+        y:= x pretend List(NNI)
+        [j for j in 1..#y | y.j=a]
+
+      -- compute dot of singletons
+      dot1(r:Record(k:EAB,c:R),s:Record(k:EAB,c:R),g:SMR):R ==
+        not CoefRing has IntegralDomain => error(err1)
+        test(r.k ^= s.k) => 0::R
+        idx := pos(r.k,1)
+        idx = [] => r.c * s.c
+        reduce("*",[1/g(j,j) for j in idx]::List(R))*r.c*s.c
+
+      -- compute dot of singleton terms, general symmetric g
+--      dot2(r:REABR, s:REABR, g:SMR):R ==
+--        not CoefRing has IntegralDomain => error(err1)
+--        pr := pos(r.k,1) -- list positions of 1 in r
+--        ps := pos(s.k,1) -- list positions of 1 in s
+--        test(#p1 ^= #ps) => 0::R -- not same degree => 0
+--        pr = [] => r.c * s.c -- empty pr,ps => product of coefs
+--        G := inverse(g)::SMR -- compute the inverse of the metric g
+--        test(#pr = 1) => G(pr.1,ps.1)::R * r.c * s.c -- only one element
+--        M:Matrix(R) -- the minor
+--        M := matrix([[G(pr.i,ps.j])::R for j in 1..#ps] for i in 1..#pr])
+--        determinant(M)::R * r.c * s.c
+
+      -- export
+      dot(x,y,g) ==
+        not symmetric? g => error(err2)
+        tx:=terms(x)
+        ty:=terms(y)
+        tx = [] or ty = [] => 0::R
+--        if diagonal? g then -- better performance
+--          reduce("+",[dot2(tx.j,ty.j,g) for j in 1..#tx])
+--        else
+--          reduce("+",[dot1(tx.j,ty.j,g) for j in 1..#tx])
         reduce("+",[dot1(tx.j,ty.j,g) for j in 1..#tx])
      
       -- export
diff --git a/books/bookvolbib.pamphlet b/books/bookvolbib.pamphlet
index 2783275..5ede61c 100644
--- a/books/bookvolbib.pamphlet
+++ b/books/bookvolbib.pamphlet
@@ -7088,7 +7088,7 @@ rational right-hand sides etc."
 \index{Flanders, Harley}
 \begin{chunk}{axiom.bib}
  @book{Flan03,
-  author = "Flanders, Harley and Mathematics",
+  author = "Flanders, Harley",
   title = "Differential Forms with Applications to the Physical Sciences",
   year = "2003",
   location = "Mineola, N.Y",
diff --git a/changelog b/changelog
index 19e879d..6f61b2f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20141119 tpd src/axiom-website/patches.html 20141119.01.tpd.patch
+20141119 tpd books/bookvol10.3 help files for DeRhamComplex
+20141119 tpd books/bookvolbib fix Flan03 author list
 20141117 tpd src/axiom-website/patches.html 20141117.02.tpd.patch
 20141117 tpd books/bookvol10.3 help files for PermutationGroup
 20141117 tpd src/axiom-website/patches.html 20141117.01.tpd.patch
diff --git a/patch b/patch
index 8f086ad..89cb94a 100644
--- a/patch
+++ b/patch
@@ -1,8 +1,38 @@
-books/bookvol10.3 help files for PermutationGroup
+books/bookvol10.3 help files for DeRhamComplex
 
 The )help command now recognizes
-  )help PermutationGroup     -- the constructor name
-  )help PERMGRP              -- the abbreviation
-  )help order                -- the function implementations from PERMGRP
+  )help DeRhamComplex     -- the constructor name
+  )help DERHAM              -- the abbreviation
+  )help leadingCoefficient
+  )help leadingBasisTerm
+  )help reductum
+  )help coefficient
+  )help generator
+  )help homogeneous?
+  )help retractable?
+  )help degree
+  )help map
+  )help totalDifferential
+  )help exteriorDifferential
+  )help dim
+  )help hodgeStar
+  )help dot
+  )help proj
+  )help interiorProduct
+  )help lieDerivative
 all of which open in an edit window
 
+There are also usage example code for
+  )d op leadingCoefficient
+  )d op leadingBasisTerm
+  )d op reductum
+  )d op coefficient
+  )d op generator
+  )d op homogeneous?
+  )d op retractable?
+  )d op degree
+  )d op map
+  )d op totalDifferential
+  )d op exteriorDifferential
+  )d op hodgeStar
+  )d op dot
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 154893b..2d843fd 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -4710,6 +4710,8 @@ src/input/Makefile remove gonshor.input<br/>
 books/bookvol5 newHelpSpad2Cmd now recognizes )help abbreviations<br/>
 <a href="patches/20141117.02.tpd.patch">20141117.02.tpd.patch</a>
 books/bookvol10.3 help files for PermutationGroup<br/>
+<a href="patches/20141119.01.tpd.patch">20141119.01.tpd.patch</a>
+books/bookvol10.3 help files for DeRhamComplex<br/>
  </body>
 </html>
 
