diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 8aac133..4e9e26a 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -12308,6 +12308,488 @@ BasicOperator(): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain BSD BasicStochasticDifferential}
+
+<<BasicStochasticDifferential.input>>=
+)set break resume
+)sys rm -f BasicStochasticDifferential.output
+)spool BasicStochasticDifferential.output
+)set message test on
+)set message auto off
+)clear all
+ 
+--S 1 of 30
+print copyBSD() 
+--R 
+--R   []
+--R                                                                   Type: Void
+--E 1
+
+--S 2 of 30
+print copyIto()
+--R 
+--R   table()
+--R                                                                   Type: Void
+--E 2
+
+--S 3 of 30
+dX:=introduce!(X,dX) -- dX is a new stochastic differential
+--R 
+--R
+--R   (3)  dX
+--R                                 Type: Union(BasicStochasticDifferential,...)
+--E 3
+
+--S 4 of 30
+print copyBSD() 
+--R 
+--R   [dX]
+--R                                                                   Type: Void
+--E 4
+
+--S 5 of 30
+print copyIto() 
+--R 
+--R   table(X= dX)
+--R                                                                   Type: Void
+--E 5
+
+--S 6 of 30
+getSmgl(dX)
+--R 
+--R
+--R   (6)  X
+--R                                                      Type: Union(Symbol,...)
+--E 6
+
+--S 7 of 30
+print dX 
+--R 
+--R   dX
+--R                                                                   Type: Void
+--E 7
+
+--S 8 of 30
+print domainOf(dX)
+--R 
+--R   BasicStochasticDifferential()
+--R                                                                   Type: Void
+--E 8
+
+--S 9 of 30
+print d X
+--R 
+--R   dX
+--R                                                                   Type: Void
+--E 9
+
+--S 10 of 30
+print ((d$BSD) X) 
+--R 
+--R   dX
+--R                                                                   Type: Void
+--E 10
+
+--S 11 of 30
+print domainOf((d$BSD) X)
+--R 
+--R   BasicStochasticDifferential()
+--R                                                                   Type: Void
+--E 11
+
+--S 12 of 30
+introduce!(t,dt) -- dt is a new stochastic differential
+--R 
+--R
+--R   (12)  dt
+--R                                 Type: Union(BasicStochasticDifferential,...)
+--E 12
+
+--S 13 of 30
+print copyBSD() 
+--R 
+--R   [dX,dt]
+--R                                                                   Type: Void
+--E 13
+
+--S 14 of 30
+print copyIto()
+--R 
+--R   table(t= dt,X= dX)
+--R                                                                   Type: Void
+--E 14
+
+--S 15 of 30
+introduce!(t,dt) -- fails (can't repeat an introduction!)
+--R 
+--R
+--R   (15)  "failed"
+--R                                                    Type: Union("failed",...)
+--E 15
+
+--S 16 of 30
+print copyBSD() 
+--R 
+--R   [dX,dt]
+--R                                                                   Type: Void
+--E 16
+
+--S 17 of 30
+print copyIto()
+--R 
+--R   table(t= dt,X= dX)
+--R                                                                   Type: Void
+--E 17
+
+--S 18 of 30
+'dZ::BSD           -- can fail
+--R 
+--R   dZ is not a stochastic differential
+--R 
+--RDaly Bug
+--R   >> Error detected within library code:
+--R   above causes failure in convert$BSD
+--R
+--R   Continuing to read the file...
+--R
+--E 18
+
+--S 19 of 30
+dZ::BSD            -- fails
+--R 
+--R   dZ is not a stochastic differential
+--R 
+--RDaly Bug
+--R   >> Error detected within library code:
+--R   above causes failure in convert$BSD
+--R
+--R   Continuing to read the file...
+--R
+--E 19
+
+--S 20 of 30
+string(dY)::BSD    -- fails
+--R 
+--R 
+--RDaly Bug
+--R   Cannot convert from type String to BasicStochasticDifferential for 
+--R      value
+--R   "dY"
+--R
+--E 20
+
+--S 21 of 30
+print domainOf(dt)
+--R 
+--R   Variable(dt)
+--R                                                                   Type: Void
+--E 21
+
+--S 22 of 30
+dt::BSD            -- succeeds!
+--R 
+--R
+--R   (19)  dt
+--R                                            Type: BasicStochasticDifferential
+--E 22
+
+--S 23 of 30
+getSmgl(dt::BSD)
+--R 
+--R
+--R   (20)  t
+--R                                                      Type: Union(Symbol,...)
+--E 23
+
+--S 24 of 30
+dX::Symbol         -- succeeds
+--R 
+--R
+--R   (21)  dX
+--R                                                                 Type: Symbol
+--E 24
+
+--S 25 of 30
+string(dX)         -- fails
+--R 
+--R   There are 3 exposed and 1 unexposed library operations named string 
+--R      having 1 argument(s) but none was determined to be applicable. 
+--R      Use HyperDoc Browse, or issue
+--R                             )display op string
+--R      to learn more about the available operations. Perhaps 
+--R      package-calling the operation or using coercions on the arguments
+--R      will allow you to apply the operation.
+--R 
+--RDaly Bug
+--R   Cannot find a definition or applicable library operation named 
+--R      string with argument type(s) 
+--R                         BasicStochasticDifferential
+--R      
+--R      Perhaps you should use "@" to indicate the required return type, 
+--R      or "$" to specify which version of the function you need.
+--E 25
+
+--S 26 of 30
+string(dX::Symbol) -- succeeds
+--R 
+--R
+--R   (22)  "dX"
+--R                                                                 Type: String
+--E 26
+
+--S 27 of 30
+[introduce!(A[i],dA[i]) for i in 1..2]
+--R 
+--R
+--R   (23)  [dA ,dA ]
+--R            1   2
+--R                       Type: List Union(BasicStochasticDifferential,"failed")
+--E 27
+
+--S 28 of 30
+print copyBSD()
+--R 
+--R   [dA ,dA ,dX,dt]
+--R      1   2
+--R                                                                   Type: Void
+--E 28
+
+--S 29 of 30
+print copyIto()
+--R 
+--R   table(A = dA ,A = dA ,t= dt,X= dX)
+--R          2    2  1    1
+--R                                                                   Type: Void
+--E 29
+
+--S 30 of 30
+[d A[i] for i in 1..2]
+--R 
+--R
+--R   (26)  [dA ,dA ]
+--R            1   2
+--R                        Type: List Union(BasicStochasticDifferential,Integer)
+--E 30
+
+
+)spool
+)lisp (bye)
+@
+<<BasicStochasticDifferential.help>>=
+====================================================================
+BasicStochasticDifferential examples
+====================================================================
+
+Based on Symbol: a domain of symbols representing basic stochastic
+differentials, used in StochasticDifferential(R) in the underlying
+sparse multivariate polynomial representation.
+
+We create new BSD only by coercion from Symbol using a special
+function introduce! first of all to add to a private set SDset. We
+allow a separate function convertIfCan which will check whether the
+argument has previously been declared as a BSD.
+
+The copyBSD() returns setBSD as a list of BSD.
+Initially the BSD table of symbols is empty:
+   print copyBSD() 
+      []
+
+as is the Ito table. The copyIto() returns the table relating 
+semimartingales to basic stochastic differentials.
+   print copyIto()
+      table()
+
+We introduce a new stochastic differential:
+   dX:=introduce!(X,dX) -- dX is a new stochastic differential
+      dX
+
+and now it is in the BSD table of symbols:
+   print copyBSD() 
+      [dX]
+
+and the Ito table:
+   print copyIto() 
+      table(X= dX)
+
+
+The getSmgl(bsd) returns the semimartingale S related to the basic
+stochastic differential bsd by introduce!:
+   getSmgl(dX)
+      X
+
+Note that the dX symbol is of type BasicStochasticDifferential:
+   print domainOf(dX)
+     BasicStochasticDifferential()
+
+The d function, d(X) returns dX if tableIto(X)=dX otherwise 0:
+   print d X
+      dX
+
+and we can specify the domain:
+   print ((d$BSD) X) 
+      dX
+
+which clearly is of domain BasicStochasticDifferential
+   print domainOf((d$BSD) X)
+      BasicStochasticDifferential()
+
+The introduce!(X,dX) returns dX as BSD if it isn't already in BSD
+   introduce!(t,dt) -- dt is a new stochastic differential
+       dt
+
+Now we can see that dt is in the BSD table:
+   print copyBSD() 
+       [dX,dt]
+
+and the Ito table:
+   print copyIto()
+       table(t= dt,X= dX)
+
+You cannot repeat an introduce! for an existing entry:
+   introduce!(t,dt)
+       "failed"
+
+Regular symbols can be added, especially with subscripts:
+   [introduce!(A[i],dA[i]) for i in 1..2]
+            [dA ,dA ]
+               1   2
+
+And we can see them in the BSD table:
+   print copyBSD()
+      [dA ,dA ,dX,dt]
+         1   2
+
+and the Ito table:
+   print copyIto()
+      table(A = dA ,A = dA ,t= dt,X= dX)
+             2    2  1    1
+
+The d function can extract these symbols:
+   [d A[i] for i in 1..2]
+       [dA ,dA ]
+          1   2
+
+See Also:
+o )show BasicStochasticDifferential
+
+@
+\pagehead{BasicStochasticDifferential}{BSD}
+\pagepic{ps/v103basicstochasticdifferential.ps}{BSD}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{BSD}{coerce} &
+\cross{BSD}{convert} &
+\cross{BSD}{convertIfCan} &
+\cross{BSD}{copyBSD} \\
+\cross{BSD}{copyIto} &
+\cross{BSD}{d} &
+\cross{BSD}{getSmgl} &
+\cross{BSD}{hash} \\
+\cross{BSD}{introduce!} &
+\cross{BSD}{latex} &
+\cross{BSD}{max} &
+\cross{BSD}{min} \\
+\cross{BSD}{?\~{}=?} &
+\cross{BSD}{?$<$?} &
+\cross{BSD}{?$<=$?} &
+\cross{BSD}{?$=$?} \\
+\cross{BSD}{?$>$?} &
+\cross{BSD}{?$>=$?} 
+\end{tabular}
+
+<<domain BSD BasicStochasticDifferential>>=
+)abbrev domain BSD BasicStochasticDifferential
+++ Author: Wilfrid S. Kendall
+++ Date Last Updated: July 26, 1999
+++ Related Domains: StochasticDifferential(R)
+++ Keywords: stochastic differential, semimartingale.
+++ References: Ito (1975), Kendall (1991a,b; 1993a,b; 1999a,b).
+++ Description:
+++ Based on Symbol: a domain of symbols representing basic stochastic 
+++ differentials, used in StochasticDifferential(R) in the underlying
+++ sparse multivariate polynomial representation.
+++
+++ We create new BSD only by coercion from Symbol using a special 
+++ function introduce! first of all to add to a private set SDset. 
+++ We allow a separate function convertIfCan which will check whether the
+++ argument has previously been declared as a BSD.
+
+BasicStochasticDifferential(): Category == Implementation where
+ INT ==> Integer
+ OF  ==> OutputForm
+ Category ==> OrderedSet with
+  ConvertibleTo(Symbol)
+
+  convertIfCan: Symbol -> Union(%, "failed")
+   ++ convertIfCan(ds) transforms \axiom{dX} into a \axiom{BSD}
+   ++ if possible (if \axiom{introduce(X,dX)} has
+   ++ been invoked previously).
+
+  convert: Symbol -> %
+   ++ convert(dX) transforms \axiom{dX} into a \axiom{BSD}
+   ++ if possible and otherwise produces an error.
+
+  introduce!: (Symbol,Symbol) -> Union(%, "failed")
+   ++ introduce!(X,dX) returns \axiom{dX} as \axiom{BSD} if it
+   ++ isn't already in \axiom{BSD}
+
+  d: Symbol -> Union(%,INT)
+   ++ d(X) returns \axiom{dX} if \axiom{tableIto(X)=dX}
+   ++ and otherwise returns \axiom{0}
+
+  copyBSD:() -> List %
+   ++ copyBSD() returns \axiom{setBSD} as a list of \axiom{BSD}.
+  copyIto:() -> Table(Symbol,%)
+   ++ copyIto() returns the table relating semimartingales
+   ++ to basic stochastic differentials.
+  getSmgl: % -> Union(Symbol,"failed")
+   ++ getSmgl(bsd) returns the semimartingale \axiom{S} related
+   ++ to the basic stochastic differential \axiom{bsd} by
+   ++ \axiom{introduce!}
+
+ Implementation ==> Symbol add 
+
+  Rep := Symbol
+
+  setBSD := empty()$Set(Symbol)
+  tableIto:Table(Symbol,%) := table()
+  tableBSD:Table(%,Symbol) := table()
+
+  convertIfCan(ds:Symbol):Union(%,"failed") ==
+   not(member?(ds,setBSD)) => "failed"
+   ds::%
+
+  convert(ds:Symbol):% ==
+   (du:=convertIfCan(ds)) 
+    case "failed" =>
+     print(hconcat(ds::Symbol::OF,
+       message(" is not a stochastic differential")$OF))
+     error "above causes failure in convert$BSD"
+   du
+
+  introduce!(X,dX) == 
+   member?(dX,setBSD) => "failed"
+   insert!(dX,setBSD)
+   tableBSD(dX::%) := X
+   tableIto(X) := dX::%
+
+  d(X) ==
+   search(X,tableIto) case "failed" => 0::INT
+   tableIto(X)
+
+  copyBSD() == [ds::% for ds in members(setBSD)]
+  copyIto() == tableIto
+  getSmgl(ds:%):Union(Symbol,"failed") == tableBSD(ds)
+
+@
+<<BSD.dotabb>>=
+"BSD" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BSD"]
+"FSAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FSAGG"]
+"BSD" -> "FSAGG"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain BINARY BinaryExpansion}
 
 <<BinaryExpansion.input>>=
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 8d31e9b..8d91757 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -135,9 +135,9 @@ of effort. We would like to acknowledge and thank the following people:
 "Gernot Hueber"
 "Pietro Iglio"
 "Alejandro Jakubi       Richard Jenks"
-"Kai Kaminski           Grant Keady            Tony Kennedy"
-"Ted Kosan              Paul Kosinski          Klaus Kusche"
-"Bernhard Kutzler"
+"Kai Kaminski           Grant Keady            Wilfrid Kendall"
+Tony Kennedy            Ted Kosan              Paul Kosinski"
+"Klaus Kusche           Bernhard Kutzler"
 "Tim Lahey              Larry Lambe            Kaj Laurson"
 "Franz Lehner           Frederic Lehobey       Michel Levaud"
 "Howard Levy            Liu Xiaojun            Rudiger Loos"
@@ -23252,6 +23252,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|AttachPredicates| . PMPRED)
    (|AxiomServer| . AXSERV)
    (|BalancedBinaryTree| . BBTREE)
+   (|BasicStochasticDifferential| . BSD)
    (|BasicOperator| . BOP)
    (|BasicOperatorFunctions1| . BOP1)
    (|Bezier| . BEZIER)
diff --git a/books/bookvolbib.pamphlet b/books/bookvolbib.pamphlet
index 414b796..332cbe8 100644
--- a/books/bookvolbib.pamphlet
+++ b/books/bookvolbib.pamphlet
@@ -734,12 +734,12 @@ an abstract datatype system for mathematical computation'' In Jan{\ss}en
 \bibitem[JT94]{JT94}
 R. D. Jenks and B. M. Trager. ``How to make AXIOM into a Scratchpad'' In ACM
 [ACM94], pp32-40 ISBN 0-89791-638-7 LCCN QA76.95.I59 1994
-\bibitem{Ken99a]{Ken99a}
+\bibitem[Ken99a]{Ken99a}
 Kendall, W.S.
 ``Itovsn3 in AXIOM: modules, algebras and stochastic differentials''
 \verb|www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/|
 \verb|kendall/personal/ppt/328.ps.gz|
-\bibitem{Ken99b]{Ken99b}
+\bibitem[Ken99b]{Ken99b}
 Kendall, W.S.
 ``Symbolic It\^o calculus in AXIOM: an ongoing story
 \verb|www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/|
diff --git a/books/ps/v103basicstochasticdifferential.ps b/books/ps/v103basicstochasticdifferential.ps
new file mode 100644
index 0000000..b210acb
--- /dev/null
+++ b/books/ps/v103basicstochasticdifferential.ps
@@ -0,0 +1,268 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%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
+       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 text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	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
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 110 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 74 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% BSD
+gsave
+[ /Rect [ 6 72 60 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=BSD) >>
+  /Subtype /Link
+/ANN pdfmark
+0.273 0.733 1.000 nodecolor
+newpath 60 108 moveto
+6 108 lineto
+6 72 lineto
+60 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.273 0.733 1.000 nodecolor
+newpath 60 108 moveto
+6 108 lineto
+6 72 lineto
+60 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+18 85.9 moveto 30 (BSD) alignedtext
+grestore
+% FSAGG
+gsave
+[ /Rect [ 0 0 66 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FSAGG) >>
+  /Subtype /Link
+/ANN pdfmark
+0.606 0.733 1.000 nodecolor
+newpath 66 36 moveto
+0 36 lineto
+0 0 lineto
+66 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 66 36 moveto
+0 36 lineto
+0 0 lineto
+66 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 13.9 moveto 50 (FSAGG) alignedtext
+grestore
+% BSD->FSAGG
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 33 72 moveto
+33 64 33 55 33 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 36.5 46 moveto
+33 36 lineto
+29.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 36.5 46 moveto
+33 36 lineto
+29.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 110 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 7b4b04d..c361cbd 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,12 @@
+20110909 wsk src/axiom-website/patches.html 20110910.01.tpd.patch
+20110910 wsk src/algebra/Makefile add BasicStochasticDifferential domain
+20110910 wsk books/ps/v103basicstochasticdifferential.ps added
+20110910 wsk books/bookvolbib fix Ken99a, Ken99b
+20110910 wsk books/bookvol10.3 add BasicStochasticDifferential domain
+20110910 wsk books/bookvol5 add BasicStochasticDifferential domain
+20110910 wsk books/bookvol5 add Wilfrid Kendall to credits
+20110910 wsk readme add Wilfrid Kendall to credits
+20110910 wsk Wilfrid Kendall <w.s.kendall@warwick.ac.uk>
 20110909 tpd src/axiom-website/patches.html 20110909.01.tpd.patch
 20110909 tpd src/interp/i-eval.lisp treeshake interpreter
 20110909 tpd books/bookvol5 treeshake interpreter
diff --git a/readme b/readme
index 649d447..88a7c58 100644
--- a/readme
+++ b/readme
@@ -228,9 +228,9 @@ at the axiom command prompt will prettyprint the list.
 "Gernot Hueber"
 "Pietro Iglio"
 "Alejandro Jakubi       Richard Jenks"
-"Kai Kaminski           Grant Keady            Tony Kennedy"
-"Ted Kosan              Paul Kosinski          Klaus Kusche"
-"Bernhard Kutzler"
+"Kai Kaminski           Grant Keady            Wilfrid Kendall"
+Tony Kennedy            Ted Kosan              Paul Kosinski"
+"Klaus Kusche           Bernhard Kutzler"
 "Tim Lahey              Larry Lambe            Kaj Laurson"
 "Franz Lehner           Frederic Lehobey       Michel Levaud"
 "Howard Levy            Liu Xiaojun            Rudiger Loos"
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index e84da92..7dfe7e6 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -22,22 +22,374 @@ I'll work on explaining the details of why things need to exist.
 
 The first idea that you need to understand is the overall process
 of adding algebra code. Lets assume that you have a brand new spad
-file, called [[foo.spad]] containing a simple domain [[BAR]]. The
+file, called bsd.spad containing a simple domain BSD. The
 steps in the process of adding this file are:
 \begin{enumerate}
 \item Find out where the algebra code lives in the lattice.
-
-You do this by 
 \begin{enumerate}
-\item starting a new interpsys session
-\item collecting all the names of the algebra files BAR requires
-\item determining which layer each of the required files resides
-\item determine the highest layer (e.g. 14) that contains the required files
+\item Start a new interpsys session. This will give you a clean build.
+\item )set mes auto on -- This will allow us to see what algebra files
+get loaded during compile
+\item )co BAR.spad       
+\item We collect all the names of the algebra files BSD loaded. Look for
+lines that say a file is loaded. Collect all of the names of those files.
+\item For each of the loaded files determine which layer contains the 
+loaded file by searching this file. For instance, if BAR.spad required
+FSAGG then look for /FSAGG.o, which resides in layer 13. 
+\item Determine the highest layer (e.g. 13) that contains the required files
+and add the new algebra file (e.g. BSD.o) in the next layer (e.g. 14).
+\item Next we need to create the graph structure information. This involves
+creating a two part stanza of information. For instance,
+\begin{verbatim}
+"BSD" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BSD",
+        shape=ellipse]
+/*"BSD" -> {"ORDSET"; "SETCAT"; "BASTYPE"; "KOERCE"; "KONVERT"; "INT"}*/
+/*"BSD" -> {"DIAGG"; "DIOPS"; "BGAGG"; "HOAGG"; "AGG"; "TYPE"; "EVALAB"}*/
+/*"BSD" -> {"IEVALAB"; "CLAGG"; "SETAGG"; "FINITE"; "OM"; "PATMAB"}*/
+"BSD" -> "FSAGG" 
+\end{verbatim}
+\item The first part determines the color, shape of the graph node,
+and a link to the book containing the source code. The color and name
+of the book are related:
+\begin{enumerate}
+\item \#4488FF == bookvol10.2
+\item \#88FF44 == bookvol10.3
+\item \#FF4488 == bookvol10.4
+\item \#444488 == bookvol10.5
 \end{enumerate}
-
-\item insert the documentation into the next layer (e.g. 15)
-\item insert the [[\${OUT}/BAR.o]] file into the layer's file list
+\item The second part is the graph structure. All of the loaded algebra
+files are listed (currently as comments due to the size of the complete
+graph). In particular, the node that ``supports'' BSD is FSAGG so we
+make sure that the graph edge \verb|"BSD" -> "FSAGG"| is uncommented.
 \end{enumerate}
+\item Insert the documentation after the layer (e.g after layer 14).
+This documentation is used to reconstruct the full and partial graphs.
+\item Insert the \verb|${OUT}/BSD.o| file into the layer's file list. This
+will cause the algebra to build after all of the algebra it depends on is
+built.
+\item Add the algebra to the books
+\end{enumerate}
+
+\section{Adding the algebra to the proper book}
+The algebra sources are in 4 books:
+\begin{itemize}
+\item bookvol10.2 == Category
+\item bookvol10.3 == Domain
+\item bookvol10.4 == Package
+\item bookvol10.5 == Numeric
+\end{itemize}
+The algebra in these files is structured slightly differently for each
+one. Follow the directions for the kind of algebra you are adding.
+\subsection{Adding a Category}
+\subsection{Adding a Domain}
+In the Domains book we see that each domain is in alphabetic order by
+the {\bf full domain name}, not by the abbreviation. So for BSD we see
+several parts. 
+\subsubsection{The section separator}
+This gives a visual and logical separation for each domain. 
+\begin{verbatim}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain BSD BasicStochasticDifferential}
+\end{verbatim}
+
+\subsubsection{The input section}
+This is a standard input file format. It will be extracted from the book
+during the testing process so we can keep the test cases with the domain.
+The --R lines are the commented output of actually running the functions.
+Note that ``--'' is the comment character in Axiom. The ``regress'' function
+will run the code and then compare the actual output with the lines marked
+``--R'' and report any differences. 
+
+You can create this file by:
+\begin{itemize}
+\item Start Axiom
+\item make a bsd.input file with all of your algebra tests
+\item )co BSD -- compile your algebra to make sure it is up to date
+\item )spool BSD.output -- this will put all output into a file
+\item )read bsd -- this will read the tests and the output will be
+stored in BSD.output
+\item Modify the BSD.output file to have the same format using 
+``--S n of N'' to start the test, ``--R'' to prefix the actual output, 
+and ``--E n'' to end the test.
+\item save the test as bsdtest.input
+\item Validate the newly formatted test file (bsdtest.input):
+\begin{itemize}
+\item start a new Axiom
+\item )co BSD -- compile your new algebra
+\item )read bsdtest.input -- BE SURE to use the new test file format.
+If you did it right it will create a new file called
+BasicStochasticDifferential.output
+\item )lisp (regress "BasicStochasticDifferential.output") -- this will
+run the regress function which compares the actual output with the
+expected output and reports success or failure.
+\item fix up failures and repeat until none remain
+\item add the contents of bsdtest.input to the algebra file
+\end{itemize}
+\end{itemize}
+
+\begin{verbatim}
+<BasicStochasticDifferential.input>>=
+)set break resume
+)sys rm -f BasicStochasticDifferential.output
+)spool BasicStochasticDifferential.output
+)set message test on
+)set message auto off
+)clear all
+--S 1 of 2
+q := D(p, x)
+--R 
+--R
+--R                 __
+--R   (6)  0.1x + 0.10
+--R                                             Type: Polynomial BinaryExpansion
+--E 1
+
+--S 2 of 2
+g := gcd(p, q)
+--R 
+--R
+--R              __
+--R   (7)  x + 1.01
+--R                                             Type: Polynomial BinaryExpansion
+--E 2
+
+)spool
+)lisp (bye)
+ @
+\end{verbatim}
+
+\subsubsection{The input section}
+This section becomes a help file in the distributed Axiom system.
+It gets typed out when the user types:
+\begin{verbatim}
+)help BasicStochasticDifferential
+\end{verbatim}
+\begin{verbatim}
+<BasicStochasticDifferential.help>>=
+====================================================================
+BasicStochasticDifferential examples
+====================================================================
+All rational numbers have repeating binary expansions.  Operations to
+access the individual bits of a binary expansion can be obtained by
+converting the value to RadixExpansion(2).  More examples of
+expansions are available with
+
+The expansion (of type BinaryExpansion) of a rational number is
+returned by the binary operation.
+
+  r := binary(22/7)
+      ___
+   11.001
+                      Type: BinaryExpansion
+
+Arithmetic is exact.
+
+  r + binary(6/7)
+   100 
+                      Type: BinaryExpansion
+
+See Also:
+o )help BasicStochasticDifferential
+o )help HexadecimalExpansion
+o )show BasicStochasticDifferential
+
+ @
+\end{verbatim}
+
+\subsubsection{The pagehead section}
+Next we create the format information for the book itself. This will
+control the display of the new algebra in the book. The ``pagehead''
+macro formats a new section for this algebra and adds it to the proper
+indexing and other housekeeping sections.
+
+The ``pagepic'' creates a graph image inline showing the subgraph
+containing this algebra from the full graph. This information is kept
+in this file (see the graph subsection below). The ``1.00'' is a 
+scaling factor for the graph.
+
+The ``pageto'' macro inserts HTML anchors into the PDF file so there
+is a way to navigate to related algebra. There can be multiple pageto
+macros.
+\begin{verbatim}
+\pagehead{BasicStochasticDifferential}{BSD}
+\pagepic{ps/v103basicstochasticdifferential.ps}{BSD}{1.00}
+{\bf See}\\
+\pageto{HexadecimalExpansion}{HEXADEC}
+\end{verbatim}
+
+\subsubsection{The Exports section}
+This shows the same information as the ``)show'' function in a running
+Axiom. The ``cross'' macro adds information to the index to cross reference
+the domain and the functions.
+\begin{verbatim}
+{\bf Exports:}\\
+\begin{tabular}{lll}
+\cross{BSD}{0} &
+\cross{BSD}{1} &
+\cross{BSD}{abs} \\
+\cross{BSD}{associates?} &
+\cross{BSD}{binary} &
+\cross{BSD}{ceiling} \\
+\cross{BSD}{characteristic} 
+\end{tabular}
+\end{verbatim}
+
+\subsubsection{The Exports section}
+This is the actual algebra. Note that the ``++'' comments from the 
+description section are available at runtime using the ``)describe''
+command. They have certain format limitations so be sure to check
+this in the final system.
+\begin{verbatim}
+<domain BSD BasicStochasticDifferential>>=
+)abbrev domain BSD BasicStochasticDifferential
+++ Basic Operations: introduce!, copyBSD, copyIto, getSmgl
+++ Related Domains: StochasticDifferential(R)
+++ Also See:
+++ AMS Classifications:
+++ Keywords: stochastic differential, semimartingale.
+++ Examples:
+++ References:
+++ Ito (1975), Kendall (1991a,b; 1993a,b; 1999a,b).
+++ Description:
+++ Based on Symbol: a domain of symbols
+++ representing basic stochastic differentials, used
+++ in StochasticDifferential(R) in the underlying
+++ sparse multivariate polynomial representation.
+++
+++ We create new BSD only by coercion from Symbol
+++ using a special function introduce! first of all to 
+++ add to a private set SDset. We allow a separate 
+++ function convertIfCan which will check whether the
+++ argument has previously been declared as a BSD.
+BasicStochasticDifferential(): Category == Implementation where
+ INT ==> Integer
+ OF  ==> OutputForm
+ Category ==> OrderedSet with
+  ConvertibleTo(Symbol)
+
+  convertIfCan: Symbol -> Union(%, "failed")
+   ++ convertIfCan(ds) transforms \axiom{dX} into a \axiom{BSD}
+   ++ if possible (if \axiom{introduce(X,dX)} has
+   ++ been invoked previously).
+
+  convert: Symbol -> %
+   ++ convert(dX) transforms \axiom{dX} into a \axiom{BSD}
+   ++ if possible and otherwise produces an error.
+
+  introduce!: (Symbol,Symbol) -> Union(%, "failed")
+   ++ introduce!(X,dX) returns \axiom{dX} as \axiom{BSD} if it
+   ++ isn't already in \axiom{BSD}
+
+  d: Symbol -> Union(%,INT)
+   ++ d(X) returns \axiom{dX} if \axiom{tableIto(X)=dX}
+   ++ and otherwise returns \axiom{0}
+
+  copyBSD:() -> List %
+   ++ copyBSD() returns \axiom{setBSD} as a list of \axiom{BSD}.
+  copyIto:() -> Table(Symbol,%)
+   ++ copyIto() returns the table relating semimartingales
+   ++ to basic stochastic differentials.
+  getSmgl: % -> Union(Symbol,"failed")
+   ++ getSmgl(bsd) returns the semimartingale \axiom{S} related
+   ++ to the basic stochastic differential \axiom{bsd} by
+   ++ \axiom{introduce!}
+
+ Implementation ==> Symbol add 
+
+  Rep := Symbol
+
+  setBSD := empty()$Set(Symbol)
+  tableIto:Table(Symbol,%) := table()
+  tableBSD:Table(%,Symbol) := table()
+
+  convertIfCan(ds:Symbol):Union(%,"failed") ==
+   not(member?(ds,setBSD)) => "failed"
+   ds::%
+
+  convert(ds:Symbol):% ==
+   (du:=convertIfCan(ds)) 
+    case "failed" =>
+     print(hconcat(ds::Symbol::OF,
+       message(" is not a stochastic differential")$OF))
+     error "above causes failure in convert$BSD"
+   du
+
+  introduce!(X,dX) == 
+   member?(dX,setBSD) => "failed"
+   insert!(dX,setBSD)
+   tableBSD(dX::%) := X
+   tableIto(X) := dX::%
+
+  d(X) ==
+   search(X,tableIto) case "failed" => 0::INT
+   tableIto(X)
+
+  copyBSD() == [ds::% for ds in members(setBSD)]
+  copyIto() == tableIto
+  getSmgl(ds:%):Union(Symbol,"failed") == tableBSD(ds)
+\end{verbatim}
+
+\subsubsection{The dotabb section}
+This section is used to create the ``ps/v103basicstochasticdifferential.ps''
+graph image used above. The actual code used is kept here so we can modify
+or reproduce the result. The first line is the current domain. The second
+line is the domain, category, or package that ``supports'' this domain 
+in the previous layer. These three lines are create the subgraph of the
+main algebra graph.
+\begin{verbatim}
+<BINARY.dotabb>>=
+"BSD" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BSD",
+        shape=ellipse]
+"FSAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FSAGG"]
+"BSD" -> "FSAGG"
+
+@
+\end{verbatim}
+In order to actually create the graph this code gets wrapped with the
+graphviz information. So you pick up the above lines and insert them
+into a file surrounded by the graphviz commands as in:
+\begin{verbatim}
+digraph pic {
+ fontsize=10;
+ bgcolor="#FFFF66";
+ node [shape=box, color=white, style=filled];
+
+"BSD" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BSD",
+        shape=ellipse]
+"FSAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FSAGG"]
+"BSD" -> "FSAGG"
+
+}
+\end{verbatim}
+Save this in a file, say bsd.dot.
+To create the correct postscript file use the command:
+\begin{verbatim}
+   dot -Tps bsd.dot >ps/v103basicstochasticdifferential.ps
+\end{verbatim}
+Notice that the output goes into a ps subdirectory. It is named
+with the v103 prefix, meaning it is intended for volume 10.3.
+
+The REGRESS table contains the names of all of the regression
+files. These are the test case files we constructed for the
+algebra. Putting a chunk name in this table will extract the test
+case, run it, and run regression testing on it looking for
+failures. The naming convention is the same as the .input file but
+uses .regress so the Makefile regression stanza is invoked. So, for
+our example, we need to add
+\begin{verbatim}
+    BasicStochasticDifferential.regress
+\end{verbatim}
+
+We must also add the domain to the \verb|$globalExposureGroupAlist|
+in the interpreter (book volume 5). This is a lisp cons structure
+where the CAR is the domain name and the CDR is the domain abbreviation.
+So we add the line:
+\begin{verbatim}
+   (|BasicStochasticDifferential| . BSD)
+\end{verbatim}
+
+\subsection{Adding a Package}
+\subsection{Adding Numerics}
 
 \section{Rebuilding the algebra from scratch}
 Compile order is important. Here we try to define the ordered lattice
@@ -92,7 +444,7 @@ graph information. The graphviz header information is here:
 <<layerpic>>=
 digraph pic {
  fontsize=10;
- bgcolor="#FFFF66";
+ bgcolor="\#FFFF66";
  node [shape=box, color=white, style=filled];
  ranksep=3.0;
  /* nodsep=inches */
@@ -100,13 +452,13 @@ digraph pic {
  /* ratio=auto */ /* page="x,y" */ /* generates multipage layout */
  /* margin=0 */
 
-"Category" [color="#4488FF"]
+"Category" [color="\#4488FF"]
 "Category" -> "."
 
-"Domain" [color="#88FF44"]
+"Domain" [color="\#88FF44"]
 "Domain" -> "."
 
-"Package" [color="#FF4488"]
+"Package" [color="\#FF4488"]
 "Package" -> "."
 
 @
@@ -127,11 +479,11 @@ these targets to be out of date. The rest of the loop is left
 up to the student.
 
 The bootstrap process works because first we ask for the compiled
-lisp code stanzas (the [[\${MID}/BAR.o]] files), THEN we ask for
-the final algebra code stanzas (the [[\${OUT}/BAR.o]] files). This
+lisp code stanzas (the \verb|\${MID}/BAR.o| files), THEN we ask for
+the final algebra code stanzas (the \verb|\${OUT}/BAR.o| files). This
 is a very subtle point so think it through carefully. Notice that
-this is the only layer calling for [[\${MID}]] files. All other 
-layers call for [[\${OUT}]] files. If you break this the world
+this is the only layer calling for \verb|\${MID}| files. All other 
+layers call for \verb|\${OUT}| files. If you break this the world
 will no longer compile so don't change it if you don't understand it.
 
 \begin{verbatim}
@@ -2398,7 +2750,7 @@ LAYER7=\
 /*"BFUNCT" -> {"EUCDOM-"; "UFD-"; "GCDDOM-"; "DIVRING-"; "INTDOM-"}*/
 /*"BFUNCT" -> {"ALGEBRA-"; "DIFRING-"; "ORDRING-"; "INT"}*/
 
-"BLAS1" [color="#FF4488",href="bookvol10.5.pdf#nameddest=BLAS1"]
+"BLAS1" [color="#444488",href="bookvol10.5.pdf#nameddest=BLAS1"]
 /*"BLAS1" -> {"FPS" "RNS"}*/ 
 "BLAS1" -> "FIELD"
 /*"BLAS1" -> {"EUCDOM" "PID" "GCDDOM" "INTDOM" "COMRING" "RING" "RNG"}*/
@@ -9734,6 +10086,7 @@ Used by next layer: TBAGG
 <<layer14>>=
 
 LAYER14=\
+  ${OUT}/BSD.o \
   ${OUT}/CCLASS.o   ${OUT}/CPIMA.o   ${OUT}/FSAGG2.o   ${OUT}/GALFACT.o  \
   ${OUT}/IALGFACT.o ${OUT}/IBACHIN.o  ${OUT}/MMLFORM.o ${OUT}/NORMMA.o   \
   ${OUT}/ODERED.o   ${OUT}/OMSAGG.o   ${OUT}/PERM.o    ${OUT}/PERMGRP.o  \
@@ -9748,6 +10101,13 @@ LAYER14=\
 /* layer 14 */
 /* depends on: FSAGG KDAGG MSETAGG MONOGEN */
 
+"BSD" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BSD",
+        shape=ellipse]
+/*"BSD" -> {"ORDSET"; "SETCAT"; "BASTYPE"; "KOERCE"; "KONVERT"; "INT"}*/
+/*"BSD" -> {"DIAGG"; "DIOPS"; "BGAGG"; "HOAGG"; "AGG"; "TYPE"; "EVALAB"}*/
+/*"BSD" -> {"IEVALAB"; "CLAGG"; "SETAGG"; "FINITE"; "OM"; "PATMAB"}*/
+"BSD" -> "FSAGG" 
+
 "CHAR" [color="#88FF44",href="bookvol10.3.pdf#nameddest=CHAR",
         shape=ellipse]
 /*"CHAR" -> {"ORDFIN"; "ORDSET"; "SETCAT"; "BASTYPE"; "KOERCE"; "FINITE"}*/
@@ -16633,7 +16993,7 @@ part is executable code which is placed in the {\bf OUT}
 directory. When invoked as ``make document'' we construct
 the .dvi files in the{\bf DOC} directory.
 
-The [[OUTSRC=${MNT}/${SYS}/src/algebra]] subdirectory contains the 
+The \verb|OUTSRC=${MNT}/${SYS}/src/algebra| subdirectory contains the 
 algebra source files extracted from the pamphlet files. These sources 
 allow the end user to change the algebra if needed.
 
@@ -16678,20 +17038,20 @@ SHELL=bash
 
 @
 \section{The Makefile Stanzas}
-A [[spad]] pamphlet can contain many Axiom [[categories]], [[domains]], and
-[[packages]]. 
+A spad pamphlet can contain many Axiom categories, domains, and
+packages. 
 
 For the purpose of explanation we assume that the pamphlet file is 
-named [[foo.spad.pamphlet]]. It contains the domains [[BAR]], [[BAX]],
-and [[BAZ]]. Thus there will be a subsection named [[foo.spad]].
+named foo.spad.pamphlet. It contains the domains BAR, BAX,
+and BAZ. Thus there will be a subsection named foo.spad.
 
-Since pamphlet files (e.g. [[foo.spad.pamphlet]] contain a spad file
-e.g. [[foo.spad]], it follows that every subsection contains a Makefile
-stanza that extract the [[foo.spad]] file using [[notangle]].
+Since pamphlet files (e.g. foo.spad.pamphlet contain a spad file
+e.g. foo.spad, it follows that every subsection contains a Makefile
+stanza that extract the foo.spad file using notangle.
 
 Since pamphlet files are intended as documents it follows that each
-subsection contains a Makefile stanza that extracts a [[dvi]] file
-using [[noweave]].
+subsection contains a Makefile stanza that extracts a dvi file
+using noweave.
 
 We could have a category, domain, or package that is in
 the ``bootstrap'' list. Bootstrap spad files contain their generated
@@ -16713,27 +17073,27 @@ system is built from scratch.
 
 A 5 stanza group for this case performs the following functions:
 \begin{enumerate}
-\item extract the lisp [[BAR.lsp]] from the pamphlet [[foo.spad.pamphlet]]
+\item extract the lisp BAR.lsp from the pamphlet foo.spad.pamphlet
 \item compile and copy the bootstrap lisp to the final algebra directory
-\item extract the bootstrap [[BAR.lsp]] from the spad file [[foo.spad]]
-\item compile the extracted [[BAR]] domain
-\item copy the compiled [[BAR]] to the final algebra directory
+\item extract the bootstrap BAR.lsp from the spad file foo.spad
+\item compile the extracted BAR domain
+\item copy the compiled BAR to the final algebra directory
 \end{enumerate}
 
 The subtle point here occurs in the first item. The bootstrap code
-group (in the [[layer0 bootstrap]] code chunk above) asks for the
-compiled [[.o]] files in the [[\${MID}]] directory. Essentially this
+group (in the layer0 bootstrap code chunk above) asks for the
+compiled ``.o'' files in the \verb|\${MID}| directory. Essentially this
 code group calls for intermediate compiled files. This triggers the
 bootstrap stanzas (items 1 and 2 above). All of the other layer 
-chunks ask for compiled code in the [[\${OUT}]] directory which is
+chunks ask for compiled code in the \verb|\${OUT}| directory which is
 the final algebra directory. 
 
 The bootstrap process works because first we ask for the compiled
-lisp code stanzas (the [[\${MID}/BAR.o]] files), THEN we ask for
-the final algebra code stanzas (the [[\${OUT}/BAR.o]] files). This
+lisp code stanzas (the \verb|\${MID}/BAR.o| files), THEN we ask for
+the final algebra code stanzas (the \verb|\${OUT}/BAR.o| files). This
 is a very subtle point so think it through carefully. The layer0
-bootstrap list is the only file list that calls for [[\${MID}]] files.
-All other layers ask for [[\${OUT}]] files. Make sure you
+bootstrap list is the only file list that calls for \verb|\${MID}| files.
+All other layers ask for \verb|\${OUT}| files. Make sure you
 understand this before you change things. If you break it the
 world will no longer compile.
 
@@ -16746,19 +17106,19 @@ also contains default code which gives a 3+2+2+2 (9) stanza case.
 
 A 9 stanza group for this case performs the following functions:
 \begin{enumerate}
-\item extract the bootstrap [[BAR.lsp]] from the [[foo.spad.pamphlet]]
-\item compile the bootstrap [[BAR.lsp]] and copy to the intermediate directory
-\item extract the bootstrap [[BAR-.lsp]] from the [[foo.spad.pamphlet]]
-\item compile the bootstrap [[BAR-.lsp]] and copy to intermediate directory
-\item extract the spad [[BAR.spad]] from the pamphlet [[foo.spad.pamphlet]]
-\item compile the extracted [[BAR.spad]] domain (to get [[BAR.o]])
-\item copy the [[BAR.o]] to the final algebra directory
-\item compile the extracted [[BAR.spad]] domain (to get [[BAR-.o]])
-\item copy the [[BAR-.o]] to the final algebra directory
+\item extract the bootstrap BAR.lsp from the foo.spad.pamphlet
+\item compile the bootstrap BAR.lsp and copy to the intermediate directory
+\item extract the bootstrap BAR-.lsp from the foo.spad.pamphlet
+\item compile the bootstrap BAR-.lsp and copy to intermediate directory
+\item extract the spad BAR.spad from the pamphlet foo.spad.pamphlet
+\item compile the extracted BAR.spad domain (to get BAR.o)
+\item copy the BAR.o to the final algebra directory
+\item compile the extracted BAR.spad domain (to get BAR-.o)
+\item copy the BAR-.o to the final algebra directory
 \end{enumerate}
 
 As you can see this is just the combination of the two possible 5
-stanza case. We just have to deal with the [[BAR-]] both in regular
+stanza case. We just have to deal with the BAR- both in regular
 and bootstrap files. The first four stanzas will only happen when
 the system is built from scratch. Once the system is built these
 four rules no longer apply and these stanzas effectively act like
@@ -16771,13 +17131,13 @@ The decision tree looks something like:
 \begin{verbatim}
 IF (you have a regular spad domain)
  THEN use a 3 stanza form (see YSTREAM)
-IF (you have a default spad domain (it generates [[-]] files)) AND
+IF (you have a default spad domain (it generates ``-'' files)) AND
    (it does not require bootstrapping)
  THEN use the first 5 stanza form explained above (see LIECAT)
 IF (you have a normal spad domain) AND
    (it requires bootstrapping)
  THEN use the second 5 stanza form explained above (see VECTOR)
-IF (you have a default spad domain (it generates [[-]] files)) AND
+IF (you have a default spad domain (it generates ``-'' files)) AND
    (it requires bootstrapping)
  THEN use the 9 stanza form explained above (see TSETCAT)
 \end{verbatim}
@@ -16787,7 +17147,7 @@ The idea is to use generic rules to try to cut down the size of this file.
 
 This Makefile works very hard to cache
 intermediate results in order to minimize the re-build time. The cached
-files are kept in the [[int]] or [[obj]] directories. If one of these
+files are kept in the int or obj directories. If one of these
 files disappears but the original pamphlet file is unchanged we only
 need to rebuild the intermediate file. These rule will attempt to do
 that and they succeed however these are intermediate files created by
@@ -16887,18 +17247,16 @@ is constructed.
 <<findBootstrapFiles>>
 @
 
-There are, at present, 3 kinds of algebra files to be handled.
-First we have [[.as]] files which use the [[aldor]] compiler.
-These are ignored here as the compiler is not yet integrated.
+There are, at present, 2 kinds of algebra files to be handled.
 
-Second, there are the bootstrap files. These files live within
+There are the bootstrap files. These files live within
 their respective pamphlet files and are "captured" lisp code.
 These are necessary to create the algebra. See the 
-[[src/algebra/Makefile.pamphlet]] for details.
+src/algebra/Makefile.pamphlet for details.
 
-Third, there are 3 "types" of algebra which are all treated 
-the same at compile time, namely the "domain", "category", and
-"package" algebra.
+Second, there are 3 ``types'' of algebra which are all treated 
+the same at compile time, namely the ``domain'', ``category'', and
+``package'' algebra.
 
 \subsection{Finding the algebra code}
 Step 1 is to scan all of the algebra pamphlet files for the
@@ -16925,7 +17283,7 @@ bookvol10.3.pamphlet:@<<package LEXTRIPK LexTriangularPackage>>=
 There can be many lines of output per pamphlet file, one for
 each domain, package and category cod chunk contained in the file.
 
-Step 2 is an [[awk]] command line.
+Step 2 is an awk command line.
 
 \subsection{Write the Makefile stanzas for the algebra files}
 
@@ -16942,37 +17300,37 @@ awk -F: '{
 }'
 
 @
-[awk] processes each line of the [[grep]] output. 
+[awk] processes each line of the grep output. 
 
-The awk script uses [[-F:]] which is a flag that says that a [[:]] is
+The awk script uses ``-F:'' which is a flag that says that a ``:'' is
 the field separator. As a result the \$1 and \$2 in the awk script
 refer to the parts of the grep output that come before and after the
-[[:]] respectively.
+``:'' respectively.
 
-The variable [[chunk]] is assigned the actual chunk name minus
+The variable ``chunk'' is assigned the actual chunk name minus
 the @<< and >>= delimiters. In the example given above this will become
 \begin{verbatim}
 package LEXTRIPK LexTriangularPackage
 \end{verbatim}
-The call to [[split]] splits the chunk into parts separated
+The call to ``split'' splits the chunk into parts separated
 by spaces. Thus
 \begin{verbatim}
   part[1]=package
   part[2]=LEXTRIPK
   part[3]=LexTriangularPackage
 \end{verbatim}
-The variable [[spadfile]] in the above example is set to
+The variable ``spadfile'' in the above example is set to
 \begin{verbatim}
 ${MID}/LEXTRIPK.spad
 \end{verbatim}
 Finally, in the domain example given above we print two lines.
 The first line is the Makefile stanza header which depends on the
-original [[zerodim.spad.pamphlet]] file.
+original ``zerodim.spad.pamphlet'' file.
 
 The second line is the body of the makefile stanza which calls 
 notangle to extract the algebra from the original pamphlet using
 the chunk name and writes it to the intermediate subdirectory. In
-the case above this would resolve to [[\${MID}/LEXTRIPK.spad]].
+the case above this would resolve to \verb|\${MID}/LEXTRIPK.spad|.
 
 For the line given above it outputs the following:
 \begin{verbatim}
@@ -16987,10 +17345,10 @@ chunk names that have the "BOOTSTRAP" string. The output will look like:
 bookvol10.3.pamphlet:@<<VECTOR.lsp BOOTSTRAP>>=
 \end{verbatim}
 This output, which can consist of many lines per input file is piped
-into [[awk]].
+into ``awk''.
 
 \subsection{Write the Makefile stanzas for the bootstrap files}
-For each of the above output lines we run an [[grep]] command:
+For each of the above output lines we run an ``grep'' command:
 
 <<findBootstrapFiles>>=
 
@@ -17012,7 +17370,7 @@ there are only two parts to the chunk names
   part[1]=VECTOR.lsp
   part[2]=BOOTSTRAP
 \end{verbatim}
-The [[lspfile]] variable is assigned
+The lspfile variable is assigned
 \begin{verbatim}
 ${MID}/VECTOR.lsp
 \end{verbatim}
@@ -17023,10 +17381,10 @@ ${MID}/vector.spad.pamphlet: ${IN}/bookvol10.3.pamphlet
 \end{verbatim}
 
 The first line is the stanza head and creates a dependence between
-the intermediate file, in this case [[int/algebra/VECTOR.lsp]] and
-the input file [[src/algebra/vector.spad.pamphlet]]
+the intermediate file, in this case int/algebra/VECTOR.lsp and
+the input file src/algebra/vector.spad.pamphlet
 
-The second line calls [[notangle]] to extract the required chunk
+The second line calls ``notangle'' to extract the required chunk
 from the source file.
 
 \section{Stage markers}
@@ -17282,6 +17640,7 @@ REGRESS= \
  BagAggregate.regress \
  BasicFunctions.regress \
  BasicOperator.regress \
+ BasicStochasticDifferential.regress \
  BasicType.regress \
  Bezier.regress \
  BiModule.regress \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index c7c20a6..67580bb 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3614,5 +3614,7 @@ books/bookvol9 treeshake compiler<br/>
 src/scripts/tex/axiom.sty fix defplist<br/>
 <a href="patches/20110909.01.tpd.patch">20110909.01.tpd.patch</a>
 books/bookvol5 treeshake interpreter<br/>
+<a href="patches/20110910.01.tpd.patch">20110910.01.tpd.patch</a>
+books/bookvol10.3 add BasicStochasticDifferential domain, Wilfrid Kendall<br/>
  </body>
 </html>
